107 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			107 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import { | ||
|  |   AsyncTestCompleter, | ||
|  |   beforeEach, | ||
|  |   ddescribe, | ||
|  |   xdescribe, | ||
|  |   describe, | ||
|  |   dispatchEvent, | ||
|  |   expect, | ||
|  |   iit, | ||
|  |   inject, | ||
|  |   IS_DARTIUM, | ||
|  |   beforeEachBindings, | ||
|  |   it, | ||
|  |   xit, | ||
|  |   TestComponentBuilder, | ||
|  |   proxy, | ||
|  |   SpyObject, | ||
|  |   By | ||
|  | } from 'angular2/test_lib'; | ||
|  | 
 | ||
|  | import {IMPLEMENTS, print} from 'angular2/src/facade/lang'; | ||
|  | 
 | ||
|  | import {bind, Component, View} from 'angular2/angular2'; | ||
|  | 
 | ||
|  | import {Location, Router, RouterLink} from 'angular2/router'; | ||
|  | 
 | ||
|  | import { | ||
|  |   DOM | ||
|  | } from 'angular2/src/dom/dom_adapter' | ||
|  | 
 | ||
|  | 
 | ||
|  |     export function | ||
|  |     main() { | ||
|  |   describe('router-link directive', function() { | ||
|  | 
 | ||
|  |     beforeEachBindings( | ||
|  |         () => | ||
|  |             [bind(Location).toValue(makeDummyLocation()), bind(Router).toValue(makeDummyRouter())]); | ||
|  | 
 | ||
|  | 
 | ||
|  |     it('should update a[href] attribute', | ||
|  |        inject([TestComponentBuilder, AsyncTestCompleter], (tcb, async) => { | ||
|  | 
 | ||
|  |          tcb.createAsync(TestComponent) | ||
|  |              .then((testComponent) => { | ||
|  |                testComponent.detectChanges(); | ||
|  |                let anchorElement = testComponent.query(By.css('a')).nativeElement; | ||
|  |                expect(DOM.getAttribute(anchorElement, 'href')).toEqual('/detail'); | ||
|  |                async.done(); | ||
|  |              }); | ||
|  |        })); | ||
|  | 
 | ||
|  | 
 | ||
|  |     it('should call router.navigate when a link is clicked', | ||
|  |        inject([TestComponentBuilder, AsyncTestCompleter, Router], (tcb, async, router) => { | ||
|  | 
 | ||
|  |          tcb.createAsync(TestComponent) | ||
|  |              .then((testComponent) => { | ||
|  |                testComponent.detectChanges(); | ||
|  |                // TODO: shouldn't this be just 'click' rather than '^click'?
 | ||
|  |                testComponent.query(By.css('a')).triggerEventHandler('^click', {}); | ||
|  |                expect(router.spy("navigate")).toHaveBeenCalledWith('/detail'); | ||
|  |                async.done(); | ||
|  |              }); | ||
|  |        })); | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | @Component({selector: 'test-component'}) | ||
|  | @View({ | ||
|  |   template: `
 | ||
|  |     <div> | ||
|  |       <a [router-link]="['/detail']">detail view</a> | ||
|  |     </div>`,
 | ||
|  |   directives: [RouterLink] | ||
|  | }) | ||
|  | class TestComponent { | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | @proxy | ||
|  | @IMPLEMENTS(Location) | ||
|  | class DummyLocation extends SpyObject { | ||
|  |   noSuchMethod(m) { return super.noSuchMethod(m) } | ||
|  | } | ||
|  | 
 | ||
|  | function makeDummyLocation() { | ||
|  |   var dl = new DummyLocation(); | ||
|  |   dl.spy('normalizeAbsolutely').andCallFake((url) => url); | ||
|  |   return dl; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | @proxy | ||
|  | @IMPLEMENTS(Router) | ||
|  | class DummyRouter extends SpyObject { | ||
|  |   noSuchMethod(m) { return super.noSuchMethod(m) } | ||
|  | } | ||
|  | 
 | ||
|  | function makeDummyRouter() { | ||
|  |   var dr = new DummyRouter(); | ||
|  |   dr.spy('generate').andCallFake((routeParams) => routeParams.join('=')); | ||
|  |   dr.spy('navigate'); | ||
|  |   return dr; | ||
|  | } |