-
Notifications
You must be signed in to change notification settings - Fork 176
Expand file tree
/
Copy pathwhatwg-streams.test.ts
More file actions
59 lines (53 loc) · 1.64 KB
/
whatwg-streams.test.ts
File metadata and controls
59 lines (53 loc) · 1.64 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
import { deepStrictEqual } from "assert";
import { decodeAsync, encode, decodeArrayStream } from "@msgpack/msgpack";
import { ReadableStream as PonyReadableStream } from "web-streams-polyfill/ponyfill";
const isReadableStreamConstructorAvailable: boolean = (() => {
try {
// Edge <= 18 has ReadableStream but its constructor is not available
new ReadableStream({
start() {},
});
return true;
} catch {
return false;
}
})();
const MyReadableStream: any = isReadableStreamConstructorAvailable ? ReadableStream : PonyReadableStream;
// Downgrade stream not to implement AsycIterable<T>
function downgradeReadableStream(stream: ReadableStream) {
(stream as any)[Symbol.asyncIterator] = undefined;
}
describe("whatwg streams", () => {
it("decodeArrayStream", async () => {
const data = [1, 2, 3];
const encoded = encode(data);
const stream = new MyReadableStream({
start(controller: any) {
for (const byte of encoded) {
controller.enqueue([byte]);
}
controller.close();
},
});
downgradeReadableStream(stream);
const items: Array<unknown> = [];
for await (const item of decodeArrayStream(stream)) {
items.push(item);
}
deepStrictEqual(items, data);
});
it("decodeAsync", async () => {
const data = [1, 2, 3];
const encoded = encode(data);
const stream = new MyReadableStream({
start(controller: any) {
for (const byte of encoded) {
controller.enqueue([byte]);
}
controller.close();
},
});
downgradeReadableStream(stream);
deepStrictEqual(await decodeAsync(stream), data);
});
});