183 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			183 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('ngRoute shim', function () {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var elt,
							 | 
						||
| 
								 | 
							
								    $compile,
							 | 
						||
| 
								 | 
							
								    $rootScope,
							 | 
						||
| 
								 | 
							
								    $router,
							 | 
						||
| 
								 | 
							
								    $compileProvider,
							 | 
						||
| 
								 | 
							
								    $routeProvider;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  beforeEach(function () {
							 | 
						||
| 
								 | 
							
								    module('ng');
							 | 
						||
| 
								 | 
							
								    module('ngComponentRouter');
							 | 
						||
| 
								 | 
							
								    module('ngRouteShim');
							 | 
						||
| 
								 | 
							
								    module(function (_$compileProvider_, _$routeProvider_) {
							 | 
						||
| 
								 | 
							
								      $compileProvider = _$compileProvider_;
							 | 
						||
| 
								 | 
							
								      $routeProvider = _$routeProvider_;
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    inject(function (_$compile_, _$rootScope_, _$router_) {
							 | 
						||
| 
								 | 
							
								      $compile = _$compile_;
							 | 
						||
| 
								 | 
							
								      $rootScope = _$rootScope_;
							 | 
						||
| 
								 | 
							
								      $router = _$router_;
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should work in a simple case', function () {
							 | 
						||
| 
								 | 
							
								    $routeProvider.when('/', {
							 | 
						||
| 
								 | 
							
								      controller: function OneController() {
							 | 
						||
| 
								 | 
							
								        this.number = 'one';
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      controllerAs: 'oneCmp',
							 | 
						||
| 
								 | 
							
								      template: '{{oneCmp.number}}'
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    compile('<ng-outlet></ng-outlet>');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $router.navigateByUrl('/');
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    expect(elt.text()).toBe('one');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should adapt routes with templateUrl', inject(function ($templateCache) {
							 | 
						||
| 
								 | 
							
								    $routeProvider.when('/', {
							 | 
						||
| 
								 | 
							
								      controller: function OneController() {
							 | 
						||
| 
								 | 
							
								        this.number = 'one';
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      controllerAs: 'oneCmp',
							 | 
						||
| 
								 | 
							
								      templateUrl: '/foo'
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $templateCache.put('/foo', [200, '{{oneCmp.number}}', {}]);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    compile('root {<ng-outlet></ng-outlet>}');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $router.navigateByUrl('/');
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								    expect(elt.text()).toBe('root {one}');
							 | 
						||
| 
								 | 
							
								  }));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should adapt routes using the "resolve" option', inject(function ($q) {
							 | 
						||
| 
								 | 
							
								    $routeProvider.when('/', {
							 | 
						||
| 
								 | 
							
								      controller: function TestController(resolvedService) {
							 | 
						||
| 
								 | 
							
								        this.resolvedValue = resolvedService;
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      controllerAs: 'testCmp',
							 | 
						||
| 
								 | 
							
								      resolve: {
							 | 
						||
| 
								 | 
							
								        resolvedService: function () {
							 | 
						||
| 
								 | 
							
								          return $q.when(42);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      template: 'value: {{testCmp.resolvedValue}}'
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    compile('<ng-outlet></ng-outlet>');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $router.navigateByUrl('/');
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    expect(elt.text()).toBe('value: 42');
							 | 
						||
| 
								 | 
							
								  }));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should adapt routes with params', function () {
							 | 
						||
| 
								 | 
							
								    $routeProvider.when('/user/:name', {
							 | 
						||
| 
								 | 
							
								      controller: function UserController($routeParams) {
							 | 
						||
| 
								 | 
							
								        this.$routeParams = $routeParams;
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      controllerAs: 'userCmp',
							 | 
						||
| 
								 | 
							
								      template: 'hello {{userCmp.$routeParams.name}}'
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    compile('<ng-outlet></ng-outlet>');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $router.navigateByUrl('/user/brian');
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								    expect(elt.text()).toBe('hello brian');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $router.navigateByUrl('/user/igor');
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								    expect(elt.text()).toBe('hello igor');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should adapt routes with wildcard params', function () {
							 | 
						||
| 
								 | 
							
								    $routeProvider.when('/home/:params*', {
							 | 
						||
| 
								 | 
							
								      controller: function UserController($routeParams) {
							 | 
						||
| 
								 | 
							
								        this.$routeParams = $routeParams;
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      controllerAs: 'homeCmp',
							 | 
						||
| 
								 | 
							
								      template: 'rest: {{homeCmp.$routeParams.params}}'
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    compile('<ng-outlet></ng-outlet>');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $router.navigateByUrl('/home/foo/bar/123');
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								    expect(elt.text()).toBe('rest: foo/bar/123');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should warn about and ignore routes with optional params', function () {
							 | 
						||
| 
								 | 
							
								    spyOn(console, 'warn');
							 | 
						||
| 
								 | 
							
								    $routeProvider.when('/home/:params?', {
							 | 
						||
| 
								 | 
							
								      template: 'home'
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    compile('root {<ng-outlet></ng-outlet>}');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $router.navigateByUrl('/home/test');
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								    expect(elt.text()).toBe('root {}');
							 | 
						||
| 
								 | 
							
								    expect(console.warn)
							 | 
						||
| 
								 | 
							
								        .toHaveBeenCalledWith('Route for "/home/:params?" ignored because it has optional parameters. Skipping.',
							 | 
						||
| 
								 | 
							
								                              '(1 skipped / 0 success / 1 total)');
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should adapt routes with redirects', inject(function ($location) {
							 | 
						||
| 
								 | 
							
								    $routeProvider
							 | 
						||
| 
								 | 
							
								        .when('/', {
							 | 
						||
| 
								 | 
							
								          redirectTo: '/home'
							 | 
						||
| 
								 | 
							
								        })
							 | 
						||
| 
								 | 
							
								        .when('/home', {
							 | 
						||
| 
								 | 
							
								          template: 'welcome home!'
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    compile('root {<ng-outlet></ng-outlet>}');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $router.navigateByUrl('/');
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								    expect(elt.text()).toBe('root {welcome home!}');
							 | 
						||
| 
								 | 
							
								    expect($location.path()).toBe('/home');
							 | 
						||
| 
								 | 
							
								  }));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  //TODO: this is broken in recognition. un-xit this when https://github.com/angular/angular/issues/4133 is fixed
							 | 
						||
| 
								 | 
							
								  xit('should adapt "otherwise" routes', inject(function ($location) {
							 | 
						||
| 
								 | 
							
								    $routeProvider
							 | 
						||
| 
								 | 
							
								      .when('/home', {
							 | 
						||
| 
								 | 
							
								        template: 'welcome home!'
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								      .otherwise({
							 | 
						||
| 
								 | 
							
								        redirectTo: '/home'
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    compile('root {<ng-outlet></ng-outlet>}');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    $router.navigateByUrl('/somewhere');
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								    expect(elt.text()).toBe('root {welcome home!}');
							 | 
						||
| 
								 | 
							
								    expect($location.path()).toBe('/home');
							 | 
						||
| 
								 | 
							
								  }));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function compile(template) {
							 | 
						||
| 
								 | 
							
								    elt = $compile('<div>' + template + '</div>')($rootScope);
							 | 
						||
| 
								 | 
							
								    $rootScope.$digest();
							 | 
						||
| 
								 | 
							
								    return elt;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 |