SpeechSynthesis-pause-resume.tentative.html (1845B)
1 <!doctype html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="/resources/testdriver.js"></script> 5 <script src="/resources/testdriver-vendor.js"></script> 6 <body> 7 <script> 8 // This test is tentative because timing isn't defined: 9 // https://github.com/w3c/speech-api/issues/39 10 // https://github.com/w3c/speech-api/issues/40 11 async_test(t => { 12 assert_false(speechSynthesis.paused, 'initial paused state'); 13 14 test_driver.bless('speechSynthesis.speak', t.step_func(() => { 15 const sentence = `long sentence which will take at least a few seconds to 16 utter so that it's possible to pause and resume before the end`; 17 const utter = new SpeechSynthesisUtterance(sentence); 18 t.add_cleanup(() => speechSynthesis.pause()); 19 utter.onerror = t.unreached_func('error event'); 20 21 speechSynthesis.speak(utter); 22 23 assert_false(speechSynthesis.paused, 'paused state after speak()'); 24 25 utter.onstart = t.step_func(() => { 26 utter.onstart = null; 27 assert_false(speechSynthesis.paused, 'paused state at start event'); 28 29 speechSynthesis.pause(); 30 31 // paused state changes async, right before the pause event 32 assert_false(speechSynthesis.paused, 'paused state after pause()'); 33 34 utter.onpause = t.step_func(() => { 35 utter.onpause = null; 36 assert_true(speechSynthesis.paused, 'paused state at pause event'); 37 38 speechSynthesis.resume(); 39 40 // paused state changes async, right before the resume event 41 assert_true(speechSynthesis.paused, 'paused state after resume()'); 42 43 utter.onresume = t.step_func_done(() => { 44 assert_false(speechSynthesis.paused, 'paused state at resume event'); 45 }); 46 }); 47 }); 48 })); 49 }, 'speechSynthesis.pause() and resume() state and events'); 50 </script>