<!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>