summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/stream/reader-closedPromise-handled-2.js
blob: 0525ff91ee23b5c6c4e7cc2507a62c0a107a0bfc (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
// |jit-test| skip-if: !this.hasOwnProperty("ReadableStream")
// Releasing a reader should not result in a promise being tracked as
// unhandled.

function test(readable) {
  // Create an errored stream.
  let controller;
  let stream = new ReadableStream({
    start(c) {
      controller = c;
    }
  });
  drainJobQueue();

  // Track promises.
  let status = new Map;
  setPromiseRejectionTrackerCallback((p, x) => { status.set(p, x); });

  // Per Streams spec 3.7.5 step 5, this creates a rejected promise
  // (reader.closed) but marks it as handled.
  let reader = stream.getReader();
  if (!readable) {
    controller.close();
  }
  reader.releaseLock();

  // Check that the promise's status is not 0 (unhandled);
  // it may be either 1 (handled) or undefined (never tracked).
  let result = status.get(reader.closed);
  assertEq(result === 1 || result === undefined, true);
}

test(true);
test(false);