diff options
| author | Igor Minar | 2011-02-27 16:19:21 -0800 | 
|---|---|---|
| committer | Igor Minar | 2011-02-27 16:19:21 -0800 | 
| commit | a709dc19b8b3c3e71970fde6f274cba202e57775 (patch) | |
| tree | 8c2db416408b6a581818d4db79c9cf779ef37f85 | |
| parent | 65585a2d3c4f73a17d20310de30546116a9a6827 (diff) | |
| download | angular.js-a709dc19b8b3c3e71970fde6f274cba202e57775.tar.bz2 | |
adding an extra injector spec
- added a spec for dependency graph resolution
- also simplyfying cache presence check
| -rw-r--r-- | src/Injector.js | 2 | ||||
| -rw-r--r-- | test/InjectorSpec.js | 26 | 
2 files changed, 27 insertions, 1 deletions
diff --git a/src/Injector.js b/src/Injector.js index 5ba2cbfc..b3d8f113 100644 --- a/src/Injector.js +++ b/src/Injector.js @@ -43,7 +43,7 @@ function createInjector(providerScope, providers, cache) {    return function inject(value, scope, args){      var returnValue, provider;      if (isString(value)) { -      if (!cache.hasOwnProperty(value)) { +      if (!(value in cache)) {          provider = providers[value];          if (!provider) throw "Unknown provider for '"+value+"'.";          cache[value] = inject(provider, providerScope); diff --git a/test/InjectorSpec.js b/test/InjectorSpec.js index e9a528cc..a0f15132 100644 --- a/test/InjectorSpec.js +++ b/test/InjectorSpec.js @@ -45,6 +45,32 @@ describe('injector', function(){      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'); }); + +    inject('s1'); + +    expect(log).toEqual(['s6', 's3', 's5', 's4', 's2', 's1']); +  }); + +    it('should provide usefull message if no provider', function(){      assertThrows("Unknown provider for 'idontexist'.", function(){        inject('idontexist');  | 
