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