68 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import { | ||
|  |   AsyncTestCompleter, | ||
|  |   describe, | ||
|  |   proxy, | ||
|  |   it, | ||
|  |   iit, | ||
|  |   ddescribe, | ||
|  |   expect, | ||
|  |   inject, | ||
|  |   beforeEach, | ||
|  |   beforeEachBindings, | ||
|  |   SpyObject | ||
|  | } from 'angular2/testing_internal'; | ||
|  | 
 | ||
|  | import {Injector, provide} from 'angular2/core'; | ||
|  | import {CONST_EXPR} from 'angular2/src/facade/lang'; | ||
|  | 
 | ||
|  | import {parseRouterLinkExpression} from 'angular2/src/router/router_link_transform'; | ||
|  | import {Unparser} from '../core/change_detection/parser/unparser'; | ||
|  | import {Parser} from 'angular2/src/core/change_detection/parser/parser'; | ||
|  | 
 | ||
|  | export function main() { | ||
|  |   function check(parser: Parser, input: string, expectedValue: string) { | ||
|  |     let ast = parseRouterLinkExpression(parser, input); | ||
|  |     expect(new Unparser().unparse(ast)).toEqual(expectedValue); | ||
|  |   } | ||
|  | 
 | ||
|  |   describe('parseRouterLinkExpression', () => { | ||
|  |     it("should parse simple routes", inject([Parser], (p) => { | ||
|  |          check(p, `User`, `["User"]`); | ||
|  |          check(p, `/User`, `["/User"]`); | ||
|  |          check(p, `./User`, `["./User"]`); | ||
|  |          check(p, `../../User`, `["../../User"]`); | ||
|  |        })); | ||
|  | 
 | ||
|  |     it("should trim the string", inject([Parser], (p) => { check(p, `  User  `, `["User"]`); })); | ||
|  | 
 | ||
|  |     it("should parse parameters", inject([Parser], (p) => { | ||
|  |          check(p, `./User(id: value, name: 'Bob')`, `["./User", {id: value, name: "Bob"}]`); | ||
|  |        })); | ||
|  | 
 | ||
|  |     it("should parse nested routes", inject([Parser], (p) => { | ||
|  |          check(p, `User/Modal`, `["User", "Modal"]`); | ||
|  |          check(p, `/User/Modal`, `["/User", "Modal"]`); | ||
|  |        })); | ||
|  | 
 | ||
|  |     it("should parse auxiliary routes", inject([Parser], (p) => { | ||
|  |          check(p, `User[Modal]`, `["User", ["Modal"]]`); | ||
|  |          check(p, `User[Modal1][Modal2]`, `["User", ["Modal1"], ["Modal2"]]`); | ||
|  |          check(p, `User[Modal1[Modal2]]`, `["User", ["Modal1", ["Modal2"]]]`); | ||
|  |        })); | ||
|  | 
 | ||
|  |     it("should parse combinations", inject([Parser], (p) => { | ||
|  |          check(p, `./User(id: value)/Post(title: 'blog')`, `["./User", {id: value}, "Post", {title: "blog"}]`); | ||
|  |          check(p, `./User[Modal(param: value)]`, `["./User", ["Modal", {param: value}]]`); | ||
|  |        })); | ||
|  | 
 | ||
|  |     it("should error on empty fixed parts", inject([Parser], (p) => { | ||
|  |          expect(() => parseRouterLinkExpression(p, `./(id: value, name: 'Bob')`)) | ||
|  |              .toThrowErrorWith("Invalid router link"); | ||
|  |        })); | ||
|  | 
 | ||
|  |     it("should error on multiple slashes", inject([Parser], (p) => { | ||
|  |          expect(() => parseRouterLinkExpression(p, `//User`)) | ||
|  |              .toThrowErrorWith("Invalid router link"); | ||
|  |        })); | ||
|  |   }); | ||
|  | } |