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