browser/devtools/framework/test/browser_toolbox_options.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 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/ */
     4 let doc = null, toolbox = null, panelWin = null, modifiedPrefs = [];
     6 function test() {
     7   waitForExplicitFinish();
     9   const URL = "data:text/html;charset=utf8,test for dynamically registering and unregistering tools";
    10   Task.spawn(function* () {
    11     let { target } = yield addTab(URL);
    12     let toolbox = yield gDevTools.showToolbox(target);
    13     yield testSelectTool(toolbox);
    14     yield testOptionsShortcut();
    15     yield testOptions();
    16     yield testToggleTools();
    17   }).then(cleanup, errorHandler);
    18 }
    20 function testSelectTool(aToolbox) {
    21   let deferred = promise.defer();
    23   toolbox = aToolbox;
    24   doc = toolbox.doc;
    25   toolbox.once("options-selected", () => {
    26     ok(true, "Toolbox selected via selectTool method");
    27     deferred.resolve();
    28   });
    29   toolbox.selectTool("options");
    31   return deferred.promise;
    32 }
    34 function testOptionsShortcut() {
    35   let deferred = promise.defer();
    37   toolbox.selectTool("webconsole")
    38          .then(() => synthesizeKeyFromKeyTag("toolbox-options-key", doc))
    39          .then(() => {
    40            ok(true, "Toolbox selected via shortcut key");
    41            deferred.resolve();
    42          });
    44   return deferred.promise;
    45 }
    47 function testOptions() {
    48   let tool = toolbox.getPanel("options");
    49   panelWin = tool.panelWin;
    50   let prefNodes = tool.panelDoc.querySelectorAll("checkbox[data-pref]");
    52   // Store modified pref names so that they can be cleared on error.
    53   for (let node of prefNodes) {
    54     let pref = node.getAttribute("data-pref");
    55     modifiedPrefs.push(pref);
    56   }
    58   // Test each options pref
    59   let p = promise.resolve();
    60   for (let node of prefNodes) {
    61     let prefValue = Services.prefs.getBoolPref(node.getAttribute("data-pref"));
    62     p = p.then(testMouseClick.bind(null, node, prefValue));
    63   }
    64   // Do again with opposite values to reset prefs
    65   for (let node of prefNodes) {
    66     let prefValue = !Services.prefs.getBoolPref(node.getAttribute("data-pref"));
    67     p = p.then(testMouseClick.bind(null, node, prefValue));
    68   }
    70   return p;
    71 }
    73 function testMouseClick(node, prefValue) {
    74   let deferred = promise.defer();
    76   let pref = node.getAttribute("data-pref");
    77   gDevTools.once("pref-changed", (event, data) => {
    78     if (data.pref == pref) {
    79       ok(true, "Correct pref was changed");
    80       is(data.oldValue, prefValue, "Previous value is correct");
    81       is(data.newValue, !prefValue, "New value is correct");
    82     } else {
    83       ok(false, "Pref " + pref + " was not changed correctly");
    84     }
    85     deferred.resolve();
    86   });
    88   node.scrollIntoView();
    90   // We use executeSoon here to ensure that the element is in view and
    91   // clickable.
    92   executeSoon(function() {
    93     info("Click event synthesized for pref " + pref);
    94     EventUtils.synthesizeMouseAtCenter(node, {}, panelWin);
    95   });
    97   return deferred.promise;
    98 }
   100 function testToggleTools() {
   101   let toolNodes = panelWin.document.querySelectorAll("#default-tools-box > checkbox:not([unsupported])");
   102   let enabledTools = Array.prototype.filter.call(toolNodes, node => node.checked);
   104   let toggleableTools = gDevTools.getDefaultTools().filter(tool => tool.visibilityswitch);
   105   for (let node of toolNodes) {
   106     let id = node.getAttribute("id");
   107     ok (toggleableTools.some(tool => tool.id === id),
   108       "There should be a toggle checkbox for: " + id);
   109   }
   111   // Store modified pref names so that they can be cleared on error.
   112   for (let tool of toggleableTools) {
   113     let pref = tool.visibilityswitch;
   114     modifiedPrefs.push(pref);
   115   }
   117   // Toggle each tool
   118   let p = promise.resolve();
   119   for (let node of toolNodes) {
   120     p = p.then(toggleTool.bind(null, node));
   121   }
   122   // Toggle again to reset tool enablement state
   123   for (let node of toolNodes) {
   124     p = p.then(toggleTool.bind(null, node));
   125   }
   127   // Test that a tool can still be added when no tabs are present:
   128   // Disable all tools
   129   for (let node of enabledTools) {
   130     p = p.then(toggleTool.bind(null, node));
   131   }
   132   // Re-enable the tools which are enabled by default
   133   for (let node of enabledTools) {
   134     p = p.then(toggleTool.bind(null, node));
   135   }
   137   // Toggle first, middle, and last tools to ensure that toolbox tabs are
   138   // inserted in order
   139   let firstTool  = toolNodes[0],
   140       middleTool = toolNodes[(toolNodes.length / 2) | 0],
   141       lastTool   = toolNodes[toolNodes.length - 1];
   143   p = p.then(toggleTool.bind(null, firstTool))
   144        .then(toggleTool.bind(null, firstTool))
   145        .then(toggleTool.bind(null, middleTool))
   146        .then(toggleTool.bind(null, middleTool))
   147        .then(toggleTool.bind(null, lastTool))
   148        .then(toggleTool.bind(null, lastTool));
   150   return p;
   151 }
   153 function toggleTool(node) {
   154   let deferred = promise.defer();
   156   let toolId = node.getAttribute("id");
   157   if (node.checked) {
   158     gDevTools.once("tool-unregistered", checkUnregistered.bind(null, toolId, deferred));
   159   } else {
   160     gDevTools.once("tool-registered", checkRegistered.bind(null, toolId, deferred));
   161   }
   162   node.scrollIntoView();
   163   EventUtils.synthesizeMouseAtCenter(node, {}, panelWin);
   165   return deferred.promise;
   166 }
   168 function checkUnregistered(toolId, deferred, event, data) {
   169   if (data.id == toolId) {
   170     ok(true, "Correct tool removed");
   171     // checking tab on the toolbox
   172     ok(!doc.getElementById("toolbox-tab-" + toolId), "Tab removed for " + toolId);
   173   } else {
   174     ok(false, "Something went wrong, " + toolId + " was not unregistered");
   175   }
   176   deferred.resolve();
   177 }
   179 function checkRegistered(toolId, deferred, event, data) {
   180   if (data == toolId) {
   181     ok(true, "Correct tool added back");
   182     // checking tab on the toolbox
   183     let radio = doc.getElementById("toolbox-tab-" + toolId);
   184     ok(radio, "Tab added back for " + toolId);
   185     if (radio.previousSibling) {
   186       ok(+radio.getAttribute("ordinal") >=
   187          +radio.previousSibling.getAttribute("ordinal"),
   188          "Inserted tab's ordinal is greater than equal to its previous tab." +
   189          "Expected " + radio.getAttribute("ordinal") + " >= " +
   190          radio.previousSibling.getAttribute("ordinal"));
   191     }
   192     if (radio.nextSibling) {
   193       ok(+radio.getAttribute("ordinal") <
   194          +radio.nextSibling.getAttribute("ordinal"),
   195          "Inserted tab's ordinal is less than its next tab. Expected " +
   196          radio.getAttribute("ordinal") + " < " +
   197          radio.nextSibling.getAttribute("ordinal"));
   198     }
   199   } else {
   200     ok(false, "Something went wrong, " + toolId + " was not registered");
   201   }
   202   deferred.resolve();
   203 }
   205 function cleanup() {
   206   toolbox.destroy().then(function() {
   207     gBrowser.removeCurrentTab();
   208     for (let pref of modifiedPrefs) {
   209       Services.prefs.clearUserPref(pref);
   210     }
   211     toolbox = doc = panelWin = modifiedPrefs = null;
   212     finish();
   213   });
   214 }
   216 function errorHandler(error) {
   217   ok(false, "Unexpected error: " + error);
   218   cleanup();
   219 }

mercurial