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
|
<!DOCTYPE html>
<html>
<title>HTMLSelectMenuElement Test: popover position with zoom</title>
<link rel="author" title="Ionel Popescu" href="mailto:iopopesc@microsoft.com">
<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>
<style>
#selectMenu0 {
position: absolute;
top: 0px;
left: 0px;
zoom: 2;
}
#selectMenu1 {
position: absolute;
bottom: 0px;
left: 0px;
zoom: 1.5;
}
#selectMenu1-popover {
zoom: 2;
}
#selectMenu2 {
position: absolute;
top: 0px;
right: 0px;
zoom: 3;
}
#selectMenu3 {
position: absolute;
bottom: 0px;
right: 0px;
zoom: 4;
}
#selectMenu3-popover {
zoom: 1.5;
}
</style>
<selectmenu id="selectMenu0">
<div slot="button" behavior="button" id="selectMenu0-button">Custom bottom left</div>
<div popover slot="listbox" behavior="listbox" id="selectMenu0-popover">
<option>bottom left</option>
<option>two</option>
<option>three</option>
</div>
</selectmenu>
<br>
<selectmenu id="selectMenu1">
<div slot="button" behavior="button" id="selectMenu1-button">Custom top left</div>
<div popover slot="listbox" behavior="listbox" id="selectMenu1-popover">
<option>top left</option>
<option>two</option>
<option>three</option>
</div>
</selectmenu>
<selectmenu id="selectMenu2">
<div slot="button" behavior="button" id="selectMenu2-button">Custom bottom right</div>
<div popover slot="listbox" behavior="listbox" id="selectMenu2-popover">
<option>bottom right</option>
<option>two</option>
<option>three</option>
</div>
</selectmenu>
<selectmenu id="selectMenu3">
<div slot="button" behavior="button" id="selectMenu3-button">Custom top right</div>
<div popover slot="listbox" behavior="listbox" id="selectMenu3-popover">
<option>top right</option>
<option>two</option>
<option>three</option>
</div>
</selectmenu>
<script>
function clickOn(element) {
const actions = new test_driver.Actions();
return actions.pointerMove(0, 0, {origin: element})
.pointerDown({button: actions.ButtonType.LEFT})
.pointerUp({button: actions.ButtonType.LEFT})
.send();
}
promise_test(async () => {
const selectMenu0 = document.getElementById("selectMenu0");
const selectMenu0Popover = document.getElementById("selectMenu0-popover");
const selectMenu0Button = document.getElementById("selectMenu0-button");
await clickOn(selectMenu0);
assert_equals(Math.abs(Math.trunc(selectMenu0.getBoundingClientRect().bottom - selectMenu0Popover.getBoundingClientRect().top)), 0);
assert_equals(Math.abs(Math.trunc(selectMenu0.getBoundingClientRect().left - selectMenu0Popover.getBoundingClientRect().left)), 0);
}, "The popover should be bottom left positioned");
promise_test(async () => {
const selectMenu1 = document.getElementById("selectMenu1");
const selectMenu1Popover = document.getElementById("selectMenu1-popover");
const selectMenu1Button = document.getElementById("selectMenu1-button");
selectMenu1Button.click();
assert_equals(Math.abs(Math.trunc(selectMenu1.getBoundingClientRect().top - selectMenu1Popover.getBoundingClientRect().bottom * 2)), 0);
assert_equals(Math.abs(Math.trunc(selectMenu1.getBoundingClientRect().left - selectMenu1Popover.getBoundingClientRect().left * 2)), 0);
}, "The popover should be top left positioned");
promise_test(async () => {
const selectMenu2 = document.getElementById("selectMenu2");
const selectMenu2Popover = document.getElementById("selectMenu2-popover");
const selectMenu2Button = document.getElementById("selectMenu2-button");
selectMenu2Button.click();
assert_equals(Math.abs(Math.trunc(selectMenu2.getBoundingClientRect().bottom - selectMenu2Popover.getBoundingClientRect().top)), 0);
assert_equals(Math.abs(Math.trunc(selectMenu2.getBoundingClientRect().right - selectMenu2Popover.getBoundingClientRect().right)), 0);
}, "The popover should be bottom right positioned");
promise_test(async () => {
const selectMenu3 = document.getElementById("selectMenu3");
const selectMenu3Popover = document.getElementById("selectMenu3-popover");
const selectMenu3Button = document.getElementById("selectMenu3-button");
selectMenu3Button.click();
assert_equals(Math.abs(Math.trunc(selectMenu3.getBoundingClientRect().top - selectMenu3Popover.getBoundingClientRect().bottom * 1.5)), 0);
assert_equals(Math.abs(Math.trunc(selectMenu3.getBoundingClientRect().right - selectMenu3Popover.getBoundingClientRect().right * 1.5)), 0);
}, "The popover should be top right positioned");
</script>
|