summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/stream/bug-1387503-2.js
blob: d6885f325a379407fd1ae0d45820988d84d37b48 (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
// |jit-test| skip-if: !this.hasOwnProperty("ReadableStream")
// Test uncatchable error when a stream's queuing strategy's size() method is called.

// Make `debugger;` raise an uncatchable exception.
let g = newGlobal({newCompartment: true});
g.parent = this;
g.hit = false;
g.eval(`
    var dbg = new Debugger(parent);
    dbg.onDebuggerStatement = (_frame, exc) => (hit = true, null);
`);

let fnFinished = false;
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() {
                debugger;
            }
        });
    } finally {
        fnFinished = true;
    }
}

fn();
drainJobQueue();
assertEq(g.hit, true);
assertEq(fnFinished, false);