| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  | import { | 
					
						
							|  |  |  |   describe, | 
					
						
							|  |  |  |   it, | 
					
						
							|  |  |  |   iit, | 
					
						
							|  |  |  |   ddescribe, | 
					
						
							|  |  |  |   expect, | 
					
						
							|  |  |  |   inject, | 
					
						
							|  |  |  |   beforeEach, | 
					
						
							|  |  |  |   beforeEachProviders, | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  | } from '@angular/core/testing/testing_internal'; | 
					
						
							| 
									
										
										
										
											2015-11-23 10:47:06 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  | import {Injector, provide} from '@angular/core'; | 
					
						
							| 
									
										
										
										
											2015-11-23 10:47:06 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  | import {PlatformLocation, APP_BASE_HREF, HashLocationStrategy} from '@angular/common'; | 
					
						
							| 
									
										
										
										
											2016-02-09 11:12:41 -08:00
										 |  |  | import {SpyPlatformLocation} from '../spies'; | 
					
						
							| 
									
										
										
										
											2015-11-23 10:47:06 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function main() { | 
					
						
							|  |  |  |   describe('HashLocationStrategy', () => { | 
					
						
							| 
									
										
										
										
											2016-02-25 16:18:55 -08:00
										 |  |  |     var platformLocation: SpyPlatformLocation; | 
					
						
							|  |  |  |     var locationStrategy: HashLocationStrategy; | 
					
						
							| 
									
										
										
										
											2015-11-23 10:47:06 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     beforeEachProviders( | 
					
						
							|  |  |  |         () => [HashLocationStrategy, provide(PlatformLocation, {useClass: SpyPlatformLocation})]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe('without APP_BASE_HREF', () => { | 
					
						
							|  |  |  |       beforeEach(inject([PlatformLocation, HashLocationStrategy], (pl, ls) => { | 
					
						
							|  |  |  |         platformLocation = pl; | 
					
						
							|  |  |  |         locationStrategy = ls; | 
					
						
							|  |  |  |         platformLocation.spy('pushState'); | 
					
						
							|  |  |  |         platformLocation.pathname = ''; | 
					
						
							|  |  |  |       })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should prepend urls with a hash for non-empty URLs', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('foo')).toEqual('#foo'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', 'foo', ''); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')).toHaveBeenCalledWith(null, 'Title', '#foo'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should prepend urls with a hash for URLs with query params', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('foo?bar')).toEqual('#foo?bar'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', 'foo', 'bar=baz'); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')) | 
					
						
							|  |  |  |             .toHaveBeenCalledWith(null, 'Title', '#foo?bar=baz'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should prepend urls with a hash for URLs with just query params', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('?bar')).toEqual('#?bar'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', '', 'bar=baz'); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')).toHaveBeenCalledWith(null, 'Title', '#?bar=baz'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should not prepend a hash to external urls for an empty internal URL', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('')).toEqual(''); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', '', ''); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')).toHaveBeenCalledWith(null, 'Title', ''); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe('with APP_BASE_HREF with neither leading nor trailing slash', () => { | 
					
						
							|  |  |  |       beforeEachProviders(() => [provide(APP_BASE_HREF, {useValue: 'app'})]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       beforeEach(inject([PlatformLocation, HashLocationStrategy], (pl, ls) => { | 
					
						
							|  |  |  |         platformLocation = pl; | 
					
						
							|  |  |  |         locationStrategy = ls; | 
					
						
							|  |  |  |         platformLocation.spy('pushState'); | 
					
						
							|  |  |  |         platformLocation.pathname = ''; | 
					
						
							|  |  |  |       })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should prepend urls with a hash for non-empty URLs', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('foo')).toEqual('#app/foo'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', 'foo', ''); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')).toHaveBeenCalledWith(null, 'Title', '#app/foo'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should prepend urls with a hash for URLs with query params', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('foo?bar')).toEqual('#app/foo?bar'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', 'foo', 'bar=baz'); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')) | 
					
						
							|  |  |  |             .toHaveBeenCalledWith(null, 'Title', '#app/foo?bar=baz'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should not prepend a hash to external urls for an empty internal URL', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('')).toEqual('#app'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', '', ''); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')).toHaveBeenCalledWith(null, 'Title', '#app'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe('with APP_BASE_HREF with leading slash', () => { | 
					
						
							|  |  |  |       beforeEachProviders(() => [provide(APP_BASE_HREF, {useValue: '/app'})]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       beforeEach(inject([PlatformLocation, HashLocationStrategy], (pl, ls) => { | 
					
						
							|  |  |  |         platformLocation = pl; | 
					
						
							|  |  |  |         locationStrategy = ls; | 
					
						
							|  |  |  |         platformLocation.spy('pushState'); | 
					
						
							|  |  |  |         platformLocation.pathname = ''; | 
					
						
							|  |  |  |       })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should prepend urls with a hash for non-empty URLs', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('foo')).toEqual('#/app/foo'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', 'foo', ''); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')).toHaveBeenCalledWith(null, 'Title', '#/app/foo'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should prepend urls with a hash for URLs with query params', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('foo?bar')).toEqual('#/app/foo?bar'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', 'foo', 'bar=baz'); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')) | 
					
						
							|  |  |  |             .toHaveBeenCalledWith(null, 'Title', '#/app/foo?bar=baz'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should not prepend a hash to external urls for an empty internal URL', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('')).toEqual('#/app'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', '', ''); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')).toHaveBeenCalledWith(null, 'Title', '#/app'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe('with APP_BASE_HREF with both leading and trailing slash', () => { | 
					
						
							|  |  |  |       beforeEachProviders(() => [provide(APP_BASE_HREF, {useValue: '/app/'})]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       beforeEach(inject([PlatformLocation, HashLocationStrategy], (pl, ls) => { | 
					
						
							|  |  |  |         platformLocation = pl; | 
					
						
							|  |  |  |         locationStrategy = ls; | 
					
						
							|  |  |  |         platformLocation.spy('pushState'); | 
					
						
							|  |  |  |         platformLocation.pathname = ''; | 
					
						
							|  |  |  |       })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should prepend urls with a hash for non-empty URLs', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('foo')).toEqual('#/app/foo'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', 'foo', ''); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')).toHaveBeenCalledWith(null, 'Title', '#/app/foo'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should prepend urls with a hash for URLs with query params', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('foo?bar')).toEqual('#/app/foo?bar'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', 'foo', 'bar=baz'); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')) | 
					
						
							|  |  |  |             .toHaveBeenCalledWith(null, 'Title', '#/app/foo?bar=baz'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should not prepend a hash to external urls for an empty internal URL', () => { | 
					
						
							|  |  |  |         expect(locationStrategy.prepareExternalUrl('')).toEqual('#/app/'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         locationStrategy.pushState(null, 'Title', '', ''); | 
					
						
							|  |  |  |         expect(platformLocation.spy('pushState')).toHaveBeenCalledWith(null, 'Title', '#/app/'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2016-02-25 16:18:55 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     describe('hashLocationStrategy bugs', () => { | 
					
						
							|  |  |  |       beforeEach(inject([PlatformLocation, HashLocationStrategy], (pl, ls) => { | 
					
						
							|  |  |  |         platformLocation = pl; | 
					
						
							|  |  |  |         locationStrategy = ls; | 
					
						
							|  |  |  |         platformLocation.spy('pushState'); | 
					
						
							|  |  |  |         platformLocation.pathname = ''; | 
					
						
							|  |  |  |       })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should not include platform search', () => { | 
					
						
							|  |  |  |         platformLocation.search = '?donotinclude'; | 
					
						
							|  |  |  |         expect(locationStrategy.path()).toEqual(''); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should not include platform search even with hash', () => { | 
					
						
							|  |  |  |         platformLocation.hash = '#hashPath'; | 
					
						
							|  |  |  |         platformLocation.search = '?donotinclude'; | 
					
						
							|  |  |  |         expect(locationStrategy.path()).toEqual('hashPath'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-11-23 10:47:06 -08:00
										 |  |  |   }); | 
					
						
							|  |  |  | } |