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