summaryrefslogtreecommitdiffstats
path: root/accessible/tests/mochitest/hypertext/test_general.html
blob: 80ac293ee1a2bf374d29a92bc1465980fd0422fc (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
150
<!DOCTYPE html>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=428248
-->
<head>
  <title>nsIHyper>TextAccessible chrome tests</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 src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>

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

  <script type="application/javascript">
    var gParagraphAcc;

    function testLinkIndexAtOffset(aID, aOffset, aIndex) {
      var htAcc = getAccessible(aID, [nsIAccessibleHyperText]);
      is(htAcc.getLinkIndexAtOffset(aOffset), aIndex,
         "Wrong link index at offset " + aOffset + " for ID " + aID + "!");
    }

    function testThis(aID, aCharIndex, aExpectedLinkIndex, aName) {
      testLinkIndexAtOffset(gParagraphAcc, aCharIndex, aExpectedLinkIndex);

      var linkAcc = gParagraphAcc.getLinkAt(aExpectedLinkIndex);
      ok(linkAcc, "No accessible for link " + aID + "!");

      var linkIndex = gParagraphAcc.getLinkIndex(linkAcc);
      is(linkIndex, aExpectedLinkIndex, "Wrong link index for " + aID + "!");

      // Just test the link's name to make sure we get the right one.
      is(linkAcc.getAnchor(0).name, aName, "Wrong name for " + aID + "!");
    }

    // gA11yEventDumpToConsole = true;
    function doPreTest() {
      waitForImageMap("imgmap", doTest);
    }

    function doTest() {
      // Test link count
      gParagraphAcc = getAccessible("testParagraph", [nsIAccessibleHyperText]);
      is(gParagraphAcc.linkCount, 7, "Wrong link count for paragraph!");

      // normal hyperlink
      testThis("NormalHyperlink", 14, 0, "Mozilla Foundation");

      // ARIA hyperlink
      testThis("AriaHyperlink", 27, 1, "Mozilla Foundation Home");

      // ARIA hyperlink with status invalid
      testThis("InvalidAriaHyperlink", 63, 2, "Invalid link");

      // image map, but not its link children. They are not part of hypertext.
      testThis("imgmap", 76, 3, "b");

      // empty hyperlink
      testThis("emptyLink", 90, 4, null);

      // normal hyperlink with embedded span
      testThis("LinkWithSpan", 116, 5, "Heise Online");

      // Named anchor
      testThis("namedAnchor", 193, 6, null);

      // Paragraph with link
      var p2 = getAccessible("p2", [nsIAccessibleHyperText]);
      var link = p2.getLinkAt(0);
      is(link, p2.getChildAt(0), "Wrong link for p2");
      is(p2.linkCount, 1, "Wrong link count for p2");

      // getLinkIndexAtOffset, causes the offsets to be cached;
      testLinkIndexAtOffset("p4", 0, 0); // 1st 'mozilla' link
      testLinkIndexAtOffset("p4", 1, 1); // 2nd 'mozilla' link
      testLinkIndexAtOffset("p4", 2, -1); // ' ' of ' te' text node
      testLinkIndexAtOffset("p4", 3, -1); // 't' of ' te' text node
      testLinkIndexAtOffset("p4", 5, -1); // 'x' of 'xt ' text node
      testLinkIndexAtOffset("p4", 7, -1); // ' ' of 'xt ' text node
      testLinkIndexAtOffset("p4", 8, 2); // 3d 'mozilla' link
      testLinkIndexAtOffset("p4", 9, 2); // the end, latest link

      // the second pass to make sure link indexes are calculated propertly from
      // cached offsets.
      testLinkIndexAtOffset("p4", 0, 0); // 1st 'mozilla' link
      testLinkIndexAtOffset("p4", 1, 1); // 2nd 'mozilla' link
      testLinkIndexAtOffset("p4", 2, -1); // ' ' of ' te' text node
      testLinkIndexAtOffset("p4", 3, -1); // 't' of ' te' text node
      testLinkIndexAtOffset("p4", 5, -1); // 'x' of 'xt ' text node
      testLinkIndexAtOffset("p4", 7, -1); // ' ' of 'xt ' text node
      testLinkIndexAtOffset("p4", 8, 2); // 3d 'mozilla' link
      testLinkIndexAtOffset("p4", 9, 2); // the end, latest link

      SimpleTest.finish();
    }

    SimpleTest.waitForExplicitFinish();
    addA11yLoadEvent(doPreTest);
  </script>

</head>
<body>

  <a target="_blank"
     title="Create tests for NSIAccessibleHyperlink interface"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=418368">
    Mozilla Bug 418368
  </a><br>
  <p id="display"></p>
  <div id="content" style="display: none"></div>
  <pre id="test">
  </pre>
  <p id="testParagraph"><br
  >Simple link:<br
  ><a id="NormalHyperlink" href="http://www.mozilla.org">Mozilla Foundation</a><br
  >ARIA link:<br
  ><span id="AriaHyperlink" role="link"
          onclick="window.open('http://www.mozilla.org/');"
          tabindex="0">Mozilla Foundation Home</span><br
  >Invalid, non-focusable hyperlink:<br
  ><span id="InvalidAriaHyperlink" role="link" aria-invalid="true"
         onclick="window.open('http:/www.mozilla.org/');">Invalid link</span><br
  >Image map:<br
  ><map name="atoz_map"><area href="http://www.bbc.co.uk/radio4/atoz/index.shtml#b"
                              coords="17,0,30,14"
                              alt="b"
                              shape="rect"></area
   ><area href="http://www.bbc.co.uk/radio4/atoz/index.shtml#a"
          coords="0,0,13,14"
          alt="a"
          shape="rect"></area></map
   ><img width="447" id="imgmap"
         height="15"
         usemap="#atoz_map"
         src="../letters.gif"></img><br
  >Empty link:<br
  ><a id="emptyLink" href=""><img src=""></img></a><br
  >Link with embedded span<br
  ><a id="LinkWithSpan" href="http://www.heise.de/"><span lang="de">Heise Online</span></a><br
  >Named anchor, must not have "linked" state for it to be exposed correctly:<br
  ><a id="namedAnchor" name="named_anchor">This should never be of state_linked</a>
  </p>
  <p id="p2"><a href="http://mozilla.org">mozilla.org</a></p>
  <p id="p4"><a href="www">mozilla</a><a href="www">mozilla</a><span> te</span><span>xt </span><a href="www">mozilla</a></p>
</body>
</html>