Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
/**
* Test navigation of same/different type content
*/
addAccessibleTask(
`<h1 id="hello">hello</h1>
world<br>
<a href="example.com" id="link">I am a link</a>
<h1 id="goodbye">goodbye</h1>`,
async (browser, accDoc) => {
const searchPred = {
AXSearchKey: "AXSameTypeSearchKey",
AXImmediateDescendantsOnly: 0,
AXResultsLimit: 1,
AXDirection: "AXDirectionNext",
};
const hello = getNativeInterface(accDoc, "hello");
const goodbye = getNativeInterface(accDoc, "goodbye");
const webArea = accDoc.nativeInterface.QueryInterface(
Ci.nsIAccessibleMacInterface
);
searchPred.AXStartElement = hello;
let sameItem = webArea.getParameterizedAttributeValue(
"AXUIElementsForSearchPredicate",
NSDictionary(searchPred)
);
is(sameItem.length, 1, "Found one item");
is(
"goodbye",
sameItem[0].getAttributeValue("AXTitle"),
"Found correct item of same type"
);
searchPred.AXDirection = "AXDirectionPrevious";
searchPred.AXStartElement = goodbye;
sameItem = webArea.getParameterizedAttributeValue(
"AXUIElementsForSearchPredicate",
NSDictionary(searchPred)
);
is(sameItem.length, 1, "Found one item");
is(
"hello",
sameItem[0].getAttributeValue("AXTitle"),
"Found correct item of same type"
);
searchPred.AXSearchKey = "AXDifferentTypeSearchKey";
let diffItem = webArea.getParameterizedAttributeValue(
"AXUIElementsForSearchPredicate",
NSDictionary(searchPred)
);
is(diffItem.length, 1, "Found one item");
is(
"I am a link",
diffItem[0].getAttributeValue("AXValue"),
"Found correct item of different type"
);
}
);
/**
* Test navigation of heading levels
*/
addAccessibleTask(
`
<h1 id="a">a</h1>
<h2 id="b">b</h2>
<h3 id="c">c</h3>
<h4 id="d">d</h4>
<h5 id="e">e</h5>
<h6 id="f">f</h5>
<h1 id="g">g</h1>
<h2 id="h">h</h2>
<h3 id="i">i</h3>
<h4 id="j">j</h4>
<h5 id="k">k</h5>
<h6 id="l">l</h5>
this is some regular text that should be ignored
`,
async (browser, accDoc) => {
const searchPred = {
AXSearchKey: "AXHeadingLevel1SearchKey",
AXImmediateDescendantsOnly: 0,
AXResultsLimit: -1,
AXDirection: "AXDirectionNext",
};
const webArea = accDoc.nativeInterface.QueryInterface(
Ci.nsIAccessibleMacInterface
);
let h1Count = webArea.getParameterizedAttributeValue(
"AXUIElementCountForSearchPredicate",
NSDictionary(searchPred)
);
is(2, h1Count, "Found two h1 items");
let h1s = webArea.getParameterizedAttributeValue(
"AXUIElementsForSearchPredicate",
NSDictionary(searchPred)
);
const a = getNativeInterface(accDoc, "a");
const g = getNativeInterface(accDoc, "g");
is(
a.getAttributeValue("AXValue"),
h1s[0].getAttributeValue("AXValue"),
"Found correct h1 heading"
);
is(
g.getAttributeValue("AXValue"),
h1s[1].getAttributeValue("AXValue"),
"Found correct h1 heading"
);
searchPred.AXSearchKey = "AXHeadingLevel2SearchKey";
let h2Count = webArea.getParameterizedAttributeValue(
"AXUIElementCountForSearchPredicate",
NSDictionary(searchPred)
);
is(2, h2Count, "Found two h2 items");
let h2s = webArea.getParameterizedAttributeValue(
"AXUIElementsForSearchPredicate",
NSDictionary(searchPred)
);
const b = getNativeInterface(accDoc, "b");
const h = getNativeInterface(accDoc, "h");
is(
b.getAttributeValue("AXValue"),
h2s[0].getAttributeValue("AXValue"),
"Found correct h2 heading"
);
is(
h.getAttributeValue("AXValue"),
h2s[1].getAttributeValue("AXValue"),
"Found correct h2 heading"
);
searchPred.AXSearchKey = "AXHeadingLevel3SearchKey";
let h3Count = webArea.getParameterizedAttributeValue(
"AXUIElementCountForSearchPredicate",
NSDictionary(searchPred)
);
is(2, h3Count, "Found two h3 items");
let h3s = webArea.getParameterizedAttributeValue(
"AXUIElementsForSearchPredicate",
NSDictionary(searchPred)
);
const c = getNativeInterface(accDoc, "c");
const i = getNativeInterface(accDoc, "i");
is(
c.getAttributeValue("AXValue"),
h3s[0].getAttributeValue("AXValue"),
"Found correct h3 heading"
);
is(
i.getAttributeValue("AXValue"),
h3s[1].getAttributeValue("AXValue"),
"Found correct h3 heading"
);
searchPred.AXSearchKey = "AXHeadingLevel4SearchKey";
let h4Count = webArea.getParameterizedAttributeValue(
"AXUIElementCountForSearchPredicate",
NSDictionary(searchPred)
);
is(2, h4Count, "Found two h4 items");
let h4s = webArea.getParameterizedAttributeValue(
"AXUIElementsForSearchPredicate",
NSDictionary(searchPred)
);
const d = getNativeInterface(accDoc, "d");
const j = getNativeInterface(accDoc, "j");
is(
d.getAttributeValue("AXValue"),
h4s[0].getAttributeValue("AXValue"),
"Found correct h4 heading"
);
is(
j.getAttributeValue("AXValue"),
h4s[1].getAttributeValue("AXValue"),
"Found correct h4 heading"
);
searchPred.AXSearchKey = "AXHeadingLevel5SearchKey";
let h5Count = webArea.getParameterizedAttributeValue(
"AXUIElementCountForSearchPredicate",
NSDictionary(searchPred)
);
is(2, h5Count, "Found two h5 items");
let h5s = webArea.getParameterizedAttributeValue(
"AXUIElementsForSearchPredicate",
NSDictionary(searchPred)
);
const e = getNativeInterface(accDoc, "e");
const k = getNativeInterface(accDoc, "k");
is(
e.getAttributeValue("AXValue"),
h5s[0].getAttributeValue("AXValue"),
"Found correct h5 heading"
);
is(
k.getAttributeValue("AXValue"),
h5s[1].getAttributeValue("AXValue"),
"Found correct h5 heading"
);
searchPred.AXSearchKey = "AXHeadingLevel6SearchKey";
let h6Count = webArea.getParameterizedAttributeValue(
"AXUIElementCountForSearchPredicate",
NSDictionary(searchPred)
);
is(2, h6Count, "Found two h6 items");
let h6s = webArea.getParameterizedAttributeValue(
"AXUIElementsForSearchPredicate",
NSDictionary(searchPred)
);
const f = getNativeInterface(accDoc, "f");
const l = getNativeInterface(accDoc, "l");
is(
f.getAttributeValue("AXValue"),
h6s[0].getAttributeValue("AXValue"),
"Found correct h6 heading"
);
is(
l.getAttributeValue("AXValue"),
h6s[1].getAttributeValue("AXValue"),
"Found correct h6 heading"
);
}
);
/*
* Test rotor with blockquotes
*/
addAccessibleTask(
`
<blockquote id="first">hello I am a blockquote</blockquote>
<blockquote id="second">
I am also a blockquote of the same level
<br>
<blockquote id="third">but I have a different level</blockquote>
</blockquote>
`,
(browser, accDoc) => {
let searchPred = {
AXSearchKey: "AXBlockquoteSearchKey",
AXImmediateDescendantsOnly: 0,
AXResultsLimit: -1,
AXDirection: "AXDirectionNext",
};
const webArea = accDoc.nativeInterface.QueryInterface(
Ci.nsIAccessibleMacInterface
);
is(
webArea.getAttributeValue("AXRole"),
"AXWebArea",
"Got web area accessible"
);
let bquotes = webArea.getParameterizedAttributeValue(
"AXUIElementsForSearchPredicate",
NSDictionary(searchPred)
);
is(bquotes.length, 3, "Found three blockquotes");
const first = getNativeInterface(accDoc, "first");
const second = getNativeInterface(accDoc, "second");
const third = getNativeInterface(accDoc, "third");
console.log("values :");
console.log(first.getAttributeValue("AXValue"));
is(
first.getAttributeValue("AXValue"),
bquotes[0].getAttributeValue("AXValue"),
"Found correct first blockquote"
);
is(
second.getAttributeValue("AXValue"),
bquotes[1].getAttributeValue("AXValue"),
"Found correct second blockquote"
);
is(
third.getAttributeValue("AXValue"),
bquotes[2].getAttributeValue("AXValue"),
"Found correct third blockquote"
);
}
);
/*
* Test rotor with graphics
*/
addAccessibleTask(
`
<img id="img1" alt="image one" src="http://example.com/a11y/accessible/tests/mochitest/moz.png"><br>
<a href="http://example.com">
<img id="img2" alt="image two" src="http://example.com/a11y/accessible/tests/mochitest/moz.png">
</a>
<img src="" id="img3">
`,
(browser, accDoc) => {
let searchPred = {
AXSearchKey: "AXGraphicSearchKey",
AXImmediateDescendantsOnly: 0,
AXResultsLimit: -1,
AXDirection: "AXDirectionNext",
};
const webArea = accDoc.nativeInterface.QueryInterface(
Ci.nsIAccessibleMacInterface
);
is(
webArea.getAttributeValue("AXRole"),
"AXWebArea",
"Got web area accessible"
);
let images = webArea.getParameterizedAttributeValue(
"AXUIElementsForSearchPredicate",
NSDictionary(searchPred)
);
is(images.length, 3, "Found three images");
const img1 = getNativeInterface(accDoc, "img1");
const img2 = getNativeInterface(accDoc, "img2");
const img3 = getNativeInterface(accDoc, "img3");
is(
img1.getAttributeValue("AXDescription"),
images[0].getAttributeValue("AXDescription"),
"Found correct image"
);
is(
img2.getAttributeValue("AXDescription"),
images[1].getAttributeValue("AXDescription"),
"Found correct image"
);
is(
img3.getAttributeValue("AXDescription"),
images[2].getAttributeValue("AXDescription"),
"Found correct image"
);
}
);