test_bug605125-2.html (4082B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=605125 5 --> 6 <head> 7 <title>Test for Bug 605125</title> 8 <script src="/tests/SimpleTest/SimpleTest.js"></script> 9 <script src="/tests/SimpleTest/EventUtils.js"></script> 10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 11 </head> 12 <body> 13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=605125">Mozilla Bug 605125</a> 14 <p id="display"></p> 15 <div id="content"> 16 <input> 17 <textarea></textarea> 18 <select> 19 <option value="">foo</option> 20 <option>bar</option> 21 </select> 22 <select multiple> 23 <option value="">foo</option> 24 <option>bar</option> 25 </select> 26 </div> 27 <pre id="test"> 28 <script type="application/javascript"> 29 30 /** Test for Bug 605125 */ 31 32 function checkPseudoClass(aElement, aExpected) 33 { 34 is(aElement.matches(":user-valid"), aExpected, 35 "matches(':user-valid') should return " + aExpected + " for " + aElement.outerHTML); 36 } 37 38 function checkElement(aElement) 39 { 40 checkPseudoClass(aElement, false); 41 42 // Focusing while :user-valid doesn't apply, 43 // the pseudo-class should not apply while typing. 44 aElement.focus(); 45 checkPseudoClass(aElement, false); 46 // with keys 47 sendString("f"); 48 checkPseudoClass(aElement, false); 49 synthesizeKey("KEY_Backspace"); 50 checkPseudoClass(aElement, false); 51 // with .value 52 aElement.value = 'f'; 53 checkPseudoClass(aElement, false); 54 aElement.value = ''; 55 checkPseudoClass(aElement, false); 56 57 aElement.blur(); 58 checkPseudoClass(aElement, true); 59 60 // Focusing while :user-valid applies, 61 // the pseudo-class should apply while typing if appropriate. 62 aElement.focus(); 63 checkPseudoClass(aElement, true); 64 // with keys 65 sendString("f"); 66 checkPseudoClass(aElement, true); 67 synthesizeKey("KEY_Backspace"); 68 checkPseudoClass(aElement, true); 69 // with .value 70 aElement.value = 'f'; 71 checkPseudoClass(aElement, true); 72 aElement.value = ''; 73 checkPseudoClass(aElement, true); 74 75 aElement.blur(); 76 aElement.required = true; 77 checkPseudoClass(aElement, false); 78 79 // Focusing while :user-invalid applies, 80 // the pseudo-class should apply while typing if appropriate. 81 aElement.focus(); 82 checkPseudoClass(aElement, false); 83 // with keys 84 sendString("f"); 85 checkPseudoClass(aElement, true); 86 synthesizeKey("KEY_Backspace"); 87 checkPseudoClass(aElement, false); 88 // with .value 89 aElement.value = 'f'; 90 checkPseudoClass(aElement, true); 91 aElement.value = ''; 92 checkPseudoClass(aElement, false); 93 } 94 95 function checkSelectElement(aElement) 96 { 97 checkPseudoClass(aElement, false); 98 99 if (!aElement.multiple && navigator.platform.startsWith("Mac")) { 100 // Arrow key on macOS opens the popup. 101 return; 102 } 103 104 // Focusing while :user-valid doesn't apply, 105 // the pseudo-class should not apply while changing selection. 106 aElement.focus(); 107 checkPseudoClass(aElement, false); 108 109 synthesizeKey("KEY_ArrowDown"); 110 checkPseudoClass(aElement, true); 111 112 // Focusing while :user-valid applies, 113 // the pseudo-class should apply while changing selection if appropriate. 114 aElement.focus(); 115 checkPseudoClass(aElement, true); 116 117 aElement.selectedIndex = 1; 118 checkPseudoClass(aElement, true); 119 aElement.selectedIndex = 0; 120 checkPseudoClass(aElement, true); 121 122 aElement.blur(); 123 aElement.required = true; 124 // select set with multiple is only invalid if no option is selected 125 if (aElement.multiple) { 126 aElement.selectedIndex = -1; 127 } 128 checkPseudoClass(aElement, false); 129 130 // Focusing while :user-invalid applies, 131 // the pseudo-class should apply while changing selection if appropriate. 132 aElement.focus(); 133 checkPseudoClass(aElement, false); 134 135 synthesizeKey("KEY_ArrowDown"); 136 checkPseudoClass(aElement, true); 137 aElement.selectedIndex = 0; 138 checkPseudoClass(aElement, aElement.multiple); 139 } 140 141 checkElement(document.getElementsByTagName('input')[0]); 142 checkElement(document.getElementsByTagName('textarea')[0]); 143 checkSelectElement(document.getElementsByTagName('select')[0]); 144 checkSelectElement(document.getElementsByTagName('select')[1]); 145 146 </script> 147 </pre> 148 </body> 149 </html>