91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import {
 | 
						|
  AsyncTestCompleter,
 | 
						|
  describe,
 | 
						|
  proxy,
 | 
						|
  it, iit,
 | 
						|
  ddescribe, expect,
 | 
						|
  inject, beforeEach, beforeEachBindings,
 | 
						|
  SpyObject} from 'angular2/test_lib';
 | 
						|
import {IMPLEMENTS} from 'angular2/src/facade/lang';
 | 
						|
import {EventEmitter, ObservableWrapper} from 'angular2/src/facade/async';
 | 
						|
 | 
						|
import {BrowserLocation} from 'angular2/src/router/browser_location';
 | 
						|
import {Location} from 'angular2/src/router/location';
 | 
						|
 | 
						|
export function main() {
 | 
						|
 | 
						|
  describe('Location', () => {
 | 
						|
 | 
						|
    var browserLocation, location;
 | 
						|
 | 
						|
    beforeEach(() => {
 | 
						|
      browserLocation = new DummyBrowserLocation();
 | 
						|
      browserLocation.spy('pushState');
 | 
						|
      browserLocation.baseHref = '/my/app';
 | 
						|
      location = new Location(browserLocation);
 | 
						|
    });
 | 
						|
 | 
						|
    it('should normalize relative urls on navigate', () => {
 | 
						|
      location.go('user/btford');
 | 
						|
      expect(browserLocation.spy('pushState')).toHaveBeenCalledWith(null, '', '/my/app/user/btford');
 | 
						|
    });
 | 
						|
 | 
						|
    it('should not append urls with leading slash on navigate', () => {
 | 
						|
      location.go('/my/app/user/btford');
 | 
						|
      expect(browserLocation.spy('pushState')).toHaveBeenCalledWith(null, '', '/my/app/user/btford');
 | 
						|
    });
 | 
						|
 | 
						|
    it('should remove index.html from base href', () => {
 | 
						|
      browserLocation.baseHref = '/my/app/index.html';
 | 
						|
      location = new Location(browserLocation);
 | 
						|
      location.go('user/btford');
 | 
						|
      expect(browserLocation.spy('pushState')).toHaveBeenCalledWith(null, '', '/my/app/user/btford');
 | 
						|
    });
 | 
						|
 | 
						|
    it('should normalize urls on popstate', inject([AsyncTestCompleter], (async) => {
 | 
						|
      browserLocation.simulatePopState('/my/app/user/btford');
 | 
						|
      location.subscribe((ev) => {
 | 
						|
        expect(ev['url']).toEqual('/user/btford');
 | 
						|
        async.done();
 | 
						|
      })
 | 
						|
    }));
 | 
						|
 | 
						|
    it('should normalize location path', () => {
 | 
						|
      browserLocation.internalPath = '/my/app/user/btford';
 | 
						|
      expect(location.path()).toEqual('/user/btford');
 | 
						|
    });
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
@proxy
 | 
						|
@IMPLEMENTS(BrowserLocation)
 | 
						|
class DummyBrowserLocation extends SpyObject {
 | 
						|
  baseHref;
 | 
						|
  internalPath;
 | 
						|
  _subject:EventEmitter;
 | 
						|
  constructor() {
 | 
						|
    super();
 | 
						|
    this.internalPath = '/';
 | 
						|
    this._subject = new EventEmitter();
 | 
						|
  }
 | 
						|
 | 
						|
  simulatePopState(url) {
 | 
						|
    this.internalPath = url;
 | 
						|
    ObservableWrapper.callNext(this._subject, null);
 | 
						|
  }
 | 
						|
 | 
						|
  path() {
 | 
						|
    return this.internalPath;
 | 
						|
  }
 | 
						|
 | 
						|
  onPopState(fn) {
 | 
						|
    ObservableWrapper.subscribe(this._subject, fn);
 | 
						|
  }
 | 
						|
 | 
						|
  getBaseHref() {
 | 
						|
    return this.baseHref;
 | 
						|
  }
 | 
						|
 | 
						|
  noSuchMethod(m){return super.noSuchMethod(m);}
 | 
						|
}
 |