summaryrefslogtreecommitdiffstats
path: root/accessible/tests/mochitest/test_custom_element_accessibility_defaults.html
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /accessible/tests/mochitest/test_custom_element_accessibility_defaults.html
parentInitial commit. (diff)
downloadfirefox-upstream.tar.xz
firefox-upstream.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'accessible/tests/mochitest/test_custom_element_accessibility_defaults.html')
-rw-r--r--accessible/tests/mochitest/test_custom_element_accessibility_defaults.html383
1 files changed, 383 insertions, 0 deletions
diff --git a/accessible/tests/mochitest/test_custom_element_accessibility_defaults.html b/accessible/tests/mochitest/test_custom_element_accessibility_defaults.html
new file mode 100644
index 0000000000..28e337ed8e
--- /dev/null
+++ b/accessible/tests/mochitest/test_custom_element_accessibility_defaults.html
@@ -0,0 +1,383 @@
+<!DOCTYPE html>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1665151
+-->
+<head>
+ <title>Test for default accessibility semantics for custom elements</title>
+ <link rel="stylesheet" type="text/css"
+ href="chrome://mochikit/content/tests/SimpleTest/test.css">
+ <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="common.js"></script>
+ <script src="attributes.js"></script>
+ <script src="role.js"></script>
+ <script src="states.js"></script>
+ <script src="value.js"></script>
+ <script src="name.js"></script>
+ <script src="promisified-events.js"></script>
+ <script>
+[
+ ["role", "math", () => {}],
+ ["atomic", "toolbar", internals => internals.ariaAtomic = "true"],
+ ["autocomplete", "textbox", internals => internals.ariaAutoComplete = "inline"],
+ ["busy", "feed", internals => internals.ariaBusy = "true"],
+ ["checked", "checkbox", internals => internals.ariaChecked = "true"],
+ ["colcount", "grid", internals => internals.ariaColCount = "1"],
+ ["col", "gridcell", internals => {
+ internals.ariaColIndex = "1";
+ internals.ariaColIndexText = "Default";
+ internals.ariaColSpan = "1";
+ }],
+ ["current", "listitem", internals => internals.ariaCurrent = "page"],
+ ["description", "note", internals => internals.ariaDescription = "Default"],
+ ["disabled", "button", internals => internals.ariaDisabled = "true"],
+ ["expanded", "button", internals => internals.ariaExpanded = "true"],
+ ["haspopup", "button", internals => internals.ariaHasPopup = "true"],
+ ["hidden", "region", internals => internals.ariaHidden = "false"],
+ ["invalid", "textbox", internals => internals.ariaInvalid = "true"],
+ ["keyshortcuts", "button", internals => internals.ariaKeyShortcuts = "Alt+Shift+A"],
+ ["label", "button", internals => internals.ariaLabel = "Default"],
+ ["level", "heading", internals => internals.ariaLevel = "1"],
+ ["live", "region", internals => internals.ariaLive = "polite"],
+ ["modal", "dialog", internals => internals.ariaModal = "true"],
+ ["multiline", "textbox", internals => internals.ariaMultiLine = "true"],
+ ["multiselectable", "listbox", internals => internals.ariaMultiSelectable = "true"],
+ ["orientation", "menu", internals => internals.ariaOrientation = "vertical"],
+ ["placeholder", "textbox", internals => internals.ariaPlaceholder = "Default"],
+ ["posinset", "option", internals => internals.ariaPosInSet = "1"],
+ ["pressed", "button", internals => internals.ariaPressed = "true"],
+ ["readonly", "textbox", internals => internals.ariaReadOnly = "true"],
+ ["relevant", "region", internals => internals.ariaRelevant = "all"],
+ ["required", "textbox", internals => internals.ariaRequired = "true"],
+ ["roledescription", "region", internals => internals.ariaRoleDescription = "Default"],
+ ["rowcount", "grid", internals => internals.ariaRowCount = "1"],
+ ["row", "row", internals => {
+ internals.ariaRowIndex = "1";
+ internals.ariaRowIndexText = "Default";
+ }],
+ ["rowspan", "cell", internals => internals.ariaRowSpan = "1"],
+ ["selected", "option", internals => internals.ariaSelected = "true"],
+ ["setsize", "listitem", internals => internals.ariaSetSize = "1"],
+ ["sort", "columnheader", internals => internals.ariaSort = "ascending"],
+ ["value", "slider", internals => {
+ internals.ariaValueNow = "5";
+ internals.ariaValueMin = "1";
+ internals.ariaValueMax = "10";
+ internals.ariaValueText = "Default";
+ }],
+].forEach(([name, role, apply]) => {
+ customElements.define(`custom-${name}`,
+ class extends HTMLElement {
+ constructor() {
+ super();
+ this._internals = this.attachInternals();
+ this._internals.role = role;
+ apply(this._internals);
+ }
+ get internals() {
+ return this._internals;
+ }
+ }
+ );
+});
+
+async function runTest() {
+ // Test for proper overriding of default attributes.
+ testAttrs("default-role", {"xml-roles": "math"}, true);
+ testAttrs("custom-role", {"xml-roles": "note"}, true);
+
+ testAttrs("default-atomic", {"atomic": "true"}, true);
+ testAbsentAttrs("custom-atomic", {"atomic": "false"});
+
+ testAttrs("default-autocomplete", {"autocomplete": "inline"}, true);
+ testAttrs("custom-autocomplete", {"autocomplete": "list"}, true);
+
+ testStates("default-busy", STATE_BUSY);
+ testStates("custom-busy", 0, 0, STATE_BUSY);
+
+ testStates("default-checked", STATE_CHECKED);
+ testStates("custom-checked", 0, 0, STATE_CHECKED);
+
+ testAttrs("default-colCount", {"colcount": "1"}, true);
+ testAttrs("default-col", {"colindex": "1"}, true);
+ testAttrs("default-col", {"colindextext": "Default"}, true);
+ testAttrs("default-col", {"colspan": "1"}, true);
+ testAttrs("custom-colCount", {"colcount": "3"}, true);
+ testAttrs("custom-col", {"colindex": "2"}, true);
+ testAttrs("custom-col", {"colindextext": "Custom"}, true);
+ testAttrs("custom-col", {"colspan": "2"}, true);
+
+ testAttrs("default-current", {"current": "page"}, true);
+ testAttrs("custom-current", {"current": "step"}, true);
+
+ testDescr("default-description", "Default");
+ testDescr("custom-description", "Custom");
+
+ testStates("default-disabled", STATE_UNAVAILABLE);
+ testStates("custom-disabled", 0, 0, STATE_UNAVAILABLE);
+
+ testStates("default-expanded", STATE_EXPANDED);
+ testStates("custom-expanded", STATE_COLLAPSED);
+
+ testAttrs("default-haspopup", {"haspopup": "true"}, true);
+ testAbsentAttrs("custom-haspopup", {"haspopup": "false"});
+
+ ok(isAccessible("default-hidden"), "Accessible for not aria-hidden");
+ ok(!isAccessible("custom-hidden"), "No accessible for aria-hidden");
+
+ testStates("default-invalid", STATE_INVALID);
+ testStates("custom-invalid", 0, 0, STATE_INVALID);
+
+ testAttrs("default-keyshortcuts", {"keyshortcuts": "Alt+Shift+A"}, true);
+ testAttrs("custom-keyshortcuts", {"keyshortcuts": "A"}, true);
+
+ testName("default-label", "Default");
+ testName("custom-label", "Custom");
+
+ testAttrs("default-level", {"level": "1"}, true);
+ testAttrs("custom-level", {"level": "2"}, true);
+
+ testAttrs("default-live", {"live": "polite"}, true);
+ testAttrs("custom-live", {"live": "assertive"}, true);
+
+ testStates("default-modal", 0, EXT_STATE_MODAL);
+ testStates("custom-modal", 0, 0, 0, EXT_STATE_MODAL);
+
+ testStates("default-multiline", 0, EXT_STATE_MULTI_LINE, 0, EXT_STATE_SINGLE_LINE);
+ testStates("custom-multiline", 0, EXT_STATE_SINGLE_LINE, 0, EXT_STATE_MULTI_LINE);
+
+ testStates("default-multiselectable", STATE_MULTISELECTABLE);
+ testStates("custom-multiselectable", 0, 0, STATE_MULTISELECTABLE);
+
+ testStates("default-orientation", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
+ testStates("custom-orientation", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
+
+ testAttrs("default-posinset", {"posinset": "1"}, true);
+ testAttrs("custom-posinset", {"posinset": "2"}, true);
+
+ testStates("default-pressed", STATE_PRESSED);
+ testStates("custom-pressed", 0, 0, STATE_PRESSED);
+
+ testStates("default-readonly", STATE_READONLY);
+ testStates("custom-readonly", 0, 0, STATE_READONLY);
+
+ testAttrs("default-relevant", {"relevant": "all"}, true);
+ testAttrs("custom-relevant", {"relevant": "text"}, true);
+
+ testStates("default-required", STATE_REQUIRED);
+ testStates("custom-required", 0, 0, STATE_REQUIRED);
+
+ testAttrs("default-roledescription", {"roledescription": "Default"}, true);
+ testAttrs("custom-roledescription", {"roledescription": "Custom"}, true);
+
+ testAttrs("default-rowcount", {"rowcount": "1"}, true);
+ testAttrs("default-row", {"rowindex": "1"}, true);
+ testAttrs("default-row", {"rowindextext": "Default"}, true);
+ testAttrs("default-rowspan", {"rowspan": "1"}, true);
+ testAttrs("custom-rowcount", {"rowcount": "3"}, true);
+ testAttrs("custom-row", {"rowindex": "2"}, true);
+ testAttrs("custom-row", {"rowindextext": "Custom"}, true);
+ testAttrs("custom-rowspan", {"rowspan": "2"}, true);
+
+ testStates("default-selected", STATE_SELECTED);
+ testStates("custom-selected", 0, 0, STATE_SELECTED);
+
+ testAttrs("default-setsize", {"setsize": "1"}, true);
+ testAttrs("custom-setsize", {"setsize": "2"}, true);
+
+ testAttrs("default-sort", {"sort": "ascending"}, true);
+ testAttrs("custom-sort", {"sort": "descending"}, true);
+
+ testValue("default-value", "Default", 5, 1, 10, 0);
+ testValue("custom-value", "Custom", 15, 10, 20, 0);
+
+ // Test that changes of defaults fire the proper events.
+ info("Changing ElementInternals ariaLabel");
+ let nameChanged = waitForEvent(EVENT_NAME_CHANGE, "default-label");
+ let customLabelElement = document.getElementById("default-label");
+ customLabelElement.internals.ariaLabel = "Changed Default";
+ await nameChanged;
+ testName("default-label", "Changed Default");
+
+ info("Changing ElementInternals ariaRequired");
+ let stateChanged = waitForEvent(EVENT_STATE_CHANGE, "default-required");
+ let requiredElement = document.getElementById("default-required");
+ requiredElement.internals.ariaRequired = "false";
+ await stateChanged;
+ testStates("default-required", 0, 0, STATE_REQUIRED);
+
+ info("Changing ElementInternals ariaSort");
+ let attributeChanged = waitForEvent(EVENT_OBJECT_ATTRIBUTE_CHANGED, "default-sort");
+ let sortElement = document.getElementById("default-sort");
+ sortElement.internals.ariaSort = "descending";
+ await attributeChanged;
+ testAttrs("default-sort", {"sort": "descending"}, true);
+
+ SimpleTest.finish();
+}
+
+SimpleTest.waitForExplicitFinish();
+Services.prefs.setBoolPref("accessibility.ARIAReflection.enabled", true);
+addA11yLoadEvent(runTest);
+ </script>
+</head>
+<body>
+
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1665151">Bug 1665151</a>
+<p id="display"></p>
+<div id="content" style="display: none"></div>
+<pre id="test">
+<custom-role id="default-role"></custom-role>
+<custom-role id="custom-role" role="note"></custom-role>
+
+<custom-autocomplete id="default-autocomplete"></custom-autocomplete>
+<custom-autocomplete id="custom-autocomplete" aria-autocomplete="list"></custom-autocomplete>
+
+<custom-atomic id="default-atomic"></custom-atomic>
+<custom-atomic id="custom-atomic" aria-atomic="false"></custom-atomic>
+
+<custom-busy id="default-busy"></custom-busy>
+<custom-busy id="custom-busy" aria-busy="false"></custom-busy>
+
+<custom-checked id="default-checked"></custom-checked>
+<custom-checked id="custom-checked" aria-checked="false"></custom-checked>
+
+<custom-colcount id="default-colCount">
+ <div role="rowgroup">
+ <div role="row">
+ <custom-col id="default-col"></custom-col>
+ </div>
+ </div>
+</custom-colcount>
+<custom-colcount id="custom-colCount" aria-colcount="3">
+ <div role="rowgroup">
+ <div role="row">
+ <custom-col
+ id="custom-col"
+ aria-colindex="2"
+ aria-colindextext="Custom"
+ aria-colspan="2">
+ </custom-col>
+ </div>
+ </div>
+</custom-colcount>
+
+<custom-current id="default-current"></custom-current>
+<custom-current id="custom-current" aria-current="step"></custom-current>
+
+<custom-description id="default-description"></custom-description>
+<custom-description id="custom-description" aria-description="Custom"></custom-description>
+
+<custom-disabled id="default-disabled"></custom-disabled>
+<custom-disabled id="custom-disabled" aria-disabled="false"></custom-disabled>
+
+<custom-expanded id="default-expanded"></custom-expanded>
+<custom-expanded id="custom-expanded" aria-expanded="false"></custom-expanded>
+
+<custom-haspopup id="default-haspopup"></custom-haspopup>
+<custom-haspopup id="custom-haspopup" aria-haspopup="false"></custom-haspopup>
+
+<custom-hidden id="default-hidden"></custom-hidden>
+<custom-hidden id="custom-hidden" aria-hidden="true"></custom-hidden>
+
+<custom-invalid id="default-invalid"></custom-invalid>
+<custom-invalid id="custom-invalid" aria-invalid="false"></custom-invalid>
+
+<custom-keyshortcuts id="default-keyshortcuts"></custom-keyshortcuts>
+<custom-keyshortcuts id="custom-keyshortcuts" aria-keyshortcuts="A"></custom-keyshortcuts>
+
+<custom-label id="default-label"></custom-label>
+<custom-label id="custom-label" aria-label="Custom"></custom-label>
+
+<custom-level id="default-level"></custom-level>
+<custom-level id="custom-level" aria-level="2"></custom-level>
+
+<custom-live id="default-live"></custom-live>
+<custom-live id="custom-live" aria-live="assertive"></custom-live>
+
+<custom-modal id="default-modal"></custom-modal>
+<custom-modal id="custom-modal" aria-modal="false"></custom-modal>
+
+<custom-multiline id="default-multiline"></custom-multiline>
+<custom-multiline id="custom-multiline" aria-multiline="false"></custom-multiline>
+
+<custom-multiselectable id="default-multiselectable"></custom-multiselectable>
+<custom-multiselectable id="custom-multiselectable" aria-multiselectable="false"></custom-multiselectable>
+
+<custom-orientation id="default-orientation"></custom-orientation>
+<custom-orientation id="custom-orientation" aria-orientation="horizontal"></custom-orientation>
+
+<custom-posinset id="default-posinset"></custom-posinset>
+<custom-posinset id="custom-posinset" aria-posinset="2"></custom-posinset>
+
+<custom-pressed id="default-pressed"></custom-pressed>
+<custom-pressed id="custom-pressed" aria-pressed="false"></custom-pressed>
+
+<custom-readonly id="default-readonly"></custom-readonly>
+<custom-readonly id="custom-readonly" aria-readonly="false"></custom-readonly>
+
+<custom-relevant id="default-relevant"></custom-relevant>
+<custom-relevant id="custom-relevant" aria-relevant="text"></custom-relevant>
+
+<custom-required id="default-required"></custom-required>
+<custom-required id="custom-required" aria-required="false"></custom-required>
+
+<custom-roledescription id="default-roledescription"></custom-roledescription>
+<custom-roledescription id="custom-roledescription" aria-roledescription="Custom"></custom-roledescription>
+
+<custom-rowcount id="default-rowcount">
+ <div role="rowgroup">
+ <custom-row id="default-row">
+ <custom-rowspan id="default-rowspan"></custom-rowspan>
+ </custom-row>
+ </div>
+</custom-rowcount>
+<custom-rowcount id="custom-rowcount" aria-rowcount="3">
+ <div role="rowgroup">
+ <custom-row
+ id="custom-row"
+ aria-rowindex="2"
+ aria-rowindextext="Custom">
+ <custom-rowspan id="custom-rowspan" aria-rowspan="2"></custom-rowspan>
+ </custom-row>
+ </div>
+</custom-rowcount>
+
+<custom-selected id="default-selected"></custom-selected>
+<custom-selected id="custom-selected" aria-selected="false"></custom-selected>
+
+<div role="listbox">
+ <custom-setsize id="default-setsize"></custom-setsize>
+</div>
+<div role="listbox">
+ <custom-setsize id="custom-setsize" aria-setsize="2"></custom-setsize>
+ <div role="listitem" aria-setsize="2"></div>
+</div>
+
+<div role="grid">
+ <div role="rowgroup">
+ <div role="row">
+ <custom-sort id="default-sort"></custom-sort>
+ </div>
+ </div>
+</div>
+<div role="grid">
+ <div role="rowgroup">
+ <div role="row">
+ <custom-sort id="custom-sort" aria-sort="descending"></custom-sort>
+ </div>
+ </div>
+</div>
+
+<custom-value id="default-value"></custom-value>
+<custom-value
+ id="custom-value"
+ aria-valuenow="15"
+ aria-valuemin="10"
+ aria-valuemax="20"
+ aria-valuetext="Custom">
+</custom-value>
+</pre>
+
+</body>
+</html>