-
Notifications
You must be signed in to change notification settings - Fork 299
Expand file tree
/
Copy pathmicrotask_test.js
More file actions
98 lines (72 loc) · 1.88 KB
/
microtask_test.js
File metadata and controls
98 lines (72 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
var { describe, it, before, after, beforeEach, afterEach } = require('node:test');
var assert = require('assert');
const coroutine = require("coroutine");
describe("microtask", () => {
it("resolve", () => {
var flag = false;
var ev = new coroutine.Event();
async function test1() {
}
async function test2() {
await test1();
flag = true;
ev.set();
}
test2();
ev.wait();
assert.equal(flag, true);
});
it("reject", () => {
async function test1() {
throw "error"
}
var flag;
var ev = new coroutine.Event();
async function test2() {
try {
await test1();
} catch (e) {
flag = e;
}
ev.set();
}
test2();
ev.wait();
assert.equal(flag, "error");
});
it("async+promise resolve", () => {
var flag = false;
var ev = new coroutine.Event();
async function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function test2() {
await sleep(10);
flag = true;
ev.set();
}
test2();
ev.wait();
assert.equal(flag, true);
});
it("async+promise reject", () => {
var flag;
var ev = new coroutine.Event();
async function sleep(ms) {
return new Promise((resolve, reject) => setTimeout(() => {
reject("timeout error");
}, ms));
}
async function test2() {
try {
await sleep(10);
} catch (e) {
flag = e;
}
ev.set();
}
test2();
ev.wait();
assert.equal(flag, "timeout error");
});
});