// META: global=window,worker,jsshell
'use strict';

promise_test(() => {
  const stream = new ReadableStream({
    start(c) {
      c.close();
    },
    type: 'bytes'
  });

  const reader = stream.getReader({ mode: 'byob' });
  const view = new Uint8Array([1, 2, 3]);
  return reader.read(view).then(({ value, done }) => {
    // Sanity checks
    assert_true(value instanceof Uint8Array, 'The value read must be a Uint8Array');
    assert_not_equals(value, view, 'The value read must not be the *same* Uint8Array');
    assert_array_equals(value, [], 'The value read must be an empty Uint8Array, since the stream is closed');
    assert_true(done, 'done must be true, since the stream is closed');

    // The important assertions
    assert_not_equals(value.buffer, view.buffer, 'a different ArrayBuffer must underlie the value');
    assert_equals(view.buffer.byteLength, 0, 'the original buffer must be detached');
  });
}, 'ReadableStream with byte source: read()ing from a closed stream still transfers the buffer');

promise_test(() => {
  const stream = new ReadableStream({
    start(c) {
      c.enqueue(new Uint8Array([1, 2, 3]));
    },
    type: 'bytes'
  });

  const reader = stream.getReader({ mode: 'byob' });
  const view = new Uint8Array([4, 5, 6]);
  return reader.read(view).then(({ value, done }) => {
    // Sanity checks
    assert_true(value instanceof Uint8Array, 'The value read must be a Uint8Array');
    assert_not_equals(value, view, 'The value read must not be the *same* Uint8Array');
    assert_array_equals(value, [1, 2, 3], 'The value read must be the enqueued Uint8Array, not the original values');
    assert_false(done, 'done must be false, since the stream is not closed');

    // The important assertions
    assert_not_equals(value.buffer, view.buffer, 'a different ArrayBuffer must underlie the value');
    assert_equals(view.buffer.byteLength, 0, 'the original buffer must be detached');
  });
}, 'ReadableStream with byte source: read()ing from a stream with queued chunks still transfers the buffer');

test(() => {
  new ReadableStream({
    start(c) {
      const view = new Uint8Array([1, 2, 3]);
      c.enqueue(view);
      assert_throws_js(TypeError, () => c.enqueue(view));
    },
    type: 'bytes'
  });
}, 'ReadableStream with byte source: enqueuing an already-detached buffer throws');

test(() => {
  new ReadableStream({
    start(c) {
      const view = new Uint8Array([]);
      assert_throws_js(TypeError, () => c.enqueue(view));
    },
    type: 'bytes'
  });
}, 'ReadableStream with byte source: enqueuing a zero-length buffer throws');

test(() => {
  new ReadableStream({
    start(c) {
      const view = new Uint8Array(new ArrayBuffer(10), 0, 0);
      assert_throws_js(TypeError, () => c.enqueue(view));
    },
    type: 'bytes'
  });
}, 'ReadableStream with byte source: enqueuing a zero-length view on a non-zero-length buffer throws');

promise_test(t => {
  const stream = new ReadableStream({
    start(c) {
      c.enqueue(new Uint8Array([1, 2, 3]));
    },
    type: 'bytes'
  });
  const reader = stream.getReader({ mode: 'byob' });

  const view = new Uint8Array([4, 5, 6]);
  return reader.read(view).then(() => {
    // view is now detached
    return promise_rejects_js(t, TypeError, reader.read(view));
  });
}, 'ReadableStream with byte source: reading into an already-detached buffer rejects');

promise_test(t => {
  const stream = new ReadableStream({
    start(c) {
      c.enqueue(new Uint8Array([1, 2, 3]));
    },
    type: 'bytes'
  });
  const reader = stream.getReader({ mode: 'byob' });

  const view = new Uint8Array();
  return promise_rejects_js(t, TypeError, reader.read(view));
}, 'ReadableStream with byte source: reading into a zero-length buffer rejects');

promise_test(t => {
  const stream = new ReadableStream({
    start(c) {
      c.enqueue(new Uint8Array([1, 2, 3]));
    },
    type: 'bytes'
  });
  const reader = stream.getReader({ mode: 'byob' });

  const view = new Uint8Array(new ArrayBuffer(10), 0, 0);
  return promise_rejects_js(t, TypeError, reader.read(view));
}, 'ReadableStream with byte source: reading into a zero-length view on a non-zero-length buffer rejects');

async_test(t => {
  const stream = new ReadableStream({
    pull: t.step_func_done(c => {
      // Detach it by reading into it
      reader.read(c.byobRequest.view);

      assert_throws_js(TypeError, () => c.byobRequest.respond(1),
        'respond() must throw if the corresponding view has become detached');
    }),
    type: 'bytes'
  });
  const reader = stream.getReader({ mode: 'byob' });

  reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respond() throws if the BYOB request\'s buffer has been detached (in the ' +
   'readable state)');

async_test(t => {
  const stream = new ReadableStream({
    pull: t.step_func_done(c => {
      // Detach it by reading into it
      reader.read(c.byobRequest.view);

      c.close();

      assert_throws_js(TypeError, () => c.byobRequest.respond(0),
        'respond() must throw if the corresponding view has become detached');
    }),
    type: 'bytes'
  });
  const reader = stream.getReader({ mode: 'byob' });

  reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respond() throws if the BYOB request\'s buffer has been detached (in the ' +
   'closed state)');

async_test(t => {
  const stream = new ReadableStream({
    pull: t.step_func_done(c => {
      // Detach it by reading into it
      const view = new Uint8Array([1, 2, 3]);
      reader.read(view);

      assert_throws_js(TypeError, () => c.byobRequest.respondWithNewView(view));
    }),
    type: 'bytes'
  });
  const reader = stream.getReader({ mode: 'byob' });

  reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respondWithNewView() throws if the supplied view\'s buffer has been detached ' +
    '(in the readable state)');

async_test(t => {
  const stream = new ReadableStream({
    pull: t.step_func_done(c => {
      const view = new Uint8Array();

      assert_throws_js(TypeError, () => c.byobRequest.respondWithNewView(view));
    }),
    type: 'bytes'
  });
  const reader = stream.getReader({ mode: 'byob' });

  reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respondWithNewView() throws if the supplied view\'s buffer is zero-length ' +
    '(in the readable state)');

async_test(t => {
  const stream = new ReadableStream({
    pull: t.step_func_done(c => {
      const view = new Uint8Array(new ArrayBuffer(10), 0, 0);

      assert_throws_js(TypeError, () => c.byobRequest.respondWithNewView(view));
    }),
    type: 'bytes'
  });
  const reader = stream.getReader({ mode: 'byob' });

  reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respondWithNewView() throws if the supplied view is zero-length on a ' +
    'non-zero-length buffer (in the readable state)');

async_test(t => {
  const stream = new ReadableStream({
    pull: t.step_func_done(c => {
      // Detach it by reading into it
      const view = new Uint8Array([1, 2, 3]);
      reader.read(view);

      c.close();

      assert_throws_js(TypeError, () => c.byobRequest.respondWithNewView(view));
    }),
    type: 'bytes'
  });
  const reader = stream.getReader({ mode: 'byob' });

  reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respondWithNewView() throws if the supplied view\'s buffer has been detached ' +
   '(in the closed state)');

async_test(t => {
  const stream = new ReadableStream({
    pull: t.step_func_done(c => {
      const view = new Uint8Array();

      c.close();

      assert_throws_js(TypeError, () => c.byobRequest.respondWithNewView(view));
    }),
    type: 'bytes'
  });
  const reader = stream.getReader({ mode: 'byob' });

  reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respondWithNewView() throws if the supplied view\'s buffer is zero-length ' +
   '(in the closed state)');

async_test(t => {
  const stream = new ReadableStream({
    pull: t.step_func_done(c => {
      const view = new Uint8Array(new ArrayBuffer(10), 0, 0);

      c.close();

      assert_throws_js(TypeError, () => c.byobRequest.respondWithNewView(view));
    }),
    type: 'bytes'
  });
  const reader = stream.getReader({ mode: 'byob' });

  reader.read(new Uint8Array([4, 5, 6]));
}, 'ReadableStream with byte source: respondWithNewView() throws if the supplied view is zero-length on a ' +
    'non-zero-length buffer (in the closed state)');
