49 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {RouterConfig} from '../src/config';
 | 
						|
import {recognize} from '../src/recognize';
 | 
						|
import {resolve} from '../src/resolve';
 | 
						|
import {RouterStateSnapshot} from '../src/router_state';
 | 
						|
import {DefaultUrlSerializer, UrlSegment, UrlTree} from '../src/url_tree';
 | 
						|
 | 
						|
describe('resolve', () => {
 | 
						|
  it('should resolve components', () => {
 | 
						|
    checkResolve(
 | 
						|
        [{path: 'a', component: 'ComponentA'}], 'a', {ComponentA: 'ResolvedComponentA'},
 | 
						|
        (resolved: RouterStateSnapshot) => {
 | 
						|
          expect(resolved.firstChild(resolved.root)._resolvedComponentFactory)
 | 
						|
              .toEqual('ResolvedComponentA');
 | 
						|
        });
 | 
						|
  });
 | 
						|
 | 
						|
  it('should not resolve componentless routes', () => {
 | 
						|
    checkResolve([{path: 'a', children: []}], 'a', {}, (resolved: RouterStateSnapshot) => {
 | 
						|
      expect(resolved.firstChild(resolved.root)._resolvedComponentFactory).toEqual(null);
 | 
						|
    });
 | 
						|
  });
 | 
						|
});
 | 
						|
 | 
						|
function checkResolve(
 | 
						|
    config: RouterConfig, url: string, resolved: {[k: string]: string}, callback: any): void {
 | 
						|
  const resolver = {
 | 
						|
    resolveComponent: (component: string): Promise<any> => {
 | 
						|
      if (resolved[component]) {
 | 
						|
        return Promise.resolve(resolved[component]);
 | 
						|
      } else {
 | 
						|
        return Promise.reject('unknown component');
 | 
						|
      }
 | 
						|
    }
 | 
						|
  };
 | 
						|
 | 
						|
  recognize(RootComponent, config, tree(url), url)
 | 
						|
      .mergeMap(s => resolve(<any>resolver, s))
 | 
						|
      .subscribe(callback, e => { throw e; });
 | 
						|
}
 | 
						|
 | 
						|
function tree(url: string): UrlTree {
 | 
						|
  return new DefaultUrlSerializer().parse(url);
 | 
						|
}
 | 
						|
 | 
						|
class RootComponent {}
 | 
						|
class ComponentA {}
 | 
						|
class ComponentB {}
 | 
						|
class ComponentC {}
 |