/* 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"; /* import-globals-from ../../mochitest/attributes.js */ loadScripts({ name: "attributes.js", dir: MOCHITESTS_DIR }); addAccessibleTask( "mac/doc_tree.xhtml", async (browser, accDoc) => { const tree = getNativeInterface(accDoc, "tree"); is( tree.getAttributeValue("AXRole"), "AXOutline", "Found tree with role outline" ); // XUL trees store all rows as direct children of the outline, // so we should see nine here instead of just three: // (Groceries, Fruits, Veggies) const treeChildren = tree.getAttributeValue("AXChildren"); is(treeChildren.length, 9, "Found nine direct children"); const treeCols = tree.getAttributeValue("AXColumns"); is(treeCols.length, 1, "Found one column in tree"); // Here, we should get only outline rows, not the title const treeRows = tree.getAttributeValue("AXRows"); is(treeRows.length, 8, "Found 8 total rows"); is( treeRows[0].getAttributeValue("AXDescription"), "Fruits", "Located correct first row, row has correct desc" ); is( treeRows[0].getAttributeValue("AXDisclosing"), 1, "Fruits is disclosing" ); is( treeRows[0].getAttributeValue("AXDisclosedByRow"), null, "Fruits is disclosed by outline" ); is( treeRows[0].getAttributeValue("AXDisclosureLevel"), 0, "Fruits is level zero" ); let disclosedRows = treeRows[0].getAttributeValue("AXDisclosedRows"); is(disclosedRows.length, 2, "Fruits discloses two rows"); is( disclosedRows[0].getAttributeValue("AXDescription"), "Apple", "fruits discloses apple" ); is( disclosedRows[1].getAttributeValue("AXDescription"), "Orange", "fruits discloses orange" ); is( treeRows[1].getAttributeValue("AXDescription"), "Apple", "Located correct second row, row has correct desc" ); is( treeRows[1].getAttributeValue("AXDisclosing"), 0, "Apple is not disclosing" ); is( treeRows[1] .getAttributeValue("AXDisclosedByRow") .getAttributeValue("AXDescription"), "Fruits", "Apple is disclosed by fruits" ); is( treeRows[1].getAttributeValue("AXDisclosureLevel"), 1, "Apple is level one" ); is( treeRows[1].getAttributeValue("AXDisclosedRows").length, 0, "Apple does not disclose rows" ); is( treeRows[2].getAttributeValue("AXDescription"), "Orange", "Located correct third row, row has correct desc" ); is( treeRows[2].getAttributeValue("AXDisclosing"), 0, "Orange is not disclosing" ); is( treeRows[2] .getAttributeValue("AXDisclosedByRow") .getAttributeValue("AXDescription"), "Fruits", "Orange is disclosed by fruits" ); is( treeRows[2].getAttributeValue("AXDisclosureLevel"), 1, "Orange is level one" ); is( treeRows[2].getAttributeValue("AXDisclosedRows").length, 0, "Orange does not disclose rows" ); is( treeRows[3].getAttributeValue("AXDescription"), "Veggies", "Located correct fourth row, row has correct desc" ); is( treeRows[3].getAttributeValue("AXDisclosing"), 1, "Veggies is disclosing" ); is( treeRows[3].getAttributeValue("AXDisclosedByRow"), null, "Veggies is disclosed by outline" ); is( treeRows[3].getAttributeValue("AXDisclosureLevel"), 0, "Veggies is level zero" ); disclosedRows = treeRows[3].getAttributeValue("AXDisclosedRows"); is(disclosedRows.length, 2, "Veggies discloses two rows"); is( disclosedRows[0].getAttributeValue("AXDescription"), "Green Veggies", "Veggies discloses green veggies" ); is( disclosedRows[1].getAttributeValue("AXDescription"), "Squash", "Veggies discloses squash" ); is( treeRows[4].getAttributeValue("AXDescription"), "Green Veggies", "Located correct fifth row, row has correct desc" ); is( treeRows[4].getAttributeValue("AXDisclosing"), 1, "Green veggies is disclosing" ); is( treeRows[4] .getAttributeValue("AXDisclosedByRow") .getAttributeValue("AXDescription"), "Veggies", "Green Veggies is disclosed by veggies" ); is( treeRows[4].getAttributeValue("AXDisclosureLevel"), 1, "Green veggies is level one" ); disclosedRows = treeRows[4].getAttributeValue("AXDisclosedRows"); is(disclosedRows.length, 2, "Green veggies has two rows"); is( disclosedRows[0].getAttributeValue("AXDescription"), "Spinach", "Green veggies discloses spinach" ); is( disclosedRows[1].getAttributeValue("AXDescription"), "Peas", "Green veggies discloses peas" ); is( treeRows[5].getAttributeValue("AXDescription"), "Spinach", "Located correct sixth row, row has correct desc" ); is( treeRows[5].getAttributeValue("AXDisclosing"), 0, "Spinach is not disclosing" ); is( treeRows[5] .getAttributeValue("AXDisclosedByRow") .getAttributeValue("AXDescription"), "Green Veggies", "Spinach is disclosed by green veggies" ); is( treeRows[5].getAttributeValue("AXDisclosureLevel"), 2, "Spinach is level two" ); is( treeRows[5].getAttributeValue("AXDisclosedRows").length, 0, "Spinach does not disclose rows" ); is( treeRows[6].getAttributeValue("AXDescription"), "Peas", "Located correct seventh row, row has correct desc" ); is( treeRows[6].getAttributeValue("AXDisclosing"), 0, "Peas is not disclosing" ); is( treeRows[6] .getAttributeValue("AXDisclosedByRow") .getAttributeValue("AXDescription"), "Green Veggies", "Peas is disclosed by green veggies" ); is( treeRows[6].getAttributeValue("AXDisclosureLevel"), 2, "Peas is level two" ); is( treeRows[6].getAttributeValue("AXDisclosedRows").length, 0, "Peas does not disclose rows" ); is( treeRows[7].getAttributeValue("AXDescription"), "Squash", "Located correct eighth row, row has correct desc" ); is( treeRows[7].getAttributeValue("AXDisclosing"), 0, "Squash is not disclosing" ); is( treeRows[7] .getAttributeValue("AXDisclosedByRow") .getAttributeValue("AXDescription"), "Veggies", "Squash is disclosed by veggies" ); is( treeRows[7].getAttributeValue("AXDisclosureLevel"), 1, "Squash is level one" ); is( treeRows[7].getAttributeValue("AXDisclosedRows").length, 0, "Squash does not disclose rows" ); }, { topLevel: false, chrome: true } );