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;
							 | 
						||
| 
								 | 
							
								}
							 |