aboutsummaryrefslogtreecommitdiffstats
path: root/test/ng/qSpec.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/ng/qSpec.js')
-rw-r--r--test/ng/qSpec.js68
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 = {