summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/ReadableStream/basic-pull.js
blob: 760937c67a833ead5f0e512689c499de54984467 (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
// |reftest| skip-if(!this.ReadableStream||!this.drainJobQueue)

if ("ignoreUnhandledRejections" in this) {
  ignoreUnhandledRejections();
}

// Example of a stream that produces data on demand, the "pull" model.
let fibStream = new ReadableStream({
    start(controller) {
        this.a = 0;
        this.b = 1;
        controller.enqueue(0);
        controller.enqueue(1);
    },

    pull(controller) {
        [this.a, this.b] = [this.b, this.a + this.b];
        controller.enqueue(this.b);
    }
});

async function test() {
    assertEq(fibStream.locked, false);
    let reader = fibStream.getReader();
    assertEq(fibStream.locked, true);

    let results = [];
    while (results.length < 10) {
        results.push((await reader.read()).value);
    }

    assertEq(results.join(), "0,1,1,2,3,5,8,13,21,34");
    reader.releaseLock();
    assertEq(fibStream.locked, false);
}

runAsyncTest(test);