<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<body>
<script>
// This test is tentative because timing isn't defined:
// https://github.com/w3c/speech-api/issues/39
// https://github.com/w3c/speech-api/issues/40
async_test(t => {
  assert_false(speechSynthesis.paused, 'initial paused state');

  test_driver.bless('speechSynthesis.speak', t.step_func(() => {
    const sentence = `long sentence which will take at least a few seconds to
      utter so that it's possible to pause and resume before the end`;
    const utter = new SpeechSynthesisUtterance(sentence);
    t.add_cleanup(() => speechSynthesis.pause());
    utter.onerror = t.unreached_func('error event');

    speechSynthesis.speak(utter);

    assert_false(speechSynthesis.paused, 'paused state after speak()');

    utter.onstart = t.step_func(() => {
      utter.onstart = null;
      assert_false(speechSynthesis.paused, 'paused state at start event');

      speechSynthesis.pause();

      // paused state changes async, right before the pause event
      assert_false(speechSynthesis.paused, 'paused state after pause()');

      utter.onpause = t.step_func(() => {
        utter.onpause = null;
        assert_true(speechSynthesis.paused, 'paused state at pause event');

        speechSynthesis.resume();

        // paused state changes async, right before the resume event
        assert_true(speechSynthesis.paused, 'paused state after resume()');

        utter.onresume = t.step_func_done(() => {
          assert_false(speechSynthesis.paused, 'paused state at resume event');
        });
      });
    });
  }));
}, 'speechSynthesis.pause() and resume() state and events');
</script>
