<!DOCTYPE html>
<title>MediaSession.setPositionState</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
test(() => {
  window.navigator.mediaSession.setPositionState(null);
}, 'Test setPositionState with a null value');

test(() => {
  window.navigator.mediaSession.setPositionState({
    duration: 60.9,
    position: 10.1,
    playbackRate: 1.5
  });
}, 'Test setPositionState with a valid value for forward playback');

test(() => {
  window.navigator.mediaSession.setPositionState({
    duration: 60.9,
    playbackRate: 1.0
  });
}, 'Test setPositionState with optional position');

test(() => {
  window.navigator.mediaSession.setPositionState({
    duration: 60.9,
    position: 10.1
  });
}, 'Test setPositionState with optional playback rate');

test(() => {
  window.navigator.mediaSession.setPositionState({
    duration: 60.9
  });
}, 'Test setPositionState with only duration');

test(() => {
  window.navigator.mediaSession.setPositionState({
    duration: 0
  });
}, 'Test setPositionState with zero duration');

test(() => {
  window.navigator.mediaSession.setPositionState({
    duration: 60.9,
    position: 10.1,
    playbackRate: -2.0
  });
}, 'Test setPositionState with negative playback rate');

test(() => {
  assert_throws_js(
      TypeError,
      _ => {
        window.navigator.mediaSession.setPositionState({
          duration: -1
        });
      });
}, 'Test setPositionState throws a TypeError if duration is negative');

test(() => {
  assert_throws_js(
      TypeError,
      _ => {
        window.navigator.mediaSession.setPositionState({
          duration: 10,
          position: -1
        });
      });
}, 'Test setPositionState throws a TypeError if position is negative');

test(() => {
  assert_throws_js(
      TypeError,
      _ => {
        window.navigator.mediaSession.setPositionState({
          duration: 10,
          position: 20
        });
      });
}, 'Test setPositionState throws a TypeError if duration is less than position');

test(() => {
  assert_throws_js(
      TypeError,
      _ => {
        window.navigator.mediaSession.setPositionState({
          duration: 60.9,
          position: 10.1,
          playbackRate: 0.0
        });
      });
}, 'Test setPositionState throws a TypeError if playback rate is zero');

test(() => {
  assert_throws_js(
      TypeError,
      _ => {
        window.navigator.mediaSession.setPositionState({
          position: 10.1,
          playbackRate: 1.0
        });
      });
}, 'Test setPositionState throws a TypeError if duration is not specified');
</script>
