<!DOCTYPE html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
/*
[Exposed=Window,
 Constructor(DOMString type, SpeechSynthesisEventInit eventInitDict)]
interface SpeechSynthesisEvent : Event {
    readonly attribute SpeechSynthesisUtterance utterance;
    readonly attribute unsigned long charIndex;
    readonly attribute float elapsedTime;
    readonly attribute DOMString name;
};
*/
test(() => {
  assert_throws_js(TypeError, () => {
    new SpeechSynthesisEvent();
  });
}, "SpeechSynthesisEvent with no arguments throws TypeError");

test(() => {
  assert_throws_js(TypeError, () => {
    new SpeechSynthesisEvent("type");
  });
}, "SpeechSynthesisEvent with no eventInitDict throws TypeError");

test(() => {
  assert_throws_js(TypeError, () => {
    new SpeechSynthesisEvent("type", {});
  });
}, `SpeechSynthesisEvent with empty eventInitDict throws TypeError (requires
    utterance)`);

test(() => {
  assert_throws_js(TypeError, () => {
    new SpeechSynthesisEvent("type", {charIndex: 10, elapsedTime: 50, name:"foo"});
  });
}, `SpeechSynthesisEvent with eventInitDict not having utterance throws
    TypeError`);

test(() => {
  const utterance = new SpeechSynthesisUtterance("foo");
  const event = new SpeechSynthesisEvent("type", {utterance: utterance});
  assert_equals(event.utterance, utterance);
  assert_equals(event.charIndex, 0);
  assert_equals(event.charLength, 0);
  assert_equals(event.elapsedTime, 0);
  assert_equals(event.name, "");
}, "SpeechSynthesisEvent with eventInitDict having an utterance");

test(() => {
  const utterance = new SpeechSynthesisUtterance("foo");
  const event = new SpeechSynthesisEvent("type", {
    utterance: utterance,
    charIndex: 5,
    charLength: 3,
    elapsedTime: 100,
    name: "foo"
  });
  assert_equals(event.bubbles, false);
  assert_equals(event.cancelable, false);
  assert_equals(event.type, "type");
  assert_equals(event.utterance, utterance);
  assert_equals(event.charIndex, 5);
  assert_equals(event.charLength, 3);
  assert_equals(event.elapsedTime, 100);
  assert_equals(event.name, "foo");
}, "SpeechSynthesisEvent with custom eventInitDict");
</script>
