// META: global=window,dedicatedworker
// META: script=/webcodecs/utils.js

test(t => {
  let chunk = new EncodedAudioChunk({type: 'key',
                                     timestamp: 10,
                                     duration: 123,
                                     data: new Uint8Array([0x0A, 0x0B, 0x0C])});
  assert_equals(chunk.type, 'key', 'type');
  assert_equals(chunk.timestamp, 10, 'timestamp');
  assert_equals(chunk.duration, 123, 'duration');
  assert_equals(chunk.byteLength, 3, 'byteLength');
  let copyDest = new Uint8Array(3);
  chunk.copyTo(copyDest);
  assert_equals(copyDest[0], 0x0A, 'copyDest[0]');
  assert_equals(copyDest[1], 0x0B, 'copyDest[1]');
  assert_equals(copyDest[2], 0x0C, 'copyDest[2]');

  // Make another chunk with different values for good measure.
  chunk = new EncodedAudioChunk({type: 'delta',
                                 timestamp: 100,
                                 data: new Uint8Array([0x00, 0x01])});
  assert_equals(chunk.type, 'delta', 'type');
  assert_equals(chunk.timestamp, 100, 'timestamp');
  assert_equals(chunk.duration, null, 'missing duration');
  assert_equals(chunk.byteLength, 2, 'byteLength');
  copyDest = new Uint8Array(2);
  chunk.copyTo(copyDest);
  assert_equals(copyDest[0], 0x00, 'copyDest[0]');
  assert_equals(copyDest[1], 0x01, 'copyDest[1]');
}, 'Test we can construct an EncodedAudioChunk.');

test(t => {
  let chunk = new EncodedAudioChunk({type: 'delta',
                                     timestamp: 100,
                                     data: new Uint8Array([0x00, 0x01, 0x02])});
  assert_throws_js(
    TypeError,
    () => chunk.copyTo(new Uint8Array(2)), 'destination is not large enough');

  const detached = makeDetachedArrayBuffer();
  assert_throws_js(
    TypeError,
    () => chunk.copyTo(detached), 'destination is detached');
}, 'Test copyTo() exception if destination invalid');
