| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | import { | 
					
						
							|  |  |  |   AsyncTestCompleter, | 
					
						
							|  |  |  |   beforeEach, | 
					
						
							|  |  |  |   ddescribe, | 
					
						
							|  |  |  |   xdescribe, | 
					
						
							|  |  |  |   describe, | 
					
						
							|  |  |  |   dispatchEvent, | 
					
						
							|  |  |  |   expect, | 
					
						
							|  |  |  |   iit, | 
					
						
							|  |  |  |   inject, | 
					
						
							|  |  |  |   beforeEachBindings, | 
					
						
							|  |  |  |   it, | 
					
						
							|  |  |  |   xit, | 
					
						
							| 
									
										
										
										
											2015-09-03 22:01:36 -07:00
										 |  |  |   TestComponentBuilder | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | } from 'angular2/test_lib'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-26 11:41:41 -07:00
										 |  |  | import {SpyRouter, SpyLocation} from './spies'; | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-03 22:01:36 -07:00
										 |  |  | import {bind, Component, View} from 'angular2/core'; | 
					
						
							|  |  |  | import {By} from 'angular2/src/core/debug'; | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-24 11:24:53 -07:00
										 |  |  | import { | 
					
						
							|  |  |  |   Location, | 
					
						
							|  |  |  |   Router, | 
					
						
							|  |  |  |   RootRouter, | 
					
						
							|  |  |  |   RouteRegistry, | 
					
						
							|  |  |  |   RouterLink, | 
					
						
							|  |  |  |   RouterOutlet, | 
					
						
							|  |  |  |   Route, | 
					
						
							|  |  |  |   RouteParams | 
					
						
							|  |  |  | } from 'angular2/router'; | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  | import {Instruction, ComponentInstruction} from 'angular2/src/router/instruction'; | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-20 14:28:25 -07:00
										 |  |  | import {DOM} from 'angular2/src/core/dom/dom_adapter'; | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  | var dummyInstruction = new Instruction(new ComponentInstruction('detail', [], null), null, {}); | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  | export function main() { | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  |   describe('router-link directive', function() { | 
					
						
							| 
									
										
										
										
											2015-08-24 11:24:53 -07:00
										 |  |  |     var tcb: TestComponentBuilder; | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     beforeEachBindings( | 
					
						
							|  |  |  |         () => | 
					
						
							|  |  |  |             [bind(Location).toValue(makeDummyLocation()), bind(Router).toValue(makeDummyRouter())]); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-24 11:24:53 -07:00
										 |  |  |     beforeEach(inject([TestComponentBuilder], (tcBuilder) => { tcb = tcBuilder; })); | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-24 11:24:53 -07:00
										 |  |  |     it('should update a[href] attribute', inject([AsyncTestCompleter], (async) => { | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |          tcb.createAsync(TestComponent) | 
					
						
							|  |  |  |              .then((testComponent) => { | 
					
						
							|  |  |  |                testComponent.detectChanges(); | 
					
						
							| 
									
										
										
										
											2015-09-11 13:45:31 -07:00
										 |  |  |                let anchorElement = testComponent.debugElement.query(By.css('a')).nativeElement; | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  |                expect(DOM.getAttribute(anchorElement, 'href')).toEqual('/detail'); | 
					
						
							|  |  |  |                async.done(); | 
					
						
							|  |  |  |              }); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should call router.navigate when a link is clicked', | 
					
						
							| 
									
										
										
										
											2015-08-24 11:24:53 -07:00
										 |  |  |        inject([AsyncTestCompleter, Router], (async, router) => { | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |          tcb.createAsync(TestComponent) | 
					
						
							|  |  |  |              .then((testComponent) => { | 
					
						
							|  |  |  |                testComponent.detectChanges(); | 
					
						
							|  |  |  |                // TODO: shouldn't this be just 'click' rather than '^click'?
 | 
					
						
							| 
									
										
										
										
											2015-09-11 13:45:31 -07:00
										 |  |  |                testComponent.debugElement.query(By.css('a')).triggerEventHandler('click', null); | 
					
						
							| 
									
										
										
										
											2015-09-08 21:41:56 -07:00
										 |  |  |                expect(router.spy('navigateByInstruction')).toHaveBeenCalledWith(dummyInstruction); | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  |                async.done(); | 
					
						
							|  |  |  |              }); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-24 11:24:53 -07:00
										 |  |  | @Component({selector: 'my-comp'}) | 
					
						
							|  |  |  | class MyComp { | 
					
						
							|  |  |  |   name; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'user-cmp'}) | 
					
						
							|  |  |  | @View({template: "hello {{user}}"}) | 
					
						
							|  |  |  | class UserCmp { | 
					
						
							|  |  |  |   user: string; | 
					
						
							|  |  |  |   constructor(params: RouteParams) { this.user = params.get('name'); } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'test-component'}) | 
					
						
							|  |  |  | @View({ | 
					
						
							|  |  |  |   template: `
 | 
					
						
							|  |  |  |     <div> | 
					
						
							| 
									
										
										
										
											2015-09-14 17:36:32 -07:00
										 |  |  |       <a [router-link]="['/Detail']">detail view</a> | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  |     </div>`,
 | 
					
						
							|  |  |  |   directives: [RouterLink] | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | class TestComponent { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function makeDummyLocation() { | 
					
						
							| 
									
										
										
										
											2015-08-26 11:41:41 -07:00
										 |  |  |   var dl = new SpyLocation(); | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  |   dl.spy('normalizeAbsolutely').andCallFake((url) => url); | 
					
						
							|  |  |  |   return dl; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function makeDummyRouter() { | 
					
						
							| 
									
										
										
										
											2015-08-26 11:41:41 -07:00
										 |  |  |   var dr = new SpyRouter(); | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  |   dr.spy('generate').andCallFake((routeParams) => dummyInstruction); | 
					
						
							| 
									
										
										
										
											2015-08-30 21:25:46 -07:00
										 |  |  |   dr.spy('isRouteActive').andCallFake((_) => false); | 
					
						
							| 
									
										
										
										
											2015-07-17 13:36:53 -07:00
										 |  |  |   dr.spy('navigateInstruction'); | 
					
						
							| 
									
										
										
										
											2015-07-02 17:38:19 -07:00
										 |  |  |   return dr; | 
					
						
							|  |  |  | } |