| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  | import { | 
					
						
							|  |  |  |   describe, | 
					
						
							|  |  |  |   it, | 
					
						
							|  |  |  |   iit, | 
					
						
							|  |  |  |   ddescribe, | 
					
						
							|  |  |  |   expect, | 
					
						
							|  |  |  |   inject, | 
					
						
							|  |  |  |   beforeEach, | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  | } from '@angular/core/testing/testing_internal'; | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-02 10:36:58 -07:00
										 |  |  | import {UrlParser, Url} from '../src/url_parser'; | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function main() { | 
					
						
							|  |  |  |   describe('ParsedUrl', () => { | 
					
						
							| 
									
										
										
										
											2016-02-09 11:12:41 -08:00
										 |  |  |     var urlParser: UrlParser; | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     beforeEach(() => { urlParser = new UrlParser(); }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should work in a simple case', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/there'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should remove the leading slash', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('/hello/there'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-13 10:05:10 -07:00
										 |  |  |     it('should parse an empty URL', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse(''); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual(''); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  |     it('should work with a single aux route', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/there(a)'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there(a)'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should work with multiple aux routes', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/there(a//b)'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there(a//b)'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should work with children after an aux route', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/there(a//b)/c/d'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there(a//b)/c/d'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should work when aux routes have children', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello(aa/bb//bb/cc)'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello(aa/bb//bb/cc)'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should parse an aux route with an aux route', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello(aa(bb))'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello(aa(bb))'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should simplify an empty aux route definition', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello()/there'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should parse a key-value matrix param', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/friend;name=bob'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/friend;name=bob'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should parse multiple key-value matrix params', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/there;greeting=hi;whats=up'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there;greeting=hi;whats=up'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should ignore matrix params on the first segment', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('profile;a=1/hi'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('profile/hi'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should parse a key-only matrix param', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/there;hi'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there;hi'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-13 10:05:10 -07:00
										 |  |  |     it('should parse a URL with just a query param', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('?name=bob'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('?name=bob'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  |     it('should parse a key-value query param', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/friend?name=bob'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/friend?name=bob'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should parse multiple key-value query params', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/there?greeting=hi&whats=up'); | 
					
						
							|  |  |  |       expect(url.params).toEqual({'greeting': 'hi', 'whats': 'up'}); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there?greeting=hi&whats=up'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-13 10:05:10 -07:00
										 |  |  |     it('should parse a key-only query param', () => { | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  |       var url = urlParser.parse('hello/there?hi'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there?hi'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should parse a route with matrix and query params', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/there;sort=asc;unfiltered?hi&friend=true'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there;sort=asc;unfiltered?hi&friend=true'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should parse a route with matrix params and aux routes', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/there;sort=asc(modal)'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there;sort=asc(modal)'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should parse an aux route with matrix params', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/there(modal;sort=asc)'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there(modal;sort=asc)'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should parse a route with matrix params, aux routes, and query params', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse('hello/there;sort=asc(modal)?friend=true'); | 
					
						
							|  |  |  |       expect(url.toString()).toEqual('hello/there;sort=asc(modal)?friend=true'); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2016-02-26 14:43:37 +01:00
										 |  |  |     it('should allow slashes within query parameters', () => { | 
					
						
							|  |  |  |       var url = urlParser.parse( | 
					
						
							|  |  |  |           'hello?code=4/B8o0n_Y7XZTb-pVKBw5daZyGAUbMljyLf7uNgTy6ja8&scope=https://www.googleapis.com/auth/analytics'); | 
					
						
							|  |  |  |       expect(url.toString()) | 
					
						
							|  |  |  |           .toEqual( | 
					
						
							|  |  |  |               'hello?code=4/B8o0n_Y7XZTb-pVKBw5daZyGAUbMljyLf7uNgTy6ja8&scope=https://www.googleapis.com/auth/analytics'); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  | } |