diff options
Diffstat (limited to 'testing/web-platform/tests/html/semantics/invokers/invoketarget-on-audio-behavior.tentative.html')
-rw-r--r-- | testing/web-platform/tests/html/semantics/invokers/invoketarget-on-audio-behavior.tentative.html | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/invokers/invoketarget-on-audio-behavior.tentative.html b/testing/web-platform/tests/html/semantics/invokers/invoketarget-on-audio-behavior.tentative.html new file mode 100644 index 0000000000..f3abeae165 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/invokers/invoketarget-on-audio-behavior.tentative.html @@ -0,0 +1,285 @@ +<!doctype html> +<meta charset="utf-8" /> +<meta name="author" title="Luke Warlow" href="mailto:luke@warlow.dev" /> +<link rel="help" href="https://open-ui.org/components/invokers.explainer/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="resources/invoker-utils.js"></script> + +<audio controls id="invokee" src="/media/sound_5.mp3"></audio> +<button id="invokerbutton" invoketarget="invokee"></button> + +<script> + // auto + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + assert_true(invokee.paused); + invokerbutton.setAttribute("invokeaction", ""); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_true(invokee.paused); + }, "invoking audio with auto action is no-op"); + + // playpause + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + assert_true(invokee.paused); + invokerbutton.setAttribute("invokeaction", "playpause"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_false(invokee.paused); + }, "invoking audio with playpause action makes audio play"); + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + assert_true(invokee.paused); + invokerbutton.setAttribute("invokeaction", "playpause"); + invokerbutton.click(); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_false(invokee.paused); + }, "invoking audio with playpause action (without user activation) is a no-op"); + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + invokee.addEventListener("invoke", (e) => e.preventDefault(), { + once: true, + }); + assert_true(invokee.paused); + invokerbutton.setAttribute("invokeaction", "playpause"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_true(invokee.paused); + }, "invoking audio with playpause action and preventDefault is a no-op"); + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + await test_driver.bless('play audio'); + invokee.play(); + assert_false(invokee.paused); + invokerbutton.setAttribute("invokeaction", "playpause"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_true(invokee.paused); + }, "invoking playing audio with playpause action pauses it"); + + // play + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + assert_true(invokee.paused); + invokerbutton.setAttribute("invokeaction", "play"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_false(invokee.paused); + }, "invoking audio with play action makes audio play"); + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + assert_true(invokee.paused); + invokerbutton.setAttribute("invokeaction", "play"); + invokerbutton.click(); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_false(invokee.paused); + }, "invoking audio with play action (without user activation) is a no-op"); + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + invokee.addEventListener("invoke", (e) => e.preventDefault(), { + once: true, + }); + assert_true(invokee.paused); + invokerbutton.setAttribute("invokeaction", "play"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_true(invokee.paused); + }, "invoking audio with play action and preventDefault is a no-op"); + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + await test_driver.bless('play audio'); + invokee.play(); + assert_false(invokee.paused); + invokerbutton.setAttribute("invokeaction", "play"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_false(invokee.paused); + }, "invoking playing audio with play action is a no-op"); + + // pause + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + assert_true(invokee.paused); + invokerbutton.setAttribute("invokeaction", "pause"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_true(invokee.paused); + }, "invoking audio with pause action is a no-op"); + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + invokee.addEventListener("invoke", (e) => e.preventDefault(), { + once: true, + }); + assert_true(invokee.paused); + invokerbutton.setAttribute("invokeaction", "pause"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_true(invokee.paused); + }, "invoking audio with pause action and preventDefault is a no-op"); + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + await test_driver.bless('play audio'); + invokee.play(); + assert_false(invokee.paused); + invokerbutton.setAttribute("invokeaction", "pause"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_true(invokee.paused); + }, "invoking playing audio with pause action makes it pause"); + + // mute + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + assert_false(invokee.muted); + invokerbutton.setAttribute("invokeaction", "toggleMuted"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_true(invokee.muted); + }, "invoking audio with toggleMuted action mutes it"); + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + invokee.addEventListener("invoke", (e) => e.preventDefault(), { + once: true, + }); + assert_false(invokee.muted); + invokerbutton.setAttribute("invokeaction", "toggleMuted"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_false(invokee.muted); + }, "invoking audio with toggleMuted action and preventDefault is a no-op"); + + promise_test(async function (t) { + t.add_cleanup(async () => { + invokerbutton.removeAttribute("invokeaction"); + invokee.pause(); + invokee.currentTime = 0; + invokee.muted = false; + }); + invokee.muted = true; + assert_true(invokee.muted); + invokerbutton.setAttribute("invokeaction", "toggleMuted"); + await clickOn(invokerbutton); + await new Promise(resolve => { + requestAnimationFrame(resolve); + }); + assert_false(invokee.muted); + }, "invoking muted audio with toggleMuted action unmutes it"); + +</script> |