michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: Cu.import("resource://gre/modules/Task.jsm"); michael@0: michael@0: let {devtools} = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}); michael@0: const {Promise: promise} = Cu.import("resource://gre/modules/Promise.jsm", {}); michael@0: let TargetFactory = devtools.TargetFactory; michael@0: michael@0: Services.prefs.setBoolPref("devtools.inspector.sidebarOpen", true); michael@0: Services.prefs.setIntPref("devtools.toolbox.footer.height", 350); michael@0: gDevTools.testing = true; michael@0: SimpleTest.registerCleanupFunction(() => { michael@0: Services.prefs.clearUserPref("devtools.inspector.sidebarOpen"); michael@0: Services.prefs.clearUserPref("devtools.toolbox.footer.height"); michael@0: gDevTools.testing = false; michael@0: }); michael@0: michael@0: // All tests are async in general michael@0: waitForExplicitFinish(); michael@0: michael@0: function loadTab(url) { michael@0: let deferred = promise.defer(); michael@0: michael@0: gBrowser.selectedTab = gBrowser.addTab(); michael@0: gBrowser.selectedBrowser.addEventListener("load", function onload() { michael@0: gBrowser.selectedBrowser.removeEventListener("load", onload, true); michael@0: waitForFocus(function() { michael@0: deferred.resolve(content); michael@0: }, content); michael@0: }, true); michael@0: michael@0: content.location = url; michael@0: michael@0: return deferred.promise; michael@0: } michael@0: michael@0: function selectNode(aNode) { michael@0: info("selecting node"); michael@0: let onSelect = inspector.once("layoutview-updated"); michael@0: inspector.selection.setNode(aNode, "test"); michael@0: return onSelect.then(() => { michael@0: let view = inspector.sidebar.getWindowForTab("layoutview"); michael@0: ok(!!view.layoutview, "LayoutView document is alive."); michael@0: michael@0: return view; michael@0: }); michael@0: } michael@0: michael@0: function waitForUpdate() { michael@0: return inspector.once("layoutview-updated"); michael@0: } michael@0: michael@0: function asyncTest(testfunc) { michael@0: return Task.async(function*() { michael@0: let initialTab = gBrowser.selectedTab; michael@0: michael@0: yield testfunc(); michael@0: michael@0: // Remove all tabs except for the initial tab. This is basically michael@0: // gBrowser.removeAllTabsBut without the animation michael@0: let tabs = gBrowser.visibleTabs; michael@0: gBrowser.selectedTab = initialTab; michael@0: for (let i = tabs.length - 1; i >= 0; i--) { michael@0: if (tabs[i] != initialTab) michael@0: gBrowser.removeTab(tabs[i]); michael@0: } michael@0: michael@0: // Reset the sidebar back to the default michael@0: Services.prefs.setCharPref("devtools.inspector.activeSidebar", "ruleview"); michael@0: michael@0: finish(); michael@0: }); michael@0: } michael@0: michael@0: var TESTS = []; michael@0: michael@0: function addTest(message, func) { michael@0: TESTS.push([message, Task.async(func)]) michael@0: } michael@0: michael@0: var runTests = Task.async(function*() { michael@0: for (let [message, test] of TESTS) { michael@0: info(message); michael@0: yield test(); michael@0: } michael@0: });