summaryrefslogtreecommitdiffstats
path: root/dom/flex/test/chrome/test_flex_parent.html
blob: 6ab050e7350183df7718bbe98e4bfe28653c2625 (plain)
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
<!doctype html>
<html id="nonitem0">
<head>
<meta charset="utf-8">
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
<style>
  .container {
    display: flex;
    background-color: grey;
    font: 14px sans-serif;
    height: 20px;
  }

  .lime        { background: lime;   }
  .yellow      { background: yellow; }
  .orange      { background: orange; }
</style>

<script>
"use strict";

SimpleTest.waitForExplicitFinish();

function testFlexParentExpectedValues(values) {
  let expectedParent;
  if (values.parent) {
    expectedParent = document.getElementById(values.parent);
  }

  let item, itemLabel;

  if (values.id) {
    item = document.getElementById(values.id);
    itemLabel = values.id;
  } else {
    item = expectedParent.firstChild;
    itemLabel = "[text node]";
  }

  const actualParent = item.parentFlexElement;

  if (values.parent) {
    is(actualParent, expectedParent, "Item " + itemLabel + " should have a parent with id " + values.parent + ".");
  } else {
    is(actualParent, null, "Non-item " + itemLabel + " should not have a parent.");
  }
}

function testFlexParents() {
  let expectedValues = [
    // These items expect to have a flex parent.
    { id: "item0", parent: "container0" },
    { id: "item1", parent: "container1" },
    { id: "item2", parent: "container2" },
    { id: "item3", parent: "container3" },
    { id: "item4", parent: "container4" },
    { id: null /* choose the first child of the expected parent */, parent: "container5" },


    // These elements do NOT expect to have a flex parent.
    { id: "nonitem0" },
    { id: "nonitem1" },
    { id: "nonitem2" },
    { id: "nonitem3" },
  ];

  for (let i = 0; i < expectedValues.length; ++i) {
    testFlexParentExpectedValues(expectedValues[i]);
  }
}

function runTests() {
  testFlexParents();
  SimpleTest.finish();
}
</script>
</head>

<body onLoad="runTests();">
  <!-- These items expect to have a flex parent. -->
  <div id="container0" class="container">
    <div id="item0" class="lime">first item</div>
  </div>

  <div id="container1" class="container">
    <div class="orange">first item</div>
    <div id="item1" class="lime">second item</div>
  </div>

  <div id="container2" class="container">
    <div style="display:contents">
      <div id="item2" class="lime">display-contents-child item</div>
    </div>
  </div>

  <div id="container3" class="container">
    A <span id="item3" class="lime">middle item</span> surrounded by anonymous text items</div>
  </div>

  <div id="container4" class="container">
    <div id="item4" style="display: table-cell">display: table-cell item</div>
  </div>

  <div id="container5" class="container">
    Text that gets wrapped in anonymous flex item
  </div>

  <!-- These elements do NOT expect to have a flex parent. -->

  <!-- nonitem0 is the root html element -->

  <div class="container">
    <div>
      <div id="nonitem1" class="yellow">child element of an item</div>
    </div>
  </div>

  <div class="container">
    <div>
      <div id="nonitem2" style="position: absolute" class="yellow">position: absolute element</div>
    </div>
  </div>

  <div class="container" style="position:relative">
    <div>
      <div id="nonitem3" style="position: absolute" class="yellow">
        position: absolute element, with flex as containing block
      </div>
    </div>
  </div>
</body>
</html>