/toolkit/content/tests/chrome/findbar_window.xul
http://github.com/zpao/v8monkey · Unknown · 363 lines · 307 code · 56 blank · 0 comment · 0 complexity · 892b6ed56fcb47fde106b5ec5fbe5ca1 MD5 · raw file
- <?xml version="1.0"?>
- <!-- ***** BEGIN LICENSE BLOCK *****
- - Version: MPL 1.1/GPL 2.0/LGPL 2.1
- -
- - The contents of this file are subject to the Mozilla Public License Version
- - 1.1 (the "License"); you may not use this file except in compliance with
- - the License. You may obtain a copy of the License at
- - http://www.mozilla.org/MPL/
- -
- - Software distributed under the License is distributed on an "AS IS" basis,
- - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- - for the specific language governing rights and limitations under the
- - License.
- -
- - The Original Code is Findbar Test code
- -
- - The Initial Developer of the Original Code is
- - Mozilla Corporation.
- - Portions created by the Initial Developer are Copyright (C) 2006
- - the Initial Developer. All Rights Reserved.
- -
- - Contributor(s):
- - Asaf Romano <mano@mozilla.com>
- -
- - Alternatively, the contents of this file may be used under the terms of
- - either the GNU General Public License Version 2 or later (the "GPL"), or
- - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- - in which case the provisions of the GPL or the LGPL are applicable instead
- - of those above. If you wish to allow use of your version of this file only
- - under the terms of either the GPL or the LGPL, and not to allow others to
- - use your version of this file under the terms of the MPL, indicate your
- - decision by deleting the provisions above and replace them with the notice
- - and other provisions required by the GPL or the LGPL. If you do not delete
- - the provisions above, a recipient may use your version of this file under
- - the terms of any one of the MPL, the GPL or the LGPL.
- -
- - ***** END LICENSE BLOCK ***** -->
- <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
- <window id="FindbarTest"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- width="600"
- height="600"
- onload="onLoad();"
- title="findbar test">
- <script type="application/javascript"
- src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>
- <script type="application/javascript"
- src="chrome://mochikit/content/tests/SimpleTest/ChromeUtils.js"/>
- <script type="application/javascript"><![CDATA[
- const Ci = Components.interfaces;
- const Cc = Components.classes;
- const Cr = Components.results;
- const SAMPLE_URL = "http://www.mozilla.org/";
- const SAMPLE_TEXT = "Some text in a text field.";
- const SEARCH_TEXT = "Text Test";
- var gFindBar = null;
- var gBrowser;
- var gStatusText;
- var gXULBrowserWindow = {
- QueryInterface: function(aIID) {
- if (aIID.Equals(Ci.nsIXULBrowserWindow) ||
- aIID.Equals(Ci.nsISupports))
- return this;
- throw Cr.NS_NOINTERFACE;
- },
- setJSStatus: function() { },
- setJSDefaultStatus: function() { },
- setOverLink: function(aStatusText, aLink) {
- gStatusText = aStatusText;
- },
- onBeforeLinkTraversal: function() { }
- };
- function ok(condition, message) {
- window.opener.wrappedJSObject.SimpleTest.ok(condition, message);
- }
- function finish() {
- window.close();
- window.opener.wrappedJSObject.SimpleTest.finish();
- }
- function onLoad() {
- window.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIWebNavigation)
- .QueryInterface(Ci.nsIDocShellTreeItem)
- .treeOwner
- .QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIXULWindow)
- .XULBrowserWindow = gXULBrowserWindow;
- var _delayedOnLoad = function() {
- gFindBar = document.getElementById("FindToolbar");
- gBrowser = document.getElementById("content");
- gBrowser.addEventListener("pageshow", _delayedOnPageShow, false);
- 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'/>");
- }
- setTimeout(_delayedOnLoad, 1000);
- }
- function _delayedOnPageShow() {
- // setTimeout to the test runs after painting suppression ends
- setTimeout(onPageShow, 0);
- }
- function onPageShow() {
- testNormalFind();
- gFindBar.close();
- ok(gFindBar.hidden, "Failed to close findbar after testNormalFind");
- testNormalFindWithComposition();
- gFindBar.close();
- ok(gFindBar.hidden, "findbar should be hidden after testNormalFindWithComposition");
- testAutoCaseSensitivityUI();
- testQuickFindText();
- gFindBar.close();
- ok(gFindBar.hidden, "Failed to close findbar after testQuickFindText");
- testFindbarSelection();
- testDrop();
- testQuickFindLink();
- testStatusText();
- testQuickFindClose();
- }
- function testFindbarSelection() {
- function checkFindbarState(aTestName, aExpSelection) {
- document.getElementById("cmd_find").doCommand();
- ok(!gFindBar.hidden, "testFindbarSelection: failed to open findbar: " + aTestName);
- ok(document.commandDispatcher.focusedElement == gFindBar._findField.inputField,
- "testFindbarSelection: find field is not focused: " + aTestName);
- ok(gFindBar._findField.value == aExpSelection,
- "Incorrect selection in testFindbarSelection: " + aTestName + ". Selection: " + gFindBar._findField.value);
- // Clear the value, close the findbar
- gFindBar._findField.value = "";
- gFindBar.close();
- }
- // test normal selected text
- var cH2 = gBrowser.contentDocument.getElementById("h2");
- var cSelection = gBrowser.contentDocument.defaultView.getSelection();
- var cRange = gBrowser.contentDocument.createRange();
- cRange.setStart(cH2, 0);
- cRange.setEnd(cH2, 1);
- cSelection.removeAllRanges();
- cSelection.addRange(cRange);
- checkFindbarState("plain text", SEARCH_TEXT);
- // test nsIDOMNSEditableElement with selection
- var textInput = gBrowser.contentDocument.getElementById("text");
- textInput.focus();
- textInput.select();
- checkFindbarState("text input", SAMPLE_TEXT);
- // test non-editable nsIDOMNSEditableElement (button)
- gBrowser.contentDocument.getElementById("button").focus();
- checkFindbarState("button", "");
- }
- function testDrop()
- {
- gFindBar.open();
- // use an dummy image to start the drag so it doesn't get interrupted by a selection
- var img = gBrowser.contentDocument.getElementById("img");
- synthesizeDrop(img, gFindBar._findField, [[ {type: "text/plain", data: "Rabbits" } ]], "copy", window);
- window.opener.wrappedJSObject.SimpleTest.is(gFindBar._findField.inputField.value, "Rabbits", "drop on findbar");
- gFindBar.close();
- }
- function testQuickFindClose() {
- var _isClosedCallback = function() {
- ok(gFindBar.hidden,
- "_isClosedCallback: Failed to auto-close quick find bar after " +
- gFindBar._quickFindTimeoutLength + "ms");
- finish();
- };
- setTimeout(_isClosedCallback, gFindBar._quickFindTimeoutLength + 100);
- }
- function testStatusText() {
- var _delayedCheckStatusText = function() {
- ok(gStatusText == SAMPLE_URL, "testStatusText: Failed to set status text of found link");
- };
- setTimeout(_delayedCheckStatusText, 100);
- }
- function enterStringIntoFindField(aString) {
- for (var i=0; i < aString.length; i++) {
- var event = document.createEvent("KeyEvents");
- event.initKeyEvent("keypress", true, true, null, false, false,
- false, false, 0, aString.charCodeAt(i));
- gFindBar._findField.inputField.dispatchEvent(event);
- }
- }
- // also test match-case
- function testNormalFind() {
- document.getElementById("cmd_find").doCommand();
- ok(!gFindBar.hidden, "testNormalFind: failed to open findbar");
- ok(document.commandDispatcher.focusedElement == gFindBar._findField.inputField,
- "testNormalFind: find field is not focused");
- var matchCaseCheckbox = gFindBar.getElement("find-case-sensitive");
- if (!matchCaseCheckbox.hidden & matchCaseCheckbox.checked)
- matchCaseCheckbox.click();
- var searchStr = "text tes";
- enterStringIntoFindField(searchStr);
- ok(gBrowser.contentWindow.getSelection().toString().toLowerCase() == searchStr,
- "testNormalFind: failed to find '" + searchStr + "'");
- if (!matchCaseCheckbox.hidden) {
- matchCaseCheckbox.click();
- enterStringIntoFindField("t");
- ok(gBrowser.contentWindow.getSelection() != searchStr,
- "testNormalFind: Case-sensitivy is broken '" + searchStr + "'");
- matchCaseCheckbox.click();
- }
- }
- function testNormalFindWithComposition() {
- document.getElementById("cmd_find").doCommand();
- ok(!gFindBar.hidden, "testNormalFindWithComposition: findbar should be open");
- ok(document.commandDispatcher.focusedElement == gFindBar._findField.inputField,
- "testNormalFindWithComposition: find field should be focused");
- var matchCaseCheckbox = gFindBar.getElement("find-case-sensitive");
- var clicked = false;
- if (!matchCaseCheckbox.hidden & matchCaseCheckbox.checked) {
- matchCaseCheckbox.click();
- clicked = true;
- }
- gFindBar._findField.inputField.focus();
- var searchStr = "text";
- synthesizeComposition({ type: "compositionstart" });
- synthesizeComposition({ type: "compositionupdate", data: searchStr });
- synthesizeText(
- { "composition":
- { "string": searchStr,
- "clauses":
- [
- { "length": searchStr.length, "attr": COMPOSITION_ATTR_RAWINPUT }
- ]
- },
- "caret": { "start": searchStr.length, "length": 0 }
- });
- ok(gBrowser.contentWindow.getSelection().toString().toLowerCase() != searchStr,
- "testNormalFindWithComposition: text shouldn't be found during composition");
- synthesizeText(
- { "composition":
- { "string": searchStr,
- "clauses":
- [
- { "length": 0, "attr": 0 }
- ]
- },
- "caret": { "start": searchStr.length, "length": 0 }
- });
- synthesizeComposition({ type: "compositionend", data: searchStr });
- ok(gBrowser.contentWindow.getSelection().toString().toLowerCase() == searchStr,
- "testNormalFindWithComposition: text should be found after committing composition");
- if (clicked) {
- matchCaseCheckbox.click();
- }
- }
- function testAutoCaseSensitivityUI() {
- var matchCaseCheckbox = gFindBar.getElement("find-case-sensitive");
- var matchCaseLabel = gFindBar.getElement("match-case-status");
- document.getElementById("cmd_find").doCommand();
- ok(!matchCaseCheckbox.hidden, "match case box is hidden in manual mode");
- ok(matchCaseLabel.hidden, "match case label is visible in manual mode");
- var prefsvc = Cc["@mozilla.org/preferences-service;1"].
- getService(Components.interfaces.nsIPrefBranch);
- prefsvc.setIntPref("accessibility.typeaheadfind.casesensitive", 2);
- ok(matchCaseCheckbox.hidden,
- "match case box is visible in automatic mode");
- ok(!matchCaseLabel.hidden,
- "match case label is hidden in automatic mode");
- enterStringIntoFindField("a");
- var insensitiveLabel = matchCaseLabel.value;
- enterStringIntoFindField("A");
- var sensitiveLabel = matchCaseLabel.value;
- ok(insensitiveLabel != sensitiveLabel,
- "Case Sensitive label was not correctly updated");
- // bug 365551
- gFindBar.onFindAgainCommand();
- ok(matchCaseCheckbox.hidden && !matchCaseLabel.hidden,
- "bug 365551: case sensitivity UI is broken after find-again");
- prefsvc.setIntPref("accessibility.typeaheadfind.casesensitive", 0);
- gFindBar.close();
- }
- function clearFocus() {
- document.commandDispatcher.focusedElement = null;
- document.commandDispatcher.focusedWindow = null;
- gBrowser.contentWindow.focus();
- }
- function testQuickFindLink() {
- clearFocus();
- var event = document.createEvent("KeyEvents");
- event.initKeyEvent("keypress", true, true, null, false, false,
- false, false, 0, "'".charCodeAt(0));
- gBrowser.contentDocument.documentElement.dispatchEvent(event);
- ok(!gFindBar.hidden, "testQuickFindLink: failed to open findbar");
- ok(document.commandDispatcher.focusedElement == gFindBar._findField.inputField,
- "testQuickFindLink: find field is not focused");
- var searchStr = "Link Test";
- enterStringIntoFindField(searchStr);
- ok(gFindBar._foundLink, "testQuickFindLink: failed to find sample link");
- }
- function testQuickFindText() {
- clearFocus();
- var event = document.createEvent("KeyEvents");
- event.initKeyEvent("keypress", true, true, null, false, false,
- false, false, 0, "/".charCodeAt(0));
- gBrowser.contentDocument.documentElement.dispatchEvent(event);
- ok(!gFindBar.hidden, "testQuickFindText: failed to open findbar");
- ok(document.commandDispatcher.focusedElement == gFindBar._findField.inputField,
- "testQuickFindText: find field is not focused");
- enterStringIntoFindField(SEARCH_TEXT);
- ok(gBrowser.contentWindow.getSelection() == SEARCH_TEXT,
- "testQuickFindText: failed to find '" + SEARCH_TEXT + "'");
- }
- ]]></script>
- <commandset>
- <command id="cmd_find" oncommand="document.getElementById('FindToolbar').onFindCommand();"/>
- </commandset>
- <browser type="content-primary" flex="1" id="content" src="about:blank"/>
- <findbar id="FindToolbar" browserid="content"/>
- </window>