mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 14:15:30 +00:00
301 lines
13 KiB
HTML
301 lines
13 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<!--
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=418368
|
|
-->
|
|
<head>
|
|
<title>nsIHyperLinkAccessible chrome tests</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="../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"
|
|
src="hyperlink.js"></script>
|
|
|
|
<script type="application/javascript">
|
|
function testThis(aID, aAcc, aRole, aAnchors, aName, aValid, aStartIndex,
|
|
aEndIndex)
|
|
{
|
|
testRole(aAcc, aRole);
|
|
is(aAcc.anchorCount, aAnchors, "Wrong number of anchors for ID "
|
|
+ aID + "!");
|
|
is(aAcc.getAnchor(0).name, aName, "Wrong name for ID "
|
|
+ aID + "!");
|
|
is(aAcc.valid, aValid, "No correct valid state for ID "
|
|
+ aID + "!");
|
|
is(aAcc.startIndex, aStartIndex, "Wrong startIndex value for ID "
|
|
+ aID + "!");
|
|
is(aAcc.endIndex, aEndIndex, "Wrong endIndex value for ID "
|
|
+ aID + "!");
|
|
}
|
|
|
|
function testAction(aId, aAcc, aActionName)
|
|
{
|
|
var numActions = aActionName ? 1 : 0;
|
|
is(aAcc.numActions, numActions,
|
|
"Wrong actions number for ID " + aId);
|
|
try {
|
|
is(aAcc.getActionName(0), aActionName,
|
|
"Wrong action name for ID " + aId);
|
|
} catch (e) {
|
|
if (numActions)
|
|
ok(false, "Exception on action name getting for ID " + aId);
|
|
else
|
|
ok(true, "Correct action name for ID " + aId);
|
|
}
|
|
}
|
|
|
|
//gA11yEventDumpToConsole = true; // debug stuff
|
|
|
|
var gQueue = null;
|
|
function doTest()
|
|
{
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// normal hyperlink
|
|
var normalHyperlinkAcc = getAccessible("NormalHyperlink",
|
|
[nsIAccessibleHyperLink]);
|
|
testThis("NormalHyperlink", normalHyperlinkAcc, ROLE_LINK, 1,
|
|
"Mozilla Foundation", true, 17, 18);
|
|
is(normalHyperlinkAcc.getURI(0).spec, "http://www.mozilla.org/",
|
|
"URI wrong for normalHyperlinkElement!");
|
|
testStates(normalHyperlinkAcc, STATE_LINKED, EXT_STATE_HORIZONTAL);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// ARIA hyperlink
|
|
var ariaHyperlinkAcc = getAccessible("AriaHyperlink",
|
|
[nsIAccessibleHyperLink]);
|
|
testThis("AriaHyperlink", ariaHyperlinkAcc, ROLE_LINK, 1,
|
|
"Mozilla Foundation Home", true, 30, 31);
|
|
testStates(ariaHyperlinkAcc, STATE_LINKED, EXT_STATE_HORIZONTAL);
|
|
testAction("AriaHyperlink", ariaHyperlinkAcc, "click");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// ARIA hyperlink with status invalid
|
|
var invalidAriaHyperlinkAcc = getAccessible("InvalidAriaHyperlink",
|
|
[nsIAccessibleHyperLink]);
|
|
is(invalidAriaHyperlinkAcc.valid, false, "Should not be valid!");
|
|
testStates(invalidAriaHyperlinkAcc, STATE_LINKED, EXT_STATE_HORIZONTAL);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// image map and its link children
|
|
var imageMapHyperlinkAcc = getAccessible("imgmap",
|
|
[nsIAccessibleHyperLink]);
|
|
testThis("imgmap", imageMapHyperlinkAcc, ROLE_IMAGE_MAP, 2, "b", true,
|
|
79, 80);
|
|
is(imageMapHyperlinkAcc.getURI(0).spec,
|
|
"http://www.bbc.co.uk/radio4/atoz/index.shtml#b", "URI wrong!");
|
|
is(imageMapHyperlinkAcc.getURI(1).spec,
|
|
"http://www.bbc.co.uk/radio4/atoz/index.shtml#a", "URI wrong!");
|
|
testStates(imageMapHyperlinkAcc,
|
|
(0),
|
|
(EXT_STATE_HORIZONTAL));
|
|
|
|
var area1 = getAccessible(imageMapHyperlinkAcc.firstChild,
|
|
[nsIAccessibleHyperLink]);
|
|
testThis("Area1", area1, ROLE_LINK, 1, "b", true, 0, 1);
|
|
is(area1.getURI(0).spec,
|
|
"http://www.bbc.co.uk/radio4/atoz/index.shtml#b", "URI wrong!");
|
|
testStates(area1, (STATE_LINKED));
|
|
|
|
var area2 = getAccessible(area1.nextSibling,
|
|
[nsIAccessibleHyperLink]);
|
|
testThis("Area2", area2, ROLE_LINK, 1, "a", true, 1, 2);
|
|
is(area2.getURI(0).spec,
|
|
"http://www.bbc.co.uk/radio4/atoz/index.shtml#a", "URI wrong!");
|
|
testStates(area2, (STATE_LINKED));
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// empty hyperlink
|
|
var EmptyHLAcc = getAccessible("emptyLink",
|
|
[nsIAccessibleHyperLink]);
|
|
testThis("emptyLink", EmptyHLAcc, ROLE_LINK, 1, null, true, 93, 94);
|
|
testStates(EmptyHLAcc,
|
|
(STATE_FOCUSABLE | STATE_LINKED),
|
|
(EXT_STATE_HORIZONTAL));
|
|
testAction("emptyLink", EmptyHLAcc, "jump");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// normal hyperlink with embedded span
|
|
var hyperlinkWithSpanAcc = getAccessible("LinkWithSpan",
|
|
[nsIAccessibleHyperLink]);
|
|
testThis("LinkWithSpan", hyperlinkWithSpanAcc, ROLE_LINK, 1,
|
|
"Heise Online", true, 119, 120);
|
|
is(hyperlinkWithSpanAcc.getURI(0).spec, "http://www.heise.de/",
|
|
"URI wrong for hyperlinkElementWithSpan!");
|
|
testStates(hyperlinkWithSpanAcc, STATE_LINKED, EXT_STATE_HORIZONTAL);
|
|
testAction("LinkWithSpan", hyperlinkWithSpanAcc, "jump");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Named anchor, should never have state_linked
|
|
var namedAnchorAcc = getAccessible("namedAnchor",
|
|
[nsIAccessibleHyperLink]);
|
|
testThis("namedAnchor", namedAnchorAcc, ROLE_LINK, 1,
|
|
"This should never be of state_linked", true, 196, 197);
|
|
testStates(namedAnchorAcc,
|
|
(STATE_SELECTABLE),
|
|
(EXT_STATE_HORIZONTAL), (STATE_FOCUSABLE | STATE_LINKED));
|
|
testAction("namedAnchor", namedAnchorAcc, "");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// No link (hasn't any attribute), should never have state_linked
|
|
var noLinkAcc = getAccessible("noLink",
|
|
[nsIAccessibleHyperLink]);
|
|
testThis("noLink", noLinkAcc, ROLE_LINK, 1,
|
|
"This should never be of state_linked", true, 254, 255);
|
|
testStates(noLinkAcc,
|
|
0,
|
|
(EXT_STATE_HORIZONTAL), (STATE_FOCUSABLE | STATE_LINKED));
|
|
testAction("noLink", noLinkAcc, "");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Link with registered 'click' event, should have state_linked
|
|
var linkWithClickAcc = getAccessible("linkWithClick",
|
|
[nsIAccessibleHyperLink]);
|
|
testThis("linkWithClick", linkWithClickAcc, ROLE_LINK, 1,
|
|
"This should have state_linked", true, 292, 293);
|
|
testStates(linkWithClickAcc,
|
|
(STATE_LINKED),
|
|
(EXT_STATE_HORIZONTAL));
|
|
testAction("linkWithClick", linkWithClickAcc, "click");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Maps to group links (bug 431615).
|
|
var linksMapAcc = getAccessible("linksmap");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Link with title attribute, no name from the subtree (bug 438325).
|
|
var id = "linkWithTitleNoNameFromSubtree";
|
|
var linkAcc = getAccessible(id, [nsIAccessibleHyperLink]);
|
|
testThis(id, linkAcc, ROLE_LINK, 1, "Link with title", true, 344, 345);
|
|
testStates(linkAcc,
|
|
(STATE_LINKED),
|
|
(EXT_STATE_HORIZONTAL));
|
|
testAction(id, linkAcc, "jump");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Link with title attribute, name from the subtree - onscreen name
|
|
// (bug 438325).
|
|
id = "linkWithTitleNameFromSubtree";
|
|
linkAcc = getAccessible(id, [nsIAccessibleHyperLink]);
|
|
testThis(id, linkAcc, ROLE_LINK, 1, "the name from subtree", true, 393,
|
|
394);
|
|
testStates(linkAcc,
|
|
(STATE_LINKED),
|
|
(EXT_STATE_HORIZONTAL));
|
|
testAction(id, linkAcc, "jump");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Link with title attribute, name from the nested html:img (bug 438325).
|
|
id = "linkWithTitleNameFromImg";
|
|
linkAcc = getAccessible(id, [nsIAccessibleHyperLink]);
|
|
testThis(id, linkAcc, ROLE_LINK, 1, "The title for link", true, 447,
|
|
448);
|
|
testStates(linkAcc,
|
|
(STATE_LINKED),
|
|
(EXT_STATE_HORIZONTAL));
|
|
testAction(id, linkAcc, "jump");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Link with label, no name from the subtree (bug 438325).
|
|
id = "linkWithLabelNoNameFromSubtree";
|
|
linkAcc = getAccessible(id, [nsIAccessibleHyperLink]);
|
|
testThis(id, linkAcc, ROLE_LINK, 1, "Link with label and nested image:",
|
|
true, 450, 451);
|
|
testStates(linkAcc,
|
|
(STATE_LINKED),
|
|
(EXT_STATE_HORIZONTAL));
|
|
testAction(id, linkAcc, "jump");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Text accessible shouldn't implement nsIAccessibleHyperLink
|
|
var res = isAccessible(getNode("namedAnchor").firstChild,
|
|
[nsIAccessibleHyperLink]);
|
|
ok(!res, "Text accessible shouldn't implement nsIAccessibleHyperLink");
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Test focus
|
|
gQueue = new eventQueue();
|
|
|
|
gQueue.push(new focusLink("NormalHyperlink", true));
|
|
gQueue.push(new focusLink("AriaHyperlink", true));
|
|
gQueue.push(new focusLink("InvalidAriaHyperlink", false));
|
|
gQueue.push(new focusLink("LinkWithSpan", true));
|
|
|
|
gQueue.invoke(); // Will call SimpleTest.finish();
|
|
}
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
addA11yLoadEvent(doTest);
|
|
</script>
|
|
</head>
|
|
<body><a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=418368">Mozilla Bug 418368</a
|
|
><p id="display"></p
|
|
><div id="content" style="display: none"></div
|
|
><pre id="test">
|
|
</pre
|
|
><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"><br>Empty link:<br
|
|
><a id="emptyLink" href=""><img src=""></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
|
|
><br>Link having no attributes, must not have "linked" state:<a id="noLink"
|
|
>This should never be of state_linked</a
|
|
><br>Link with registered 'click' event: <a id="linkWithClick" onclick="var clicked = true;"
|
|
>This should have state_linked</a
|
|
><br>Link with title attribute (no name from subtree): <a
|
|
id="linkWithTitleNoNameFromSubtree" href="http://www.heise.de/"
|
|
title="Link with title"><img src=""/></a
|
|
><br>Link with title attribute (name from subtree): <a
|
|
id="linkWithTitleNameFromSubtree" href="http://www.heise.de/"
|
|
title="Link with title">the name from subtree</a
|
|
><br>Link with title attribute (name from nested image): <a
|
|
id="linkWithTitleNameFromImg" href="http://www.heise.de/"
|
|
title="Link with title"><img src="" alt="The title for link"/></a
|
|
><br><label for="linkWithLabelNoNameFromSubtree">Link with label and nested image: </label><a
|
|
id="linkWithLabelNoNameFromSubtree"
|
|
href="http://www.heise.de/"><img src=""/></a
|
|
><br>Map that is used to group links (www.w3.org/TR/WCAG10-HTML-TECHS/#group-bypass), also see the bug 431615:<br
|
|
><map id="linksmap" title="Site navigation"><ul
|
|
><li><a href="http://mozilla.org">About the project</a></li
|
|
><li><a href="http://mozilla.org">Sites and sounds</a></li
|
|
></ul
|
|
></map
|
|
></body>
|
|
</html>
|