<!doctype html>
<head>
<title>Test setSinkId behavior </title>
<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/>
<link rel="help" href="https://www.w3.org/TR/audio-output/#dom-htmlmediaelement-setsinkid">
</head>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
"use strict";

const audio = new Audio();

promise_test(t => audio.setSinkId(""), "setSinkId on default audio output should always work");

promise_test(t => promise_rejects_dom(t, "NotFoundError", audio.setSinkId("nonexistent_device_id")),
  "setSinkId fails with NotFoundError on made up deviceid");

promise_test(async t => {
  const list = await navigator.mediaDevices.enumerateDevices();
  const outputDevicesList = list.filter(({kind}) => kind == "audiooutput");
  assert_not_equals(outputDevicesList.length, 0,
    "media device list includes at least one audio output device");

  let acceptedDevices = 0;
  for (const {deviceId} of outputDevicesList) {
    const {deviceId} = outputDevicesList[0];
    const p1 = audio.setSinkId(deviceId);
    assert_equals(audio.sinkId, "", "before it resolves, setSinkId is unchanged");
    try {
      let r = await p1;
      assert_equals(acceptedDevices, 0, "only the default sink device can be set");
      acceptedDevices++;
      assert_equals(r, undefined, "setSinkId resolves with undefined");
      assert_equals(audio.sinkId, deviceId, "when it resolves, setSinkId updates sinkId to the requested deviceId");
      r = await audio.setSinkId(deviceId);
      assert_equals(r, undefined, "resetting sinkid on same current value should always work");
      r = await audio.setSinkId("");
      assert_equals(r, undefined, "resetting sinkid on default audio output should always work");
    } catch (e) {
      assert_equals(e.name, "NotAllowedError", "Non-default devices are failing with NotAllowed error");
    }
  }
}, "List device, setSinkId should be allowed on the default, the rest of the devices will get a NotAllowedError");

</script>
