1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
<!doctype html>
<meta charset="utf-8" />
<meta name="author" title="Luke Warlow" href="mailto:luke@warlow.dev" />
<meta name="timeout" content="long" />
<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>
<div id="invokee">
Fullscreen content
<button id="invokerbutton" commandfor="invokee"></button>
</div>
<script>
async function resetState() {
invokerbutton.setAttribute("command", "toggle-fullscreen");
if (document.fullscreenElement) await document.exitFullscreen();
}
// toggle-fullscreen
promise_test(async function (t) {
t.add_cleanup(resetState);
assert_false(invokee.matches(":fullscreen"));
invokerbutton.setAttribute("command", "toggle-fullscreen");
await clickOn(invokerbutton);
assert_true(invokee.matches(":fullscreen"));
}, "invoking div with toggle-fullscreen action makes div fullscreen");
promise_test(async function (t) {
t.add_cleanup(resetState);
assert_false(invokee.matches(":fullscreen"));
invokerbutton.setAttribute("command", "toggle-fullscreen");
invokerbutton.click();
assert_false(invokee.matches(":fullscreen"));
}, "invoking div with toggle-fullscreen action (without user activation) is a no-op");
promise_test(async function (t) {
t.add_cleanup(resetState);
invokee.addEventListener("command", (e) => e.preventDefault(), {
once: true,
});
assert_false(invokee.matches(":fullscreen"));
invokerbutton.setAttribute("command", "toggle-fullscreen");
await clickOn(invokerbutton);
assert_false(invokee.matches(":fullscreen"));
}, "invoking div with toggle-fullscreen action and preventDefault is a no-op");
promise_test(async function (t) {
t.add_cleanup(resetState);
invokerbutton.setAttribute("command", "toggle-fullscreen");
await test_driver.bless('go fullscreen');
await invokee.requestFullscreen();
assert_true(invokee.matches(":fullscreen"));
await clickOn(invokerbutton);
assert_false(invokee.matches(":fullscreen"));
}, "invoking fullscreen div with toggle-fullscreen action exits fullscreen");
promise_test(async function (t) {
t.add_cleanup(resetState);
invokerbutton.setAttribute("command", "tOgGlE-Fullscreen");
await test_driver.bless('go fullscreen');
await invokee.requestFullscreen();
assert_true(invokee.matches(":fullscreen"));
await clickOn(invokerbutton);
assert_false(invokee.matches(":fullscreen"));
}, "invoking fullscreen div with toggle-fullscreen (case-insensitive) action exits fullscreen");
// request-fullscreen
promise_test(async function (t) {
t.add_cleanup(resetState);
assert_false(invokee.matches(":fullscreen"));
invokerbutton.setAttribute("command", "request-fullscreen");
await clickOn(invokerbutton);
assert_true(invokee.matches(":fullscreen"));
}, "invoking div with request-fullscreen action makes div fullscreen");
promise_test(async function (t) {
t.add_cleanup(resetState);
invokee.addEventListener("command", (e) => e.preventDefault(), {
once: true,
});
assert_false(invokee.matches(":fullscreen"));
invokerbutton.setAttribute("command", "request-fullscreen");
await clickOn(invokerbutton);
assert_false(invokee.matches(":fullscreen"));
}, "invoking div with request-fullscreen action and preventDefault is a no-op");
promise_test(async function (t) {
t.add_cleanup(resetState);
invokerbutton.setAttribute("command", "request-fullscreen");
await test_driver.bless('go fullscreen');
await invokee.requestFullscreen();
assert_true(invokee.matches(":fullscreen"));
await clickOn(invokerbutton);
assert_true(invokee.matches(":fullscreen"));
}, "invoking fullscreen div with request-fullscreen action is a no-op");
// exitFullscreen
promise_test(async function (t) {
t.add_cleanup(resetState);
assert_false(invokee.matches(":fullscreen"));
invokerbutton.setAttribute("command", "exit-fullscreen");
await clickOn(invokerbutton);
assert_false(invokee.matches(":fullscreen"));
}, "invoking div with exit-fullscreen action is a no-op");
promise_test(async function (t) {
t.add_cleanup(resetState);
invokerbutton.setAttribute("command", "exit-fullscreen");
await test_driver.bless('go fullscreen');
await invokee.requestFullscreen();
assert_true(invokee.matches(":fullscreen"));
await clickOn(invokerbutton);
assert_false(invokee.matches(":fullscreen"));
}, "invoking fullscreen div with exit-fullscreen action exits fullscreen");
promise_test(async function (t) {
t.add_cleanup(resetState);
invokee.addEventListener("command", (e) => e.preventDefault(), {
once: true,
});
invokerbutton.setAttribute("command", "exit-fullscreen");
await test_driver.bless('go fullscreen');
await invokee.requestFullscreen();
assert_true(invokee.matches(":fullscreen"));
await clickOn(invokerbutton);
assert_true(invokee.matches(":fullscreen"));
}, "invoking fullscreen div with exit-fullscreen action and preventDefault is a no-op");
</script>
|