browser_required.js (5052B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 /* import-globals-from ../../mochitest/role.js */ 8 /* import-globals-from ../../mochitest/states.js */ 9 loadScripts( 10 { name: "role.js", dir: MOCHITESTS_DIR }, 11 { name: "states.js", dir: MOCHITESTS_DIR } 12 ); 13 14 /** 15 * Test required and aria-required attributes on checkboxes 16 * and radio buttons. 17 */ 18 addAccessibleTask( 19 ` 20 <form> 21 <input type="checkbox" id="checkbox" required> 22 <br> 23 <input type="radio" id="radio" required> 24 <br> 25 <input type="checkbox" id="ariaCheckbox" aria-required="true"> 26 <br> 27 <input type="radio" id="ariaRadio" aria-required="true"> 28 </form> 29 `, 30 async (browser, accDoc) => { 31 // Check initial AXRequired values are correct 32 let radio = getNativeInterface(accDoc, "radio"); 33 is( 34 radio.getAttributeValue("AXRequired"), 35 1, 36 "Correct required val for radio" 37 ); 38 39 let ariaRadio = getNativeInterface(accDoc, "ariaRadio"); 40 is( 41 ariaRadio.getAttributeValue("AXRequired"), 42 1, 43 "Correct required val for ariaRadio" 44 ); 45 46 let checkbox = getNativeInterface(accDoc, "checkbox"); 47 is( 48 checkbox.getAttributeValue("AXRequired"), 49 1, 50 "Correct required val for checkbox" 51 ); 52 53 let ariaCheckbox = getNativeInterface(accDoc, "ariaCheckbox"); 54 is( 55 ariaCheckbox.getAttributeValue("AXRequired"), 56 1, 57 "Correct required val for ariaCheckbox" 58 ); 59 60 // Change aria-required, verify AXRequired is updated 61 let stateChanged = waitForEvent(EVENT_STATE_CHANGE, "ariaCheckbox"); 62 await SpecialPowers.spawn(browser, [], () => { 63 content.document 64 .getElementById("ariaCheckbox") 65 .setAttribute("aria-required", "false"); 66 }); 67 await stateChanged; 68 69 is( 70 ariaCheckbox.getAttributeValue("AXRequired"), 71 0, 72 "Correct required after false set for ariaCheckbox" 73 ); 74 75 // Change aria-required, verify AXRequired is updated 76 stateChanged = waitForEvent(EVENT_STATE_CHANGE, "ariaCheckbox"); 77 await SpecialPowers.spawn(browser, [], () => { 78 content.document 79 .getElementById("ariaCheckbox") 80 .setAttribute("aria-required", "true"); 81 }); 82 await stateChanged; 83 84 is( 85 ariaCheckbox.getAttributeValue("AXRequired"), 86 1, 87 "Correct required after true set for ariaCheckbox" 88 ); 89 90 // Remove aria-required, verify AXRequired is updated 91 stateChanged = waitForEvent(EVENT_STATE_CHANGE, "ariaCheckbox"); 92 await SpecialPowers.spawn(browser, [], () => { 93 content.document 94 .getElementById("ariaCheckbox") 95 .removeAttribute("aria-required"); 96 }); 97 await stateChanged; 98 99 is( 100 ariaCheckbox.getAttributeValue("AXRequired"), 101 0, 102 "Correct required after removal for ariaCheckbox" 103 ); 104 105 // Change aria-required, verify AXRequired is updated 106 stateChanged = waitForEvent(EVENT_STATE_CHANGE, "ariaRadio"); 107 await SpecialPowers.spawn(browser, [], () => { 108 content.document 109 .getElementById("ariaRadio") 110 .setAttribute("aria-required", "false"); 111 }); 112 await stateChanged; 113 114 is( 115 ariaRadio.getAttributeValue("AXRequired"), 116 0, 117 "Correct required after false set for ariaRadio" 118 ); 119 120 // Change aria-required, verify AXRequired is updated 121 stateChanged = waitForEvent(EVENT_STATE_CHANGE, "ariaRadio"); 122 await SpecialPowers.spawn(browser, [], () => { 123 content.document 124 .getElementById("ariaRadio") 125 .setAttribute("aria-required", "true"); 126 }); 127 await stateChanged; 128 129 is( 130 ariaRadio.getAttributeValue("AXRequired"), 131 1, 132 "Correct required after true set for ariaRadio" 133 ); 134 135 // Remove aria-required, verify AXRequired is updated 136 stateChanged = waitForEvent(EVENT_STATE_CHANGE, "ariaRadio"); 137 await SpecialPowers.spawn(browser, [], () => { 138 content.document 139 .getElementById("ariaRadio") 140 .removeAttribute("aria-required"); 141 }); 142 await stateChanged; 143 144 is( 145 ariaRadio.getAttributeValue("AXRequired"), 146 0, 147 "Correct required after removal for ariaRadio" 148 ); 149 150 // Remove required, verify AXRequired is updated 151 stateChanged = waitForEvent(EVENT_STATE_CHANGE, "checkbox"); 152 await SpecialPowers.spawn(browser, [], () => { 153 content.document.getElementById("checkbox").removeAttribute("required"); 154 }); 155 await stateChanged; 156 157 is( 158 checkbox.getAttributeValue("AXRequired"), 159 0, 160 "Correct required after removal for checkbox" 161 ); 162 163 stateChanged = waitForEvent(EVENT_STATE_CHANGE, "radio"); 164 await SpecialPowers.spawn(browser, [], () => { 165 content.document.getElementById("radio").removeAttribute("required"); 166 }); 167 await stateChanged; 168 169 is( 170 checkbox.getAttributeValue("AXRequired"), 171 0, 172 "Correct required after removal for radio" 173 ); 174 } 175 );