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>
|