Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
146 lines
3.2 KiB
JavaScript
Executable file
146 lines
3.2 KiB
JavaScript
Executable file
define(function(require) {
|
|
'use strict';
|
|
|
|
var promise = require('common/promise');
|
|
|
|
function errorOrFive(shouldError, callback) {
|
|
var error;
|
|
if (shouldError) {
|
|
error = new Error('You told me to error!');
|
|
} else {
|
|
error = null;
|
|
}
|
|
|
|
return callback(error, !shouldError && 5);
|
|
}
|
|
|
|
suite('denodeify', function() {
|
|
var subject;
|
|
|
|
setup(function() {
|
|
subject = promise.denodeify(errorOrFive);
|
|
});
|
|
|
|
test('node-style error', function(done) {
|
|
subject(true /* shouldError */, function(error) {
|
|
assert.instanceOf(error, Error);
|
|
assert.strictEqual(error.message, 'You told me to error!');
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('node-style without error', function(done) {
|
|
subject(false /* shouldError */, function(error, result) {
|
|
assert.isNull(error);
|
|
assert.strictEqual(result, 5);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('promise with error', function(done) {
|
|
subject(true /* shouldError */)
|
|
.catch(function(error) {
|
|
assert.instanceOf(error, Error);
|
|
assert.strictEqual(error.message, 'You told me to error!');
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('promise without error', function(done) {
|
|
subject(false /* shouldError */)
|
|
.then(function(value) {
|
|
assert.strictEqual(value, 5);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('no callback and no promise', function() {
|
|
// Should not hiccup.
|
|
subject(false /* shouldError */);
|
|
});
|
|
});
|
|
|
|
function SlowCalculator() {
|
|
this.currentValue = 0;
|
|
promise.denodeifyAll(this, [
|
|
'add',
|
|
'multiply'
|
|
]);
|
|
}
|
|
|
|
SlowCalculator.prototype = {
|
|
add: function(x, callback) {
|
|
var error = null;
|
|
if (typeof x !== 'number') {
|
|
error = new Error('Can only add numbers!');
|
|
}
|
|
|
|
this.currentValue += x;
|
|
setTimeout(function() {
|
|
callback(error, error || this.currentValue);
|
|
}.bind(this), 10);
|
|
},
|
|
|
|
multiply: function(x, callback) {
|
|
var error = null;
|
|
if (typeof x !== 'number') {
|
|
error = new Error('Can only multiply numbers!');
|
|
}
|
|
|
|
this.currentValue *= x;
|
|
setTimeout(function() {
|
|
callback(error, error || this.currentValue);
|
|
}.bind(this), 10);
|
|
}
|
|
};
|
|
|
|
suite('denodeifyAll', function() {
|
|
var subject;
|
|
|
|
setup(function() {
|
|
subject = new SlowCalculator();
|
|
});
|
|
|
|
test('node-style error', function(done) {
|
|
subject.multiply('lolcats', function(error) {
|
|
assert.instanceOf(error, Error);
|
|
assert.strictEqual(error.message, 'Can only multiply numbers!');
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('node-style without error', function(done) {
|
|
subject.add(5, function(error, result) {
|
|
assert.isNull(error);
|
|
assert.strictEqual(result, 5);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('promise with error', function(done) {
|
|
subject.add(/\s+/).catch(function(error) {
|
|
assert.instanceOf(error, Error);
|
|
assert.strictEqual(error.message, 'Can only add numbers!');
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('promise without error', function(done) {
|
|
subject.add(9)
|
|
.then(function(value) {
|
|
assert.strictEqual(value, 9);
|
|
return subject.multiply(8);
|
|
})
|
|
.then(function(value) {
|
|
assert.strictEqual(value, 72);
|
|
done();
|
|
});
|
|
});
|
|
|
|
test('no callback and no promise', function() {
|
|
// Should not hiccup.
|
|
subject.multiply(3.14);
|
|
});
|
|
});
|
|
|
|
});
|