-
Notifications
You must be signed in to change notification settings - Fork 603
/
abortable_test.ts
108 lines (102 loc) · 2.79 KB
/
abortable_test.ts
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
97
98
99
100
101
102
103
104
105
106
107
108
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
import { assertEquals, assertRejects } from "../testing/asserts.ts";
import { deferred } from "./deferred.ts";
import { abortable } from "./abortable.ts";
Deno.test("[async] abortable (Promise)", async () => {
const c = new AbortController();
const p = deferred();
const t = setTimeout(() => p.resolve("Hello"), 100);
const result = await abortable(p, c.signal);
assertEquals(result, "Hello");
clearTimeout(t);
});
Deno.test("[async] abortable (Promise) with signal aborted after delay", async () => {
const c = new AbortController();
const p = deferred();
const t = setTimeout(() => p.resolve("Hello"), 100);
setTimeout(() => c.abort(), 50);
await assertRejects(
async () => {
await abortable(p, c.signal);
},
DOMException,
"AbortError",
);
clearTimeout(t);
});
Deno.test("[async] abortable (Promise) with already aborted signal", async () => {
const c = new AbortController();
const p = deferred();
const t = setTimeout(() => p.resolve("Hello"), 100);
c.abort();
await assertRejects(
async () => {
await abortable(p, c.signal);
},
DOMException,
"AbortError",
);
clearTimeout(t);
});
Deno.test("[async] abortable (AsyncIterable)", async () => {
const c = new AbortController();
const p = deferred();
const t = setTimeout(() => p.resolve("Hello"), 100);
const a = async function* () {
yield "Hello";
await p;
yield "World";
};
const items: string[] = [];
for await (const item of abortable(a(), c.signal)) {
items.push(item);
}
assertEquals(items, ["Hello", "World"]);
clearTimeout(t);
});
Deno.test("[async] abortable (AsyncIterable) with signal aborted after delay", async () => {
const c = new AbortController();
const p = deferred();
const t = setTimeout(() => p.resolve("Hello"), 100);
const a = async function* () {
yield "Hello";
await p;
yield "World";
};
setTimeout(() => c.abort(), 50);
const items: string[] = [];
await assertRejects(
async () => {
for await (const item of abortable(a(), c.signal)) {
items.push(item);
}
},
DOMException,
"AbortError",
);
assertEquals(items, ["Hello"]);
clearTimeout(t);
});
Deno.test("[async] abortable (AsyncIterable) with already aborted signal", async () => {
const c = new AbortController();
const p = deferred();
const t = setTimeout(() => p.resolve("Hello"), 100);
const a = async function* () {
yield "Hello";
await p;
yield "World";
};
c.abort();
const items: string[] = [];
await assertRejects(
async () => {
for await (const item of abortable(a(), c.signal)) {
items.push(item);
}
},
DOMException,
"AbortError",
);
assertEquals(items, []);
clearTimeout(t);
});