mirror of https://github.com/lukechilds/node.git
Browse Source
I don't want users to have to think about coroutine safety. http://thread.gmane.org/gmane.comp.lang.javascript.nodejs/2468/focus=2603v0.7.4-release
Ryan Dahl
15 years ago
5 changed files with 5 additions and 207 deletions
@ -1,98 +0,0 @@ |
|||
process.mixin(require("./common")); |
|||
events = require('events'); |
|||
|
|||
var p1_done = false; |
|||
var p1 = new events.Promise(); |
|||
p1.addCallback(function () { |
|||
assert.equal(1, arguments.length); |
|||
assert.equal("single arg", arguments[0]); |
|||
p1_done = true; |
|||
}); |
|||
|
|||
var p2_done = false; |
|||
var p2 = new events.Promise(); |
|||
p2.addCallback(function () { |
|||
p2_done = true; |
|||
setTimeout(function () { |
|||
p1.emitSuccess("single arg"); |
|||
}, 100); |
|||
}); |
|||
|
|||
var p3_done = false; |
|||
var p3 = new events.Promise(); |
|||
p3.addCallback(function () { |
|||
p3_done = true; |
|||
}); |
|||
|
|||
|
|||
|
|||
var p4_done = false; |
|||
var p4 = new events.Promise(); |
|||
p4.addCallback(function () { |
|||
assert.equal(3, arguments.length); |
|||
assert.equal("a", arguments[0]); |
|||
assert.equal("b", arguments[1]); |
|||
assert.equal("c", arguments[2]); |
|||
p4_done = true; |
|||
}); |
|||
|
|||
var p5_done = false; |
|||
var p5 = new events.Promise(); |
|||
p5.addCallback(function () { |
|||
p5_done = true; |
|||
setTimeout(function () { |
|||
p4.emitSuccess("a","b","c"); |
|||
}, 100); |
|||
}); |
|||
|
|||
var p6 = new events.Promise(); |
|||
var p7 = new events.Promise(); |
|||
p7.addErrback(function() {}); |
|||
|
|||
p2.emitSuccess(); |
|||
|
|||
assert.equal(false, p1_done); |
|||
assert.equal(true, p2_done); |
|||
assert.equal(false, p3_done); |
|||
|
|||
var ret1 = p1.wait() |
|||
assert.equal("single arg", ret1); |
|||
|
|||
assert.equal(true, p1_done); |
|||
assert.equal(true, p2_done); |
|||
assert.equal(false, p3_done); |
|||
|
|||
p3.emitSuccess(); |
|||
|
|||
assert.equal(false, p4_done); |
|||
assert.equal(false, p5_done); |
|||
|
|||
p5.emitSuccess(); |
|||
|
|||
assert.equal(false, p4_done); |
|||
assert.equal(true, p5_done); |
|||
|
|||
var ret4 = p4.wait(); |
|||
assert.deepEqual(["a","b","c"], ret4); |
|||
|
|||
assert.equal(true, p4_done); |
|||
|
|||
|
|||
p6.emitSuccess("something"); |
|||
assert.equal("something", p6.wait()); |
|||
p7.emitError("argh!"); |
|||
var goterr; |
|||
try { |
|||
p7.wait(); |
|||
} catch(err) { |
|||
goterr = err; |
|||
} |
|||
assert.equal("argh!", goterr.toString()); |
|||
|
|||
process.addListener("exit", function () { |
|||
assert.equal(true, p1_done); |
|||
assert.equal(true, p2_done); |
|||
assert.equal(true, p3_done); |
|||
assert.equal(true, p4_done); |
|||
assert.equal(true, p5_done); |
|||
}); |
@ -1,32 +0,0 @@ |
|||
process.mixin(require("./common")); |
|||
var events = require('events'); |
|||
|
|||
function timer (t) { |
|||
var promise = new events.Promise(); |
|||
setTimeout(function () { |
|||
promise.emitSuccess(); |
|||
}, t); |
|||
return promise; |
|||
} |
|||
|
|||
order = 0; |
|||
var a = new Date(); |
|||
function test_timeout_order(delay, desired_order) { |
|||
delay *= 10; |
|||
timer(0).addCallback(function() { |
|||
timer(delay).wait() |
|||
var b = new Date(); |
|||
assert.equal(true, b - a >= delay); |
|||
order++; |
|||
// A stronger assertion would be that the ordering is correct.
|
|||
// With Poor Man's coroutines we cannot guarentee that.
|
|||
// Replacing wait() with actual coroutines would solve that issue.
|
|||
// assert.equal(desired_order, order);
|
|||
}); |
|||
} |
|||
test_timeout_order(10, 6); // Why does this have the proper order??
|
|||
test_timeout_order(5, 5); |
|||
test_timeout_order(4, 4); |
|||
test_timeout_order(3, 3); |
|||
test_timeout_order(2, 2); |
|||
test_timeout_order(1, 1); |
Loading…
Reference in new issue