feat(router): implement RouterUrlParser
This commit is contained in:
		
							parent
							
								
									90a1f7d5c4
								
							
						
					
					
						commit
						f6985671dd
					
				
							
								
								
									
										27
									
								
								modules/angular2/src/alt_router/router_url_parser.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								modules/angular2/src/alt_router/router_url_parser.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | import {UrlSegment, Tree} from './segments'; | ||||||
|  | import {BaseException} from 'angular2/src/facade/exceptions'; | ||||||
|  | 
 | ||||||
|  | export abstract class RouterUrlParser { abstract parse(url: string): Tree<UrlSegment>; } | ||||||
|  | 
 | ||||||
|  | export class DefaultRouterUrlParser extends RouterUrlParser { | ||||||
|  |   parse(url: string): Tree<UrlSegment> { | ||||||
|  |     if (url.length === 0) { | ||||||
|  |       throw new BaseException(`Invalid url '${url}'`); | ||||||
|  |     } | ||||||
|  |     return new Tree<UrlSegment>(this._parseNodes(url)); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   private _parseNodes(url: string): UrlSegment[] { | ||||||
|  |     let index = url.indexOf("/", 1); | ||||||
|  |     let children: UrlSegment[]; | ||||||
|  |     let currentUrl; | ||||||
|  |     if (index > -1) { | ||||||
|  |       children = this._parseNodes(url.substring(index + 1)); | ||||||
|  |       currentUrl = url.substring(0, index); | ||||||
|  |     } else { | ||||||
|  |       children = []; | ||||||
|  |       currentUrl = url; | ||||||
|  |     } | ||||||
|  |     return [new UrlSegment(currentUrl, {}, "")].concat(children); | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										45
									
								
								modules/angular2/test/alt_router/router_url_parser_spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								modules/angular2/test/alt_router/router_url_parser_spec.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,45 @@ | |||||||
|  | import { | ||||||
|  |   ComponentFixture, | ||||||
|  |   AsyncTestCompleter, | ||||||
|  |   TestComponentBuilder, | ||||||
|  |   beforeEach, | ||||||
|  |   ddescribe, | ||||||
|  |   xdescribe, | ||||||
|  |   describe, | ||||||
|  |   el, | ||||||
|  |   expect, | ||||||
|  |   iit, | ||||||
|  |   inject, | ||||||
|  |   beforeEachProviders, | ||||||
|  |   it, | ||||||
|  |   xit | ||||||
|  | } from 'angular2/testing_internal'; | ||||||
|  | 
 | ||||||
|  | import {DefaultRouterUrlParser} from 'angular2/src/alt_router/router_url_parser'; | ||||||
|  | import {UrlSegment} from 'angular2/src/alt_router/segments'; | ||||||
|  | 
 | ||||||
|  | export function main() { | ||||||
|  |   describe('url parsing', () => { | ||||||
|  |     let parser = new DefaultRouterUrlParser(); | ||||||
|  | 
 | ||||||
|  |     it('should throw on an empty urls', () => { expect(() => parser.parse("")).toThrow(); }); | ||||||
|  | 
 | ||||||
|  |     it('should parse the root url', () => { | ||||||
|  |       let tree = parser.parse("/"); | ||||||
|  |       expect(tree.root).toEqual(new UrlSegment("/", {}, "")); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     it('should parse non-empty urls', () => { | ||||||
|  |       let tree = parser.parse("one/two/three"); | ||||||
|  |       expect(tree.root).toEqual(new UrlSegment("one", {}, "")); | ||||||
|  |       expect(tree.firstChild(tree.root)).toEqual(new UrlSegment("two", {}, "")); | ||||||
|  |       expect(tree.firstChild(tree.firstChild(tree.root))).toEqual(new UrlSegment("three", {}, "")); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     it('should parse non-empty absolute urls', () => { | ||||||
|  |       let tree = parser.parse("/one/two"); | ||||||
|  |       expect(tree.root).toEqual(new UrlSegment("/one", {}, "")); | ||||||
|  |       expect(tree.firstChild(tree.root)).toEqual(new UrlSegment("two", {}, "")); | ||||||
|  |     }); | ||||||
|  |   }); | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user