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.
117 lines (94 loc) • 2.58 kB
JavaScript
define([
'intern!object',
'intern/chai!assert',
'../../Deferred',
'../../promise/Promise',
'../../when'
], function (registerSuite, assert, Deferred, Promise, when) {
var emptyObject = {};
var dfd;
registerSuite({
name: 'dojo/when',
'return the same promise without callbacks': function () {
var promise1 = when(emptyObject);
assert.instanceOf(promise1, Promise);
dfd = new Deferred();
var promise2 = when(dfd.promise);
assert.instanceOf(promise2, Promise);
assert.strictEqual(dfd.promise, promise2);
},
'do not convert to promise if errback is passed but no callback': function () {
var result = when(emptyObject, null, function () {});
assert.strictEqual(result, emptyObject);
},
'with a result value': function () {
var received;
when(emptyObject, function (result) {
received = result;
});
assert.strictEqual(received, emptyObject);
},
'with a result value, return result of callback': function () {
var obj1 = {};
var obj2 = {};
var received;
var returned = when(obj1, function (result) {
received = result;
return obj2;
});
assert.strictEqual(received, obj1);
assert.strictEqual(returned, obj2);
},
'with a promise that gets resolved': function () {
var received;
dfd = new Deferred();
when(dfd.promise, function (result) {
received = result;
});
dfd.resolve(emptyObject);
assert.strictEqual(received, emptyObject);
},
'with a promise that gets rejected': function () {
var received;
dfd = new Deferred();
when(dfd.promise, null, function (result) {
received = result;
});
dfd.reject(emptyObject);
assert.strictEqual(received, emptyObject);
},
'with a promise that gets progress': function () {
var received;
dfd = new Deferred();
when(dfd.promise, null, null, function (result) {
received = result;
});
dfd.progress(emptyObject);
assert.strictEqual(received, emptyObject);
},
'with chaining of the result': function () {
var received;
function square(n){ return n * n; }
when(2).then(square).then(square).then(function (n) {
received = n;
});
assert.strictEqual(received, 16);
},
'convert foreign promise': function () {
var _callback;
var foreign = {
then: function (cb) {
_callback = cb;
}
};
var promise = when(foreign);
var received;
promise.then(function (result) {
received = result;
});
_callback(emptyObject);
assert.instanceOf(promise, Promise);
assert.strictEqual(received, emptyObject);
}
});
});