summaryrefslogtreecommitdiffstats
path: root/layout/reftests/flexbox/flexbox-dyn-insertAroundText-2.xhtml
blob: b907af8b572db90bc2509c19914ea278a957d4a4 (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
<?xml version="1.0" encoding="UTF-8"?>
<!--
     Any copyright is dedicated to the Public Domain.
     http://creativecommons.org/publicdomain/zero/1.0/
-->
<!--
     This test verifies that we reconstruct frames as necessary, after content
     (including whitespace & divs) is dynamically inserted as a child of a
     flexbox.  (Note that in cases where we know the whitespace is going to be
     dropped, we don't bother reconstructing frames. This test is to be sure we
     aren't overzealous with that optimization.)
-->
<html xmlns="http://www.w3.org/1999/xhtml"
      class="reftest-wait">
  <head>
    <style>
      body {
        font-size: 10px;
      }

      div.inserted {
        background: teal; /* To make inserted div elements stand out. */
      }

      div.flexbox {
        border: 1px dashed blue;
        width: 300px;
        display: flex;
        justify-content: space-around;
        margin-bottom: 1px;
        white-space: pre;
      }
    </style>
    <script>
      function insertNodeAtPosnInElem(aNodeToInsert, aPosn, aParentId) {
        var parent = document.getElementById(aParentId);
        var insertBeforeTarget = parent.firstChild;
        for (var i = 0; i &lt; aPosn; i++) {
          insertBeforeTarget = insertBeforeTarget.nextSibling;
        }
        parent.insertBefore(aNodeToInsert, insertBeforeTarget);
      }

      function createDivElem() {
        var div = document.createElement("div");
        div.setAttribute("class", "inserted");
        div.appendChild(document.createTextNode("[NewDiv]"));
        return div;
      }

      function tweak() {
        // Inserting div, adjacent to inline content
        // -----------------------------------------
        insertNodeAtPosnInElem(createDivElem(), 0, "f0");
        insertNodeAtPosnInElem(createDivElem(), 1, "f1");

        // Inserting div and whitespace, before inline content
        // ---------------------------------------------------
        insertNodeAtPosnInElem(document.createTextNode("  "), 0, "f2");
        insertNodeAtPosnInElem(createDivElem(),               0, "f2");

        insertNodeAtPosnInElem(createDivElem(),               0, "f3");
        insertNodeAtPosnInElem(document.createTextNode("  "), 0, "f3");

        // Inserting div and whitespace, after inline content
        // ---------------------------------------------------
        insertNodeAtPosnInElem(document.createTextNode("  "), 1, "f4");
        insertNodeAtPosnInElem(createDivElem(),               1, "f4");

        insertNodeAtPosnInElem(createDivElem(),               1, "f5");
        insertNodeAtPosnInElem(document.createTextNode("  "), 1, "f5");

        // Inserting div and text, before inline content
        // ---------------------------------------------------
        insertNodeAtPosnInElem(document.createTextNode("[NewText]"), 0, "f6");
        insertNodeAtPosnInElem(createDivElem(),                      0, "f6");

        insertNodeAtPosnInElem(createDivElem(),                      0, "f7");
        insertNodeAtPosnInElem(document.createTextNode("[NewText]"), 0, "f7");

        // Inserting div and text, after inline content
        // ---------------------------------------------------
        insertNodeAtPosnInElem(document.createTextNode("[NewText]"), 1, "f8");
        insertNodeAtPosnInElem(createDivElem(),                      1, "f8");

        insertNodeAtPosnInElem(createDivElem(),                      1, "f9");
        insertNodeAtPosnInElem(document.createTextNode("[NewText]"), 1, "f9");

        document.documentElement.removeAttribute("class");
      }

      window.addEventListener("MozReftestInvalidate", tweak, false);
    </script>
  </head>
  <body>
    <div class="flexbox" id="f0">[OldText]</div>
    <div class="flexbox" id="f1">[OldText]</div>
    <div class="flexbox" id="f2">[OldText]</div>
    <div class="flexbox" id="f3">[OldText]</div>
    <div class="flexbox" id="f4">[OldText]</div>
    <div class="flexbox" id="f5">[OldText]</div>
    <div class="flexbox" id="f6">[OldText]</div>
    <div class="flexbox" id="f7">[OldText]</div>
    <div class="flexbox" id="f8">[OldText]</div>
    <div class="flexbox" id="f9">[OldText]</div>
  </body>
</html>