tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

count-queuing-strategy-integration.any.js (8701B)


      1 // META: global=window,worker,shadowrealm
      2 'use strict';
      3 
      4 test(() => {
      5 
      6  new ReadableStream({}, new CountQueuingStrategy({ highWaterMark: 4 }));
      7 
      8 }, 'Can construct a readable stream with a valid CountQueuingStrategy');
      9 
     10 promise_test(() => {
     11 
     12  let controller;
     13  const rs = new ReadableStream(
     14    {
     15      start(c) {
     16        controller = c;
     17      }
     18    },
     19    new CountQueuingStrategy({ highWaterMark: 0 })
     20  );
     21  const reader = rs.getReader();
     22 
     23  assert_equals(controller.desiredSize, 0, '0 reads, 0 enqueues: desiredSize should be 0');
     24  controller.enqueue('a');
     25  assert_equals(controller.desiredSize, -1, '0 reads, 1 enqueue: desiredSize should be -1');
     26  controller.enqueue('b');
     27  assert_equals(controller.desiredSize, -2, '0 reads, 2 enqueues: desiredSize should be -2');
     28  controller.enqueue('c');
     29  assert_equals(controller.desiredSize, -3, '0 reads, 3 enqueues: desiredSize should be -3');
     30  controller.enqueue('d');
     31  assert_equals(controller.desiredSize, -4, '0 reads, 4 enqueues: desiredSize should be -4');
     32 
     33  return reader.read()
     34    .then(result => {
     35      assert_object_equals(result, { value: 'a', done: false },
     36                           '1st read gives back the 1st chunk enqueued (queue now contains 3 chunks)');
     37      return reader.read();
     38    })
     39    .then(result => {
     40      assert_object_equals(result, { value: 'b', done: false },
     41                           '2nd read gives back the 2nd chunk enqueued (queue now contains 2 chunks)');
     42      return reader.read();
     43    })
     44    .then(result => {
     45      assert_object_equals(result, { value: 'c', done: false },
     46                           '3rd read gives back the 3rd chunk enqueued (queue now contains 1 chunk)');
     47 
     48      assert_equals(controller.desiredSize, -1, '3 reads, 4 enqueues: desiredSize should be -1');
     49      controller.enqueue('e');
     50      assert_equals(controller.desiredSize, -2, '3 reads, 5 enqueues: desiredSize should be -2');
     51 
     52      return reader.read();
     53    })
     54    .then(result => {
     55      assert_object_equals(result, { value: 'd', done: false },
     56                           '4th read gives back the 4th chunk enqueued (queue now contains 1 chunks)');
     57      return reader.read();
     58 
     59    }).then(result => {
     60      assert_object_equals(result, { value: 'e', done: false },
     61                           '5th read gives back the 5th chunk enqueued (queue now contains 0 chunks)');
     62 
     63      assert_equals(controller.desiredSize, 0, '5 reads, 5 enqueues: desiredSize should be 0');
     64      controller.enqueue('f');
     65      assert_equals(controller.desiredSize, -1, '5 reads, 6 enqueues: desiredSize should be -1');
     66      controller.enqueue('g');
     67      assert_equals(controller.desiredSize, -2, '5 reads, 7 enqueues: desiredSize should be -2');
     68    });
     69 
     70 }, 'Correctly governs a ReadableStreamController\'s desiredSize property (HWM = 0)');
     71 
     72 promise_test(() => {
     73 
     74  let controller;
     75  const rs = new ReadableStream(
     76    {
     77      start(c) {
     78        controller = c;
     79      }
     80    },
     81    new CountQueuingStrategy({ highWaterMark: 1 })
     82  );
     83  const reader = rs.getReader();
     84 
     85  assert_equals(controller.desiredSize, 1, '0 reads, 0 enqueues: desiredSize should be 1');
     86  controller.enqueue('a');
     87  assert_equals(controller.desiredSize, 0, '0 reads, 1 enqueue: desiredSize should be 0');
     88  controller.enqueue('b');
     89  assert_equals(controller.desiredSize, -1, '0 reads, 2 enqueues: desiredSize should be -1');
     90  controller.enqueue('c');
     91  assert_equals(controller.desiredSize, -2, '0 reads, 3 enqueues: desiredSize should be -2');
     92  controller.enqueue('d');
     93  assert_equals(controller.desiredSize, -3, '0 reads, 4 enqueues: desiredSize should be -3');
     94 
     95  return reader.read()
     96    .then(result => {
     97      assert_object_equals(result, { value: 'a', done: false },
     98                           '1st read gives back the 1st chunk enqueued (queue now contains 3 chunks)');
     99      return reader.read();
    100    })
    101    .then(result => {
    102      assert_object_equals(result, { value: 'b', done: false },
    103                           '2nd read gives back the 2nd chunk enqueued (queue now contains 2 chunks)');
    104      return reader.read();
    105    })
    106    .then(result => {
    107      assert_object_equals(result, { value: 'c', done: false },
    108                           '3rd read gives back the 3rd chunk enqueued (queue now contains 1 chunk)');
    109 
    110      assert_equals(controller.desiredSize, 0, '3 reads, 4 enqueues: desiredSize should be 0');
    111      controller.enqueue('e');
    112      assert_equals(controller.desiredSize, -1, '3 reads, 5 enqueues: desiredSize should be -1');
    113 
    114      return reader.read();
    115    })
    116    .then(result => {
    117      assert_object_equals(result, { value: 'd', done: false },
    118                           '4th read gives back the 4th chunk enqueued (queue now contains 1 chunks)');
    119      return reader.read();
    120    })
    121    .then(result => {
    122      assert_object_equals(result, { value: 'e', done: false },
    123                           '5th read gives back the 5th chunk enqueued (queue now contains 0 chunks)');
    124 
    125      assert_equals(controller.desiredSize, 1, '5 reads, 5 enqueues: desiredSize should be 1');
    126      controller.enqueue('f');
    127      assert_equals(controller.desiredSize, 0, '5 reads, 6 enqueues: desiredSize should be 0');
    128      controller.enqueue('g');
    129      assert_equals(controller.desiredSize, -1, '5 reads, 7 enqueues: desiredSize should be -1');
    130    });
    131 
    132 }, 'Correctly governs a ReadableStreamController\'s desiredSize property (HWM = 1)');
    133 
    134 promise_test(() => {
    135 
    136  let controller;
    137  const rs = new ReadableStream(
    138    {
    139      start(c) {
    140        controller = c;
    141      }
    142    },
    143    new CountQueuingStrategy({ highWaterMark: 4 })
    144  );
    145  const reader = rs.getReader();
    146 
    147  assert_equals(controller.desiredSize, 4, '0 reads, 0 enqueues: desiredSize should be 4');
    148  controller.enqueue('a');
    149  assert_equals(controller.desiredSize, 3, '0 reads, 1 enqueue: desiredSize should be 3');
    150  controller.enqueue('b');
    151  assert_equals(controller.desiredSize, 2, '0 reads, 2 enqueues: desiredSize should be 2');
    152  controller.enqueue('c');
    153  assert_equals(controller.desiredSize, 1, '0 reads, 3 enqueues: desiredSize should be 1');
    154  controller.enqueue('d');
    155  assert_equals(controller.desiredSize, 0, '0 reads, 4 enqueues: desiredSize should be 0');
    156  controller.enqueue('e');
    157  assert_equals(controller.desiredSize, -1, '0 reads, 5 enqueues: desiredSize should be -1');
    158  controller.enqueue('f');
    159  assert_equals(controller.desiredSize, -2, '0 reads, 6 enqueues: desiredSize should be -2');
    160 
    161 
    162  return reader.read()
    163    .then(result => {
    164      assert_object_equals(result, { value: 'a', done: false },
    165                           '1st read gives back the 1st chunk enqueued (queue now contains 5 chunks)');
    166      return reader.read();
    167    })
    168    .then(result => {
    169      assert_object_equals(result, { value: 'b', done: false },
    170                           '2nd read gives back the 2nd chunk enqueued (queue now contains 4 chunks)');
    171 
    172      assert_equals(controller.desiredSize, 0, '2 reads, 6 enqueues: desiredSize should be 0');
    173      controller.enqueue('g');
    174      assert_equals(controller.desiredSize, -1, '2 reads, 7 enqueues: desiredSize should be -1');
    175 
    176      return reader.read();
    177    })
    178    .then(result => {
    179      assert_object_equals(result, { value: 'c', done: false },
    180                           '3rd read gives back the 3rd chunk enqueued (queue now contains 4 chunks)');
    181      return reader.read();
    182    })
    183    .then(result => {
    184      assert_object_equals(result, { value: 'd', done: false },
    185                           '4th read gives back the 4th chunk enqueued (queue now contains 3 chunks)');
    186      return reader.read();
    187    })
    188    .then(result => {
    189      assert_object_equals(result, { value: 'e', done: false },
    190                           '5th read gives back the 5th chunk enqueued (queue now contains 2 chunks)');
    191      return reader.read();
    192    })
    193    .then(result => {
    194      assert_object_equals(result, { value: 'f', done: false },
    195                           '6th read gives back the 6th chunk enqueued (queue now contains 0 chunks)');
    196 
    197      assert_equals(controller.desiredSize, 3, '6 reads, 7 enqueues: desiredSize should be 3');
    198      controller.enqueue('h');
    199      assert_equals(controller.desiredSize, 2, '6 reads, 8 enqueues: desiredSize should be 2');
    200      controller.enqueue('i');
    201      assert_equals(controller.desiredSize, 1, '6 reads, 9 enqueues: desiredSize should be 1');
    202      controller.enqueue('j');
    203      assert_equals(controller.desiredSize, 0, '6 reads, 10 enqueues: desiredSize should be 0');
    204      controller.enqueue('k');
    205      assert_equals(controller.desiredSize, -1, '6 reads, 11 enqueues: desiredSize should be -1');
    206    });
    207 
    208 }, 'Correctly governs a ReadableStreamController\'s desiredSize property (HWM = 4)');