mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 15:40:22 +00:00
the flag must be in all src and test files so that we get the benefit of running in the strict mode even in jstd the following script was used to modify all files: for file in `find src test -name "*.js"`; do echo -e "'use strict';\n" > temp.txt cat $file >> temp.txt mv temp.txt $file done
141 lines
4.2 KiB
JavaScript
141 lines
4.2 KiB
JavaScript
'use strict';
|
|
|
|
describe('injector', function(){
|
|
var providers;
|
|
var cache;
|
|
var injector;
|
|
var scope;
|
|
|
|
beforeEach(function(){
|
|
providers = extensionMap({}, 'providers');
|
|
cache = {};
|
|
scope = {};
|
|
injector = createInjector(scope, providers, cache);
|
|
});
|
|
|
|
it("should return same instance from calling provider", function(){
|
|
providers('text', function(){ return scope.name; });
|
|
scope.name = 'abc';
|
|
expect(injector('text')).toEqual('abc');
|
|
expect(cache.text).toEqual('abc');
|
|
scope.name = 'deleted';
|
|
expect(injector('text')).toEqual('abc');
|
|
});
|
|
|
|
it("should call function", function(){
|
|
providers('a', function(){return 1;});
|
|
providers('b', function(){return 2;});
|
|
var args;
|
|
function fn(a, b, c, d) {
|
|
args = [this, a, b, c, d];
|
|
}
|
|
fn.$inject = ['a', 'b'];
|
|
injector.invoke({name:"this"}, fn, [3, 4]);
|
|
expect(args).toEqual([{name:'this'}, 1, 2, 3, 4]);
|
|
});
|
|
|
|
it('should inject providers', function(){
|
|
providers('a', function(){return this.mi = 'Mi';});
|
|
providers('b', function(mi){return this.name = mi+'sko';}, {$inject:['a']});
|
|
expect(injector('b')).toEqual('Misko');
|
|
expect(scope).toEqual({mi:'Mi', name:'Misko'});
|
|
});
|
|
|
|
|
|
it('should resolve dependency graph and instantiate all services just once', function(){
|
|
var log = [];
|
|
|
|
// s1
|
|
// / |\
|
|
// / s2\
|
|
// / / | \\
|
|
// /s3 < s4 > s5
|
|
// //
|
|
// s6
|
|
|
|
|
|
providers('s1', function(){ log.push('s1'); }, {$inject: ['s2', 's5', 's6']});
|
|
providers('s2', function(){ log.push('s2'); }, {$inject: ['s3', 's4', 's5']});
|
|
providers('s3', function(){ log.push('s3'); }, {$inject: ['s6']});
|
|
providers('s4', function(){ log.push('s4'); }, {$inject: ['s3', 's5']});
|
|
providers('s5', function(){ log.push('s5'); });
|
|
providers('s6', function(){ log.push('s6'); });
|
|
|
|
injector('s1');
|
|
|
|
expect(log).toEqual(['s6', 's5', 's3', 's4', 's2', 's1']);
|
|
});
|
|
|
|
|
|
it('should provide usefull message if no provider', function(){
|
|
expect(function(){
|
|
injector('idontexist');
|
|
}).toThrow("Unknown provider for 'idontexist'.");
|
|
});
|
|
|
|
it('should autostart eager services', function(){
|
|
var log = '';
|
|
providers('eager', function(){log += 'eager;'; return 'foo';}, {$eager: true});
|
|
injector.eager();
|
|
expect(log).toEqual('eager;');
|
|
expect(injector('eager')).toBe('foo');
|
|
});
|
|
|
|
describe('annotation', function(){
|
|
it('should return $inject', function(){
|
|
function fn(){}
|
|
fn.$inject = ['a'];
|
|
expect(injectionArgs(fn)).toBe(fn.$inject);
|
|
expect(injectionArgs(function(){})).toEqual([]);
|
|
expect(injectionArgs(function (){})).toEqual([]);
|
|
expect(injectionArgs(function (){})).toEqual([]);
|
|
expect(injectionArgs(function /* */ (){})).toEqual([]);
|
|
});
|
|
|
|
it('should create $inject', function(){
|
|
// keep the multi-line to make sure we can handle it
|
|
function $f_n0 /*
|
|
*/(
|
|
$a, // x, <-- looks like an arg but it is a comment
|
|
b_, /* z, <-- looks like an arg but it is a
|
|
multi-line comment
|
|
function (a, b){}
|
|
*/
|
|
_c,
|
|
/* {some type} */ d){ extraParans();}
|
|
expect(injectionArgs($f_n0)).toEqual(['$a', 'b_', '_c', 'd']);
|
|
expect($f_n0.$inject).toEqual(['$a', 'b_', '_c', 'd']);
|
|
});
|
|
|
|
it('should handle no arg functions', function(){
|
|
function $f_n0(){}
|
|
expect(injectionArgs($f_n0)).toEqual([]);
|
|
expect($f_n0.$inject).toEqual([]);
|
|
});
|
|
|
|
it('should handle args with both $ and _', function(){
|
|
function $f_n0($a_){}
|
|
expect(injectionArgs($f_n0)).toEqual(['$a_']);
|
|
expect($f_n0.$inject).toEqual(['$a_']);
|
|
});
|
|
|
|
it('should throw on non function arg', function(){
|
|
expect(function(){
|
|
injectionArgs({});
|
|
}).toThrow();
|
|
});
|
|
|
|
});
|
|
|
|
describe('inject', function(){
|
|
it('should inject names', function(){
|
|
expect(annotate('a', {}).$inject).toEqual(['a']);
|
|
expect(annotate('a', 'b', {}).$inject).toEqual(['a', 'b']);
|
|
});
|
|
|
|
it('should inject array', function(){
|
|
expect(annotate(['a'], {}).$inject).toEqual(['a']);
|
|
expect(annotate(['a', 'b'], {}).$inject).toEqual(['a', 'b']);
|
|
});
|
|
});
|
|
});
|