blob: cdac0e44a3a2c82d52689dabd87b931a36510344 [file] [log] [blame]
'use strict'
var Q = require('../q')
exports['test `when` with non-promise'] = function(assert, done) {
var nextTurn = false
Q.when
( 'test'
, function(value) {
assert.equal(value, 'test', 'value resoved as expected')
assert.ok(nextTurn, 'callback is called in next turn of event loop')
done()
}
, function(reason) {
assert.fail('promise got rejected with reason: ' + reason)
done()
}
)
nextTurn = true
}
exports['test promise resolution'] = function(assert, done) {
var nextTurn = false
, deferred = Q.defer()
Q.when
( deferred.promise
, function(value) {
assert.equal(value, 3, 'promise fullfilled correctly: `3`')
assert.ok(nextTurn, 'callback is called in next turn of event loop')
done()
}
, function(reason) {
assert.fail('promise got rejected with reason: ' + reason)
done()
}
)
deferred.resolve(3)
nextTurn = true
}
exports['test promise rejection'] = function(assert, done) {
var nextTurn = false
, deferred = Q.defer()
, error = new Error('Boom !!')
Q.when
( deferred.promise
, function(value) {
assert.fail('resolve callback was called on rejected promise')
done()
}
, function(reason) {
assert.ok(nextTurn, 'callback is called in next turn of event loop')
assert.equal(reason, error, 'rejection reason is correct')
done()
}
)
deferred.reject(error)
nextTurn = true
}
exports['test resolve/reject resoved promise'] = function(assert, done) {
var nextTurn = false
, deferred = Q.defer()
, resolution = {}
Q.when
( deferred.promise
, function(value) {
assert.ok(nextTurn, 'callback is called in next turn of event loop')
assert.equal(value, resolution, 'resolved as expected')
done()
}
, function(reason) {
assert.ok(nextTurn, 'callback is called in next turn of event loop')
assert.equal(reason, error, 'rejection reason is correct')
done()
}
)
deferred.resolve(resolution)
// all the following resolve / rejects are ignored
deferred.resolve(3)
deferred.reject('die!')
nextTurn = true
}
exports['test resolve/reject rejected promise'] = function(assert, done) {
var nextTurn = false
, deferred = Q.defer()
, error = new Error('Boom !!')
Q.when
( deferred.promise
, function(value) {
assert.fail('resolve callback was called on rejected promise')
done()
}
, function(reason) {
assert.ok(nextTurn, 'callback is called in next turn of event loop')
assert.equal(reason, error, 'rejection reason is correct')
done()
}
)
deferred.reject(error)
// all the following resolve / rejects are ignored
deferred.resolve('taram!')
deferred.reject('die!')
nextTurn = true
}
if (module == require.main) require('test').run(exports)