test_bug962251.html (9090B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=962251 5 --> 6 <head> 7 <meta charset="utf-8"> 8 <title>Test for Bug 962251</title> 9 <script src="/tests/SimpleTest/SimpleTest.js"></script> 10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 11 <script type="application/javascript"> 12 13 SimpleTest.waitForExplicitFinish(); 14 15 function Test_ElementsInTheSameDocument() { 16 var button1 = document.getElementById("button1"); 17 var button2 = document.getElementById("button2"); 18 19 button1.focus(); 20 is(button1.id, document.activeElement.id, "How did we call focus on button1 and it did" + 21 " not become the active element?"); 22 23 var getBlurEvent = false; 24 button1.addEventListener("blur", function(aEvent) { 25 is(aEvent.target.id, "button1", "Button1 should lose focus."); 26 ok(aEvent.relatedTarget, "The relatedTarget should not be null."); 27 is(aEvent.relatedTarget.id, "button2", "The relatedTarget should be button2."); 28 getBlurEvent = true; 29 }, {once: true}); 30 31 button2.addEventListener("focus", function(aEvent) { 32 ok(getBlurEvent, "Must get blur event first."); 33 is(aEvent.target.id, "button2", "Button2 should be focused."); 34 ok(aEvent.relatedTarget, "The relatedTarget should not be null."); 35 is(aEvent.relatedTarget.id, "button1", "The relatedTarget should be button1."); 36 button2.blur(); 37 }, {once: true}); 38 39 button2.addEventListener("blur", function(aEvent) { 40 is(aEvent.target.id, "button2", "Button2 should lose focus."); 41 ok(aEvent.relatedTarget === null, "The relatedTarget should be null."); 42 runTests(); 43 }, {once: true}); 44 45 button2.focus(); 46 } 47 48 function Test_ElementsInDifferentDocument() { 49 var button2 = document.getElementById("button2"); 50 button2.focus(); 51 button2.addEventListener("blur", function(aEvent) { 52 is(aEvent.target.id, "button2", "Button2 should lose focus."); 53 ok(aEvent.relatedTarget === null, "The relatedTarget should be null, since it's in another document."); 54 }, {once: true}); 55 56 var iframe = document.createElement("iframe"); 57 iframe.id = "iframe"; 58 iframe.src = "iframe_bug962251.html"; 59 window.addEventListener("message", function(aEvent) { 60 if (aEvent.data == "runNextTest") { 61 runTests(); 62 } 63 }, {once: true}); 64 document.getElementById("content").appendChild(iframe); 65 } 66 67 function Test_FocusEventOnWindow() { 68 var iframe1 = document.createElement("iframe"); 69 iframe1.id = "iframe1"; 70 iframe1.src = "about:blank"; 71 72 document.getElementById("content").appendChild(iframe1); 73 document.getElementById("button2").focus(); 74 var iframe = document.getElementById("iframe"); 75 var expectedEventTarget = [iframe.contentDocument, iframe.contentWindow]; 76 var expectedEventTarget1 = [iframe1.contentDocument, iframe1.contentWindow]; 77 iframe.contentWindow.addEventListener("focus", function onFocus(aEvent) { 78 var eventTarget = expectedEventTarget.shift(); 79 ok(aEvent.target === eventTarget, "Get expected focus event target."); 80 ok(aEvent.relatedTarget === null, "relatedTarget should be null."); 81 if (!expectedEventTarget.length) { 82 iframe.contentWindow.removeEventListener("focus", onFocus, true); 83 runTests(); 84 } 85 }, true); 86 iframe1.contentWindow.addEventListener("focus", function onFocus(aEvent) { 87 var eventTarget = expectedEventTarget1.shift(); 88 ok(aEvent.target === eventTarget, "Get expected focus event target."); 89 ok(aEvent.relatedTarget === null, "relatedTarget should be null."); 90 if (!expectedEventTarget1.length) { 91 iframe1.contentWindow.removeEventListener("focus", onFocus, true); 92 // Append items for blur event listener 93 expectedEventTarget1.push(iframe1.contentDocument); 94 expectedEventTarget1.push(iframe1.contentWindow); 95 iframe.contentWindow.focus(); 96 } 97 }, true); 98 iframe1.contentWindow.addEventListener("blur", function onBlur(aEvent) { 99 var eventTarget = expectedEventTarget1.shift(); 100 ok(aEvent.target === eventTarget, "Get expected blur event target."); 101 ok(aEvent.relatedTarget === null, "relatedTarget should be null."); 102 if (!expectedEventTarget1.length) { 103 iframe1.contentWindow.removeEventListener("blur", onBlur, true); 104 } 105 }, true); 106 iframe1.contentWindow.focus(); 107 } 108 109 function Test_SetFocusInBlurEvent() { 110 var button1 = document.getElementById("button1"); 111 var button2 = document.getElementById("button2"); 112 var button3 = document.getElementById("button3"); 113 114 button1.focus(); 115 is(button1.id, document.activeElement.id, "document.activeElement.id is button1"); 116 117 button1.addEventListener("blur", function(aEvent) { 118 info("button1 blur"); 119 is(aEvent.relatedTarget.id, button2.id, "relatedTarget.id should be button2."); 120 button3.focus(); 121 }, {once: true}); 122 button1.addEventListener("focus", function(aEvent) { 123 info("button1 focus"); 124 }, {once: true}); 125 126 button2.addEventListener("blur", function(aEvent) { 127 info("button2 blur"); 128 }, {once: true}); 129 button2.addEventListener("focus", function(aEvent) { 130 info("button2 focus"); 131 }, {once: true}); 132 133 button3.addEventListener("blur", function(aEvent) { 134 info("button3 blur"); 135 }, {once: true}); 136 button3.addEventListener("focus", function(aEvent) { 137 info("button3 focus"); 138 ok(aEvent.relatedTarget === null, "aEvent.relatedTarget is null."); 139 runTests(); 140 }, {once: true}); 141 142 button2.focus(); 143 } 144 145 function Test_ListenFocusBlurEventOnWindow1() { 146 var button2 = document.getElementById("button2"); 147 button2.focus(); 148 149 var iframe = document.getElementById("iframe"); 150 var input = iframe.contentDocument.getElementById("textinput"); 151 var expectedEventTarget = [button2, document, window]; 152 var expectedEventTarget1 = [iframe.contentDocument, iframe.contentWindow, input]; 153 window.addEventListener("blur", function onBlur(aEvent) { 154 var item = expectedEventTarget.shift(); 155 ok(aEvent.target === item, "Get an expected blur event."); 156 ok(aEvent.relatedTarget === null, "relatedTarget should be null."); 157 if (!expectedEventTarget.length) { 158 iframe.contentWindow.removeEventListener("blur", onBlur, true); 159 } 160 }, true); 161 iframe.contentWindow.addEventListener("focus", function onFocus(aEvent) { 162 var item = expectedEventTarget1.shift(); 163 ok(aEvent.target === item, "Get an expected focus event."); 164 ok(aEvent.relatedTarget === null, "relatedTarget should be null."); 165 if (!expectedEventTarget1.length) { 166 iframe.contentWindow.removeEventListener("focus", onFocus, true); 167 runTests(); 168 } 169 }, true); 170 171 input.focus(); 172 } 173 174 function Test_ListenFocusBlurEventOnWindow2() { 175 var iframe = document.getElementById("iframe"); 176 var input = iframe.contentDocument.getElementById("textinput"); 177 var input1 = iframe.contentDocument.getElementById("textinput1"); 178 179 ok(iframe.contentDocument.activeElement === input, "Current focused element should be input."); 180 iframe.contentWindow.addEventListener("focus", function(aEvent) { 181 ok(aEvent.target === input1, "Input1 is focused."); 182 ok(aEvent.relatedTarget === input, "relatedTarget should be input."); 183 runTests(); 184 }, {capture: true, once: true}); 185 iframe.contentWindow.addEventListener("blur", function(aEvent) { 186 ok(aEvent.target === input, "Input is not focused."); 187 ok(aEvent.relatedTarget === input1, "relatedTarget should be input1."); 188 }, {capture: true, once: true}); 189 190 input1.focus(); 191 } 192 193 function Test_ListenFocusBlurEventOnWindow3() { 194 var iframe = document.getElementById("iframe"); 195 var input1 = iframe.contentDocument.getElementById("textinput1"); 196 197 ok(iframe.contentDocument.activeElement === input1, "Current focused element should be input1."); 198 iframe.contentWindow.addEventListener("blur", function(aEvent) { 199 ok(aEvent.target === input1, "Input1 is not focused."); 200 ok(aEvent.relatedTarget === null, "relatedTarget should be null."); 201 runTests(); 202 }, {capture: true, once: true}); 203 204 input1.blur(); 205 } 206 207 var tests = [ 208 Test_ElementsInTheSameDocument, 209 Test_ElementsInDifferentDocument, 210 Test_FocusEventOnWindow, 211 Test_SetFocusInBlurEvent, 212 Test_ListenFocusBlurEventOnWindow1, 213 Test_ListenFocusBlurEventOnWindow2, 214 Test_ListenFocusBlurEventOnWindow3 215 ]; 216 217 function runTests() 218 { 219 if (!tests.length) { 220 SimpleTest.finish(); 221 return; 222 } 223 224 var test = tests.shift(); 225 window.setTimeout(function () { 226 test(); 227 }); 228 } 229 230 </script> 231 </head> 232 <body onload="runTests();"> 233 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=962251">Mozilla Bug 962251</a> 234 <p id="display"></p> 235 <div id="content"> 236 <button id="button1">1</button> 237 <button id="button2">2</button> 238 <button id="button3">3</button> 239 </div> 240 <pre id="test"> 241 </pre> 242 </body> 243 </html>