192 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright Google Inc. All Rights Reserved.
 | |
|  *
 | |
|  * Use of this source code is governed by an MIT-style license that can be
 | |
|  * found in the LICENSE file at https://angular.io/license
 | |
|  */
 | |
| 
 | |
| 'use strict';
 | |
| 
 | |
| describe('ngRoute shim', function () {
 | |
| 
 | |
|   var elt,
 | |
|     $compile,
 | |
|     $rootScope,
 | |
|     $rootRouter,
 | |
|     $compileProvider,
 | |
|     $routeProvider;
 | |
| 
 | |
|   beforeEach(function () {
 | |
|     module('ng');
 | |
|     module('ngComponentRouter');
 | |
|     module('ngRouteShim');
 | |
|     module(function (_$compileProvider_, _$routeProvider_) {
 | |
|       $compileProvider = _$compileProvider_;
 | |
|       $routeProvider = _$routeProvider_;
 | |
|     });
 | |
| 
 | |
|     inject(function (_$compile_, _$rootScope_, _$rootRouter_) {
 | |
|       $compile = _$compile_;
 | |
|       $rootScope = _$rootScope_;
 | |
|       $rootRouter = _$rootRouter_;
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   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>');
 | |
| 
 | |
|     $rootRouter.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>}');
 | |
| 
 | |
|     $rootRouter.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>');
 | |
| 
 | |
|     $rootRouter.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>');
 | |
| 
 | |
|     $rootRouter.navigateByUrl('/user/brian');
 | |
|     $rootScope.$digest();
 | |
|     expect(elt.text()).toBe('hello brian');
 | |
| 
 | |
|     $rootRouter.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>');
 | |
| 
 | |
|     $rootRouter.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>}');
 | |
| 
 | |
|     $rootRouter.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('/home', {
 | |
|           template: 'welcome home!',
 | |
|           name: 'Home'
 | |
|         })
 | |
|         .when('/', {
 | |
|           redirectTo: '/home'
 | |
|         });
 | |
|     $rootScope.$digest();
 | |
| 
 | |
|     compile('root {<ng-outlet></ng-outlet>}');
 | |
| 
 | |
|     $rootRouter.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>}');
 | |
| 
 | |
|     $rootRouter.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;
 | |
|   }
 | |
| });
 |