| 
									
										
										
										
											2016-07-21 17:12:00 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							|  |  |  |  * Copyright Google Inc. All Rights Reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Use of this source code is governed by an MIT-style license that can be | 
					
						
							|  |  |  |  * found in the LICENSE file at https://angular.io/license
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-06 16:19:52 -07:00
										 |  |  | import {Routes} from '../src/config'; | 
					
						
							| 
									
										
										
										
											2016-06-19 13:59:14 -07:00
										 |  |  | import {recognize} from '../src/recognize'; | 
					
						
							|  |  |  | import {resolve} from '../src/resolve'; | 
					
						
							| 
									
										
										
										
											2016-06-21 11:49:42 -07:00
										 |  |  | import {RouterStateSnapshot} from '../src/router_state'; | 
					
						
							| 
									
										
										
										
											2016-07-25 12:15:07 -07:00
										 |  |  | import {DefaultUrlSerializer, UrlSegmentGroup, UrlTree} from '../src/url_tree'; | 
					
						
							| 
									
										
										
										
											2016-06-19 13:59:14 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | describe('resolve', () => { | 
					
						
							|  |  |  |   it('should resolve components', () => { | 
					
						
							| 
									
										
										
										
											2016-06-21 11:49:42 -07:00
										 |  |  |     checkResolve( | 
					
						
							|  |  |  |         [{path: 'a', component: 'ComponentA'}], 'a', {ComponentA: 'ResolvedComponentA'}, | 
					
						
							|  |  |  |         (resolved: RouterStateSnapshot) => { | 
					
						
							|  |  |  |           expect(resolved.firstChild(resolved.root)._resolvedComponentFactory) | 
					
						
							|  |  |  |               .toEqual('ResolvedComponentA'); | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2016-06-19 13:59:14 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it('should not resolve componentless routes', () => { | 
					
						
							| 
									
										
										
										
											2016-06-21 11:49:42 -07:00
										 |  |  |     checkResolve([{path: 'a', children: []}], 'a', {}, (resolved: RouterStateSnapshot) => { | 
					
						
							| 
									
										
										
										
											2016-06-19 13:59:14 -07:00
										 |  |  |       expect(resolved.firstChild(resolved.root)._resolvedComponentFactory).toEqual(null); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-21 11:49:42 -07:00
										 |  |  | function checkResolve( | 
					
						
							| 
									
										
										
										
											2016-07-06 16:19:52 -07:00
										 |  |  |     config: Routes, url: string, resolved: {[k: string]: string}, callback: any): void { | 
					
						
							| 
									
										
										
										
											2016-06-19 13:59:14 -07:00
										 |  |  |   const resolver = { | 
					
						
							| 
									
										
										
										
											2016-06-21 11:49:42 -07:00
										 |  |  |     resolveComponent: (component: string): Promise<any> => { | 
					
						
							| 
									
										
										
										
											2016-06-19 13:59:14 -07:00
										 |  |  |       if (resolved[component]) { | 
					
						
							|  |  |  |         return Promise.resolve(resolved[component]); | 
					
						
							|  |  |  |       } else { | 
					
						
							| 
									
										
										
										
											2016-06-21 11:49:42 -07:00
										 |  |  |         return Promise.reject('unknown component'); | 
					
						
							| 
									
										
										
										
											2016-06-19 13:59:14 -07:00
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-21 11:49:42 -07:00
										 |  |  |   recognize(RootComponent, config, tree(url), url) | 
					
						
							|  |  |  |       .mergeMap(s => resolve(<any>resolver, s)) | 
					
						
							|  |  |  |       .subscribe(callback, e => { throw e; }); | 
					
						
							| 
									
										
										
										
											2016-06-19 13:59:14 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function tree(url: string): UrlTree { | 
					
						
							|  |  |  |   return new DefaultUrlSerializer().parse(url); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RootComponent {} | 
					
						
							|  |  |  | class ComponentA {} | 
					
						
							|  |  |  | class ComponentB {} | 
					
						
							|  |  |  | class ComponentC {} |