| <!DOCTYPE HTML> |
| <html> |
| <body> |
| <script src="../../resources/js-test-pre.js"></script> |
| |
| <math id="row"> |
| <mrow><mi>a</mi><mn>2</mn></mrow> |
| </math><br> |
| |
| <math id="fraction"> |
| <mfrac><mi id="fractionNumerator">a</mi><mn id="fractionDenominator">2</mn></mfrac> |
| </math><br> |
| |
| <math id="sqrt"> |
| <msqrt><mi id="sqrtRadicand">a</mi></msqrt> |
| </math><br> |
| |
| <math id="root"> |
| <mroot><mn id="rootRadicand">3</mn><mi id="rootIndex">a</mi></mroot> |
| </math><br> |
| |
| <math id="fenced"> |
| <mfenced open="{" close="}" separators=",,"><mi>2</mi><mi>a</mi><mi>e</mi></mfenced> |
| </math><br> |
| |
| <math id="sub"> |
| <msub><mi id="subBase">2</mi><mtext id="subSub">sub</mtext></msub> |
| </math><br> |
| |
| <math id="sup"> |
| <msup><mi id="supBase">2</mi><mtext id="supSup">sup</mtext></msup> |
| </math><br> |
| |
| <math id="subsup"> |
| <msubsup><mi id="subsupBase">2</mi><mtext id="subsupSub">sub</mtext><mtext id="subsupSup">sup</mtext></msubsup> |
| </math><br> |
| |
| <math id="under"> |
| <munder><mi id="underBase">3</mi><mtext id="underUnder">under</mtext></munder> |
| </math><br> |
| |
| <math id="over"> |
| <mover><mi id="overBase">3</mi><mtext id="overOver">over</mtext></mover> |
| </math><br> |
| |
| <math id="underover"> |
| <munderover><mi id="underOverBase">3</mi><mtext id="underOverUnder">under</mtext><mtext id="underOverOver">over</mtext></munderover> |
| </math><br> |
| |
| <math id="table"> |
| <mtable> |
| <mtr><mtd><mi>3</mi></mtd></mtr> |
| <mtr><mtd><mi>2</mi></mtd></mtr> |
| <mtr><mtd><mi>1</mi></mtd></mtr> |
| </mtable> |
| </math> |
| |
| |
| <div id="console"></div> |
| <script> |
| |
| description("This tests ensures that Mac specific attributes and roles for MathML elements work as expected.") |
| |
| if (window.testRunner && window.accessibilityController) { |
| |
| // Row |
| var row = accessibilityController.accessibleElementById("row").childAtIndex(0); |
| shouldBe("row.role", "'AXRole: AXGroup'"); |
| shouldBe("row.subrole", "'AXSubrole: AXMathRow'"); |
| shouldBe("row.childAtIndex(0).subrole", "'AXSubrole: AXMathIdentifier'"); |
| shouldBe("row.childAtIndex(0).childAtIndex(0).stringValue", "'AXValue: a'"); |
| shouldBe("row.childAtIndex(1).subrole", "'AXSubrole: AXMathNumber'"); |
| shouldBe("row.childAtIndex(1).childAtIndex(0).stringValue", "'AXValue: 2'"); |
| |
| // Fraction |
| var fraction = accessibilityController.accessibleElementById("fraction").childAtIndex(0); |
| shouldBe("fraction.subrole", "'AXSubrole: AXMathFraction'"); |
| var fractionDenominator = fraction.uiElementAttributeValue("AXMathFractionDenominator"); |
| var fractionNumerator = fraction.uiElementAttributeValue("AXMathFractionNumerator"); |
| shouldBe("fractionDenominator.subrole", "'AXSubrole: AXMathNumber'"); |
| shouldBe("fractionDenominator.childAtIndex(0).stringValue", "'AXValue: 2'"); |
| shouldBeTrue("fractionDenominator.isEqual(accessibilityController.accessibleElementById('fractionDenominator'))"); |
| shouldBe("fractionNumerator.subrole", "'AXSubrole: AXMathIdentifier'"); |
| shouldBe("fractionNumerator.childAtIndex(0).stringValue", "'AXValue: a'"); |
| shouldBeTrue("fractionNumerator.isEqual(accessibilityController.accessibleElementById('fractionNumerator'))"); |
| |
| // Square root |
| var sqrt = accessibilityController.accessibleElementById("sqrt").childAtIndex(0); |
| shouldBe("sqrt.role", "'AXRole: AXGroup'"); |
| shouldBe("sqrt.subrole", "'AXSubrole: AXMathSquareRoot'"); |
| shouldBe("sqrt.mathRootRadicand.length", "1"); |
| var sqrtRadicand = sqrt.mathRootRadicand[0]; |
| shouldBe("sqrtRadicand.subrole", "'AXSubrole: AXMathIdentifier'"); |
| shouldBe("sqrtRadicand.childAtIndex(0).stringValue", "'AXValue: a'"); |
| shouldBeTrue("sqrtRadicand.isEqual(accessibilityController.accessibleElementById('sqrtRadicand'))"); |
| |
| // Generic root |
| var root = accessibilityController.accessibleElementById("root").childAtIndex(0); |
| shouldBe("root.role", "'AXRole: AXGroup'"); |
| shouldBe("root.subrole", "'AXSubrole: AXMathRoot'"); |
| var rootIndex = root.uiElementAttributeValue("AXMathRootIndex"); |
| shouldBe("root.mathRootRadicand.length", "1"); |
| var rootRadicand = root.mathRootRadicand[0]; |
| shouldBeTrue("rootIndex.isEqual(accessibilityController.accessibleElementById('rootIndex'))"); |
| shouldBeTrue("rootRadicand.isEqual(accessibilityController.accessibleElementById('rootRadicand'))"); |
| |
| // Fenced |
| var fenced = accessibilityController.accessibleElementById("fenced").childAtIndex(0); |
| shouldBe("fenced.role", "'AXRole: AXGroup'"); |
| shouldBe("fenced.subrole", "'AXSubrole: AXMathFenced'"); |
| shouldBe("fenced.stringAttributeValue('AXMathFencedOpen')", "'{'"); |
| shouldBe("fenced.stringAttributeValue('AXMathFencedClose')", "'}'"); |
| var fenceValues = new Array("{", "2", ",", "a", ",", "e", "}"); |
| for (var k = 0; k < fenceValues.length; k++) { |
| var child = fenced.childAtIndex(k); |
| if (!child.childAtIndex(0)) |
| shouldBe("child.stringValue", "'AXValue: " + fenceValues[k] + "'"); |
| else |
| shouldBe("child.childAtIndex(0).stringValue", "'AXValue: " + fenceValues[k] + "'"); |
| } |
| |
| // Subscript |
| var sub = accessibilityController.accessibleElementById("sub").childAtIndex(0); |
| shouldBe("sub.role", "'AXRole: AXGroup'"); |
| shouldBe("sub.subrole", "'AXSubrole: AXMathSubscriptSuperscript'"); |
| var subBase = sub.uiElementAttributeValue("AXMathBase"); |
| shouldBe("subBase.subrole", "'AXSubrole: AXMathIdentifier'"); |
| var subSub = sub.uiElementAttributeValue("AXMathSubscript"); |
| shouldBe("subSub.subrole", "'AXSubrole: AXMathText'"); |
| shouldBeTrue("subBase.isEqual(accessibilityController.accessibleElementById('subBase'))"); |
| shouldBeTrue("subSub.isEqual(accessibilityController.accessibleElementById('subSub'))"); |
| |
| // Superscript |
| var sup = accessibilityController.accessibleElementById("sup").childAtIndex(0); |
| shouldBe("sup.role", "'AXRole: AXGroup'"); |
| shouldBe("sup.subrole", "'AXSubrole: AXMathSubscriptSuperscript'"); |
| var supBase = sup.uiElementAttributeValue("AXMathBase"); |
| shouldBe("supBase.subrole", "'AXSubrole: AXMathIdentifier'"); |
| var supSup = sup.uiElementAttributeValue("AXMathSuperscript"); |
| shouldBe("supSup.subrole", "'AXSubrole: AXMathText'"); |
| shouldBeTrue("supBase.isEqual(accessibilityController.accessibleElementById('supBase'))"); |
| shouldBeTrue("supSup.isEqual(accessibilityController.accessibleElementById('supSup'))"); |
| |
| // Subsuperscript |
| var subsup = accessibilityController.accessibleElementById("subsup").childAtIndex(0); |
| shouldBe("subsup.role", "'AXRole: AXGroup'"); |
| shouldBe("subsup.subrole", "'AXSubrole: AXMathSubscriptSuperscript'"); |
| var subsupBase = subsup.uiElementAttributeValue("AXMathBase"); |
| shouldBe("subsupBase.subrole", "'AXSubrole: AXMathIdentifier'"); |
| var subsupSup = subsup.uiElementAttributeValue("AXMathSuperscript"); |
| shouldBe("subsupSup.subrole", "'AXSubrole: AXMathText'"); |
| var subsupSub = subsup.uiElementAttributeValue("AXMathSubscript"); |
| shouldBe("subsupSub.subrole", "'AXSubrole: AXMathText'"); |
| shouldBeTrue("subsupBase.isEqual(accessibilityController.accessibleElementById('subsupBase'))"); |
| shouldBeTrue("subsupSub.isEqual(accessibilityController.accessibleElementById('subsupSub'))"); |
| shouldBeTrue("subsupSup.isEqual(accessibilityController.accessibleElementById('subsupSup'))"); |
| |
| // Under |
| var under = accessibilityController.accessibleElementById("under").childAtIndex(0); |
| shouldBe("under.role", "'AXRole: AXGroup'"); |
| shouldBe("under.subrole", "'AXSubrole: AXMathUnderOver'"); |
| var underBase = under.uiElementAttributeValue("AXMathBase"); |
| shouldBe("underBase.subrole", "'AXSubrole: AXMathIdentifier'"); |
| var underUnder = under.uiElementAttributeValue("AXMathUnder"); |
| shouldBe("underUnder.subrole", "'AXSubrole: AXMathText'"); |
| shouldBeTrue("underUnder.isEqual(accessibilityController.accessibleElementById('underUnder'))"); |
| |
| // Over |
| var over = accessibilityController.accessibleElementById("over").childAtIndex(0); |
| shouldBe("over.role", "'AXRole: AXGroup'"); |
| shouldBe("over.subrole", "'AXSubrole: AXMathUnderOver'"); |
| var overBase = over.uiElementAttributeValue("AXMathBase"); |
| shouldBe("overBase.subrole", "'AXSubrole: AXMathIdentifier'"); |
| var overOver = over.uiElementAttributeValue("AXMathOver"); |
| shouldBe("overOver.subrole", "'AXSubrole: AXMathText'"); |
| shouldBeTrue("overBase.isEqual(accessibilityController.accessibleElementById('overBase'))"); |
| shouldBeTrue("overOver.isEqual(accessibilityController.accessibleElementById('overOver'))"); |
| |
| // UnderOver |
| var underover = accessibilityController.accessibleElementById("underover").childAtIndex(0); |
| shouldBe("underover.role", "'AXRole: AXGroup'"); |
| shouldBe("underover.subrole", "'AXSubrole: AXMathUnderOver'"); |
| var underOverBase = underover.uiElementAttributeValue("AXMathBase"); |
| shouldBe("underOverBase.subrole", "'AXSubrole: AXMathIdentifier'"); |
| var underOverUnder = underover.uiElementAttributeValue("AXMathUnder"); |
| shouldBe("underOverUnder.subrole", "'AXSubrole: AXMathText'"); |
| var underOverOver = underover.uiElementAttributeValue("AXMathOver"); |
| shouldBe("underOverOver.subrole", "'AXSubrole: AXMathText'"); |
| shouldBeTrue("underOverBase.isEqual(accessibilityController.accessibleElementById('underOverBase'))"); |
| shouldBeTrue("underOverUnder.isEqual(accessibilityController.accessibleElementById('underOverUnder'))"); |
| shouldBeTrue("underOverOver.isEqual(accessibilityController.accessibleElementById('underOverOver'))"); |
| |
| // Table |
| var table = accessibilityController.accessibleElementById("table").childAtIndex(0); |
| shouldBe("table.role", "'AXRole: AXGroup'"); |
| shouldBe("table.subrole", "'AXSubrole: AXMathTable'"); |
| var row = table.childAtIndex(0); |
| shouldBe("row.subrole", "'AXSubrole: AXMathTableRow'"); |
| var cell = row.childAtIndex(0); |
| shouldBe("cell.subrole", "'AXSubrole: AXMathTableCell'"); |
| shouldBe("cell.childAtIndex(0).subrole", "'AXSubrole: AXMathIdentifier'"); |
| } |
| |
| </script> |
| |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |