| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../resources/js-test.js"></script> |
| <script src="../resources/accessibility-helper.js"></script> |
| </head> |
| <body> |
| |
| <div id="content"> |
| <div id="role-document-container" role="document"> |
| <div id="outer-group" role="group" aria-label="Outer group label"> |
| <div id="inner-group" role="group" aria-label="Inner group label"> |
| Some text |
| </div> |
| </div> |
| </div> |
| |
| <div id="role-web-application-container" role="application"> |
| </div> |
| |
| <div role="application"> |
| <div id="application-document-container" role="document"> |
| </div> |
| </div> |
| |
| <dl> |
| <dd id="description-definition-container"></dd> |
| </dl> |
| |
| <dl> |
| <dt id="description-term-container"></dt> |
| </dl> |
| |
| <table> |
| <thead> |
| <tr> |
| <th colspan="2">The table header</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td id="td-table-cell"></td> |
| <span id="span-table-cell" role="cell"></span> |
| </tr> |
| </tbody> |
| </table> |
| |
| <div id="role-group-container" role="group"> |
| </div> |
| </div> |
| |
| <script> |
| description("This test ensures accessibility elements properly track their ancestor types."); |
| var element; |
| |
| async function shouldBeForAllDescendants(startElementId, expectedPropertyValues) { |
| debug(`Verifying ${JSON.stringify(expectedPropertyValues)} for all descendants of ${startElementId}.`); |
| |
| let elementsToCheck = [await waitForElementById(startElementId)]; |
| while (elementsToCheck.length) { |
| element = elementsToCheck.pop(); |
| if (!element) |
| continue; |
| |
| let elementChildCount = element.childrenCount; |
| for (let i = 0; i < elementChildCount; i++) { |
| elementsToCheck.push(element.childAtIndex(i)); |
| } |
| |
| for (const [property, expectedValue] of Object.entries(expectedPropertyValues)) { |
| shouldBe(`element.${property}`, expectedValue); |
| } |
| } |
| debug(`Finished verifying ${JSON.stringify(expectedPropertyValues)} for all descendants of ${startElementId}.`); |
| debug(""); |
| } |
| |
| if (window.accessibilityController) { |
| window.jsTestIsAsync = true; |
| const outerGroupId = "outer-group"; |
| |
| setTimeout(async function() { |
| // The outer-group starts as a child of the document-role container. |
| await shouldBeForAllDescendants(outerGroupId, { |
| "hasWebApplicationAncestor": "false", |
| "hasDocumentRoleAncestor": "true" |
| }); |
| |
| document.getElementById("role-group-container").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, {"hasDocumentRoleAncestor": "false"}); |
| |
| document.getElementById("role-web-application-container").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, { |
| "hasWebApplicationAncestor": "true", |
| "hasDocumentRoleAncestor": "false" |
| }); |
| |
| document.getElementById("role-group-container").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, { |
| "hasWebApplicationAncestor": "false", |
| "hasDocumentRoleAncestor": "false" |
| }); |
| |
| document.getElementById("application-document-container").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, { |
| "hasWebApplicationAncestor": "true", |
| "hasDocumentRoleAncestor": "true" |
| }); |
| |
| document.getElementById("role-group-container").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, { |
| "hasWebApplicationAncestor": "false", |
| "hasDocumentRoleAncestor": "false" |
| }); |
| |
| document.getElementById("description-definition-container").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, { |
| "hasWebApplicationAncestor": "false", |
| "hasDocumentRoleAncestor": "false", |
| "isInDescriptionListDetail": "true" |
| }); |
| |
| document.getElementById("description-term-container").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, { |
| "hasWebApplicationAncestor": "false", |
| "hasDocumentRoleAncestor": "false", |
| "isInDescriptionListDetail": "false", |
| "isInDescriptionListTerm": "true" |
| }); |
| |
| document.getElementById("role-group-container").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, { |
| "isInDescriptionListTerm": "false", |
| "isInCell": "false" |
| }); |
| |
| document.getElementById("td-table-cell").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, { |
| "isInCell": "true" |
| }); |
| |
| document.getElementById("role-group-container").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, { |
| "isInCell": "false" |
| }); |
| |
| document.getElementById("span-table-cell").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, { |
| "isInCell": "true" |
| }); |
| |
| document.getElementById("role-group-container").appendChild(document.getElementById(outerGroupId)); |
| await shouldBeForAllDescendants(outerGroupId, { |
| "hasWebApplicationAncestor": "false", |
| "hasDocumentRoleAncestor": "false", |
| "isInDescriptionListDetail": "false", |
| "isInDescriptionListTerm": "false", |
| "isInCell": "false" |
| }); |
| |
| document.getElementById("content").style.visibility = "hidden"; |
| finishJSTest(); |
| }, 0); |
| } |
| </script> |
| </body> |
| </html> |
| |