c9-core/node_modules/c9/async_tools_test.js

152 wiersze
3.7 KiB
JavaScript
Executable File

"use strict";
"use server";
var assert = require("assert");
var sinon = require("sinon");
var async_tools = require("./async_tools");
module.exports = {
"test operation doesn't timeout": function() {
var clock = sinon.useFakeTimers();
var cb = sinon.stub();
async_tools.timeout(function(cb) {
setTimeout(function() {
cb(null, "foo", "bar");
}, 100);
}, {
timeout: 200
}, cb);
sinon.assert.callCount(cb, 0);
clock.tick(90);
sinon.assert.callCount(cb, 0);
clock.tick(20);
sinon.assert.callCount(cb, 1);
sinon.assert.calledWith(cb, null, "foo", "bar");
clock.restore();
},
"test timed out operation should return a timeout error": function() {
var clock = sinon.useFakeTimers();
var cb = sinon.stub();
async_tools.timeout(function(cb) {
setTimeout(function() {
cb(null, "foo");
}, 300);
}, {
timeout: 200
}, cb);
sinon.assert.callCount(cb, 0);
clock.tick(190);
sinon.assert.callCount(cb, 0);
clock.tick(20);
sinon.assert.callCount(cb, 1);
assert.equal(cb.args[0][0].code, "ETIMEOUT");
clock.tick(100);
sinon.assert.callCount(cb, 1);
clock.restore();
},
"test customize timeout error reporting": function() {
var clock = sinon.useFakeTimers();
var cb = sinon.stub();
async_tools.timeout(function(cb) {
setTimeout(function() {
cb(null, "foo");
}, 300);
}, {
timeout: 200,
error: function() {
return {
my: "custom error"
};
}
}, cb);
clock.tick(210);
assert.equal(cb.args[0][0].my, "custom error");
clock.restore();
},
"test timeout should call cancel function": function() {
var clock = sinon.useFakeTimers();
var cb = sinon.stub();
var cancel = sinon.stub();
async_tools.timeout(function(cb) {
setTimeout(function() {
cb(null, "foo");
}, 300);
}, {
timeout: 200,
cancel: cancel
}, cb);
clock.tick(210);
sinon.assert.called(cancel);
clock.restore();
},
"test callback should be called max every 2sec": function() {
var clock = sinon.useFakeTimers();
var cb = sinon.stub();
var throttle = async_tools.throttle(2000, cb);
sinon.assert.callCount(cb, 0);
throttle();
sinon.assert.callCount(cb, 1);
throttle();
sinon.assert.callCount(cb, 1);
clock.tick(1000);
throttle();
sinon.assert.callCount(cb, 1);
clock.tick(999);
throttle();
sinon.assert.callCount(cb, 1);
clock.tick(2);
throttle();
sinon.assert.callCount(cb, 2);
clock.tick(2000);
throttle();
sinon.assert.callCount(cb, 3);
clock.restore();
},
"test once should be called exactly once": function() {
var cb = sinon.stub();
var o = async_tools.once(cb);
o(1, 2, 3);
sinon.assert.callCount(cb, 1);
sinon.assert.calledWith(cb, 1, 2, 3);
o();
sinon.assert.callCount(cb, 1);
o();
sinon.assert.callCount(cb, 1);
}
};
!module.parent && require("asyncjs").test.testcase(module.exports).exec();