browser/devtools/scratchpad/test/browser_scratchpad_edit_ui_updates.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* vim: set ts=2 et sw=2 tw=80: */
     2 /* Any copyright is dedicated to the Public Domain.
     3    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 /* Bug 699130 */
     6 "use strict";
     8 function test()
     9 {
    10   waitForExplicitFinish();
    12   gBrowser.selectedTab = gBrowser.addTab();
    13   gBrowser.selectedBrowser.addEventListener("load", function onLoad() {
    14     gBrowser.selectedBrowser.removeEventListener("load", onLoad, true);
    15     openScratchpad(runTests);
    16   }, true);
    18   content.location = "data:text/html,test Edit menu updates Scratchpad - bug 699130";
    19 }
    21 function runTests()
    22 {
    23   let sp = gScratchpadWindow.Scratchpad;
    24   let doc = gScratchpadWindow.document;
    25   let winUtils = gScratchpadWindow.QueryInterface(Ci.nsIInterfaceRequestor).
    26                  getInterface(Ci.nsIDOMWindowUtils);
    27   let OS = Services.appinfo.OS;
    29   info("will test the Edit menu");
    31   let pass = 0;
    33   sp.setText("bug 699130: hello world! (edit menu)");
    35   let editMenu = doc.getElementById("sp-edit-menu");
    36   ok(editMenu, "the Edit menu");
    37   let menubar = editMenu.parentNode;
    38   ok(menubar, "menubar found");
    40   let editMenuIndex = -1;
    41   for (let i = 0; i < menubar.children.length; i++) {
    42     if (menubar.children[i] === editMenu) {
    43       editMenuIndex = i;
    44       break;
    45     }
    46   }
    47   isnot(editMenuIndex, -1, "Edit menu index is correct");
    49   let menuPopup = editMenu.menupopup;
    50   ok(menuPopup, "the Edit menupopup");
    51   let cutItem = doc.getElementById("menu_cut");
    52   ok(cutItem, "the Cut menuitem");
    53   let pasteItem = doc.getElementById("menu_paste");
    54   ok(pasteItem, "the Paste menuitem");
    56   let anchor = doc.documentElement;
    57   let isContextMenu = false;
    59   let openMenu = function(aX, aY, aCallback) {
    60     if (!editMenu || OS != "Darwin") {
    61       menuPopup.addEventListener("popupshown", function onPopupShown() {
    62         menuPopup.removeEventListener("popupshown", onPopupShown, false);
    63         executeSoon(aCallback);
    64       }, false);
    65     }
    67     executeSoon(function() {
    68       if (editMenu) {
    69         if (OS == "Darwin") {
    70           winUtils.forceUpdateNativeMenuAt(editMenuIndex);
    71           executeSoon(aCallback);
    72         } else {
    73           editMenu.open = true;
    74         }
    75       } else {
    76         menuPopup.openPopup(anchor, "overlap", aX, aY, isContextMenu, false);
    77       }
    78     });
    79   };
    81   let closeMenu = function(aCallback) {
    82     if (!editMenu || OS != "Darwin") {
    83       menuPopup.addEventListener("popuphidden", function onPopupHidden() {
    84         menuPopup.removeEventListener("popuphidden", onPopupHidden, false);
    85         executeSoon(aCallback);
    86       }, false);
    87     }
    89     executeSoon(function() {
    90       if (editMenu) {
    91         if (OS == "Darwin") {
    92           winUtils.forceUpdateNativeMenuAt(editMenuIndex);
    93           executeSoon(aCallback);
    94         } else {
    95           editMenu.open = false;
    96         }
    97       } else {
    98         menuPopup.hidePopup();
    99       }
   100     });
   101   };
   103   let firstShow = function() {
   104     ok(cutItem.hasAttribute("disabled"), "cut menuitem is disabled");
   105     closeMenu(firstHide);
   106   };
   108   let firstHide = function() {
   109     sp.editor.setSelection({ line: 0, ch: 0 }, { line: 0, ch: 10 });
   110     openMenu(11, 11, showAfterSelect);
   111   };
   113   let showAfterSelect = function() {
   114     ok(!cutItem.hasAttribute("disabled"), "cut menuitem is enabled after select");
   115     closeMenu(hideAfterSelect);
   116   };
   118   let hideAfterSelect = function() {
   119     sp.editor.on("change", onCut);
   120     waitForFocus(function () {
   121       let selectedText = sp.editor.getSelection();
   122       ok(selectedText.length > 0, "non-empty selected text will be cut");
   124       EventUtils.synthesizeKey("x", {accelKey: true}, gScratchpadWindow);
   125     }, gScratchpadWindow);
   126   };
   128   let onCut = function() {
   129     sp.editor.off("change", onCut);
   130     openMenu(12, 12, showAfterCut);
   131   };
   133   let showAfterCut = function() {
   134     ok(cutItem.hasAttribute("disabled"), "cut menuitem is disabled after cut");
   135     ok(!pasteItem.hasAttribute("disabled"), "paste menuitem is enabled after cut");
   136     closeMenu(hideAfterCut);
   137   };
   139   let hideAfterCut = function() {
   140     sp.editor.on("change", onPaste);
   141     waitForFocus(function () {
   142       EventUtils.synthesizeKey("v", {accelKey: true}, gScratchpadWindow);
   143     }, gScratchpadWindow);
   144   };
   146   let onPaste = function() {
   147     sp.editor.off("change", onPaste);
   148     openMenu(13, 13, showAfterPaste);
   149   };
   151   let showAfterPaste = function() {
   152     ok(cutItem.hasAttribute("disabled"), "cut menuitem is disabled after paste");
   153     ok(!pasteItem.hasAttribute("disabled"), "paste menuitem is enabled after paste");
   154     closeMenu(hideAfterPaste);
   155   };
   157   let hideAfterPaste = function() {
   158     if (pass == 0) {
   159       pass++;
   160       testContextMenu();
   161     } else {
   162       finish();
   163     }
   164   };
   166   let testContextMenu = function() {
   167     info("will test the context menu");
   169     editMenu = null;
   170     isContextMenu = true;
   172     menuPopup = doc.getElementById("scratchpad-text-popup");
   173     ok(menuPopup, "the context menupopup");
   174     cutItem = doc.getElementById("cMenu_cut");
   175     ok(cutItem, "the Cut menuitem");
   176     pasteItem = doc.getElementById("cMenu_paste");
   177     ok(pasteItem, "the Paste menuitem");
   179     sp.setText("bug 699130: hello world! (context menu)");
   180     openMenu(10, 10, firstShow);
   181   };
   183   openMenu(10, 10, firstShow);
   184 }

mercurial