Backed out changeset b71c8c052463 (bug 1943846) for causing mass failures. CLOSED...
[gecko.git] / devtools / server / tests / chrome / test_overflowing-children.html
blob8ba81bec3daa1914a8836958fc904fc8014cba83
1 <!DOCTYPE HTML>
2 <html>
3 <!--
4 Test InspectorUtils.GetOverflowingChildrenOfElement in various cases
5 -->
6 <head>
7 <meta charset="utf-8">
8 <title>Test InspectorUtils.GetOverflowingChildrenOfElement</title>
9 <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
10 <style>
11 /* "e" is our custom tag name for "element" */
12 e {
13 background: lightgray;
14 display: inline-block;
15 margin: 10px;
16 padding: 0;
17 border: 0;
18 width: 100px;
19 height: 100px;
20 overflow: auto;
23 /* "c" is our custom tag name for "child" */
24 c {
25 display: block;
26 background: green;
29 .fixedSize {
30 width: 10px;
31 height: 10px;
34 .target {
35 background: red;
37 </style>
39 <script>
40 'use strict';
42 SimpleTest.waitForExplicitFinish();
43 const InspectorUtils = SpecialPowers.InspectorUtils;
45 const CASES = [
46 {id: "no_children", expected: 0},
47 {id: "one_child_no_overflow", expected: 0},
48 {id: "margin_left_overflow", expected: 1},
49 {id: "transform_overflow", expected: 1},
50 {id: "nested_overflow", expected: 1},
51 {id: "intermediate_overflow", expected: 1},
52 {id: "multiple_overflow_at_different_depths", expected: 2},
55 function runTests() {
56 // Assign each child element to an inner id so each of them can be identified for testing.
57 Array.from(document.getElementsByTagName('c')).forEach((e, i) => {e.id = `inner${i}`});
59 for (const {id, expected} of CASES) {
60 info(`Checking element id ${id}.`);
62 const element = document.getElementById(id);
63 if (!element) {
64 ok(false, `Expected to find element with id ${id}.`);
65 continue;
67 const overflowing_children = InspectorUtils.getOverflowingChildrenOfElement(element);
69 is(overflowing_children.length, expected, `${id} has the expected number of children.`);
71 // Check that each child has the "target" class. Otherwise, we're getting the
72 // wrong children. We don't check each child with a test function, because we
73 // don't want to needlessly inflate the number of test functions in the log.
74 // But if we find a child that *doesn't* have the class "target", we report
75 // that as a test failure.
76 for (const child of overflowing_children) {
77 // child is a Node, but not necessarily an Element. We want to get the containing
78 // Element so that we can use its classList, tagName, and id properties.
79 let e = child;
80 if (child.nodeType !== Node.ELEMENT_NODE) {
81 e = child.parentElement;
83 if (!e.classList.contains("target")) {
84 ok(false, `${id} is reporting this unexpected child as a target: ${e.tagName} id=${e.id}`);
89 SimpleTest.finish();
91 window.onload = runTests;
92 </script>
93 </head>
94 <body onload="runTests()">
96 <e id="no_children"></e>
98 <e id="one_child_no_overflow">
99 <c></c>
100 </e>
102 <e id="margin_left_overflow">
103 <c class="target" style="margin-left:100px">abcd</c>
104 </e>
106 <e id="transform_overflow">
107 <c class="target" style="transform: translate(50px)">abcd</c>
108 </e>
110 <e id="nested_overflow">
112 <c class="target" style="margin-left:100px">abcd</c>
113 </c>
114 </e>
116 <e id="intermediate_overflow">
117 <c class="fixedSize target" style="margin-left:100px">
118 <c></c>
119 </c>
120 </e>
122 <e id="multiple_overflow_at_different_depths">
123 <c class="fixedSize target" style="margin-left:100px">
124 <c></c>
125 </c>
126 <c style="margin-left:100px">
127 <c class="target">abcd</c>
128 </c>
129 </e>
130 </body>
131 </html>