diff options
Diffstat (limited to 'test/ng/qSpec.js')
| -rw-r--r-- | test/ng/qSpec.js | 68 | 
1 files changed, 67 insertions, 1 deletions
| diff --git a/test/ng/qSpec.js b/test/ng/qSpec.js index 941b4f2e..822cde6b 100644 --- a/test/ng/qSpec.js +++ b/test/ng/qSpec.js @@ -683,7 +683,7 @@ describe('q', function() {    }); -  describe('all', function() { +  describe('all (array)', function() {      it('should resolve all of nothing', function() {        var result;        q.all([]).then(function(r) { result = r; }); @@ -742,6 +742,72 @@ describe('q', function() {      });    }); +  describe('all (hash)', function() { +    it('should resolve all of nothing', function() { +      var result; +      q.all({}).then(function(r) { result = r; }); +      mockNextTick.flush(); +      expect(result).toEqual({}); +    }); + + +    it('should take a hash of promises and return a promise for a hash of results', function() { +      var deferred1 = defer(), +          deferred2 = defer(); + +      q.all({en: promise, fr: deferred1.promise, es: deferred2.promise}).then(success(), error()); +      expect(logStr()).toBe(''); +      syncResolve(deferred, 'hi'); +      expect(logStr()).toBe(''); +      syncResolve(deferred2, 'hola'); +      expect(logStr()).toBe(''); +      syncResolve(deferred1, 'salut'); +      expect(logStr()).toBe('success({en:hi,es:hola,fr:salut})'); +    }); + + +    it('should reject the derived promise if at least one of the promises in the hash is rejected', +        function() { +      var deferred1 = defer(), +          deferred2 = defer(); + +      q.all({en: promise, fr: deferred1.promise, es: deferred2.promise}).then(success(), error()); +      expect(logStr()).toBe(''); +      syncResolve(deferred2, 'hola'); +      expect(logStr()).toBe(''); +      syncReject(deferred1, 'oops'); +      expect(logStr()).toBe('error(oops)'); +    }); + + +    it('should ignore multiple resolutions of an (evil) hash promise', function() { +      var evilPromise = { +        then: function(success, error) { +          evilPromise.success = success; +          evilPromise.error = error; +        } +      } + +      q.all({good: promise, evil: evilPromise}).then(success(), error()); +      expect(logStr()).toBe(''); + +      evilPromise.success('first'); +      evilPromise.success('muhaha'); +      evilPromise.error('arghhh'); +      expect(logStr()).toBe(''); + +      syncResolve(deferred, 'done'); +      expect(logStr()).toBe('success({evil:first,good:done})'); +    }); + +    it('should handle correctly situation when given the same promise several times', function() { +      q.all({first: promise, second: promise, third: promise}).then(success(), error()); +      expect(logStr()).toBe(''); + +      syncResolve(deferred, 'done'); +      expect(logStr()).toBe('success({first:done,second:done,third:done})'); +    }); +  });    describe('exception logging', function() {      var mockExceptionLogger = { | 
