blob: 1678b46649cc7419cbb45df9eed06c735559f7be (
plain)
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
|
// Test uncatchable error when a stream's queuing strategy's size() method is called.
/* global newGlobal */
let fnFinished = false;
let g;
add_task(async function test() {
// Make `debugger;` raise an uncatchable exception.
g = newGlobal();
g.parent = this;
g.hit = false;
g.info = info;
g.eval(`
var dbg = new Debugger(parent);
dbg.onDebuggerStatement = (_frame, exc) => {hit = true; info("hit"); return null};
`);
async function fn() {
// Await once to postpone the uncatchable error until we're running inside
// a reaction job. We don't want the rest of the test to be terminated.
// (`drainJobQueue` catches uncatchable errors!)
await 1;
try {
// Create a stream with a strategy whose .size() method raises an
// uncatchable exception, and have it call that method.
new ReadableStream(
{
start(controller) {
controller.enqueue("FIRST POST"); // this calls .size()
},
},
{
size() {
// eslint-disable-next-line no-debugger
debugger;
},
}
);
} finally {
fnFinished = true;
}
}
fn()
.then(() => info("Resolved"))
.catch(() => info("Rejected"));
});
add_task(() => {
equal(g.hit, true, "We hit G");
equal(fnFinished, false, "We didn't hit the finally block");
});
|