browser/devtools/framework/test/browser_toolbox_sidebar.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/browser/devtools/framework/test/browser_toolbox_sidebar.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,150 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +function test() {
     1.8 +  const Cu = Components.utils;
     1.9 +  let {ToolSidebar} = devtools.require("devtools/framework/sidebar");
    1.10 +
    1.11 +  const toolURL = "data:text/xml;charset=utf8,<?xml version='1.0'?>" +
    1.12 +                  "<?xml-stylesheet href='chrome://browser/skin/devtools/common.css' type='text/css'?>" +
    1.13 +                  "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'>" +
    1.14 +                  "<hbox flex='1'><description flex='1'>foo</description><splitter class='devtools-side-splitter'/>" +
    1.15 +                  "<tabbox flex='1' id='sidebar' class='devtools-sidebar-tabs'><tabs/><tabpanels flex='1'/></tabbox>" +
    1.16 +                  "</hbox>" +
    1.17 +                  "</window>";
    1.18 +
    1.19 +  const tab1URL = "data:text/html;charset=utf8,<title>1</title><p>1</p>";
    1.20 +  const tab2URL = "data:text/html;charset=utf8,<title>2</title><p>2</p>";
    1.21 +  const tab3URL = "data:text/html;charset=utf8,<title>3</title><p>3</p>";
    1.22 +
    1.23 +  let panelDoc;
    1.24 +  let tab1Selected = false;
    1.25 +  let registeredTabs = {};
    1.26 +  let readyTabs = {};
    1.27 +
    1.28 +  let toolDefinition = {
    1.29 +    id: "fakeTool4242",
    1.30 +    visibilityswitch: "devtools.fakeTool4242.enabled",
    1.31 +    url: toolURL,
    1.32 +    label: "FAKE TOOL!!!",
    1.33 +    isTargetSupported: function() true,
    1.34 +    build: function(iframeWindow, toolbox) {
    1.35 +      let deferred = promise.defer();
    1.36 +      executeSoon(function() {
    1.37 +        deferred.resolve({
    1.38 +          target: toolbox.target,
    1.39 +          toolbox: toolbox,
    1.40 +          isReady: true,
    1.41 +          destroy: function(){},
    1.42 +          panelDoc: iframeWindow.document,
    1.43 +        });
    1.44 +      }.bind(this));
    1.45 +      return deferred.promise;
    1.46 +    },
    1.47 +  };
    1.48 +
    1.49 +  gDevTools.registerTool(toolDefinition);
    1.50 +
    1.51 +  addTab("about:blank", function(aBrowser, aTab) {
    1.52 +    let target = TargetFactory.forTab(gBrowser.selectedTab);
    1.53 +    gDevTools.showToolbox(target, toolDefinition.id).then(function(toolbox) {
    1.54 +      let panel = toolbox.getPanel(toolDefinition.id);
    1.55 +      ok(true, "Tool open");
    1.56 +
    1.57 +      let tabbox = panel.panelDoc.getElementById("sidebar");
    1.58 +      panel.sidebar = new ToolSidebar(tabbox, panel, "testbug865688", true);
    1.59 +
    1.60 +      panel.sidebar.on("new-tab-registered", function(event, id) {
    1.61 +        registeredTabs[id] = true;
    1.62 +      });
    1.63 +
    1.64 +      panel.sidebar.once("tab1-ready", function(event) {
    1.65 +        info(event);
    1.66 +        readyTabs.tab1 = true;
    1.67 +        allTabsReady(panel);
    1.68 +      });
    1.69 +
    1.70 +      panel.sidebar.once("tab2-ready", function(event) {
    1.71 +        info(event);
    1.72 +        readyTabs.tab2 = true;
    1.73 +        allTabsReady(panel);
    1.74 +      });
    1.75 +
    1.76 +      panel.sidebar.once("tab3-ready", function(event) {
    1.77 +        info(event);
    1.78 +        readyTabs.tab3 = true;
    1.79 +        allTabsReady(panel);
    1.80 +      });
    1.81 +
    1.82 +      panel.sidebar.once("tab1-selected", function(event) {
    1.83 +        info(event);
    1.84 +        tab1Selected = true;
    1.85 +        allTabsReady(panel);
    1.86 +      });
    1.87 +
    1.88 +      panel.sidebar.addTab("tab1", tab1URL, true);
    1.89 +      panel.sidebar.addTab("tab2", tab2URL);
    1.90 +      panel.sidebar.addTab("tab3", tab3URL);
    1.91 +
    1.92 +      panel.sidebar.show();
    1.93 +    }).then(null, console.error);
    1.94 +  });
    1.95 +
    1.96 +  function allTabsReady(panel) {
    1.97 +    if (!tab1Selected || !readyTabs.tab1 || !readyTabs.tab2 || !readyTabs.tab3) {
    1.98 +      return;
    1.99 +    }
   1.100 +
   1.101 +    ok(registeredTabs.tab1, "tab1 registered");
   1.102 +    ok(registeredTabs.tab2, "tab2 registered");
   1.103 +    ok(registeredTabs.tab3, "tab3 registered");
   1.104 +    ok(readyTabs.tab1, "tab1 ready");
   1.105 +    ok(readyTabs.tab2, "tab2 ready");
   1.106 +    ok(readyTabs.tab3, "tab3 ready");
   1.107 +
   1.108 +    let tabs = panel.sidebar._tabbox.querySelectorAll("tab");
   1.109 +    let panels = panel.sidebar._tabbox.querySelectorAll("tabpanel");
   1.110 +    let label = 1;
   1.111 +    for (let tab of tabs) {
   1.112 +      is(tab.getAttribute("label"), label++, "Tab has the right title");
   1.113 +    }
   1.114 +    is(label, 4, "Found the right amount of tabs.");
   1.115 +    is(panel.sidebar._tabbox.selectedPanel, panels[0], "First tab is selected");
   1.116 +    ok(panel.sidebar.getCurrentTabID(), "tab1", "getCurrentTabID() is correct");
   1.117 +
   1.118 +    panel.sidebar.once("tab1-unselected", function() {
   1.119 +      ok(true, "received 'unselected' event");
   1.120 +      panel.sidebar.once("tab2-selected", function() {
   1.121 +        ok(true, "received 'selected' event");
   1.122 +        panel.sidebar.hide();
   1.123 +        is(panel.sidebar._tabbox.getAttribute("hidden"), "true", "Sidebar hidden");
   1.124 +        is(panel.sidebar.getWindowForTab("tab1").location.href, tab1URL, "Window is accessible");
   1.125 +        testWidth(panel);
   1.126 +      });
   1.127 +    });
   1.128 +
   1.129 +    panel.sidebar.select("tab2");
   1.130 +  }
   1.131 +
   1.132 +  function testWidth(panel) {
   1.133 +    let tabbox = panel.panelDoc.getElementById("sidebar");
   1.134 +    tabbox.width = 420;
   1.135 +    panel.sidebar.destroy().then(function() {
   1.136 +      tabbox.width = 0;
   1.137 +      panel.sidebar = new ToolSidebar(tabbox, panel, "testbug865688", true);
   1.138 +      panel.sidebar.show();
   1.139 +      is(panel.panelDoc.getElementById("sidebar").width, 420, "Width restored")
   1.140 +      finishUp(panel);
   1.141 +    });
   1.142 +  }
   1.143 +
   1.144 +  function finishUp(panel) {
   1.145 +    panel.sidebar.destroy();
   1.146 +    gDevTools.unregisterTool(toolDefinition.id);
   1.147 +
   1.148 +    executeSoon(function() {
   1.149 +      gBrowser.removeCurrentTab();
   1.150 +      finish();
   1.151 +    });
   1.152 +  }
   1.153 +}

mercurial