summaryrefslogtreecommitdiffstats
path: root/accessible/tests/mochitest/treeupdate/test_cssoverflow.html
blob: 6b60fce975075a8936b5af487f80344a1ac6ea89 (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<html>

<head>
  <title>Testing HTML scrollable frames (css overflow style)</title>

  <link rel="stylesheet" type="text/css"
        href="chrome://mochikit/content/tests/SimpleTest/test.css" />

  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>

  <script type="application/javascript"
          src="../common.js"></script>
  <script type="application/javascript"
          src="../role.js"></script>
  <script type="application/javascript"
          src="../states.js"></script>
  <script type="application/javascript"
          src="../events.js"></script>

  <script type="application/javascript">

    // //////////////////////////////////////////////////////////////////////////
    // Invokers
    // //////////////////////////////////////////////////////////////////////////

    /**
     * Change scroll range to not empty size and inserts a child into container
     * to trigger tree update of the container. Prior to bug 677154 not empty
     * size resulted to accessible creation for scroll area, container tree
     * update picked up that accessible unattaching scroll area accessible
     * subtree.
     */
    function changeScrollRange(aContainerID, aScrollAreaID) {
      this.containerNode = getNode(aContainerID);
      this.container = getAccessible(this.containerNode);
      this.scrollAreaNode = getNode(aScrollAreaID);

      this.eventSeq = [
        new invokerChecker(EVENT_REORDER, this.container),
      ];

      this.invoke = function changeScrollRange_invoke() {
        this.scrollAreaNode.style.width = "20px";
        this.containerNode.appendChild(document.createElement("input"));
      };

      this.finalCheck = function changeScrollRange_finalCheck() {
        var accTree =
          { SECTION: [ // container
            { SECTION: [ // scroll area
              { ENTRY: [] }, // child content
            ] },
            { ENTRY: [] }, // inserted input
          ] };
        testAccessibleTree(this.container, accTree);
      };

      this.getID = function changeScrollRange_getID() {
        return "change scroll range for " + prettyName(aScrollAreaID);
      };
    }

    /**
     * Change scrollbar styles from visible to auto to make the scroll area focusable.
     * That causes us to create an accessible for it.
     * Make sure the tree stays intact.
     * The scroll area has no ID on purpose to make it inaccessible initially.
     */
    function makeFocusableByScrollbarStyles(aContainerID) {
      this.container = getAccessible(aContainerID);
      this.scrollAreaNode = getNode(aContainerID).firstChild;

      this.eventSeq = [
        new invokerChecker(EVENT_SHOW, getAccessible, this.scrollAreaNode),
        new invokerChecker(EVENT_REORDER, this.container),
      ];

      this.invoke = function makeFocusableByScrollbarStyles_invoke() {
        var accTree =
          { SECTION: [ // container
            { PARAGRAPH: [ // paragraph
              { TEXT_LEAF: [] },
            ] },
          ] };
        testAccessibleTree(this.container, accTree);

        this.scrollAreaNode.style.overflow = "auto";
      };

      this.finalCheck = function makeFocusableByScrollbarStyles_finalCheck() {
        var accTree =
          { SECTION: [ // container
            { role: ROLE_SECTION,  // focusable scroll area
              states: STATE_FOCUSABLE,
              children: [
                { PARAGRAPH: [ // paragraph
                  { TEXT_LEAF: [] }, // text leaf
                ] },
              ],
            }, // focusable scroll area
          ] };
        testAccessibleTree(this.container, accTree);
      };

      this.getID = function makeFocusableByScrollbarStyles_getID() {
        return "make div focusable through scrollbar styles "
               + prettyName(aContainerID);
      };
    }

    // //////////////////////////////////////////////////////////////////////////
    // Do tests
    // //////////////////////////////////////////////////////////////////////////

    var gQueue = null;
    // gA11yEventDumpID = "eventdump"; // debug stuff
    // gA11yEventDumpToConsole = true;

    function doTests() {
      gQueue = new eventQueue();

      gQueue.push(new changeScrollRange("container", "scrollarea"));
      gQueue.push(new makeFocusableByScrollbarStyles("container2"));

      gQueue.invoke(); // Will call SimpleTest.finish();
    }

    SimpleTest.waitForExplicitFinish();
    addA11yLoadEvent(doTests);
  </script>
</head>

<body>

  <a target="_blank"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=677154"
     title="Detached document accessibility tree">
    Mozilla Bug 677154</a>

  <p id="display"></p>
  <div id="content" style="display: none"></div>
  <pre id="test">
  </pre>
  <div id="eventdump"></div>

  <div id="container"><div id="scrollarea" style="overflow:auto;"><input></div></div>
  <div id="container2"><div style="height: 1px;"><p>foo</p></div></div>
</body>
</html>