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
|
<!DOCTYPE html>
<meta charset="utf-8">
<meta name="timeout" content="long">
<link rel="author" href="mailto:wpt@keithcirkel.co.uk">
<link rel=help href="https://html.spec.whatwg.org/multipage/interactive-elements.html#dialog-light-dismiss">
<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>
<dialog id="dialog">
<div id="box"></div>
</dialog>
<style>
dialog { inset: 0 auto auto 0; width: 100px; height: 100px; overflow: visible; }
#box { height:200px; width:200px; margin:20px; background:blue; }
</style>
<script>
for (const method of ['show', 'showModal']) {
promise_test(async (t) => {
dialog.setAttribute('closedby','any');
dialog[method]();
const actions = new test_driver.Actions();
await actions.pointerMove(1, 1, {origin:"viewport"})
.pointerDown()
.pointerUp()
.send();
assert_true(dialog.open, "Dialog should be open after clicking 1px-1px");
},`Dialog ${method} will not light dismiss if clicked inside of the dialog bounds`);
promise_test(async (t) => {
dialog.setAttribute('closedby','any');
dialog[method]();
const actions = new test_driver.Actions();
await actions.pointerMove(99, 99, {origin:"viewport"})
.pointerDown()
.pointerUp()
.send();
assert_true(dialog.open, "Dialog should be open after clicking 99px-99px");
},`Dialog ${method} will not light dismiss if clicked inside of the dialog bounds (bottom right)`);
promise_test(async (t) => {
dialog.setAttribute('closedby','any');
dialog[method]();
const actions = new test_driver.Actions();
await actions.pointerMove(150, 150, {origin:"viewport"})
.pointerDown()
.pointerUp()
.send();
assert_true(dialog.open, "Dialog should be open after clicking 150px-150px");
},`Dialog ${method} will not light dismiss if clicked inside the overflowing div bounds (center)`);
promise_test(async (t) => {
dialog.setAttribute('closedby','any');
dialog[method]();
const actions = new test_driver.Actions();
await actions.pointerMove(199, 199, {origin:"viewport"})
.pointerDown()
.pointerUp()
.send();
assert_true(dialog.open, "Dialog should be open after clicking 199px-199px");
},`Dialog ${method} will not light dismiss if clicked inside the overflowing div bounds (bottom right)`);
promise_test(async (t) => {
dialog.setAttribute('closedby','any');
dialog[method]();
const actions = new test_driver.Actions();
await actions.pointerMove(250, 250, {origin:"viewport"})
.pointerDown()
.pointerUp()
.send();
assert_false(dialog.open, "Dialog should be closed after clicking 250px-250px");
},`Dialog ${method} light dismisses when clicked outside of the bounds of both the dialog and the div`);
promise_test(async (t) => {
dialog.setAttribute('closedby','any');
dialog[method]();
const actions = new test_driver.Actions();
await actions.pointerMove(150, 1, {origin:"viewport"})
.pointerDown()
.pointerUp()
.send();
assert_false(dialog.open, "Dialog should be closed after clicking 150px-1px");
},`Dialog ${method} light dismisses when clicked outside of the bounds of the dialog - where the Y direction is in-line with the div still`);
promise_test(async (t) => {
dialog.setAttribute('closedby','any');
dialog[method]();
const actions = new test_driver.Actions();
await actions.pointerMove(1, 150, {origin:"viewport"})
.pointerDown()
.pointerUp()
.send();
assert_false(dialog.open, "Dialog should be closed after clicking 1px-150px");
},`Dialog ${method} light dismisses when clicked outside of the bounds of the dialog - where the X direction is in-line with the div still`);
}
</script>
|