summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/semantics/invokers/invoketarget-on-audio-behavior.tentative.html
diff options
context:
space:
mode:
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.html285
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>