<!DOCTYPE html>
<title>Mojo shared buffer tests</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script>

let kBufferSize = 32;

test(() => {
  let {result, handle} = Mojo.createSharedBuffer(kBufferSize);
  assert_equals(result, Mojo.RESULT_OK);
  assert_true(handle instanceof MojoHandle);
}, "Create shared buffer");

test(() => {
  let {handle} = Mojo.createSharedBuffer(kBufferSize);
  let {result, buffer} = handle.mapBuffer(0, kBufferSize);
  assert_equals(result, Mojo.RESULT_OK);
  assert_true(buffer instanceof ArrayBuffer);
}, "Map shared buffer");

test(() => {
  let {handle: handle0} = Mojo.createSharedBuffer(kBufferSize);
  let {result, handle: handle1} = handle0.duplicateBufferHandle();
  assert_equals(result, Mojo.RESULT_OK);
  assert_true(handle1 instanceof MojoHandle);
  assert_not_equals(handle1, handle0);
}, "Duplicate RW shared buffer handle");

test(() => {
  let {handle: handle0} = Mojo.createSharedBuffer(kBufferSize);
  let {result, handle: handle1} = handle0.duplicateBufferHandle({readOnly: true});
  assert_equals(result, Mojo.RESULT_OK);
  assert_true(handle1 instanceof MojoHandle);
  assert_not_equals(handle1, handle0);
}, "Duplicate RO shared buffer handle");

test(() => {
  let {handle: handle0} = Mojo.createSharedBuffer(kBufferSize);
  let {buffer: buffer0} = handle0.mapBuffer(0, kBufferSize);
  let array0 = new Uint8Array(buffer0);

  let {handle: handle1} = handle0.duplicateBufferHandle({readOnly: true});
  let {buffer: buffer1} = handle1.mapBuffer(0, kBufferSize);
  let array1 = new Uint8Array(buffer1);

  assert_not_equals(buffer1, buffer0);
  for (let i = 0; i < kBufferSize; ++i) {
    array0[i] = i;
    assert_equals(array1[i], i);
  }
}, "Read from RO shared buffer handle");

test(() => {
  let {handle: handle0} = Mojo.createSharedBuffer(kBufferSize);
  let {buffer: buffer0} = handle0.mapBuffer(0, kBufferSize);
  let array0 = new Uint8Array(buffer0);

  let {handle: handle1} = handle0.duplicateBufferHandle();
  let {buffer: buffer1} = handle1.mapBuffer(0, kBufferSize);
  let array1 = new Uint8Array(buffer1);

  assert_not_equals(buffer1, buffer0);
  for (let i = 0; i < kBufferSize; ++i) {
    array1[i] = i;
    assert_equals(array0[i], i);
  }
}, "Write to RW shared buffer handle");

</script>
