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
|
<html>
<head>
<title>HTML link states testing</title>
<link rel="stylesheet" type="text/css"
href="chrome://mochikit/content/tests/SimpleTest/test.css" />
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/EventUtils.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">
//gA11yEventDumpToConsole = true; // debug stuff
var gLinkWindow = null;
function closeDocChecker()
{
this.__proto__ = new asyncInvokerChecker(EVENT_DOCUMENT_LOAD_COMPLETE);
this.check = function closeDocChecker_check(aEvent)
{
gLinkWindow = aEvent.accessible.rootDocument.window;
}
this.match = function closeDocChecker_match(aEvent)
{
// A temporary about:blank document gets loaded before 'example.com'
// document.
return aEvent.DOMNode.URL == "http://www.example.com/";
}
}
function clickLink(aID)
{
this.eventSeq = [
new stateChangeChecker(STATE_TRAVERSED, false, true, "link_traversed"),
new closeDocChecker()
];
this.invoke = function clickLink_invoke()
{
synthesizeMouse(getNode("link_traversed"), 1, 1, { shiftKey: true });
}
this.getID = function clickLink_getID()
{
return "link + '" + aID + "' clicked.";
}
}
var gQueue = null;
function doTest()
{
// a@href and its text node
testStates("link_href", STATE_LINKED);
testStates(getAccessible("link_href").firstChild, STATE_LINKED);
// a@onclick
testStates("link_click", STATE_LINKED);
// a@onmousedown
testStates("link_mousedown", STATE_LINKED);
// a@onmouseup
testStates("link_mouseup", STATE_LINKED);
// a@role="link"
testStates("link_arialink", STATE_LINKED);
// a@role="button"
testStates("link_ariabutton", 0, 0, STATE_LINKED);
// a (no @href, no click event listener)
testStates("link_notlink", 0, 0, STATE_LINKED);
// a: no traversed state
testStates("link_traversed", 0, 0, STATE_TRAVERSED);
// a: traversed state
//enableLogging("docload"); // debug stuff
gQueue = new eventQueue();
gQueue.push(new clickLink("link_traversed"));
gQueue.onFinish =
function()
{
gLinkWindow.close();
//disableLogging(); // debug stuff
}
gQueue.invoke(); // will call SimpleTest.finsih();
}
SimpleTest.waitForExplicitFinish();
addA11yLoadEvent(doTest);
</script>
</head>
<body>
<a target="_blank"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=423409"
title="Expose click action if mouseup and mousedown are registered">
Mozilla Bug 423409
</a>
<a target="_blank"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=754830"
title="Calculate link states separately">
Mozilla Bug 754830
</a>
<a target="_blank"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=757774"
title="Fire state change event when link is traversed">
Mozilla Bug 757774
</a>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
</pre>
<a id="link_href" href="http://mozilla.org">link</a>
<a id="link_click" onclick="">link</a>
<a id="link_mousedown" onmousedown="">link</a>
<a id="link_mouseup" onmouseup="">link</a>
<a id="link_arialink" role="link">aria link</a>
<a id="link_ariabutton" role="button">aria button</a>
<a id="link_notlink">not link</a>
<a id="link_traversed" href="http://www.example.com" target="_top">example.com</a>
</body>
</html>
|