kopia lustrzana https://github.com/c9/core
152 wiersze
3.7 KiB
JavaScript
152 wiersze
3.7 KiB
JavaScript
![]() |
"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();
|