135 lines
5.3 KiB
HTML
135 lines
5.3 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
|
|
<script src="resources/audit-utilities.js"></script>
|
|
<script>
|
|
|
|
function stringify(result) {
|
|
if (result === null || result === undefined || typeof result === "boolean" || typeof result === "string" || typeof result === "number")
|
|
return result;
|
|
if (result instanceof Element)
|
|
return "#" + result.id;
|
|
if (result instanceof HTMLDocument)
|
|
return "<document>";
|
|
if (Array.isArray(result))
|
|
return JSON.stringify(result.map(stringify));
|
|
if (typeof result === "object" && result.constructor === Object) {
|
|
let mapped = {};
|
|
for (let key in result)
|
|
mapped[key] = stringify(result[key]);
|
|
return JSON.stringify(mapped, null, 4);
|
|
}
|
|
return "UNEXPECTED " + result;
|
|
}
|
|
|
|
function test()
|
|
{
|
|
let suite = InspectorTest.Audit.createSuite("Audit.run.Accessibility");
|
|
|
|
function evaluateStringForTest(func, target, role) {
|
|
if (target) {
|
|
if (role)
|
|
return `WebInspectorAudit.Accessibility.${func}("${role}", document.querySelector("#${target}"))`;
|
|
return `WebInspectorAudit.Accessibility.${func}(document.querySelector("#${target}"))`;
|
|
}
|
|
|
|
if (role)
|
|
return `WebInspectorAudit.Accessibility.${func}("${role}")`;
|
|
}
|
|
|
|
const tests = [
|
|
{ func: "getElementsByComputedRole", role: "FakeRole" },
|
|
{ func: "getElementsByComputedRole", role: "FakeRole", target: "parent" },
|
|
{ func: "getElementsByComputedRole", role: "tree" },
|
|
{ func: "getElementsByComputedRole", role: "tree", target: "parent" },
|
|
{ func: "getElementsByComputedRole", role: "button" },
|
|
{ func: "getElementsByComputedRole", role: "button", target: "parent" },
|
|
|
|
{ func: "getActiveDescendant", target: "parent" },
|
|
{ func: "getActiveDescendant", target: "child" },
|
|
|
|
{ func: "getChildNodes", target: "parent" },
|
|
{ func: "getChildNodes", target: "child" },
|
|
|
|
{ func: "getComputedProperties", target: "parent" },
|
|
{ func: "getComputedProperties", target: "child" },
|
|
|
|
{ func: "getControlledNodes", target: "parent" },
|
|
{ func: "getControlledNodes", target: "child" },
|
|
|
|
{ func: "getFlowedNodes", target: "parent" },
|
|
{ func: "getFlowedNodes", target: "child" },
|
|
|
|
{ func: "getMouseEventNode", target: "parent" },
|
|
{ func: "getMouseEventNode", target: "child" },
|
|
|
|
{ func: "getOwnedNodes", target: "parent" },
|
|
{ func: "getOwnedNodes", target: "child" },
|
|
|
|
{ func: "getParentNode", target: "parent" },
|
|
{ func: "getParentNode", target: "child" },
|
|
|
|
{ func: "getSelectedChildNodes", target: "parent" },
|
|
{ func: "getSelectedChildNodes", target: "child" },
|
|
];
|
|
|
|
for (let {func, target, role} of tests) {
|
|
suite.addTestCase({
|
|
name: "Audit.run.Accessibility." + func + (role ? "." + role : "") + (target ? "." + target : ""),
|
|
async test() {
|
|
let functionString = evaluateStringForTest(func, target, role);
|
|
|
|
await InspectorTest.Audit.setupAudit();
|
|
|
|
InspectorTest.log(`Audit run \`${functionString}\`...`);
|
|
let {result, wasThrown} = await AuditAgent.run(`function() { return stringify(${functionString}); }`);
|
|
InspectorTest.assert(!wasThrown, "Should not throw an exception.");
|
|
if (!wasThrown)
|
|
InspectorTest.log("Result: " + result.value);
|
|
else
|
|
InspectorTest.log(result.description);
|
|
|
|
await InspectorTest.Audit.teardownAudit();
|
|
},
|
|
});
|
|
}
|
|
|
|
suite.addTestCase({
|
|
name: "Audit.run.Accessibility.InvalidCopiedFunctionCall",
|
|
description: "Check that WebInspectorAudit.Accessibility functions throw an error when called outside of an audit.",
|
|
async test() {
|
|
let functions = new Map;
|
|
for (let test of tests)
|
|
functions.set(test.func, test);
|
|
|
|
await InspectorTest.Audit.setupAudit();
|
|
InspectorTest.log(`Copying WebInspectorAudit to window...`);
|
|
let {wasThrown} = await AuditAgent.run(`function() { window.CopiedWebInspectorAudit = WebInspectorAudit; }`);
|
|
InspectorTest.assert(!wasThrown, "Should not throw an exception.");
|
|
await InspectorTest.Audit.teardownAudit();
|
|
|
|
for (let {func, target, role} of functions.values()) {
|
|
InspectorTest.log(`Testing copied ${func}...`);
|
|
await InspectorTest.expectException(async function() {
|
|
await InspectorTest.evaluateInPage("window.Copied" + evaluateStringForTest(func, target, role));
|
|
});
|
|
}
|
|
},
|
|
});
|
|
|
|
suite.runTestCasesAndFinish();
|
|
}
|
|
</script>
|
|
</head>
|
|
<body onload="runTest()">
|
|
<p>Tests for the injected WebInspectorAudit.Accessibility functions.</p>
|
|
<ul id="parent" role="tree" aria-activedescendant="child" aria-controls="child" aria-flowto="child" aria-owns="child" onclick="void(0);">
|
|
<li id="child" role="treeitem" aria-selected="true"></li>
|
|
</ul>
|
|
<button id="button"></button>
|
|
<a id="link" role="button"></a>
|
|
<div id="fakeRole" role="fakeRole"></div>
|
|
</body>
|
|
</html>
|