browser/devtools/framework/test/browser_devtools_api.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 // Tests devtools API
     6 const Cu = Components.utils;
     7 const toolId = "test-tool";
     9 let tempScope = {};
    10 Cu.import("resource://gre/modules/devtools/event-emitter.js", tempScope);
    11 let EventEmitter = tempScope.EventEmitter;
    13 function test() {
    14   addTab("about:blank", function(aBrowser, aTab) {
    15     runTests(aTab);
    16   });
    17 }
    19 function runTests(aTab) {
    20   let toolDefinition = {
    21     id: toolId,
    22     isTargetSupported: function() true,
    23     visibilityswitch: "devtools.test-tool.enabled",
    24     url: "about:blank",
    25     label: "someLabel",
    26     build: function(iframeWindow, toolbox) {
    27       let panel = new DevToolPanel(iframeWindow, toolbox);
    28       return panel.open();
    29     },
    30   };
    32   ok(gDevTools, "gDevTools exists");
    33   is(gDevTools.getToolDefinitionMap().has(toolId), false,
    34     "The tool is not registered");
    36   gDevTools.registerTool(toolDefinition);
    37   is(gDevTools.getToolDefinitionMap().has(toolId), true,
    38     "The tool is registered");
    40   let target = TargetFactory.forTab(gBrowser.selectedTab);
    41   gDevTools.showToolbox(target, toolId).then(function(toolbox) {
    42     is(toolbox.target, target, "toolbox target is correct");
    43     is(toolbox._host.hostTab, gBrowser.selectedTab, "toolbox host is correct");
    44     continueTests(toolbox);
    45   }).then(null, console.error);
    46 }
    48 function continueTests(toolbox, panel) {
    49   ok(toolbox.getCurrentPanel(), "panel value is correct");
    50   is(toolbox.currentToolId, toolId, "toolbox _currentToolId is correct");
    52   ok(!toolbox.doc.getElementById("toolbox-tab-" + toolId).hasAttribute("icon-invertable"),
    53     "The tool tab does not have the invertable attribute");
    55   ok(toolbox.doc.getElementById("toolbox-tab-inspector").hasAttribute("icon-invertable"),
    56     "The builtin tool tabs do have the invertable attribute");
    58   let toolDefinitions = gDevTools.getToolDefinitionMap();
    59   is(toolDefinitions.has(toolId), true, "The tool is in gDevTools");
    61   let toolDefinition = toolDefinitions.get(toolId);
    62   is(toolDefinition.id, toolId, "toolDefinition id is correct");
    64   gDevTools.unregisterTool(toolId);
    65   is(gDevTools.getToolDefinitionMap().has(toolId), false,
    66     "The tool is no longer registered");
    68   toolbox.destroy().then(function() {
    69     let target = TargetFactory.forTab(gBrowser.selectedTab);
    70     ok(gDevTools._toolboxes.get(target) == null, "gDevTools doesn't know about target");
    71     ok(toolbox._target == null, "toolbox doesn't know about target.");
    73     finishUp();
    74   }).then(null, console.error);
    75 }
    77 function finishUp() {
    78   tempScope = null;
    79   gBrowser.removeCurrentTab();
    80   finish();
    81 }
    83 /**
    84 * When a Toolbox is started it creates a DevToolPanel for each of the tools
    85 * by calling toolDefinition.build(). The returned object should
    86 * at least implement these functions. They will be used by the ToolBox.
    87 *
    88 * There may be no benefit in doing this as an abstract type, but if nothing
    89 * else gives us a place to write documentation.
    90 */
    91 function DevToolPanel(iframeWindow, toolbox) {
    92   EventEmitter.decorate(this);
    94   this._toolbox = toolbox;
    96   /*let doc = iframeWindow.document
    97   let label = doc.createElement("label");
    98   let textNode = doc.createTextNode("Some Tool");
   100   label.appendChild(textNode);
   101   doc.body.appendChild(label);*/
   102 }
   104 DevToolPanel.prototype = {
   105   open: function() {
   106     let deferred = promise.defer();
   108     executeSoon(function() {
   109       this._isReady = true;
   110       this.emit("ready");
   111       deferred.resolve(this);
   112     }.bind(this));
   114     return deferred.promise;
   115   },
   117   get target() this._toolbox.target,
   119   get toolbox() this._toolbox,
   121   get isReady() this._isReady,
   123   _isReady: false,
   125   destroy: function DTI_destroy() {
   126     return promise.defer(null);
   127   },
   128 };

mercurial