Bug 1598026 - add OOP frame mutation tests. Re-enable oop tree expansion test. r=jdescottes

Differential Revision: https://phabricator.services.mozilla.com/D78596
This commit is contained in:
Yura Zenevich 2020-06-12 17:32:45 +00:00
Родитель 7c46c9c1a3
Коммит dbf76d8e3e
2 изменённых файлов: 158 добавлений и 83 удалений

Просмотреть файл

@ -35,6 +35,5 @@ skip-if = (os == 'linux' && debug && bits == 64) # Bug 1511247
[browser_accessibility_tree_audit.js]
[browser_accessibility_tree_contrast.js]
[browser_accessibility_tree_nagivation_oop.js]
skip-if = true # Bug 1632567
[browser_accessibility_tree_nagivation.js]
[browser_accessibility_tree.js]

Просмотреть файл

@ -14,29 +14,16 @@ const TEST_URI = `<html>
</body>
</html>`;
/**
* Test data has the format of:
* {
* desc {String} description for better logging
* setup {Function} An optional setup that needs to be performed before
* the state of the tree and the sidebar can be checked.
* expected {JSON} An expected states for the tree and the sidebar.
* }
*/
const tests = [
{
desc: "Expand first and second rows, select third row.",
setup: async ({ doc }) => {
await toggleRow(doc, 0);
await toggleRow(doc, 1);
selectRow(doc, 3);
},
expected: {
tree: [
{
const documentRow = {
role: "document",
name: `"Accessibility Panel Test"`,
},
};
const documentRowOOP = {
role: "document",
name: `""text label`,
badges: ["text label"],
};
const subtree = [
{
role: "heading",
name: `"Top level header"`,
@ -49,8 +36,26 @@ const tests = [
role: "paragraph",
name: `""`,
},
],
sidebar: {
];
const frameSubtree = [
{ role: "internal frame", name: `"Accessibility Panel Test (OOP)"` },
{
role: "document",
name: `"Accessibility Panel Test (OOP)"`,
},
];
const subtreeOOP = [...frameSubtree, ...subtree];
const renamed = [
{
role: "heading",
name: `"New Header"`,
},
{
role: "text leaf",
name: `"New Header"`,
},
];
const paragraphSidebar = {
name: null,
role: "paragraph",
actions: [],
@ -60,82 +65,153 @@ const tests = [
childCount: 1,
indexInParent: 1,
states: ["selectable text", "opaque", "enabled", "sensitive"],
};
const headerSidebar = {
name: "Top level header",
role: "text leaf",
};
const newHeaderSidebar = {
name: "New Header",
};
function removeRow(rowNumber) {
return async ({ doc, browser }) => {
is(
doc.querySelectorAll(".treeRow").length,
rowNumber,
"Tree size is correct."
);
await SpecialPowers.spawn(browser, [], async () => {
const iframe = content.document.getElementsByTagName("iframe")[0];
if (iframe) {
await SpecialPowers.spawn(iframe, [], () =>
content.document.getElementById("p").remove()
);
return;
}
content.document.getElementById("p").remove();
});
await BrowserTestUtils.waitForCondition(
() => doc.querySelectorAll(".treeRow").length === rowNumber - 1,
"Tree updated."
);
};
}
async function rename({ browser }) {
await SpecialPowers.spawn(browser, [], async () => {
const iframe = content.document.getElementsByTagName("iframe")[0];
if (iframe) {
await SpecialPowers.spawn(
iframe,
[],
() => (content.document.getElementById("h1").textContent = "New Header")
);
return;
}
content.document.getElementById("h1").textContent = "New Header";
});
}
/**
* Test data has the format of:
* {
* desc {String} description for better logging
* setup {Function} An optional setup that needs to be performed before
* the state of the tree and the sidebar can be checked.
* expected {JSON} An expected states for the tree and the sidebar.
* }
*/
const testsTopLevel = [
{
desc: "Expand first and second rows, select third row.",
setup: async ({ doc }) => {
await toggleRow(doc, 0);
await toggleRow(doc, 1);
selectRow(doc, 3);
},
expected: {
tree: [documentRow, ...subtree],
sidebar: paragraphSidebar,
},
},
{
desc: "Remove a child from a document.",
setup: async ({ doc, browser }) => {
is(doc.querySelectorAll(".treeRow").length, 4, "Tree size is correct.");
await SpecialPowers.spawn(browser, [], () =>
content.document.getElementById("p").remove()
);
await BrowserTestUtils.waitForCondition(
() => doc.querySelectorAll(".treeRow").length === 3,
"Tree updated."
);
},
setup: removeRow(4),
expected: {
tree: [
{
role: "document",
name: `"Accessibility Panel Test"`,
},
{
role: "heading",
name: `"Top level header"`,
},
{
role: "text leaf",
name: `"Top level header"`,
},
],
sidebar: {
name: "Top level header",
role: "text leaf",
},
tree: [documentRow, ...subtree.slice(0, -1)],
sidebar: headerSidebar,
},
},
{
desc: "Update child's text content.",
setup: async ({ browser }) => {
await SpecialPowers.spawn(browser, [], () => {
content.document.getElementById("h1").textContent = "New Header";
});
},
setup: rename,
expected: {
tree: [
{
role: "document",
name: `"Accessibility Panel Test"`,
},
{
role: "heading",
name: `"New Header"`,
},
{
role: "text leaf",
name: `"New Header"`,
},
],
tree: [documentRow, ...renamed],
},
},
{
desc: "Select third row in the tree.",
setup: ({ doc }) => selectRow(doc, 1),
expected: {
sidebar: {
name: "New Header",
sidebar: newHeaderSidebar,
},
},
];
const testsOOP = [
{
desc: "Expand rows until we reach an internal OOP frame.",
setup: async ({ doc }) => {
await toggleRow(doc, 0);
await toggleRow(doc, 1);
await toggleRow(doc, 2);
await toggleRow(doc, 3);
selectRow(doc, 5);
},
expected: {
tree: [documentRowOOP, ...subtreeOOP],
sidebar: paragraphSidebar,
},
},
{
desc: "Remove a child from a document.",
setup: removeRow(6),
expected: {
tree: [documentRowOOP, ...subtreeOOP.slice(0, -1)],
sidebar: headerSidebar,
},
},
{
desc: "Update child's text content.",
setup: rename,
expected: {
tree: [documentRowOOP, ...frameSubtree, ...renamed],
},
},
{
desc: "Select third row in the tree.",
setup: ({ doc }) => selectRow(doc, 1),
expected: {
sidebar: newHeaderSidebar,
},
},
];
/**
* Test that checks the Accessibility panel after DOM tree mutations.
* Tests that checks the Accessibility panel after DOM tree mutations.
*/
addA11yPanelTestsTask(
tests,
testsTopLevel,
TEST_URI,
"Test Accessibility panel after DOM tree mutations."
);
addA11yPanelTestsTask(
testsOOP,
TEST_URI,
"Test Accessibility panel after DOM tree mutations in the OOP frame.",
{ remoteIframe: true }
);