dojo
Version:
Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.
122 lines (103 loc) • 3.33 kB
JavaScript
define([
'intern!object',
'intern/chai!assert',
'dojo/Deferred',
'../../../promise/all'
], function (registerSuite, assert, Deferred, all) {
registerSuite({
name: 'dojo/promise/all',
'array argument': function () {
var expectedResults = [
'foo',
'bar',
'baz'
],
deferreds = [
new Deferred(),
new Deferred(),
expectedResults[2]
];
deferreds[1].resolve(expectedResults[1]);
all(deferreds).then(this.async().callback(function (results) {
assert.deepEqual(results, expectedResults);
}));
deferreds[0].resolve(expectedResults[0]);
},
'object argument': function () {
var expectedResultHash = {
a: 'foo',
b: 'bar',
c: 'baz'
},
deferredHash = {
a: new Deferred(),
b: new Deferred(),
c: expectedResultHash.c
};
deferredHash.a.resolve(expectedResultHash.a);
all(deferredHash).then(this.async().callback(function (resultHash) {
assert.deepEqual(resultHash, expectedResultHash);
}));
deferredHash.b.resolve(expectedResultHash.b);
},
'without arguments': function () {
all().then(this.async().callback(function (result) {
assert.isTrue(typeof result === 'undefined');
}));
},
'with single non-object argument': function () {
all(null).then(this.async().callback(function (result) {
assert.isTrue(typeof result === 'undefined');
}));
},
'with empty array': function () {
all([]).then(this.async().callback(function (result) {
assert.deepEqual(result, []);
}));
},
'with empty object': function () {
all({}).then(this.async().callback(function (result) {
assert.deepEqual(result, {});
}));
},
'with one rejected promise': function () {
var expectedRejectedResult = {};
var argument = [ new Deferred(), new Deferred(), {} ];
argument[1].reject(expectedRejectedResult);
all(argument).then(null, this.async().callback(function (result) {
assert.strictEqual(result, expectedRejectedResult);
}));
},
'with one promise rejected later': function () {
var expectedRejectedResult = {};
var argument = [ new Deferred(), new Deferred(), {} ];
all(argument).then(null, this.async().callback(function (result) {
assert.strictEqual(result, expectedRejectedResult);
}));
argument[1].reject(expectedRejectedResult);
},
'with multiple promises rejected later': function () {
var expectedRejectedResult = {};
var actualResult;
var argument = [ new Deferred(), new Deferred(), {} ];
all(argument).then(null, function (result) {
actualResult = result;
});
argument[0].reject(expectedRejectedResult);
argument[1].reject({});
// ensure reject is only called once
setTimeout(this.async().callback(function () {
assert.strictEqual(actualResult, expectedRejectedResult);
}), 0);
},
'cancel only affects returned promise, not those we\'re waiting for': function () {
var expectedCancelResult = {};
var deferredCanceled = false;
var secondDeferred = new Deferred(function () { deferredCanceled = true; });
all([ new Deferred(), secondDeferred, new Deferred() ]).then(null, this.async().callback(function (result) {
assert.strictEqual(result, expectedCancelResult);
assert.isFalse(deferredCanceled);
})).cancel(expectedCancelResult);
}
});
});