1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/content/tests/chrome/findbar_window.xul Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,403 @@ 1.4 +<?xml version="1.0"?> 1.5 + 1.6 +<!-- This Source Code Form is subject to the terms of the Mozilla Public 1.7 + - License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> 1.9 + 1.10 +<?xml-stylesheet href="chrome://global/skin" type="text/css"?> 1.11 + 1.12 +<window id="FindbarTest" 1.13 + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" 1.14 + width="600" 1.15 + height="600" 1.16 + onload="onLoad();" 1.17 + title="findbar test"> 1.18 + 1.19 + <script type="application/javascript" 1.20 + src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/> 1.21 + <script type="application/javascript" 1.22 + src="chrome://mochikit/content/tests/SimpleTest/ChromeUtils.js"/> 1.23 + 1.24 + <script type="application/javascript"><![CDATA[ 1.25 + const Ci = Components.interfaces; 1.26 + const Cc = Components.classes; 1.27 + const Cr = Components.results; 1.28 + 1.29 + const SAMPLE_URL = "http://www.mozilla.org/"; 1.30 + const SAMPLE_TEXT = "Some text in a text field."; 1.31 + const SEARCH_TEXT = "Text Test"; 1.32 + 1.33 + var gFindBar = null; 1.34 + var gBrowser; 1.35 + 1.36 + var gClipboard = Cc["@mozilla.org/widget/clipboard;1"].getService(Ci.nsIClipboard); 1.37 + var gHasFindClipboard = gClipboard.supportsFindClipboard(); 1.38 + 1.39 + var gStatusText; 1.40 + var gXULBrowserWindow = { 1.41 + QueryInterface: function(aIID) { 1.42 + if (aIID.Equals(Ci.nsIXULBrowserWindow) || 1.43 + aIID.Equals(Ci.nsISupports)) 1.44 + return this; 1.45 + 1.46 + throw Cr.NS_NOINTERFACE; 1.47 + }, 1.48 + 1.49 + setJSStatus: function() { }, 1.50 + 1.51 + setOverLink: function(aStatusText, aLink) { 1.52 + gStatusText = aStatusText; 1.53 + }, 1.54 + 1.55 + onBeforeLinkTraversal: function() { } 1.56 + }; 1.57 + 1.58 + function ok(condition, message) { 1.59 + window.opener.wrappedJSObject.SimpleTest.ok(condition, message); 1.60 + } 1.61 + function finish() { 1.62 + window.close(); 1.63 + window.opener.wrappedJSObject.SimpleTest.finish(); 1.64 + } 1.65 + 1.66 + function onLoad() { 1.67 + window.QueryInterface(Ci.nsIInterfaceRequestor) 1.68 + .getInterface(Ci.nsIWebNavigation) 1.69 + .QueryInterface(Ci.nsIDocShellTreeItem) 1.70 + .treeOwner 1.71 + .QueryInterface(Ci.nsIInterfaceRequestor) 1.72 + .getInterface(Ci.nsIXULWindow) 1.73 + .XULBrowserWindow = gXULBrowserWindow; 1.74 + 1.75 + var _delayedOnLoad = function() { 1.76 + gFindBar = document.getElementById("FindToolbar"); 1.77 + gBrowser = document.getElementById("content"); 1.78 + gBrowser.addEventListener("pageshow", _delayedOnPageShow, false); 1.79 + gBrowser.loadURI("data:text/html,<h2 id='h2'>" + SEARCH_TEXT + "</h2><h2><a href='" + SAMPLE_URL + "'>Link Test</a></h2><input id='text' type='text' value='" + SAMPLE_TEXT + "'></input><input id='button' type='button'></input><img id='img' width='50' height='50'/>"); 1.80 + } 1.81 + setTimeout(_delayedOnLoad, 1000); 1.82 + } 1.83 + 1.84 + function _delayedOnPageShow() { 1.85 + // setTimeout to the test runs after painting suppression ends 1.86 + setTimeout(onPageShow, 0); 1.87 + } 1.88 + 1.89 + function onPageShow() { 1.90 + testNormalFind(); 1.91 + gFindBar.close(); 1.92 + ok(gFindBar.hidden, "Failed to close findbar after testNormalFind"); 1.93 + testNormalFindWithComposition(); 1.94 + gFindBar.close(); 1.95 + ok(gFindBar.hidden, "findbar should be hidden after testNormalFindWithComposition"); 1.96 + testAutoCaseSensitivityUI(); 1.97 + testQuickFindText(); 1.98 + gFindBar.close(); 1.99 + ok(gFindBar.hidden, "Failed to close findbar after testQuickFindText"); 1.100 + testFindWithHighlight(); 1.101 + gFindBar.close(); 1.102 + ok(gFindBar.hidden, "Failed to close findbar after testFindWithHighlight"); 1.103 + testFindbarSelection(); 1.104 + testDrop(); 1.105 + testQuickFindLink(); 1.106 + if (gHasFindClipboard) 1.107 + testStatusText(); 1.108 + testQuickFindClose(); 1.109 + } 1.110 + 1.111 + function testFindbarSelection() { 1.112 + function checkFindbarState(aTestName, aExpSelection) { 1.113 + document.getElementById("cmd_find").doCommand(); 1.114 + ok(!gFindBar.hidden, "testFindbarSelection: failed to open findbar: " + aTestName); 1.115 + ok(document.commandDispatcher.focusedElement == gFindBar._findField.inputField, 1.116 + "testFindbarSelection: find field is not focused: " + aTestName); 1.117 + if (!gHasFindClipboard) { 1.118 + ok(gFindBar._findField.value == aExpSelection, 1.119 + "Incorrect selection in testFindbarSelection: " + aTestName + 1.120 + ". Selection: " + gFindBar._findField.value); 1.121 + } 1.122 + 1.123 + // Clear the value, close the findbar 1.124 + gFindBar._findField.value = ""; 1.125 + gFindBar.close(); 1.126 + } 1.127 + 1.128 + // test normal selected text 1.129 + var cH2 = gBrowser.contentDocument.getElementById("h2"); 1.130 + var cSelection = gBrowser.contentDocument.defaultView.getSelection(); 1.131 + var cRange = gBrowser.contentDocument.createRange(); 1.132 + cRange.setStart(cH2, 0); 1.133 + cRange.setEnd(cH2, 1); 1.134 + cSelection.removeAllRanges(); 1.135 + cSelection.addRange(cRange); 1.136 + checkFindbarState("plain text", SEARCH_TEXT); 1.137 + 1.138 + // test nsIDOMNSEditableElement with selection 1.139 + var textInput = gBrowser.contentDocument.getElementById("text"); 1.140 + textInput.focus(); 1.141 + textInput.select(); 1.142 + checkFindbarState("text input", SAMPLE_TEXT); 1.143 + 1.144 + // test non-editable nsIDOMNSEditableElement (button) 1.145 + gBrowser.contentDocument.getElementById("button").focus(); 1.146 + checkFindbarState("button", ""); 1.147 + } 1.148 + 1.149 + function testDrop() 1.150 + { 1.151 + gFindBar.open(); 1.152 + // use an dummy image to start the drag so it doesn't get interrupted by a selection 1.153 + var img = gBrowser.contentDocument.getElementById("img"); 1.154 + synthesizeDrop(img, gFindBar._findField, [[ {type: "text/plain", data: "Rabbits" } ]], "copy", window); 1.155 + window.opener.wrappedJSObject.SimpleTest.is(gFindBar._findField.inputField.value, "Rabbits", "drop on findbar"); 1.156 + gFindBar.close(); 1.157 + } 1.158 + 1.159 + function testQuickFindClose() { 1.160 + var _isClosedCallback = function() { 1.161 + ok(gFindBar.hidden, 1.162 + "_isClosedCallback: Failed to auto-close quick find bar after " + 1.163 + gFindBar._quickFindTimeoutLength + "ms"); 1.164 + finish(); 1.165 + }; 1.166 + setTimeout(_isClosedCallback, gFindBar._quickFindTimeoutLength + 100); 1.167 + } 1.168 + 1.169 + function testStatusText() { 1.170 + var _delayedCheckStatusText = function() { 1.171 + ok(gStatusText == SAMPLE_URL, "testStatusText: Failed to set status text of found link"); 1.172 + }; 1.173 + setTimeout(_delayedCheckStatusText, 100); 1.174 + } 1.175 + 1.176 + function enterStringIntoFindField(aString) { 1.177 + for (var i=0; i < aString.length; i++) { 1.178 + var event = document.createEvent("KeyEvents"); 1.179 + event.initKeyEvent("keypress", true, true, null, false, false, 1.180 + false, false, 0, aString.charCodeAt(i)); 1.181 + gFindBar._findField.inputField.dispatchEvent(event); 1.182 + } 1.183 + } 1.184 + 1.185 + // also test match-case 1.186 + function testNormalFind() { 1.187 + document.getElementById("cmd_find").doCommand(); 1.188 + 1.189 + ok(!gFindBar.hidden, "testNormalFind: failed to open findbar"); 1.190 + ok(document.commandDispatcher.focusedElement == gFindBar._findField.inputField, 1.191 + "testNormalFind: find field is not focused"); 1.192 + 1.193 + var matchCaseCheckbox = gFindBar.getElement("find-case-sensitive"); 1.194 + if (!matchCaseCheckbox.hidden & matchCaseCheckbox.checked) 1.195 + matchCaseCheckbox.click(); 1.196 + 1.197 + var searchStr = "text tes"; 1.198 + enterStringIntoFindField(searchStr); 1.199 + ok(gBrowser.contentWindow.getSelection().toString().toLowerCase() == searchStr, 1.200 + "testNormalFind: failed to find '" + searchStr + "'"); 1.201 + testClipboardSearchString(gBrowser.contentWindow.getSelection().toString()); 1.202 + 1.203 + if (!matchCaseCheckbox.hidden) { 1.204 + matchCaseCheckbox.click(); 1.205 + enterStringIntoFindField("t"); 1.206 + ok(gBrowser.contentWindow.getSelection() != searchStr, 1.207 + "testNormalFind: Case-sensitivy is broken '" + searchStr + "'"); 1.208 + matchCaseCheckbox.click(); 1.209 + } 1.210 + } 1.211 + 1.212 + function testNormalFindWithComposition() { 1.213 + document.getElementById("cmd_find").doCommand(); 1.214 + 1.215 + ok(!gFindBar.hidden, "testNormalFindWithComposition: findbar should be open"); 1.216 + ok(document.commandDispatcher.focusedElement == gFindBar._findField.inputField, 1.217 + "testNormalFindWithComposition: find field should be focused"); 1.218 + 1.219 + var matchCaseCheckbox = gFindBar.getElement("find-case-sensitive"); 1.220 + var clicked = false; 1.221 + if (!matchCaseCheckbox.hidden & matchCaseCheckbox.checked) { 1.222 + matchCaseCheckbox.click(); 1.223 + clicked = true; 1.224 + } 1.225 + 1.226 + gFindBar._findField.inputField.focus(); 1.227 + 1.228 + var searchStr = "text"; 1.229 + 1.230 + synthesizeComposition({ type: "compositionstart" }); 1.231 + synthesizeComposition({ type: "compositionupdate", data: searchStr }); 1.232 + synthesizeText( 1.233 + { "composition": 1.234 + { "string": searchStr, 1.235 + "clauses": 1.236 + [ 1.237 + { "length": searchStr.length, "attr": COMPOSITION_ATTR_RAWINPUT } 1.238 + ] 1.239 + }, 1.240 + "caret": { "start": searchStr.length, "length": 0 } 1.241 + }); 1.242 + 1.243 + ok(gBrowser.contentWindow.getSelection().toString().toLowerCase() != searchStr, 1.244 + "testNormalFindWithComposition: text shouldn't be found during composition"); 1.245 + 1.246 + synthesizeText( 1.247 + { "composition": 1.248 + { "string": searchStr, 1.249 + "clauses": 1.250 + [ 1.251 + { "length": 0, "attr": 0 } 1.252 + ] 1.253 + }, 1.254 + "caret": { "start": searchStr.length, "length": 0 } 1.255 + }); 1.256 + synthesizeComposition({ type: "compositionend", data: searchStr }); 1.257 + 1.258 + ok(gBrowser.contentWindow.getSelection().toString().toLowerCase() == searchStr, 1.259 + "testNormalFindWithComposition: text should be found after committing composition"); 1.260 + testClipboardSearchString(gBrowser.contentWindow.getSelection().toString()); 1.261 + 1.262 + if (clicked) { 1.263 + matchCaseCheckbox.click(); 1.264 + } 1.265 + } 1.266 + 1.267 + function testAutoCaseSensitivityUI() { 1.268 + var matchCaseCheckbox = gFindBar.getElement("find-case-sensitive"); 1.269 + var matchCaseLabel = gFindBar.getElement("match-case-status"); 1.270 + document.getElementById("cmd_find").doCommand(); 1.271 + ok(!matchCaseCheckbox.hidden, "match case box is hidden in manual mode"); 1.272 + ok(matchCaseLabel.hidden, "match case label is visible in manual mode"); 1.273 + 1.274 + var prefsvc = Cc["@mozilla.org/preferences-service;1"]. 1.275 + getService(Components.interfaces.nsIPrefBranch); 1.276 + prefsvc.setIntPref("accessibility.typeaheadfind.casesensitive", 2); 1.277 + 1.278 + ok(matchCaseCheckbox.hidden, 1.279 + "match case box is visible in automatic mode"); 1.280 + ok(!matchCaseLabel.hidden, 1.281 + "match case label is hidden in automatic mode"); 1.282 + 1.283 + enterStringIntoFindField("a"); 1.284 + var insensitiveLabel = matchCaseLabel.value; 1.285 + enterStringIntoFindField("A"); 1.286 + var sensitiveLabel = matchCaseLabel.value; 1.287 + ok(insensitiveLabel != sensitiveLabel, 1.288 + "Case Sensitive label was not correctly updated"); 1.289 + 1.290 + // bug 365551 1.291 + gFindBar.onFindAgainCommand(); 1.292 + ok(matchCaseCheckbox.hidden && !matchCaseLabel.hidden, 1.293 + "bug 365551: case sensitivity UI is broken after find-again"); 1.294 + prefsvc.setIntPref("accessibility.typeaheadfind.casesensitive", 0); 1.295 + gFindBar.close(); 1.296 + } 1.297 + 1.298 + function clearFocus() { 1.299 + document.commandDispatcher.focusedElement = null; 1.300 + document.commandDispatcher.focusedWindow = null; 1.301 + gBrowser.contentWindow.focus(); 1.302 + } 1.303 + 1.304 + function testQuickFindLink() { 1.305 + clearFocus(); 1.306 + 1.307 + var event = document.createEvent("KeyEvents"); 1.308 + event.initKeyEvent("keypress", true, true, null, false, false, 1.309 + false, false, 0, "'".charCodeAt(0)); 1.310 + gBrowser.contentDocument.documentElement.dispatchEvent(event); 1.311 + 1.312 + ok(!gFindBar.hidden, "testQuickFindLink: failed to open findbar"); 1.313 + ok(document.commandDispatcher.focusedElement == gFindBar._findField.inputField, 1.314 + "testQuickFindLink: find field is not focused"); 1.315 + 1.316 + var searchStr = "Link Test"; 1.317 + enterStringIntoFindField(searchStr); 1.318 + ok(gBrowser.contentWindow.getSelection() == searchStr, 1.319 + "testQuickFindLink: failed to find sample link"); 1.320 + testClipboardSearchString(searchStr); 1.321 + } 1.322 + 1.323 + // See bug 963925 for more details on this test. 1.324 + function testFindWithHighlight() { 1.325 + //clearFocus(); 1.326 + gFindBar._findField.value = ""; 1.327 + 1.328 + let findCommand = document.getElementById("cmd_find"); 1.329 + findCommand.doCommand(); 1.330 + 1.331 + let searchStr = "e"; 1.332 + enterStringIntoFindField(searchStr); 1.333 + 1.334 + let a = gFindBar._findField.value; 1.335 + let b = gFindBar._browser.finder._fastFind.searchString; 1.336 + let c = gFindBar._browser.finder.searchString; 1.337 + ok(a == b && b == c, "testFindWithHighlight 1: " + a + ", " + b + ", " + c + "."); 1.338 + 1.339 + let oldGetInitialSelection = gFindBar._getInitialSelection; 1.340 + let searchStr = "t"; 1.341 + gFindBar._getInitialSelection = () => searchStr; 1.342 + findCommand.doCommand(); 1.343 + gFindBar._getInitialSelection = oldGetInitialSelection; 1.344 + 1.345 + a = gFindBar._findField.value; 1.346 + b = gFindBar._browser.finder._fastFind.searchString; 1.347 + c = gFindBar._browser.finder.searchString; 1.348 + ok(a == searchStr && b == c, "testFindWithHighlight 2: " + searchStr + 1.349 + ", " + a + ", " + b + ", " + c + "."); 1.350 + 1.351 + let highlightButton = gFindBar.getElement("highlight"); 1.352 + highlightButton.click(); 1.353 + ok(highlightButton.checked, "testFindWithHighlight 3: Highlight All should be checked."); 1.354 + 1.355 + a = gFindBar._findField.value; 1.356 + b = gFindBar._browser.finder._fastFind.searchString; 1.357 + c = gFindBar._browser.finder.searchString; 1.358 + ok(a == searchStr && b == c, "testFindWithHighlight 4: " + a + ", " + b + ", " + c + "."); 1.359 + 1.360 + gFindBar.onFindAgainCommand(); 1.361 + a = gFindBar._findField.value; 1.362 + b = gFindBar._browser.finder._fastFind.searchString; 1.363 + c = gFindBar._browser.finder.searchString; 1.364 + ok(a == b && b == c, "testFindWithHighlight 5: " + a + ", " + b + ", " + c + "."); 1.365 + 1.366 + highlightButton.click(); 1.367 + ok(!highlightButton.checked, "testFindWithHighlight: Highlight All should be unchecked."); 1.368 + } 1.369 + 1.370 + function testQuickFindText() { 1.371 + clearFocus(); 1.372 + 1.373 + var event = document.createEvent("KeyEvents"); 1.374 + event.initKeyEvent("keypress", true, true, null, false, false, 1.375 + false, false, 0, "/".charCodeAt(0)); 1.376 + gBrowser.contentDocument.documentElement.dispatchEvent(event); 1.377 + 1.378 + ok(!gFindBar.hidden, "testQuickFindText: failed to open findbar"); 1.379 + ok(document.commandDispatcher.focusedElement == gFindBar._findField.inputField, 1.380 + "testQuickFindText: find field is not focused"); 1.381 + 1.382 + enterStringIntoFindField(SEARCH_TEXT); 1.383 + ok(gBrowser.contentWindow.getSelection() == SEARCH_TEXT, 1.384 + "testQuickFindText: failed to find '" + SEARCH_TEXT + "'"); 1.385 + testClipboardSearchString(SEARCH_TEXT); 1.386 + } 1.387 + 1.388 + function testClipboardSearchString(aExpected) { 1.389 + if (!gHasFindClipboard) 1.390 + return; 1.391 + 1.392 + if (!aExpected) 1.393 + aExpected = ""; 1.394 + var searchStr = gFindBar.browser.finder.clipboardSearchString; 1.395 + ok(searchStr.toLowerCase() == aExpected.toLowerCase(), 1.396 + "testClipboardSearchString: search string not set to '" + aExpected + 1.397 + "', instead found '" + searchStr + "'"); 1.398 + } 1.399 + ]]></script> 1.400 + 1.401 + <commandset> 1.402 + <command id="cmd_find" oncommand="document.getElementById('FindToolbar').onFindCommand();"/> 1.403 + </commandset> 1.404 + <browser type="content-primary" flex="1" id="content" src="about:blank"/> 1.405 + <findbar id="FindToolbar" browserid="content"/> 1.406 +</window>