mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 05:37:11 +00:00
import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1055181 - CSS Filter Tooltip; r=pbrosset (327b035a7) - Bug 1137238 - Fix toolboxes when switching between apps in WebIDE. r=jryans (1a333bdfa) - Bug 1138939 - Notify when WebIDE has finished initializing so that Valence can register runtime scanners. r=ochameau (7fe61c384) - Don't let WebIDE break when trying to debug Chrome settings (bug 1134619). r=ochameau (4a18f048e) - fix imports since devtools are in a different path compared to FF (15c2a1e70) - port bits of Bug 916804 - Telemetry for WebIDE. (cf5b49ca7) - Bug 1042859 - Ignore host port when fetching cookies with the gcli cookie command. r=pbrosset (1e6217f76) - fix include path (6efaacd7a) - Bug 1128988 - runAt support for commands/converters; r=bgrins (bed6cb594) - Bug 1143027 - The performance tool tab highlights during a recording. r=vp (e1f310e2d) - missing pieces of Bug 1141817 - Followup to fix additional intermittents and Bug 1142748 - Fix the 'Protocol error (unknownError) (b27da36af) - Bug 1159480 - Pull out actor-specific logic from Performance Front. r=vp (9c253604b) - Bug 1156499 - Disable all non-profiler/fps components in the performance tools when in aurora, for 40.0 release. r=vp (041a0fa34) - Bug 1159052 - Performance recording should stop rendering and recording as soon as the recording stops. r=vp (2a9f093b4) - Bug 114187 - Add getBufferInfo to devtools profiler actor. r=fitzgen (00496e8e4) - Bug 1145187 - Implement polling for buffer status on performance actor facades. r=vp (ae2cbac27) - Bug 1082695 - Simplify the record start/stop time buttons, and more cleanly render the console.profile notifications during a console recording. r=vp (dfe9a9b26) - Bug 1160900 - Display buffer status while recording a profile. r=vp (c3d302a62) - Bug 1154115 - Add adapter that deduplicates old, undeduplicated profiles in the frontend. (r=jsantell,vporof) (aa1bd6769) - Bug 1160696 - Display MIRTypes in the JIT optimizations side pane as "Site : MIRType". (r=jsantell) (beccaed3d) - Bug 1154115 - Make the memory stuff in the performance devtool synthesize the new profiler JSON format. (r=jsantell) (685e3a576) - Bug 1154115 - Fix nsIProfiler xpcshell tests to use the new profiler JSON format. (r=me) (da2a18c89) - Bug 1151526 - Do not display optimization data for meta-platform frames in the profiler. r=vporof (d4cc514ca) - Bug 1154115 - Fix devtools tests to use the new profiler JSON format. (r=jsantell) (61a9064ce) - Bug 1126432: Set preference toggle to switch to new WebIDE project listing layout r=jryans (825831eeb) - Bug 1130084 - Avoid spurious connection errors even on success. r=past (1911930b6) - missing bits of Bug 1069552 - Add WebIDE scanner / runtime API. (773111b87) - Bug 1130084 - Allow runtimes to take infinite time to connect. r=past (a1482c500) - Bug 1025311 - Add telemetry for canvas debugger. r=vp,miker (d2f8d51f2) - Bug 1134778 - Consolidate usages of view sourcing in tools with a source-utils module. r=vp,jryans (1432dfac1) - Bug 1167230 - Use nsCString instead of std::string in FrameKey in the profiler. (r=mstange) (9a3d84b86) - Bug 1166492 - Handle huge strings in the profile JSON writer. (r=mstange) (3d6f90062) - Bug 1166492 - Remove dead code in the ProfileBuffer and ThreadProfile. (r=mstange) (cc8e81dd3) - Bug 1166492 - Return UniquePtr<char[]> from profiler_get_profile to avoid double copying. (r=mstange) (f9d58d5cf) - Bug 1167230 - Don't pack ProfileEntry on ARM. r=shu (b6f920dd3) - Bug 1168784 - Part 1: Fix the script merging profiles to handle new profiler JSON format. r=benwa (dd1008084) - Bug 1090949 - Add `nextTick()` to `lazyIframeIsLoaded()` in WebIDE tests. r=ochameau (94bf972da) - Bug 1143028 - Make AppMan reinitable; update tab list when sidebars disabled. r=past (1020f8306) - Bug 1146542 - Clean up and describe app-manager events. r=ochameau (cc4bcadf5) - Bug 1146542 - Restore tab list changes for non-sidebar case. r=ochameau (531b70e41) - Bug 1149820 - Restore WebIDE project auto select. r=ochameau (d0526612a) - Bug 1135018 - Move getjson from webide/ to shared/. r=jryans (9e405c1bf) - Bug 1135018 - Make devices.js use a CDN. r=ochameau (16adb49c4) - Bug 1090949 - Make WebIDE's Firefox OS Simulators configurable. r=ochameau (354331a6e) - Bug 1157201 - Prevent exception while hovering the rule-view. r=pbrosset (4ec81d85b)
This commit is contained in:
@@ -1094,6 +1094,20 @@ pref("devtools.performance.profiler.buffer-size", 10000000);
|
||||
pref("devtools.performance.profiler.sample-frequency-khz", 1);
|
||||
pref("devtools.performance.ui.show-jit-optimizations", false);
|
||||
|
||||
// If in aurora (40.0, will revert for 40.1), set default
|
||||
// to retro mode.
|
||||
// TODO bug 1160313
|
||||
#if MOZ_UPDATE_CHANNEL == aurora
|
||||
pref("devtools.performance.ui.retro-mode", true);
|
||||
#else
|
||||
pref("devtools.performance.ui.retro-mode", false);
|
||||
#endif
|
||||
|
||||
// Set imgur upload client ID
|
||||
pref("devtools.gcli.imgurClientID", '0df414e888d7240');
|
||||
// Imgur's upload URL
|
||||
pref("devtools.gcli.imgurUploadURL", "https://api.imgur.com/3/image");
|
||||
|
||||
// Whether the character encoding menu is under the main Firefox button. This
|
||||
// preference is a string so that localizers can alter it.
|
||||
pref("browser.menu.showCharacterEncoding", "chrome://browser/locale/browser.properties");
|
||||
|
||||
@@ -0,0 +1,410 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
const {Cc, Ci, Cu} = require("chrome");
|
||||
|
||||
const { Services } = require("resource://gre/modules/Services.jsm");
|
||||
|
||||
loader.lazyGetter(this, "osString", () => Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS);
|
||||
|
||||
// Panels
|
||||
loader.lazyGetter(this, "OptionsPanel", () => require("devtools/framework/toolbox-options").OptionsPanel);
|
||||
loader.lazyGetter(this, "InspectorPanel", () => require("devtools/inspector/inspector-panel").InspectorPanel);
|
||||
loader.lazyGetter(this, "WebConsolePanel", () => require("devtools/webconsole/panel").WebConsolePanel);
|
||||
loader.lazyGetter(this, "DebuggerPanel", () => require("devtools/debugger/panel").DebuggerPanel);
|
||||
loader.lazyGetter(this, "StyleEditorPanel", () => require("devtools/styleeditor/styleeditor-panel").StyleEditorPanel);
|
||||
loader.lazyGetter(this, "ShaderEditorPanel", () => require("devtools/shadereditor/panel").ShaderEditorPanel);
|
||||
loader.lazyGetter(this, "CanvasDebuggerPanel", () => require("devtools/canvasdebugger/panel").CanvasDebuggerPanel);
|
||||
loader.lazyGetter(this, "WebAudioEditorPanel", () => require("devtools/webaudioeditor/panel").WebAudioEditorPanel);
|
||||
loader.lazyGetter(this, "PerformancePanel", () => require("devtools/performance/panel").PerformancePanel);
|
||||
loader.lazyGetter(this, "NetMonitorPanel", () => require("devtools/netmonitor/panel").NetMonitorPanel);
|
||||
loader.lazyGetter(this, "StoragePanel", () => require("devtools/storage/panel").StoragePanel);
|
||||
loader.lazyGetter(this, "ScratchpadPanel", () => require("devtools/scratchpad/scratchpad-panel").ScratchpadPanel);
|
||||
|
||||
// Strings
|
||||
const toolboxProps = "chrome://global/locale/devtools/toolbox.properties";
|
||||
const inspectorProps = "chrome://global/locale/devtools/inspector.properties";
|
||||
const webConsoleProps = "chrome://global/locale/devtools/webconsole.properties";
|
||||
const debuggerProps = "chrome://global/locale/devtools/debugger.properties";
|
||||
const styleEditorProps = "chrome://global/locale/devtools/styleeditor.properties";
|
||||
const shaderEditorProps = "chrome://global/locale/devtools/shadereditor.properties";
|
||||
const canvasDebuggerProps = "chrome://global/locale/devtools/canvasdebugger.properties";
|
||||
const webAudioEditorProps = "chrome://global/locale/devtools/webaudioeditor.properties";
|
||||
const profilerProps = "chrome://global/locale/devtools/profiler.properties";
|
||||
const netMonitorProps = "chrome://global/locale/devtools/netmonitor.properties";
|
||||
const storageProps = "chrome://global/locale/devtools/storage.properties";
|
||||
const scratchpadProps = "chrome://global/locale/devtools/scratchpad.properties";
|
||||
|
||||
loader.lazyGetter(this, "toolboxStrings", () => Services.strings.createBundle(toolboxProps));
|
||||
loader.lazyGetter(this, "profilerStrings",() => Services.strings.createBundle(profilerProps));
|
||||
loader.lazyGetter(this, "webConsoleStrings", () => Services.strings.createBundle(webConsoleProps));
|
||||
loader.lazyGetter(this, "debuggerStrings", () => Services.strings.createBundle(debuggerProps));
|
||||
loader.lazyGetter(this, "styleEditorStrings", () => Services.strings.createBundle(styleEditorProps));
|
||||
loader.lazyGetter(this, "shaderEditorStrings", () => Services.strings.createBundle(shaderEditorProps));
|
||||
loader.lazyGetter(this, "canvasDebuggerStrings", () => Services.strings.createBundle(canvasDebuggerProps));
|
||||
loader.lazyGetter(this, "webAudioEditorStrings", () => Services.strings.createBundle(webAudioEditorProps));
|
||||
loader.lazyGetter(this, "inspectorStrings", () => Services.strings.createBundle(inspectorProps));
|
||||
loader.lazyGetter(this, "netMonitorStrings", () => Services.strings.createBundle(netMonitorProps));
|
||||
loader.lazyGetter(this, "storageStrings", () => Services.strings.createBundle(storageProps));
|
||||
loader.lazyGetter(this, "scratchpadStrings", () => Services.strings.createBundle(scratchpadProps));
|
||||
|
||||
let Tools = {};
|
||||
exports.Tools = Tools;
|
||||
|
||||
// Definitions
|
||||
Tools.options = {
|
||||
id: "options",
|
||||
ordinal: 0,
|
||||
url: "chrome://global/content/devtools/framework/toolbox-options.xul",
|
||||
icon: "chrome://global/skin/devtools/tool-options.svg",
|
||||
invertIconForLightTheme: true,
|
||||
bgTheme: "theme-body",
|
||||
label: l10n("options.label", toolboxStrings),
|
||||
iconOnly: true,
|
||||
panelLabel: l10n("options.panelLabel", toolboxStrings),
|
||||
tooltip: l10n("optionsButton.tooltip", toolboxStrings),
|
||||
inMenu: false,
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return true;
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new OptionsPanel(iframeWindow, toolbox);
|
||||
}
|
||||
}
|
||||
|
||||
Tools.inspector = {
|
||||
id: "inspector",
|
||||
accesskey: l10n("inspector.accesskey", inspectorStrings),
|
||||
key: l10n("inspector.commandkey", inspectorStrings),
|
||||
ordinal: 1,
|
||||
modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
|
||||
icon: "chrome://global/skin/devtools/tool-inspector.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/inspector/inspector.xul",
|
||||
label: l10n("inspector.label", inspectorStrings),
|
||||
panelLabel: l10n("inspector.panelLabel", inspectorStrings),
|
||||
tooltip: l10n("inspector.tooltip", inspectorStrings),
|
||||
inMenu: true,
|
||||
commands: [
|
||||
"devtools/resize-commands",
|
||||
"devtools/inspector/inspector-commands",
|
||||
"devtools/eyedropper/commands.js"
|
||||
],
|
||||
|
||||
preventClosingOnKey: true,
|
||||
onkey: function(panel) {
|
||||
panel.toolbox.highlighterUtils.togglePicker();
|
||||
},
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.hasActor("inspector");
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new InspectorPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.webConsole = {
|
||||
id: "webconsole",
|
||||
key: l10n("cmd.commandkey", webConsoleStrings),
|
||||
accesskey: l10n("webConsoleCmd.accesskey", webConsoleStrings),
|
||||
modifiers: Services.appinfo.OS == "Darwin" ? "accel,alt" : "accel,shift",
|
||||
ordinal: 2,
|
||||
icon: "chrome://global/skin/devtools/tool-webconsole.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/webconsole.xul",
|
||||
label: l10n("ToolboxTabWebconsole.label", webConsoleStrings),
|
||||
menuLabel: l10n("MenuWebconsole.label", webConsoleStrings),
|
||||
panelLabel: l10n("ToolboxWebConsole.panelLabel", webConsoleStrings),
|
||||
tooltip: l10n("ToolboxWebconsole.tooltip", webConsoleStrings),
|
||||
inMenu: true,
|
||||
commands: "devtools/webconsole/console-commands",
|
||||
|
||||
preventClosingOnKey: true,
|
||||
onkey: function(panel, toolbox) {
|
||||
if (toolbox.splitConsole)
|
||||
return toolbox.focusConsoleInput();
|
||||
|
||||
panel.focusInput();
|
||||
},
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return true;
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new WebConsolePanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.jsdebugger = {
|
||||
id: "jsdebugger",
|
||||
key: l10n("debuggerMenu.commandkey", debuggerStrings),
|
||||
accesskey: l10n("debuggerMenu.accesskey", debuggerStrings),
|
||||
modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
|
||||
ordinal: 3,
|
||||
icon: "chrome://global/skin/devtools/tool-debugger.svg",
|
||||
invertIconForLightTheme: true,
|
||||
highlightedicon: "chrome://global/skin/devtools/tool-debugger-paused.svg",
|
||||
url: "chrome://global/content/devtools/debugger.xul",
|
||||
label: l10n("ToolboxDebugger.label", debuggerStrings),
|
||||
panelLabel: l10n("ToolboxDebugger.panelLabel", debuggerStrings),
|
||||
tooltip: l10n("ToolboxDebugger.tooltip", debuggerStrings),
|
||||
inMenu: true,
|
||||
commands: "devtools/debugger/debugger-commands",
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return true;
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new DebuggerPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.styleEditor = {
|
||||
id: "styleeditor",
|
||||
key: l10n("open.commandkey", styleEditorStrings),
|
||||
ordinal: 4,
|
||||
accesskey: l10n("open.accesskey", styleEditorStrings),
|
||||
modifiers: "shift",
|
||||
icon: "chrome://global/skin/devtools/tool-styleeditor.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/styleeditor.xul",
|
||||
label: l10n("ToolboxStyleEditor.label", styleEditorStrings),
|
||||
panelLabel: l10n("ToolboxStyleEditor.panelLabel", styleEditorStrings),
|
||||
tooltip: l10n("ToolboxStyleEditor.tooltip2", styleEditorStrings),
|
||||
inMenu: true,
|
||||
commands: "devtools/styleeditor/styleeditor-commands",
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.hasActor("styleEditor") || target.hasActor("styleSheets");
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new StyleEditorPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.shaderEditor = {
|
||||
id: "shadereditor",
|
||||
ordinal: 5,
|
||||
visibilityswitch: "devtools.shadereditor.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-styleeditor.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/shadereditor.xul",
|
||||
label: l10n("ToolboxShaderEditor.label", shaderEditorStrings),
|
||||
panelLabel: l10n("ToolboxShaderEditor.panelLabel", shaderEditorStrings),
|
||||
tooltip: l10n("ToolboxShaderEditor.tooltip", shaderEditorStrings),
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.hasActor("webgl") && !target.chrome;
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new ShaderEditorPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.canvasDebugger = {
|
||||
id: "canvasdebugger",
|
||||
ordinal: 6,
|
||||
visibilityswitch: "devtools.canvasdebugger.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-styleeditor.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/canvasdebugger.xul",
|
||||
label: l10n("ToolboxCanvasDebugger.label", canvasDebuggerStrings),
|
||||
panelLabel: l10n("ToolboxCanvasDebugger.panelLabel", canvasDebuggerStrings),
|
||||
tooltip: l10n("ToolboxCanvasDebugger.tooltip", canvasDebuggerStrings),
|
||||
|
||||
// Hide the Canvas Debugger in the Add-on Debugger and Browser Toolbox
|
||||
// (bug 1047520).
|
||||
isTargetSupported: function(target) {
|
||||
return target.hasActor("canvas") && !target.chrome;
|
||||
},
|
||||
|
||||
build: function (iframeWindow, toolbox) {
|
||||
return new CanvasDebuggerPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.performance = {
|
||||
id: "performance",
|
||||
ordinal: 7,
|
||||
icon: "chrome://global/skin/devtools/tool-profiler.svg",
|
||||
invertIconForLightTheme: true,
|
||||
highlightedicon: "chrome://browser/skin/devtools/tool-profiler-active.svg",
|
||||
url: "chrome://global/content/devtools/performance.xul",
|
||||
visibilityswitch: "devtools.performance.enabled",
|
||||
label: l10n("profiler.label2", profilerStrings),
|
||||
panelLabel: l10n("profiler.panelLabel2", profilerStrings),
|
||||
tooltip: l10n("profiler.tooltip2", profilerStrings),
|
||||
accesskey: l10n("profiler.accesskey", profilerStrings),
|
||||
key: l10n("profiler.commandkey2", profilerStrings),
|
||||
modifiers: "shift",
|
||||
inMenu: true,
|
||||
|
||||
isTargetSupported: function (target) {
|
||||
return target.hasActor("profiler");
|
||||
},
|
||||
|
||||
build: function (frame, target) {
|
||||
return new PerformancePanel(frame, target);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.netMonitor = {
|
||||
id: "netmonitor",
|
||||
accesskey: l10n("netmonitor.accesskey", netMonitorStrings),
|
||||
key: l10n("netmonitor.commandkey", netMonitorStrings),
|
||||
ordinal: 9,
|
||||
modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
|
||||
visibilityswitch: "devtools.netmonitor.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-network.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/netmonitor.xul",
|
||||
label: l10n("netmonitor.label", netMonitorStrings),
|
||||
panelLabel: l10n("netmonitor.panelLabel", netMonitorStrings),
|
||||
tooltip: l10n("netmonitor.tooltip", netMonitorStrings),
|
||||
inMenu: true,
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.getTrait("networkMonitor");
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new NetMonitorPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.storage = {
|
||||
id: "storage",
|
||||
key: l10n("storage.commandkey", storageStrings),
|
||||
ordinal: 10,
|
||||
accesskey: l10n("storage.accesskey", storageStrings),
|
||||
modifiers: "shift",
|
||||
visibilityswitch: "devtools.storage.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-storage.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/storage.xul",
|
||||
label: l10n("storage.label", storageStrings),
|
||||
menuLabel: l10n("storage.menuLabel", storageStrings),
|
||||
panelLabel: l10n("storage.panelLabel", storageStrings),
|
||||
tooltip: l10n("storage.tooltip2", storageStrings),
|
||||
inMenu: true,
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.isLocalTab ||
|
||||
( target.hasActor("storage") &&
|
||||
target.getTrait("storageInspector") );
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new StoragePanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.webAudioEditor = {
|
||||
id: "webaudioeditor",
|
||||
ordinal: 11,
|
||||
visibilityswitch: "devtools.webaudioeditor.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-webaudio.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/webaudioeditor.xul",
|
||||
label: l10n("ToolboxWebAudioEditor1.label", webAudioEditorStrings),
|
||||
panelLabel: l10n("ToolboxWebAudioEditor1.panelLabel", webAudioEditorStrings),
|
||||
tooltip: l10n("ToolboxWebAudioEditor1.tooltip", webAudioEditorStrings),
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return !target.chrome && target.hasActor("webaudio");
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new WebAudioEditorPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.scratchpad = {
|
||||
id: "scratchpad",
|
||||
ordinal: 12,
|
||||
visibilityswitch: "devtools.scratchpad.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-scratchpad.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/scratchpad.xul",
|
||||
label: l10n("scratchpad.label", scratchpadStrings),
|
||||
panelLabel: l10n("scratchpad.panelLabel", scratchpadStrings),
|
||||
tooltip: l10n("scratchpad.tooltip", scratchpadStrings),
|
||||
inMenu: false,
|
||||
commands: "devtools/scratchpad/scratchpad-commands",
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.isRemote;
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new ScratchpadPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
let defaultTools = [
|
||||
Tools.options,
|
||||
Tools.webConsole,
|
||||
Tools.inspector,
|
||||
Tools.jsdebugger,
|
||||
Tools.styleEditor,
|
||||
Tools.shaderEditor,
|
||||
Tools.canvasDebugger,
|
||||
Tools.webAudioEditor,
|
||||
Tools.performance,
|
||||
Tools.netMonitor,
|
||||
Tools.storage,
|
||||
Tools.scratchpad
|
||||
];
|
||||
|
||||
exports.defaultTools = defaultTools;
|
||||
|
||||
Tools.darkTheme = {
|
||||
id: "dark",
|
||||
label: l10n("options.darkTheme.label", toolboxStrings),
|
||||
ordinal: 1,
|
||||
stylesheets: ["chrome://global/skin/devtools/dark-theme.css"],
|
||||
classList: ["theme-dark"],
|
||||
};
|
||||
|
||||
Tools.lightTheme = {
|
||||
id: "light",
|
||||
label: l10n("options.lightTheme.label", toolboxStrings),
|
||||
ordinal: 2,
|
||||
stylesheets: ["chrome://global/skin/devtools/light-theme.css"],
|
||||
classList: ["theme-light"],
|
||||
};
|
||||
|
||||
exports.defaultThemes = [
|
||||
Tools.darkTheme,
|
||||
Tools.lightTheme,
|
||||
];
|
||||
|
||||
/**
|
||||
* Lookup l10n string from a string bundle.
|
||||
*
|
||||
* @param {string} name
|
||||
* The key to lookup.
|
||||
* @param {StringBundle} bundle
|
||||
* The key to lookup.
|
||||
* @returns A localized version of the given key.
|
||||
*/
|
||||
function l10n(name, bundle)
|
||||
{
|
||||
try {
|
||||
return bundle.GetStringFromName(name);
|
||||
} catch (ex) {
|
||||
Services.console.logStringMessage("Error reading '" + name + "'");
|
||||
throw new Error("l10n error with " + name);
|
||||
}
|
||||
}
|
||||
+15
-415
@@ -4,11 +4,20 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const {Cc, Ci, Cu} = require("chrome");
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
const { Cu } = require("chrome");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/devtools/gDevTools.jsm");
|
||||
const { gDevTools } = require("resource://gre/modules/devtools/gDevTools.jsm");
|
||||
|
||||
const { defaultTools, defaultThemes } = require("definitions");
|
||||
|
||||
defaultTools.forEach(definition => gDevTools.registerTool(definition));
|
||||
defaultThemes.forEach(definition => gDevTools.registerTheme(definition));
|
||||
|
||||
// Re-export for backwards compatibility, but we should probably the
|
||||
// definitions from require("definitions") in the future
|
||||
exports.defaultTools = require("definitions").defaultTools;
|
||||
exports.defaultThemes = require("definitions").defaultThemes;
|
||||
exports.Tools = require("definitions").Tools;
|
||||
|
||||
Object.defineProperty(exports, "Toolbox", {
|
||||
get: () => require("devtools/framework/toolbox").Toolbox
|
||||
@@ -17,398 +26,7 @@ Object.defineProperty(exports, "TargetFactory", {
|
||||
get: () => require("devtools/framework/target").TargetFactory
|
||||
});
|
||||
|
||||
loader.lazyGetter(this, "osString", () => Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS);
|
||||
|
||||
let events = require("sdk/system/events");
|
||||
|
||||
// Panels
|
||||
loader.lazyGetter(this, "OptionsPanel", () => require("devtools/framework/toolbox-options").OptionsPanel);
|
||||
loader.lazyGetter(this, "InspectorPanel", () => require("devtools/inspector/inspector-panel").InspectorPanel);
|
||||
loader.lazyGetter(this, "WebConsolePanel", () => require("devtools/webconsole/panel").WebConsolePanel);
|
||||
loader.lazyGetter(this, "DebuggerPanel", () => require("devtools/debugger/panel").DebuggerPanel);
|
||||
loader.lazyGetter(this, "StyleEditorPanel", () => require("devtools/styleeditor/styleeditor-panel").StyleEditorPanel);
|
||||
loader.lazyGetter(this, "ShaderEditorPanel", () => require("devtools/shadereditor/panel").ShaderEditorPanel);
|
||||
loader.lazyGetter(this, "CanvasDebuggerPanel", () => require("devtools/canvasdebugger/panel").CanvasDebuggerPanel);
|
||||
loader.lazyGetter(this, "WebAudioEditorPanel", () => require("devtools/webaudioeditor/panel").WebAudioEditorPanel);
|
||||
loader.lazyGetter(this, "PerformancePanel", () => require("devtools/performance/panel").PerformancePanel);
|
||||
loader.lazyGetter(this, "NetMonitorPanel", () => require("devtools/netmonitor/panel").NetMonitorPanel);
|
||||
loader.lazyGetter(this, "StoragePanel", () => require("devtools/storage/panel").StoragePanel);
|
||||
loader.lazyGetter(this, "ScratchpadPanel", () => require("devtools/scratchpad/scratchpad-panel").ScratchpadPanel);
|
||||
|
||||
// Strings
|
||||
const toolboxProps = "chrome://global/locale/devtools/toolbox.properties";
|
||||
const inspectorProps = "chrome://global/locale/devtools/inspector.properties";
|
||||
const webConsoleProps = "chrome://global/locale/devtools/webconsole.properties";
|
||||
const debuggerProps = "chrome://global/locale/devtools/debugger.properties";
|
||||
const styleEditorProps = "chrome://global/locale/devtools/styleeditor.properties";
|
||||
const shaderEditorProps = "chrome://global/locale/devtools/shadereditor.properties";
|
||||
const canvasDebuggerProps = "chrome://global/locale/devtools/canvasdebugger.properties";
|
||||
const webAudioEditorProps = "chrome://global/locale/devtools/webaudioeditor.properties";
|
||||
const profilerProps = "chrome://global/locale/devtools/profiler.properties";
|
||||
const netMonitorProps = "chrome://global/locale/devtools/netmonitor.properties";
|
||||
const storageProps = "chrome://global/locale/devtools/storage.properties";
|
||||
const scratchpadProps = "chrome://global/locale/devtools/scratchpad.properties";
|
||||
|
||||
loader.lazyGetter(this, "toolboxStrings", () => Services.strings.createBundle(toolboxProps));
|
||||
loader.lazyGetter(this, "profilerStrings",() => Services.strings.createBundle(profilerProps));
|
||||
loader.lazyGetter(this, "webConsoleStrings", () => Services.strings.createBundle(webConsoleProps));
|
||||
loader.lazyGetter(this, "debuggerStrings", () => Services.strings.createBundle(debuggerProps));
|
||||
loader.lazyGetter(this, "styleEditorStrings", () => Services.strings.createBundle(styleEditorProps));
|
||||
loader.lazyGetter(this, "shaderEditorStrings", () => Services.strings.createBundle(shaderEditorProps));
|
||||
loader.lazyGetter(this, "canvasDebuggerStrings", () => Services.strings.createBundle(canvasDebuggerProps));
|
||||
loader.lazyGetter(this, "webAudioEditorStrings", () => Services.strings.createBundle(webAudioEditorProps));
|
||||
loader.lazyGetter(this, "inspectorStrings", () => Services.strings.createBundle(inspectorProps));
|
||||
loader.lazyGetter(this, "netMonitorStrings", () => Services.strings.createBundle(netMonitorProps));
|
||||
loader.lazyGetter(this, "storageStrings", () => Services.strings.createBundle(storageProps));
|
||||
loader.lazyGetter(this, "scratchpadStrings", () => Services.strings.createBundle(scratchpadProps));
|
||||
|
||||
let Tools = {};
|
||||
exports.Tools = Tools;
|
||||
|
||||
// Definitions
|
||||
Tools.options = {
|
||||
id: "options",
|
||||
ordinal: 0,
|
||||
url: "chrome://global/content/devtools/framework/toolbox-options.xul",
|
||||
icon: "chrome://global/skin/devtools/tool-options.svg",
|
||||
invertIconForLightTheme: true,
|
||||
bgTheme: "theme-body",
|
||||
label: l10n("options.label", toolboxStrings),
|
||||
iconOnly: true,
|
||||
panelLabel: l10n("options.panelLabel", toolboxStrings),
|
||||
tooltip: l10n("optionsButton.tooltip", toolboxStrings),
|
||||
inMenu: false,
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return true;
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new OptionsPanel(iframeWindow, toolbox);
|
||||
}
|
||||
}
|
||||
|
||||
Tools.inspector = {
|
||||
id: "inspector",
|
||||
accesskey: l10n("inspector.accesskey", inspectorStrings),
|
||||
key: l10n("inspector.commandkey", inspectorStrings),
|
||||
ordinal: 1,
|
||||
modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
|
||||
icon: "chrome://global/skin/devtools/tool-inspector.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/inspector/inspector.xul",
|
||||
label: l10n("inspector.label", inspectorStrings),
|
||||
panelLabel: l10n("inspector.panelLabel", inspectorStrings),
|
||||
tooltip: l10n("inspector.tooltip", inspectorStrings),
|
||||
inMenu: true,
|
||||
commands: [
|
||||
"devtools/resize-commands",
|
||||
"devtools/inspector/inspector-commands",
|
||||
"devtools/eyedropper/commands.js"
|
||||
],
|
||||
|
||||
preventClosingOnKey: true,
|
||||
onkey: function(panel) {
|
||||
panel.toolbox.highlighterUtils.togglePicker();
|
||||
},
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.hasActor("inspector");
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new InspectorPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.webConsole = {
|
||||
id: "webconsole",
|
||||
key: l10n("cmd.commandkey", webConsoleStrings),
|
||||
accesskey: l10n("webConsoleCmd.accesskey", webConsoleStrings),
|
||||
modifiers: Services.appinfo.OS == "Darwin" ? "accel,alt" : "accel,shift",
|
||||
ordinal: 2,
|
||||
icon: "chrome://global/skin/devtools/tool-webconsole.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/webconsole.xul",
|
||||
label: l10n("ToolboxTabWebconsole.label", webConsoleStrings),
|
||||
menuLabel: l10n("MenuWebconsole.label", webConsoleStrings),
|
||||
panelLabel: l10n("ToolboxWebConsole.panelLabel", webConsoleStrings),
|
||||
tooltip: l10n("ToolboxWebconsole.tooltip", webConsoleStrings),
|
||||
inMenu: true,
|
||||
commands: "devtools/webconsole/console-commands",
|
||||
|
||||
preventClosingOnKey: true,
|
||||
onkey: function(panel, toolbox) {
|
||||
if (toolbox.splitConsole)
|
||||
return toolbox.focusConsoleInput();
|
||||
|
||||
panel.focusInput();
|
||||
},
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return true;
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new WebConsolePanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.jsdebugger = {
|
||||
id: "jsdebugger",
|
||||
key: l10n("debuggerMenu.commandkey", debuggerStrings),
|
||||
accesskey: l10n("debuggerMenu.accesskey", debuggerStrings),
|
||||
modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
|
||||
ordinal: 3,
|
||||
icon: "chrome://global/skin/devtools/tool-debugger.svg",
|
||||
invertIconForLightTheme: true,
|
||||
highlightedicon: "chrome://global/skin/devtools/tool-debugger-paused.svg",
|
||||
url: "chrome://global/content/devtools/debugger.xul",
|
||||
label: l10n("ToolboxDebugger.label", debuggerStrings),
|
||||
panelLabel: l10n("ToolboxDebugger.panelLabel", debuggerStrings),
|
||||
tooltip: l10n("ToolboxDebugger.tooltip", debuggerStrings),
|
||||
inMenu: true,
|
||||
commands: "devtools/debugger/debugger-commands",
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return true;
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new DebuggerPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.styleEditor = {
|
||||
id: "styleeditor",
|
||||
key: l10n("open.commandkey", styleEditorStrings),
|
||||
ordinal: 4,
|
||||
accesskey: l10n("open.accesskey", styleEditorStrings),
|
||||
modifiers: "shift",
|
||||
icon: "chrome://global/skin/devtools/tool-styleeditor.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/styleeditor.xul",
|
||||
label: l10n("ToolboxStyleEditor.label", styleEditorStrings),
|
||||
panelLabel: l10n("ToolboxStyleEditor.panelLabel", styleEditorStrings),
|
||||
tooltip: l10n("ToolboxStyleEditor.tooltip2", styleEditorStrings),
|
||||
inMenu: true,
|
||||
commands: "devtools/styleeditor/styleeditor-commands",
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.hasActor("styleEditor") || target.hasActor("styleSheets");
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new StyleEditorPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.shaderEditor = {
|
||||
id: "shadereditor",
|
||||
ordinal: 5,
|
||||
visibilityswitch: "devtools.shadereditor.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-styleeditor.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/shadereditor.xul",
|
||||
label: l10n("ToolboxShaderEditor.label", shaderEditorStrings),
|
||||
panelLabel: l10n("ToolboxShaderEditor.panelLabel", shaderEditorStrings),
|
||||
tooltip: l10n("ToolboxShaderEditor.tooltip", shaderEditorStrings),
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.hasActor("webgl") && !target.chrome;
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new ShaderEditorPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.canvasDebugger = {
|
||||
id: "canvasdebugger",
|
||||
ordinal: 6,
|
||||
visibilityswitch: "devtools.canvasdebugger.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-styleeditor.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/canvasdebugger.xul",
|
||||
label: l10n("ToolboxCanvasDebugger.label", canvasDebuggerStrings),
|
||||
panelLabel: l10n("ToolboxCanvasDebugger.panelLabel", canvasDebuggerStrings),
|
||||
tooltip: l10n("ToolboxCanvasDebugger.tooltip", canvasDebuggerStrings),
|
||||
|
||||
// Hide the Canvas Debugger in the Add-on Debugger and Browser Toolbox
|
||||
// (bug 1047520).
|
||||
isTargetSupported: function(target) {
|
||||
return target.hasActor("canvas") && !target.chrome;
|
||||
},
|
||||
|
||||
build: function (iframeWindow, toolbox) {
|
||||
return new CanvasDebuggerPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.performance = {
|
||||
id: "performance",
|
||||
ordinal: 7,
|
||||
icon: "chrome://global/skin/devtools/tool-profiler.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/performance.xul",
|
||||
visibilityswitch: "devtools.performance.enabled",
|
||||
label: l10n("profiler.label2", profilerStrings),
|
||||
panelLabel: l10n("profiler.panelLabel2", profilerStrings),
|
||||
tooltip: l10n("profiler.tooltip2", profilerStrings),
|
||||
accesskey: l10n("profiler.accesskey", profilerStrings),
|
||||
key: l10n("profiler.commandkey2", profilerStrings),
|
||||
modifiers: "shift",
|
||||
inMenu: true,
|
||||
|
||||
isTargetSupported: function (target) {
|
||||
return target.hasActor("profiler");
|
||||
},
|
||||
|
||||
build: function (frame, target) {
|
||||
return new PerformancePanel(frame, target);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.netMonitor = {
|
||||
id: "netmonitor",
|
||||
accesskey: l10n("netmonitor.accesskey", netMonitorStrings),
|
||||
key: l10n("netmonitor.commandkey", netMonitorStrings),
|
||||
ordinal: 9,
|
||||
modifiers: osString == "Darwin" ? "accel,alt" : "accel,shift",
|
||||
visibilityswitch: "devtools.netmonitor.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-network.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/netmonitor.xul",
|
||||
label: l10n("netmonitor.label", netMonitorStrings),
|
||||
panelLabel: l10n("netmonitor.panelLabel", netMonitorStrings),
|
||||
tooltip: l10n("netmonitor.tooltip", netMonitorStrings),
|
||||
inMenu: true,
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.getTrait("networkMonitor");
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new NetMonitorPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.storage = {
|
||||
id: "storage",
|
||||
key: l10n("storage.commandkey", storageStrings),
|
||||
ordinal: 10,
|
||||
accesskey: l10n("storage.accesskey", storageStrings),
|
||||
modifiers: "shift",
|
||||
visibilityswitch: "devtools.storage.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-storage.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/storage.xul",
|
||||
label: l10n("storage.label", storageStrings),
|
||||
menuLabel: l10n("storage.menuLabel", storageStrings),
|
||||
panelLabel: l10n("storage.panelLabel", storageStrings),
|
||||
tooltip: l10n("storage.tooltip2", storageStrings),
|
||||
inMenu: true,
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.isLocalTab ||
|
||||
( target.hasActor("storage") &&
|
||||
target.getTrait("storageInspector") );
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new StoragePanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.webAudioEditor = {
|
||||
id: "webaudioeditor",
|
||||
ordinal: 11,
|
||||
visibilityswitch: "devtools.webaudioeditor.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-webaudio.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/webaudioeditor.xul",
|
||||
label: l10n("ToolboxWebAudioEditor1.label", webAudioEditorStrings),
|
||||
panelLabel: l10n("ToolboxWebAudioEditor1.panelLabel", webAudioEditorStrings),
|
||||
tooltip: l10n("ToolboxWebAudioEditor1.tooltip", webAudioEditorStrings),
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return !target.chrome && target.hasActor("webaudio");
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new WebAudioEditorPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
Tools.scratchpad = {
|
||||
id: "scratchpad",
|
||||
ordinal: 12,
|
||||
visibilityswitch: "devtools.scratchpad.enabled",
|
||||
icon: "chrome://global/skin/devtools/tool-scratchpad.svg",
|
||||
invertIconForLightTheme: true,
|
||||
url: "chrome://global/content/devtools/scratchpad.xul",
|
||||
label: l10n("scratchpad.label", scratchpadStrings),
|
||||
panelLabel: l10n("scratchpad.panelLabel", scratchpadStrings),
|
||||
tooltip: l10n("scratchpad.tooltip", scratchpadStrings),
|
||||
inMenu: false,
|
||||
commands: "devtools/scratchpad/scratchpad-commands",
|
||||
|
||||
isTargetSupported: function(target) {
|
||||
return target.isRemote;
|
||||
},
|
||||
|
||||
build: function(iframeWindow, toolbox) {
|
||||
return new ScratchpadPanel(iframeWindow, toolbox);
|
||||
}
|
||||
};
|
||||
|
||||
let defaultTools = [
|
||||
Tools.options,
|
||||
Tools.webConsole,
|
||||
Tools.inspector,
|
||||
Tools.jsdebugger,
|
||||
Tools.styleEditor,
|
||||
Tools.shaderEditor,
|
||||
Tools.canvasDebugger,
|
||||
Tools.webAudioEditor,
|
||||
Tools.performance,
|
||||
Tools.netMonitor,
|
||||
Tools.storage,
|
||||
Tools.scratchpad
|
||||
];
|
||||
|
||||
exports.defaultTools = defaultTools;
|
||||
|
||||
for (let definition of defaultTools) {
|
||||
gDevTools.registerTool(definition);
|
||||
}
|
||||
|
||||
Tools.darkTheme = {
|
||||
id: "dark",
|
||||
label: l10n("options.darkTheme.label", toolboxStrings),
|
||||
ordinal: 1,
|
||||
stylesheets: ["chrome://global/skin/devtools/dark-theme.css"],
|
||||
classList: ["theme-dark"],
|
||||
};
|
||||
|
||||
Tools.lightTheme = {
|
||||
id: "light",
|
||||
label: l10n("options.lightTheme.label", toolboxStrings),
|
||||
ordinal: 2,
|
||||
stylesheets: ["chrome://global/skin/devtools/light-theme.css"],
|
||||
classList: ["theme-light"],
|
||||
};
|
||||
|
||||
let defaultThemes = [
|
||||
Tools.darkTheme,
|
||||
Tools.lightTheme,
|
||||
];
|
||||
|
||||
for (let definition of defaultThemes) {
|
||||
gDevTools.registerTheme(definition);
|
||||
}
|
||||
|
||||
var unloadObserver = {
|
||||
const unloadObserver = {
|
||||
observe: function(subject, topic, data) {
|
||||
if (subject.wrappedJSObject === require("@loader/unload")) {
|
||||
Services.obs.removeObserver(unloadObserver, "sdk:loader:destroy");
|
||||
@@ -423,23 +41,5 @@ var unloadObserver = {
|
||||
};
|
||||
Services.obs.addObserver(unloadObserver, "sdk:loader:destroy", false);
|
||||
|
||||
const events = require("sdk/system/events");
|
||||
events.emit("devtools-loaded", {});
|
||||
|
||||
/**
|
||||
* Lookup l10n string from a string bundle.
|
||||
*
|
||||
* @param {string} name
|
||||
* The key to lookup.
|
||||
* @param {StringBundle} bundle
|
||||
* The key to lookup.
|
||||
* @returns A localized version of the given key.
|
||||
*/
|
||||
function l10n(name, bundle)
|
||||
{
|
||||
try {
|
||||
return bundle.GetStringFromName(name);
|
||||
} catch (ex) {
|
||||
Services.console.logStringMessage("Error reading '" + name + "'");
|
||||
throw new Error("l10n error with " + name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,5 +12,6 @@ EXTRA_COMPONENTS += [
|
||||
JAR_MANIFESTS += ['jar.mn']
|
||||
|
||||
EXTRA_JS_MODULES.devtools += [
|
||||
'definitions.js',
|
||||
'main.js',
|
||||
]
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*/
|
||||
|
||||
// Check that exceptions from scripts loaded with the addon-sdk loader are
|
||||
// opened correctly in View Source from the Browser Console.
|
||||
// See bug 866950.
|
||||
|
||||
"use strict";
|
||||
|
||||
const TEST_URI = "data:text/html;charset=utf8,<p>hello world from bug 866950";
|
||||
|
||||
function test()
|
||||
{
|
||||
requestLongerTimeout(2);
|
||||
|
||||
let webconsole, browserconsole;
|
||||
|
||||
Task.spawn(runner).then(finishTest);
|
||||
|
||||
function* runner() {
|
||||
let {tab} = yield loadTab(TEST_URI);
|
||||
webconsole = yield openConsole(tab);
|
||||
ok(webconsole, "web console opened");
|
||||
|
||||
browserconsole = yield HUDService.toggleBrowserConsole();
|
||||
ok(browserconsole, "browser console opened");
|
||||
|
||||
// Cause an exception in a script loaded with the addon-sdk loader.
|
||||
let toolbox = gDevTools.getToolbox(webconsole.target);
|
||||
let oldPanels = toolbox._toolPanels;
|
||||
toolbox._toolPanels = {}; // non-iterable
|
||||
|
||||
function fixToolbox() {
|
||||
toolbox._toolPanels = oldPanels;
|
||||
}
|
||||
|
||||
info("generate exception and wait for message");
|
||||
|
||||
executeSoon(() => {
|
||||
executeSoon(fixToolbox);
|
||||
expectUncaughtException();
|
||||
toolbox.getToolPanels();
|
||||
});
|
||||
|
||||
let [result] = yield waitForMessages({
|
||||
webconsole: browserconsole,
|
||||
messages: [{
|
||||
text: "TypeError: this._toolPanels is not iterable",
|
||||
category: CATEGORY_JS,
|
||||
severity: SEVERITY_ERROR,
|
||||
}],
|
||||
});
|
||||
|
||||
fixToolbox();
|
||||
|
||||
let msg = [...result.matched][0];
|
||||
ok(msg, "message element found");
|
||||
let locationNode = msg.querySelector(".message-location");
|
||||
ok(locationNode, "message location element found");
|
||||
|
||||
let title = locationNode.getAttribute("title");
|
||||
info("location node title: " + title);
|
||||
isnot(title.indexOf(" -> "), -1, "error comes from a subscript");
|
||||
|
||||
let viewSource = browserconsole.viewSource;
|
||||
let URL = null;
|
||||
let clickPromise = promise.defer();
|
||||
browserconsole.viewSourceInDebugger = (aURL) => {
|
||||
info("browserconsole.viewSourceInDebugger() was invoked: " + aURL);
|
||||
URL = aURL;
|
||||
clickPromise.resolve(null);
|
||||
};
|
||||
|
||||
msg.scrollIntoView();
|
||||
EventUtils.synthesizeMouse(locationNode, 2, 2, {},
|
||||
browserconsole.iframeWindow);
|
||||
|
||||
info("wait for click on locationNode");
|
||||
yield clickPromise;
|
||||
|
||||
info("view-source url: " + URL);
|
||||
ok(URL, "we have some source URL after the click");
|
||||
isnot(URL.indexOf("toolbox.js"), -1, "we have the expected view source URL");
|
||||
is(URL.indexOf("->"), -1, "no -> in the URL given to view-source");
|
||||
|
||||
browserconsole.viewSourceInDebugger = viewSource;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*/
|
||||
|
||||
// Check that JS errors and CSS warnings open view source when their source link
|
||||
// is clicked in the Browser Console. See bug 877778.
|
||||
|
||||
const TEST_URI = "data:text/html;charset=utf8,<p>hello world from bug 877778 " +
|
||||
"<button onclick='foobar.explode()' " +
|
||||
"style='test-color: green-please'>click!</button>";
|
||||
function test()
|
||||
{
|
||||
let hud;
|
||||
|
||||
loadTab(TEST_URI).then(() => {
|
||||
HUDService.toggleBrowserConsole().then(browserConsoleOpened);
|
||||
});
|
||||
|
||||
function browserConsoleOpened(aHud)
|
||||
{
|
||||
hud = aHud;
|
||||
ok(hud, "browser console opened");
|
||||
|
||||
let button = content.document.querySelector("button");
|
||||
ok(button, "button element found");
|
||||
|
||||
info("generate exception and wait for the message");
|
||||
executeSoon(() => {
|
||||
expectUncaughtException();
|
||||
button.click();
|
||||
});
|
||||
|
||||
waitForMessages({
|
||||
webconsole: hud,
|
||||
messages: [
|
||||
{
|
||||
text: "ReferenceError: foobar is not defined",
|
||||
category: CATEGORY_JS,
|
||||
severity: SEVERITY_ERROR,
|
||||
},
|
||||
{
|
||||
text: "Unknown property 'test-color'",
|
||||
category: CATEGORY_CSS,
|
||||
severity: SEVERITY_WARNING,
|
||||
},
|
||||
],
|
||||
}).then(onMessageFound);
|
||||
}
|
||||
|
||||
function onMessageFound(results)
|
||||
{
|
||||
let viewSource = hud.viewSource;
|
||||
let viewSourceCalled = false;
|
||||
hud.viewSourceInDebugger = () => viewSourceCalled = true;
|
||||
|
||||
for (let result of results) {
|
||||
viewSourceCalled = false;
|
||||
|
||||
let msg = [...results[0].matched][0];
|
||||
ok(msg, "message element found for: " + result.text);
|
||||
let locationNode = msg.querySelector(".message-location");
|
||||
ok(locationNode, "message location element found");
|
||||
|
||||
EventUtils.synthesizeMouse(locationNode, 2, 2, {}, hud.iframeWindow);
|
||||
|
||||
ok(viewSourceCalled, "view source opened");
|
||||
}
|
||||
|
||||
hud.viewSourceInDebugger = viewSource;
|
||||
finishTest();
|
||||
}
|
||||
}
|
||||
@@ -125,9 +125,12 @@ browser.jar:
|
||||
skin/classic/browser/tabbrowser/tab.png (tabbrowser/tab.png)
|
||||
skin/classic/browser/tabbrowser/tab-overflow-border.png (tabbrowser/tab-overflow-border.png)
|
||||
skin/classic/browser/tabbrowser/tabDragIndicator.png (tabbrowser/tabDragIndicator.png)
|
||||
skin/classic/browser/devtools/add.svg (../shared/devtools/images/add.svg)
|
||||
skin/classic/browser/devtools/filter-swatch.svg (../shared/devtools/images/filter-swatch.svg)
|
||||
skin/classic/browser/devtools/search-clear-failed.svg (../shared/devtools/images/search-clear-failed.svg)
|
||||
skin/classic/browser/devtools/search-clear-light.svg (../shared/devtools/images/search-clear-light.svg)
|
||||
skin/classic/browser/devtools/search-clear-dark.svg (../shared/devtools/images/search-clear-dark.svg)
|
||||
skin/classic/browser/devtools/tool-profiler-active.svg (../shared/devtools/images/tool-profiler-active.svg)
|
||||
#ifdef MOZ_SERVICES_SYNC
|
||||
skin/classic/browser/sync-16-throbber.png
|
||||
skin/classic/browser/sync-16.png
|
||||
|
||||
@@ -160,9 +160,12 @@ browser.jar:
|
||||
skin/classic/browser/tabbrowser/tab-arrow-left-inverted.png (tabbrowser/tab-arrow-left-inverted.png)
|
||||
skin/classic/browser/tabbrowser/tab-overflow-border.png (tabbrowser/tab-overflow-border.png)
|
||||
skin/classic/browser/tabbrowser/tabDragIndicator.png (tabbrowser/tabDragIndicator.png)
|
||||
skin/classic/browser/devtools/add.svg (../shared/devtools/images/add.svg)
|
||||
skin/classic/browser/devtools/filter-swatch.svg (../shared/devtools/images/filter-swatch.svg)
|
||||
skin/classic/browser/devtools/search-clear-failed.svg (../shared/devtools/images/search-clear-failed.svg)
|
||||
skin/classic/browser/devtools/search-clear-light.svg (../shared/devtools/images/search-clear-light.svg)
|
||||
skin/classic/browser/devtools/search-clear-dark.svg (../shared/devtools/images/search-clear-dark.svg)
|
||||
skin/classic/browser/devtools/tool-profiler-active.svg (../shared/devtools/images/tool-profiler-active.svg)
|
||||
#ifdef MOZ_SERVICES_SYNC
|
||||
skin/classic/browser/sync-throbber.png
|
||||
skin/classic/browser/sync-16.png
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
<svg width="18" height="18" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<polygon fill="#EEF0F2" points="4,7 8,7 8,3 10,3 10,7 14,7 14,9 10,9 10,13 8,13 8,9 4,9 4,7"></polygon>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 220 B |
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 12 12" width="12px" height="12px">
|
||||
<defs>
|
||||
<mask id="mask">
|
||||
<rect width="100%" height="100%" fill="white"/>
|
||||
<polygon points="12,0 0,0 0,12"/>
|
||||
</mask>
|
||||
</defs>
|
||||
|
||||
<g id="addpage-shape">
|
||||
<circle cx="6" cy="6" r="6" fill="white"/>
|
||||
<circle cx="6" cy="6" r="6" mask="url(#mask)" fill="#AEB0B1" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 683 B |
@@ -0,0 +1,14 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" xmlns:xlink="http://www.w3.org/1999/xlink" enable-background="new 0 0 16 16">
|
||||
<g fill="#71c054" fill-rule="evenodd">
|
||||
<path d="m8,1c-3.9,0-7,3.1-7,7s3.1,7 7,7c3.9,0 7-3.1 7-7s-3.1-7-7-7zm-.1,12c-2.8,0-5-2.2-5-5 0-2.8 2.2-5 5-5s5,2.2 5,5c0,2.8-2.2,5-5,5z"/>
|
||||
<path d="m8,6.9c.6,0 1.1,.5 1.1,1.1 0,.6-.5,1.1-1.1,1.1-.6,0-1.1-.5-1.1-1.1 0-.6 .5-1.1 1.1-1.1z"/>
|
||||
<path d="m11.3,4.6l-3.9,2.5 1.5,1.4 2.4-3.9z"/>
|
||||
<path opacity=".4" d="m4.6,10c.7,1.2 2,2 3.4,2 1.5,0 2.7-.8 3.4-2h-6.8z"/>
|
||||
<g opacity=".3">
|
||||
<path d="m7.1,5.1l-.6-1.3-.9,.4 .7,1.3c.2-.1 .5-.3 .8-.4z"/>
|
||||
<path d="m9.8,5.6l.7-1.4-.9-.4-.7,1.3c.3,.2 .6,.3 .9,.5z"/>
|
||||
<path d="m10.8,7c.1,.3 .2,.7 .2,1h2v-1h-2.2z"/>
|
||||
<path d="m5,8c0-.3 .1-.7 .2-1h-2.2l-.1,1h2.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 814 B |
@@ -156,9 +156,12 @@ browser.jar:
|
||||
skin/classic/browser/tabbrowser/tab-arrow-left-inverted.png (tabbrowser/tab-arrow-left-inverted.png)
|
||||
skin/classic/browser/tabbrowser/tab-overflow-border.png (tabbrowser/tab-overflow-border.png)
|
||||
skin/classic/browser/tabbrowser/tabDragIndicator.png (tabbrowser/tabDragIndicator.png)
|
||||
skin/classic/browser/devtools/add.svg (../shared/devtools/images/add.svg)
|
||||
skin/classic/browser/devtools/filter-swatch.svg (../shared/devtools/images/filter-swatch.svg)
|
||||
skin/classic/browser/devtools/search-clear-failed.svg (../shared/devtools/images/search-clear-failed.svg)
|
||||
skin/classic/browser/devtools/search-clear-light.svg (../shared/devtools/images/search-clear-light.svg)
|
||||
skin/classic/browser/devtools/search-clear-dark.svg (../shared/devtools/images/search-clear-dark.svg)
|
||||
skin/classic/browser/devtools/tool-profiler-active.svg (../shared/devtools/images/tool-profiler-active.svg)
|
||||
#ifdef MOZ_SERVICES_SYNC
|
||||
skin/classic/browser/sync-throbber.png
|
||||
skin/classic/browser/sync-16.png
|
||||
|
||||
@@ -2647,10 +2647,9 @@ ContentChild::RecvStopProfiler()
|
||||
bool
|
||||
ContentChild::RecvGetProfile(nsCString* aProfile)
|
||||
{
|
||||
char* profile = profiler_get_profile();
|
||||
UniquePtr<char[]> profile = profiler_get_profile();
|
||||
if (profile) {
|
||||
*aProfile = nsCString(profile, strlen(profile));
|
||||
free(profile);
|
||||
*aProfile = nsCString(profile.get(), strlen(profile.get()));
|
||||
} else {
|
||||
*aProfile = EmptyCString();
|
||||
}
|
||||
|
||||
@@ -2510,10 +2510,9 @@ PluginModuleChild::RecvStopProfiler()
|
||||
bool
|
||||
PluginModuleChild::AnswerGetProfile(nsCString* aProfile)
|
||||
{
|
||||
char* profile = profiler_get_profile();
|
||||
UniquePtr<char[]> profile = profiler_get_profile();
|
||||
if (profile != nullptr) {
|
||||
*aProfile = nsCString(profile, strlen(profile));
|
||||
free(profile);
|
||||
*aProfile = nsCString(profile.get(), strlen(profile.get()));
|
||||
} else {
|
||||
*aProfile = nsCString("", 0);
|
||||
}
|
||||
|
||||
@@ -1154,6 +1154,12 @@ pref("devtools.telemetry.tools.opened.version", "{}");
|
||||
pref("devtools.selfxss.count", 0);
|
||||
#endif //MOZ_DEVTOOLS
|
||||
|
||||
// URL of the remote JSON catalog used for device simulation
|
||||
pref("devtools.devices.url", "https://code.cdn.mozilla.net/devices/devices.json");
|
||||
|
||||
// URL of the remote JSON catalog used for device simulation
|
||||
pref("devtools.devices.url", "https://code.cdn.mozilla.net/devices/devices.json");
|
||||
|
||||
// view source
|
||||
pref("view_source.syntax_highlight", true);
|
||||
pref("view_source.wrap_long_lines", false);
|
||||
|
||||
@@ -95,6 +95,7 @@ function close(panel) {
|
||||
// when quitting the host application while a panel is visible. To suppress
|
||||
// these errors, check for "hidePopup" in panel before calling it.
|
||||
// It's not clear if there's an issue or it's expected behavior.
|
||||
// See Bug 1151796.
|
||||
|
||||
return panel.hidePopup && panel.hidePopup();
|
||||
}
|
||||
|
||||
@@ -5452,16 +5452,50 @@
|
||||
"n_values": 13,
|
||||
"description": "Screen resolution of DevTools user (0:lower, 1:800x600, 2:1024x768, 3:1280x800, 4:1280x1024, 5:1366x768, 6:1440x900, 7:1920x1080, 8:2560×1440, 9:2560×1600, 10:2880x1800, 11:other, 12:higher)"
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_OPENED_BOOLEAN": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "boolean",
|
||||
"description": "How many times has the DevTools WebIDE been opened?"
|
||||
},
|
||||
"DEVTOOLS_CANVASDEBUGGER_OPENED_BOOLEAN": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "boolean",
|
||||
"description": "How many times has the devtool's Canvas Debugger been opened?"
|
||||
},
|
||||
"DEVTOOLS_TOOLBOX_OPENED_BOOLEAN": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "boolean",
|
||||
"description": "How many times has the devtool's toolbox been opened?"
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_OPENED_PER_USER_FLAG": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "flag",
|
||||
"description": "How many users have opened the DevTools WebIDE?"
|
||||
},
|
||||
"DEVTOOLS_CANVASDEBUGGER_OPENED_PER_USER_FLAG": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "flag",
|
||||
"description": "How many users have opened the devtool's Canvas Debugger?"
|
||||
},
|
||||
"DEVTOOLS_TOOLBOX_OPENED_PER_USER_FLAG": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "flag",
|
||||
"description": "How many times has the devtool's toolbox been opened?"
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_TIME_ACTIVE_SECONDS": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "exponential",
|
||||
"high": "10000000",
|
||||
"n_buckets": 100,
|
||||
"description": "How long has WebIDE been active (seconds)"
|
||||
},
|
||||
"DEVTOOLS_CANVASDEBUGGER_TIME_ACTIVE_SECONDS": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "exponential",
|
||||
"high": "10000000",
|
||||
"n_buckets": 100,
|
||||
"description": "How long has the Canvas Debugger been active (seconds)"
|
||||
},
|
||||
"DEVTOOLS_TOOLBOX_TIME_ACTIVE_SECONDS": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "exponential",
|
||||
@@ -5475,7 +5509,54 @@
|
||||
"high": "10000000",
|
||||
"n_buckets": 100,
|
||||
"description": "How long has the options panel been active (seconds)"
|
||||
},
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_CONNECTION_RESULT": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "boolean",
|
||||
"description": "Did WebIDE runtime connection succeed?"
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_USB_CONNECTION_RESULT": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "boolean",
|
||||
"description": "Did WebIDE USB runtime connection succeed?"
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_WIFI_CONNECTION_RESULT": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "boolean",
|
||||
"description": "Did WebIDE WiFi runtime connection succeed?"
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_SIMULATOR_CONNECTION_RESULT": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "boolean",
|
||||
"description": "Did WebIDE simulator runtime connection succeed?"
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_REMOTE_CONNECTION_RESULT": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "boolean",
|
||||
"description": "Did WebIDE remote runtime connection succeed?"
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_LOCAL_CONNECTION_RESULT": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "boolean",
|
||||
"description": "Did WebIDE local runtime connection succeed?"
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_CONNECTION_TIME_SECONDS": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "exponential",
|
||||
"high": "10000000",
|
||||
"n_buckets": 100,
|
||||
"description": "How long was WebIDE connected to a runtime (seconds)?"
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_CONNECTION_PLAY_USED": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "boolean",
|
||||
"description": "Was WebIDE's play button used during this runtime connection?"
|
||||
},
|
||||
"DEVTOOLS_WEBIDE_CONNECTION_DEBUG_USED": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "boolean",
|
||||
"description": "Was WebIDE's debug button used during this runtime connection?"
|
||||
},
|
||||
"DEVTOOLS_TABS_OPEN_PEAK_LINEAR": {
|
||||
"expires_in_version": "never",
|
||||
"kind": "linear",
|
||||
|
||||
@@ -79,6 +79,7 @@ BuiltinProvider.prototype = {
|
||||
// corresponding addition to the SrcdirProvider mapping below as well.
|
||||
"": "resource://gre/modules/commonjs/",
|
||||
"main": "resource:///modules/devtools/main.js",
|
||||
"definitions": "resource:///modules/devtools/definitions.js",
|
||||
"devtools": "resource://gre/modules/devtools",
|
||||
"devtools/toolkit": "resource://gre/modules/devtools",
|
||||
"devtools/server": "resource://gre/modules/devtools/server",
|
||||
@@ -135,6 +136,7 @@ SrcdirProvider.prototype = {
|
||||
let devtoolsDir = OS.Path.join(srcdir, "browser", "devtools");
|
||||
let toolkitDir = OS.Path.join(srcdir, "toolkit", "devtools");
|
||||
let mainURI = this.fileURI(OS.Path.join(devtoolsDir, "main.js"));
|
||||
let definitionsURI = this.fileURI(OS.Path.join(devtoolsDir, "definitions.js"));
|
||||
let devtoolsURI = this.fileURI(devtoolsDir);
|
||||
let toolkitURI = this.fileURI(toolkitDir);
|
||||
let serverURI = this.fileURI(OS.Path.join(toolkitDir, "server"));
|
||||
@@ -161,6 +163,7 @@ SrcdirProvider.prototype = {
|
||||
paths: {
|
||||
"": "resource://gre/modules/commonjs/",
|
||||
"main": mainURI,
|
||||
"definitions": definitionsURI,
|
||||
"devtools": devtoolsURI,
|
||||
"devtools/toolkit": toolkitURI,
|
||||
"devtools/server": serverURI,
|
||||
|
||||
@@ -384,7 +384,7 @@ let CallsListView = Heritage.extend(WidgetMethods, {
|
||||
// If clicking on the location, jump to the Debugger.
|
||||
if (e.target.classList.contains("call-item-location")) {
|
||||
let { file, line } = callItem.attachment.actor;
|
||||
viewSourceInDebugger(file, line);
|
||||
this._viewSourceInDebugger(file, line);
|
||||
return;
|
||||
}
|
||||
// Otherwise hide the call stack.
|
||||
@@ -414,7 +414,7 @@ let CallsListView = Heritage.extend(WidgetMethods, {
|
||||
|
||||
let name = document.createElement("label");
|
||||
name.className = "plain call-item-stack-fn-name";
|
||||
name.setAttribute("value", "??" + call.name + "()");
|
||||
name.setAttribute("value", "↳ " + call.name + "()");
|
||||
contents.appendChild(name);
|
||||
|
||||
let spacer = document.createElement("spacer");
|
||||
@@ -456,7 +456,7 @@ let CallsListView = Heritage.extend(WidgetMethods, {
|
||||
* The line of the respective function.
|
||||
*/
|
||||
_onStackFileClick: function(e, { file, line }) {
|
||||
viewSourceInDebugger(file, line);
|
||||
this._viewSourceInDebugger(file, line);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -501,7 +501,7 @@ let CallsListView = Heritage.extend(WidgetMethods, {
|
||||
}
|
||||
let callItem = this.selectedItem;
|
||||
let { file, line } = callItem.attachment.actor;
|
||||
viewSourceInDebugger(file, line);
|
||||
this._viewSourceInDebugger(file, line);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -509,5 +509,18 @@ let CallsListView = Heritage.extend(WidgetMethods, {
|
||||
*/
|
||||
_onStepOut: function() {
|
||||
this.selectedIndex = this.itemCount - 1;
|
||||
},
|
||||
|
||||
/**
|
||||
* Opens the specified file and line in the debugger. Falls back to Firefox's View Source.
|
||||
*/
|
||||
_viewSourceInDebugger: function (file, line) {
|
||||
gToolbox.viewSourceInDebugger(file, line).then(success => {
|
||||
if (success) {
|
||||
window.emit(EVENTS.SOURCE_SHOWN_IN_JS_DEBUGGER);
|
||||
} else {
|
||||
window.emit(EVENTS.SOURCE_NOT_FOUND_IN_JS_DEBUGGER);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -12,7 +12,8 @@ Cu.import("resource://gre/modules/devtools/ViewHelpers.jsm");
|
||||
Cu.import("resource://gre/modules/devtools/Console.jsm");
|
||||
Cu.import("resource://gre/modules/devtools/gDevTools.jsm");
|
||||
|
||||
const require = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.require;
|
||||
const devtools = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools;
|
||||
const { require } = devtools;
|
||||
const promise = Cu.import("resource://gre/modules/Promise.jsm", {}).Promise;
|
||||
const EventEmitter = require("devtools/toolkit/event-emitter");
|
||||
const { CallWatcherFront } = require("devtools/server/actors/call-watcher");
|
||||
@@ -350,32 +351,3 @@ function getThumbnailForCall(thumbnails, index) {
|
||||
}
|
||||
return CanvasFront.INVALID_SNAPSHOT_IMAGE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens/selects the debugger in this toolbox and jumps to the specified
|
||||
* file name and line number.
|
||||
*/
|
||||
function viewSourceInDebugger(url, line) {
|
||||
let showSource = ({ DebuggerView }) => {
|
||||
let item = DebuggerView.Sources.getItemForAttachment(a => a.source.url === url);
|
||||
if (item) {
|
||||
DebuggerView.setEditorLocation(item.attachment.source.actor, line, { noDebug: true }).then(() => {
|
||||
window.emit(EVENTS.SOURCE_SHOWN_IN_JS_DEBUGGER);
|
||||
}, () => {
|
||||
window.emit(EVENTS.SOURCE_NOT_FOUND_IN_JS_DEBUGGER);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// If the Debugger was already open, switch to it and try to show the
|
||||
// source immediately. Otherwise, initialize it and wait for the sources
|
||||
// to be added first.
|
||||
let debuggerAlreadyOpen = gToolbox.getPanel("jsdebugger");
|
||||
gToolbox.selectTool("jsdebugger").then(({ panelWin: dbg }) => {
|
||||
if (debuggerAlreadyOpen) {
|
||||
showSource(dbg);
|
||||
} else {
|
||||
dbg.once(dbg.EVENTS.SOURCES_ADDED, () => showSource(dbg));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -240,7 +240,7 @@ let SnapshotsListView = Heritage.extend(WidgetMethods, {
|
||||
// the dummy snapshot item from being drawn.
|
||||
this.addSnapshot();
|
||||
|
||||
// If this is the first item, immediately show the "Loading?? notice.
|
||||
// If this is the first item, immediately show the "Loading…" notice.
|
||||
if (this.itemCount == 1) {
|
||||
$("#empty-notice").hidden = true;
|
||||
$("#waiting-notice").hidden = false;
|
||||
@@ -463,7 +463,7 @@ let SnapshotsListView = Heritage.extend(WidgetMethods, {
|
||||
let footer = $(".snapshot-item-footer", snapshotItem.target);
|
||||
let save = $(".snapshot-item-save", snapshotItem.target);
|
||||
|
||||
// Show a throbber and a "Saving?? label if serializing isn't immediate.
|
||||
// Show a throbber and a "Saving…" label if serializing isn't immediate.
|
||||
setNamedTimeout("call-list-save", CALLS_LIST_SLOW_SAVE_DELAY, () => {
|
||||
footer.classList.add("devtools-throbber");
|
||||
save.setAttribute("disabled", "true");
|
||||
|
||||
@@ -17,6 +17,8 @@ Cu.import("resource://gre/modules/devtools/dbg-server.jsm");
|
||||
DevToolsUtils.defineLazyModuleGetter(this, "Task",
|
||||
"resource://gre/modules/Task.jsm");
|
||||
|
||||
const REMOTE_TIMEOUT = "devtools.debugger.remote-timeout";
|
||||
|
||||
/**
|
||||
* Connection Manager.
|
||||
*
|
||||
@@ -52,6 +54,8 @@ DevToolsUtils.defineLazyModuleGetter(this, "Task",
|
||||
* . logs Current logs. "newlog" event notifies new available logs
|
||||
* . store Reference to a local data store (see below)
|
||||
* . keepConnecting Should the connection keep trying to connect?
|
||||
* . timeoutDelay When should we give up (in ms)?
|
||||
* 0 means wait forever.
|
||||
* . encryption Should the connection be encrypted?
|
||||
* . authentication What authentication scheme should be used?
|
||||
* . authenticator The |Authenticator| instance used. Overriding
|
||||
@@ -233,8 +237,11 @@ Connection.prototype = {
|
||||
return settings;
|
||||
},
|
||||
|
||||
timeoutDelay: Services.prefs.getIntPref(REMOTE_TIMEOUT),
|
||||
|
||||
resetOptions() {
|
||||
this.keepConnecting = false;
|
||||
this.timeoutDelay = Services.prefs.getIntPref(REMOTE_TIMEOUT);
|
||||
this.encryption = false;
|
||||
this.authentication = null;
|
||||
this.advertisement = null;
|
||||
@@ -268,8 +275,9 @@ Connection.prototype = {
|
||||
}
|
||||
this._setStatus(Connection.Status.CONNECTING);
|
||||
|
||||
let delay = Services.prefs.getIntPref("devtools.debugger.remote-timeout");
|
||||
this._timeoutID = setTimeout(this._onTimeout, delay);
|
||||
if (this.timeoutDelay > 0) {
|
||||
this._timeoutID = setTimeout(this._onTimeout, this.timeoutDelay);
|
||||
}
|
||||
this._clientConnect();
|
||||
} else {
|
||||
let msg = "Can't connect. Client is not fully disconnected";
|
||||
|
||||
@@ -4,9 +4,56 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const gcli = require("gcli/index");
|
||||
const { createSystem, connectFront, disconnectFront } = require("gcli/system");
|
||||
const { GcliFront } = require("devtools/server/actors/gcli");
|
||||
|
||||
const commandModules = [
|
||||
/**
|
||||
* This is the basic list of modules that should be loaded into each
|
||||
* requisition instance whether server side or client side
|
||||
*/
|
||||
exports.baseModules = [
|
||||
"gcli/types/delegate",
|
||||
"gcli/types/selection",
|
||||
"gcli/types/array",
|
||||
|
||||
"gcli/types/boolean",
|
||||
"gcli/types/command",
|
||||
"gcli/types/date",
|
||||
"gcli/types/file",
|
||||
"gcli/types/javascript",
|
||||
"gcli/types/node",
|
||||
"gcli/types/number",
|
||||
"gcli/types/resource",
|
||||
"gcli/types/setting",
|
||||
"gcli/types/string",
|
||||
"gcli/types/union",
|
||||
"gcli/types/url",
|
||||
|
||||
"gcli/fields/fields",
|
||||
"gcli/fields/delegate",
|
||||
"gcli/fields/selection",
|
||||
|
||||
"gcli/ui/focus",
|
||||
"gcli/ui/intro",
|
||||
|
||||
"gcli/converters/converters",
|
||||
"gcli/converters/basic",
|
||||
"gcli/converters/terminal",
|
||||
|
||||
"gcli/languages/command",
|
||||
"gcli/languages/javascript",
|
||||
|
||||
"gcli/commands/clear",
|
||||
"gcli/commands/context",
|
||||
"gcli/commands/help",
|
||||
"gcli/commands/pref",
|
||||
];
|
||||
|
||||
/**
|
||||
* Some commands belong to a tool (see getToolModules). This is a list of the
|
||||
* modules that are *not* owned by a tool.
|
||||
*/
|
||||
exports.devtoolsModules = [
|
||||
"devtools/tilt/tilt-commands",
|
||||
"gcli/commands/addon",
|
||||
"gcli/commands/appcache",
|
||||
@@ -29,15 +76,83 @@ const commandModules = [
|
||||
"gcli/commands/tools",
|
||||
];
|
||||
|
||||
gcli.addItemsByModule(commandModules, { delayedLoad: true });
|
||||
/**
|
||||
* Register commands from tools with 'command: [ "some/module" ]' definitions.
|
||||
* The map/reduce incantation squashes the array of arrays to a single array.
|
||||
*/
|
||||
const defaultTools = require("definitions").defaultTools;
|
||||
exports.devtoolsToolModules = defaultTools.map(def => def.commands || [])
|
||||
.reduce((prev, curr) => prev.concat(curr), []);
|
||||
|
||||
const defaultTools = require("main").defaultTools;
|
||||
for (let definition of defaultTools) {
|
||||
if (definition.commands) {
|
||||
gcli.addItemsByModule(definition.commands, { delayedLoad: true });
|
||||
/**
|
||||
* Add modules to a system for use in a content process (but don't call load)
|
||||
*/
|
||||
exports.addAllItemsByModule = function(system) {
|
||||
system.addItemsByModule(exports.baseModules, { delayedLoad: true });
|
||||
system.addItemsByModule(exports.devtoolsModules, { delayedLoad: true });
|
||||
system.addItemsByModule(exports.devtoolsToolModules, { delayedLoad: true });
|
||||
|
||||
const { mozDirLoader } = require("gcli/commands/cmd");
|
||||
system.addItemsByModule("mozcmd", { delayedLoad: true, loader: mozDirLoader });
|
||||
};
|
||||
|
||||
/**
|
||||
* This is WeakMap<Target, Links> where Links is an object that looks like
|
||||
* { refs: number, promise: Promise<System>, front: GcliFront }
|
||||
*/
|
||||
var linksForTarget = new WeakMap();
|
||||
|
||||
/**
|
||||
* The toolbox uses the following properties on a command to allow it to be
|
||||
* added to the toolbox toolbar
|
||||
*/
|
||||
var customProperties = [ "buttonId", "buttonClass", "tooltipText" ];
|
||||
|
||||
/**
|
||||
* Create a system which connects to a GCLI in a remote target
|
||||
* @return Promise<System> for the given target
|
||||
*/
|
||||
exports.getSystem = function(target) {
|
||||
const existingLinks = linksForTarget.get(target);
|
||||
if (existingLinks != null) {
|
||||
existingLinks.refs++;
|
||||
return existingLinks.promise;
|
||||
}
|
||||
}
|
||||
|
||||
const { mozDirLoader } = require("gcli/commands/cmd");
|
||||
const system = createSystem({ location: "client" });
|
||||
|
||||
gcli.addItemsByModule("mozcmd", { delayedLoad: true, loader: mozDirLoader });
|
||||
exports.addAllItemsByModule(system);
|
||||
|
||||
// Load the client system
|
||||
const links = {
|
||||
refs: 1,
|
||||
system,
|
||||
promise: system.load().then(() => {
|
||||
return GcliFront.create(target).then(front => {
|
||||
links.front = front;
|
||||
return connectFront(system, front, customProperties).then(() => system);
|
||||
});
|
||||
})
|
||||
};
|
||||
|
||||
linksForTarget.set(target, links);
|
||||
return links.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
* Someone that called getSystem doesn't need it any more, so decrement the
|
||||
* count of users of the system for that target, and destroy if needed
|
||||
*/
|
||||
exports.releaseSystem = function(target) {
|
||||
const links = linksForTarget.get(target);
|
||||
if (links == null) {
|
||||
throw new Error("releaseSystem called for unknown target");
|
||||
}
|
||||
|
||||
links.refs--;
|
||||
if (links.refs === 0) {
|
||||
disconnectFront(links.system, links.front);
|
||||
links.system.destroy();
|
||||
linksForTarget.delete(target);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -7,7 +7,7 @@ function test() {
|
||||
return Task.spawn(spawnTest).then(finish, helpers.handleError);
|
||||
}
|
||||
|
||||
function spawnTest() {
|
||||
function* spawnTest() {
|
||||
let options = yield helpers.openTab("about:blank");
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ function test() {
|
||||
return Task.spawn(spawnTest).then(finish, helpers.handleError);
|
||||
}
|
||||
|
||||
function spawnTest() {
|
||||
function* spawnTest() {
|
||||
let lines = [
|
||||
'Manifest has a character encoding of ISO-8859-1. Manifests must have the ' +
|
||||
'utf-8 character encoding.',
|
||||
|
||||
@@ -10,7 +10,7 @@ function test() {
|
||||
return Task.spawn(spawnTest).then(finish, helpers.handleError);
|
||||
}
|
||||
|
||||
function spawnTest() {
|
||||
function* spawnTest() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ const TEST_URI = "data:text/html;charset=utf-8,gcli-calllog";
|
||||
let tests = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
return Task.spawn(function*() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ const TEST_URI = "data:text/html;charset=utf-8,cmd-calllog-chrome";
|
||||
let tests = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
return Task.spawn(function*() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ function test() {
|
||||
return Task.spawn(spawnTest).then(finish, helpers.handleError);
|
||||
}
|
||||
|
||||
function spawnTest() {
|
||||
function* spawnTest() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
@@ -49,7 +49,7 @@ function spawnTest() {
|
||||
yield helpers.audit(options, [
|
||||
{
|
||||
setup: "console close",
|
||||
exec: { output: true }
|
||||
exec: { output: "" }
|
||||
}
|
||||
]);
|
||||
|
||||
|
||||
@@ -33,18 +33,21 @@ add_task(function*() {
|
||||
* Visit all the pages in the test
|
||||
*/
|
||||
function* navigate(usage, options) {
|
||||
yield usage.start();
|
||||
yield usage.start(options.chromeWindow, options.target);
|
||||
|
||||
ok(usage.isRunning(), "csscoverage is running");
|
||||
|
||||
let load1Promise = helpers.listenOnce(options.browser, "load", true);
|
||||
|
||||
yield helpers.navigate(PAGE_1, options);
|
||||
|
||||
// Wait for the test pages to auto-cycle
|
||||
let ev = yield helpers.listenOnce(options.browser, "load", true);
|
||||
is(ev.target.location.href, PAGE_1, "page 1 loaded");
|
||||
yield load1Promise;
|
||||
is(options.window.location.href, PAGE_1, "page 1 loaded");
|
||||
|
||||
ev = yield helpers.listenOnce(options.browser, "load", true);
|
||||
is(ev.target.location.href, PAGE_3, "page 3 loaded");
|
||||
// Page 2 is a frame in page 1. JS in the page navigates to page 3.
|
||||
yield helpers.listenOnce(options.browser, "load", true);
|
||||
is(options.window.location.href, PAGE_3, "page 3 loaded");
|
||||
|
||||
yield usage.stop();
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ function test() {
|
||||
return Task.spawn(testTask).then(finish, helpers.handleError);
|
||||
}
|
||||
|
||||
function testTask() {
|
||||
function* testTask() {
|
||||
let options = yield helpers.openTab("about:blank");
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
@@ -29,7 +29,10 @@ function testTask() {
|
||||
{
|
||||
setup: 'jsb ' + TEST_URI,
|
||||
// Should result in a new scratchpad window
|
||||
exec: { }
|
||||
exec: {
|
||||
output: '',
|
||||
error: false
|
||||
}
|
||||
}
|
||||
]);
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ let tests = {
|
||||
};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
return Task.spawn(function*() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ function test() {
|
||||
return Task.spawn(spawnTest).then(finish, helpers.handleError);
|
||||
}
|
||||
|
||||
function spawnTest() {
|
||||
function* spawnTest() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
@@ -302,7 +302,8 @@ function spawnTest() {
|
||||
args: {
|
||||
searchAttributes: { value: undefined, status: 'INCOMPLETE' },
|
||||
searchElements: { value: undefined, status: 'INCOMPLETE' },
|
||||
root: { value: undefined },
|
||||
// root: { value: undefined }, // 'root' is a node which is remote
|
||||
// so we can't see the value in tests
|
||||
ignoreCase: { value: false },
|
||||
}
|
||||
},
|
||||
@@ -317,7 +318,8 @@ function spawnTest() {
|
||||
args: {
|
||||
searchAttributes: { value: 'foo' },
|
||||
searchElements: { value: 'bar' },
|
||||
root: { value: undefined },
|
||||
// root: { value: undefined }, // 'root' is a node which is remote
|
||||
// so we can't see the value in tests
|
||||
ignoreCase: { value: false },
|
||||
}
|
||||
},
|
||||
|
||||
@@ -13,7 +13,7 @@ function test() {
|
||||
return Task.spawn(spawnTest).then(finish, helpers.handleError);
|
||||
}
|
||||
|
||||
function spawnTest() {
|
||||
function* spawnTest() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ function test() {
|
||||
return Task.spawn(spawnTest).then(finish, helpers.handleError);
|
||||
}
|
||||
|
||||
function spawnTest() {
|
||||
function* spawnTest() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ function test() {
|
||||
return Task.spawn(spawnTest).then(finish, helpers.handleError);
|
||||
}
|
||||
|
||||
function spawnTest() {
|
||||
function* spawnTest() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ function test() {
|
||||
return Task.spawn(spawnTest).then(finish, helpers.handleError);
|
||||
}
|
||||
|
||||
function spawnTest() {
|
||||
function* spawnTest() {
|
||||
waitForExplicitFinish();
|
||||
|
||||
info("RUN TEST: non-private window");
|
||||
@@ -81,11 +81,6 @@ function addTabWithToolbarRunTests(win) {
|
||||
input: 'screenshot --selector img#testImage',
|
||||
markup: 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV',
|
||||
status: 'VALID',
|
||||
args: {
|
||||
selector: {
|
||||
value: options.window.document.getElementById("testImage")
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -16,14 +16,18 @@ function test() {
|
||||
return Task.spawn(spawnTest).then(finish, helpers.handleError);
|
||||
}
|
||||
|
||||
function spawnTest() {
|
||||
function* spawnTest() {
|
||||
// Setup
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
|
||||
require("devtools/commandline/commands-index");
|
||||
let gcli = require("gcli/index");
|
||||
yield gcli.load();
|
||||
let settings = gcli.settings;
|
||||
const { createSystem } = require("gcli/system");
|
||||
const system = createSystem({ location: "server" });
|
||||
|
||||
const gcliInit = require("devtools/commandline/commands-index");
|
||||
gcliInit.addAllItemsByModule(system);
|
||||
yield system.load();
|
||||
|
||||
let settings = system.settings;
|
||||
|
||||
let hideIntroEnabled = settings.get("devtools.gcli.hideIntro");
|
||||
let tabSize = settings.get("devtools.editor.tabsize");
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testAsync.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_async.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testBasic = function(options) {
|
||||
@@ -74,7 +59,6 @@ exports.testBasic = function(options) {
|
||||
args: {
|
||||
command: { name: 'tsslow' },
|
||||
hello: {
|
||||
value: undefined,
|
||||
arg: '',
|
||||
status: 'INCOMPLETE'
|
||||
},
|
||||
@@ -95,7 +79,6 @@ exports.testBasic = function(options) {
|
||||
args: {
|
||||
command: { name: 'tsslow' },
|
||||
hello: {
|
||||
value: undefined,
|
||||
arg: ' S',
|
||||
status: 'INCOMPLETE'
|
||||
},
|
||||
@@ -116,7 +99,6 @@ exports.testBasic = function(options) {
|
||||
args: {
|
||||
command: { name: 'tsslow' },
|
||||
hello: {
|
||||
value: 'Shalom',
|
||||
arg: ' Shalom ',
|
||||
status: 'VALID',
|
||||
message: ''
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testCanon.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_canon.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
var Commands = require('gcli/commands/commands').Commands;
|
||||
@@ -219,6 +204,9 @@ exports.testAltCommands = function(options) {
|
||||
{ name: 'num', type: 'number' },
|
||||
{ name: 'opt', type: { name: 'selection', data: [ '1', '2', '3' ] } },
|
||||
],
|
||||
customProp1: 'localValue',
|
||||
customProp2: true,
|
||||
customProp3: 42,
|
||||
exec: function(args, context) {
|
||||
return context.commandName + ':' +
|
||||
args.str + ':' + args.num + ':' + args.opt;
|
||||
@@ -235,6 +223,24 @@ exports.testAltCommands = function(options) {
|
||||
'],"isParent":false}]',
|
||||
'JSON.stringify(commandSpecs)');
|
||||
|
||||
var customProps = [ 'customProp1', 'customProp2', 'customProp3', ];
|
||||
var commandSpecs2 = altCommands.getCommandSpecs(customProps);
|
||||
assert.is(JSON.stringify(commandSpecs2),
|
||||
'[{' +
|
||||
'"item":"command",' +
|
||||
'"name":"tss",' +
|
||||
'"params":[' +
|
||||
'{"name":"str","type":"string"},' +
|
||||
'{"name":"num","type":"number"},' +
|
||||
'{"name":"opt","type":{"name":"selection","data":["1","2","3"]}}' +
|
||||
'],' +
|
||||
'"isParent":false,' +
|
||||
'"customProp1":"localValue",' +
|
||||
'"customProp2":true,' +
|
||||
'"customProp3":42' +
|
||||
'}]',
|
||||
'JSON.stringify(commandSpecs)');
|
||||
|
||||
var remoter = function(args, context) {
|
||||
assert.is(context.commandName, 'tss', 'commandName is tss');
|
||||
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testCli1.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_cli1.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
@@ -268,7 +253,6 @@ exports.testTsv = function(options) {
|
||||
}
|
||||
},
|
||||
{
|
||||
skipRemainingIf: options.isNoDom,
|
||||
name: '|tsv option',
|
||||
setup: function() {
|
||||
return helpers.setInput(options, 'tsv option', 0);
|
||||
|
||||
@@ -15,45 +15,18 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testCli2.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_cli2.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
var nodetype = require('gcli/types/node');
|
||||
|
||||
exports.setup = function(options) {
|
||||
if (options.window) {
|
||||
nodetype.setDocument(options.window.document);
|
||||
}
|
||||
};
|
||||
|
||||
exports.shutdown = function(options) {
|
||||
nodetype.unsetDocument();
|
||||
};
|
||||
|
||||
exports.testSingleString = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
@@ -376,7 +349,6 @@ exports.testSingleFloat = function(options) {
|
||||
}
|
||||
},
|
||||
{
|
||||
skipRemainingIf: options.isNoDom,
|
||||
name: 'tsf x (cursor=4)',
|
||||
setup: function() {
|
||||
return helpers.setInput(options, 'tsf x', 4);
|
||||
@@ -406,21 +378,14 @@ exports.testSingleFloat = function(options) {
|
||||
};
|
||||
|
||||
exports.testElementWeb = function(options) {
|
||||
var inputElement = options.isNoDom ?
|
||||
null :
|
||||
options.window.document.getElementById('gcli-input');
|
||||
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipIf: function gcliInputElementExists() {
|
||||
return inputElement == null;
|
||||
},
|
||||
setup: 'tse #gcli-input',
|
||||
setup: 'tse #gcli-root',
|
||||
check: {
|
||||
input: 'tse #gcli-input',
|
||||
input: 'tse #gcli-root',
|
||||
hints: ' [options]',
|
||||
markup: 'VVVVVVVVVVVVVVV',
|
||||
cursor: 15,
|
||||
markup: 'VVVVVVVVVVVVVV',
|
||||
cursor: 14,
|
||||
current: 'node',
|
||||
status: 'VALID',
|
||||
predictions: [ ],
|
||||
@@ -428,8 +393,7 @@ exports.testElementWeb = function(options) {
|
||||
args: {
|
||||
command: { name: 'tse' },
|
||||
node: {
|
||||
value: inputElement,
|
||||
arg: ' #gcli-input',
|
||||
arg: ' #gcli-root',
|
||||
status: 'VALID',
|
||||
message: ''
|
||||
},
|
||||
@@ -444,7 +408,6 @@ exports.testElementWeb = function(options) {
|
||||
exports.testElement = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipRemainingIf: options.isNoDom,
|
||||
setup: 'tse',
|
||||
check: {
|
||||
input: 'tse',
|
||||
@@ -457,7 +420,7 @@ exports.testElement = function(options) {
|
||||
unassigned: [ ],
|
||||
args: {
|
||||
command: { name: 'tse' },
|
||||
node: { value: undefined, arg: '', status: 'INCOMPLETE' },
|
||||
node: { arg: '', status: 'INCOMPLETE' },
|
||||
nodes: { arg: '', status: 'VALID', message: '' },
|
||||
nodes2: { arg: '', status: 'VALID', message: '' },
|
||||
}
|
||||
@@ -605,7 +568,7 @@ exports.testNestedCommand = function(options) {
|
||||
}
|
||||
},
|
||||
{
|
||||
skipIf: options.isPhantomjs,
|
||||
skipIf: options.isPhantomjs, // PhantomJS gets predictions wrong
|
||||
setup: 'tsn x',
|
||||
check: {
|
||||
input: 'tsn x',
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testCompletion1.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_completion1.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testActivate = function(options) {
|
||||
@@ -183,7 +168,7 @@ exports.testActivate = function(options) {
|
||||
}
|
||||
},
|
||||
{
|
||||
skipIf: options.isPhantomjs,
|
||||
skipIf: options.isPhantomjs, // PhantomJS gets predictions wrong
|
||||
setup: 'tsg d',
|
||||
check: {
|
||||
hints: ' [options] -> ccc'
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testCompletion2.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_completion2.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testLong = function(options) {
|
||||
@@ -170,7 +155,6 @@ exports.testNoTab = function(options) {
|
||||
}
|
||||
},
|
||||
{
|
||||
skipIf: options.isNoDom,
|
||||
name: '<TAB>',
|
||||
setup: function() {
|
||||
// Doing it this way avoids clearing the input buffer
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testContext.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_context.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testBaseline = function(options) {
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testDate.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_date.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
@@ -66,15 +51,15 @@ exports.testMaxMin = function(options) {
|
||||
var date = types.createType({ name: 'date', max: max, min: min });
|
||||
assert.is(date.getMax(), max, 'max setup');
|
||||
|
||||
var incremented = date.increment(min);
|
||||
var incremented = date.nudge(min, 1);
|
||||
assert.is(incremented, max, 'incremented');
|
||||
};
|
||||
|
||||
exports.testIncrement = function(options) {
|
||||
var date = options.requisition.system.types.createType('date');
|
||||
return date.parseString('now').then(function(conversion) {
|
||||
var plusOne = date.increment(conversion.value);
|
||||
var minusOne = date.decrement(plusOne);
|
||||
var plusOne = date.nudge(conversion.value, 1);
|
||||
var minusOne = date.nudge(plusOne, -1);
|
||||
|
||||
// See comments in testParse
|
||||
var gap = new Date().getTime() - minusOne.getTime();
|
||||
@@ -126,7 +111,7 @@ exports.testInput = function(options) {
|
||||
},
|
||||
exec: {
|
||||
output: [ /^Exec: tsdate/, /2001/, /1980/ ],
|
||||
type: 'string',
|
||||
type: 'testCommandOutput',
|
||||
error: false
|
||||
}
|
||||
},
|
||||
@@ -172,7 +157,7 @@ exports.testInput = function(options) {
|
||||
},
|
||||
exec: {
|
||||
output: [ /^Exec: tsdate/, /2001/, /1980/ ],
|
||||
type: 'string',
|
||||
type: 'testCommandOutput',
|
||||
error: false
|
||||
}
|
||||
},
|
||||
@@ -213,7 +198,7 @@ exports.testInput = function(options) {
|
||||
},
|
||||
exec: {
|
||||
output: [ /^Exec: tsdate/, new Date().getFullYear() ],
|
||||
type: 'string',
|
||||
type: 'testCommandOutput',
|
||||
error: false
|
||||
}
|
||||
},
|
||||
@@ -253,7 +238,7 @@ exports.testInput = function(options) {
|
||||
},
|
||||
exec: {
|
||||
output: [ /^Exec: tsdate/, new Date().getFullYear() ],
|
||||
type: 'string',
|
||||
type: 'testCommandOutput',
|
||||
error: false
|
||||
}
|
||||
}
|
||||
@@ -264,7 +249,7 @@ exports.testIncrDecr = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
// createRequisitionAutomator doesn't fake UP/DOWN well enough
|
||||
skipRemainingIf: options.isNoDom,
|
||||
skipRemainingIf: options.isNode,
|
||||
setup: 'tsdate 2001-01-01<UP>',
|
||||
check: {
|
||||
input: 'tsdate 2001-01-02',
|
||||
|
||||
@@ -15,54 +15,18 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testExec.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_exec.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
var nodetype = require('gcli/types/node');
|
||||
|
||||
var mockBody = {
|
||||
style: {}
|
||||
};
|
||||
|
||||
var mockEmptyNodeList = {
|
||||
length: 0,
|
||||
item: function() { return null; }
|
||||
};
|
||||
|
||||
var mockRootNodeList = {
|
||||
length: 1,
|
||||
item: function(i) { return mockBody; }
|
||||
};
|
||||
|
||||
var mockDoc = {
|
||||
querySelectorAll: function(css) {
|
||||
return (css === ':root') ? mockRootNodeList : mockEmptyNodeList;
|
||||
}
|
||||
};
|
||||
|
||||
exports.testParamGroup = function(options) {
|
||||
var tsg = options.requisition.system.commands.get('tsg');
|
||||
@@ -121,7 +85,7 @@ exports.testWithHelpers = function(options) {
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tsv optionType=string, optionValue=10'
|
||||
output: 'Exec: tsv optionType=option1 optionValue=10'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -151,7 +115,7 @@ exports.testWithHelpers = function(options) {
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tsv optionType=number, optionValue=10'
|
||||
output: 'Exec: tsv optionType=option2 optionValue=10'
|
||||
}
|
||||
},
|
||||
// Delegated remote types can't transfer value types so we only test for
|
||||
@@ -163,7 +127,7 @@ exports.testWithHelpers = function(options) {
|
||||
args: { optionValue: { value: '10' } }
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tsv optionType=string, optionValue=10'
|
||||
output: 'Exec: tsv optionType=option1 optionValue=10'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -173,7 +137,7 @@ exports.testWithHelpers = function(options) {
|
||||
args: { optionValue: { value: 10 } }
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tsv optionType=number, optionValue=10'
|
||||
output: 'Exec: tsv optionType=option2 optionValue=10'
|
||||
}
|
||||
}
|
||||
]);
|
||||
@@ -228,7 +192,7 @@ exports.testExecText = function(options) {
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tsr text=fred bloggs'
|
||||
output: 'Exec: tsr text=fred\\ bloggs'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -253,7 +217,7 @@ exports.testExecText = function(options) {
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tsr text=fred bloggs'
|
||||
output: 'Exec: tsr text=fred\\ bloggs'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -278,7 +242,7 @@ exports.testExecText = function(options) {
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tsr text=fred bloggs'
|
||||
output: 'Exec: tsr text=fred\\ bloggs'
|
||||
}
|
||||
}
|
||||
]);
|
||||
@@ -403,7 +367,6 @@ exports.testExecScript = function(options) {
|
||||
args: {
|
||||
command: { name: 'tsj' },
|
||||
javascript: {
|
||||
value: '1 + 1',
|
||||
arg: ' { 1 + 1 }',
|
||||
status: 'VALID',
|
||||
message: ''
|
||||
@@ -418,12 +381,9 @@ exports.testExecScript = function(options) {
|
||||
};
|
||||
|
||||
exports.testExecNode = function(options) {
|
||||
var origDoc = nodetype.getDocument();
|
||||
nodetype.setDocument(mockDoc);
|
||||
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipIf: options.isNoDom,
|
||||
skipIf: options.isRemote,
|
||||
setup: 'tse :root',
|
||||
check: {
|
||||
input: 'tse :root',
|
||||
@@ -437,19 +397,16 @@ exports.testExecNode = function(options) {
|
||||
args: {
|
||||
command: { name: 'tse' },
|
||||
node: {
|
||||
value: mockBody,
|
||||
arg: ' :root',
|
||||
status: 'VALID',
|
||||
message: ''
|
||||
},
|
||||
nodes: {
|
||||
value: mockEmptyNodeList,
|
||||
arg: '',
|
||||
status: 'VALID',
|
||||
message: ''
|
||||
},
|
||||
nodes2: {
|
||||
value: mockEmptyNodeList,
|
||||
arg: '',
|
||||
status: 'VALID',
|
||||
message: ''
|
||||
@@ -459,8 +416,10 @@ exports.testExecNode = function(options) {
|
||||
exec: {
|
||||
output: /^Exec: tse/
|
||||
},
|
||||
post: function() {
|
||||
nodetype.setDocument(origDoc);
|
||||
post: function(output) {
|
||||
assert.is(output.data.args.node, ':root', 'node should be :root');
|
||||
assert.is(output.data.args.nodes, 'Error', 'nodes should be Error');
|
||||
assert.is(output.data.args.nodes2, 'Error', 'nodes2 should be Error');
|
||||
}
|
||||
}
|
||||
]);
|
||||
@@ -552,7 +511,7 @@ exports.testExecArray = function(options) {
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tselarr num=1, arr='
|
||||
output: 'Exec: tselarr num=1 arr='
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -573,7 +532,7 @@ exports.testExecArray = function(options) {
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tselarr num=1, arr=a'
|
||||
output: 'Exec: tselarr num=1 arr=a'
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -594,7 +553,7 @@ exports.testExecArray = function(options) {
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tselarr num=1, arr=a,b'
|
||||
output: 'Exec: tselarr num=1 arr=a b'
|
||||
}
|
||||
}
|
||||
]);
|
||||
@@ -621,7 +580,7 @@ exports.testExecMultiple = function(options) {
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tsm abc=a, txt=10, num=10'
|
||||
output: 'Exec: tsm abc=a txt=10 num=10'
|
||||
}
|
||||
}
|
||||
]);
|
||||
@@ -651,9 +610,47 @@ exports.testExecDefaults = function(options) {
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tsg solo=aaa, txt1=null, bool=false, txt2=d, num=42'
|
||||
output: 'Exec: tsg solo=aaa txt1= bool=false txt2=d num=42'
|
||||
}
|
||||
}
|
||||
]);
|
||||
};
|
||||
|
||||
exports.testNested = function(options) {
|
||||
var commands = options.requisition.system.commands;
|
||||
commands.add({
|
||||
name: 'nestorama',
|
||||
exec: function(args, context) {
|
||||
return context.updateExec('tsb').then(function(tsbOutput) {
|
||||
return context.updateExec('tsu 6').then(function(tsuOutput) {
|
||||
return JSON.stringify({
|
||||
tsb: tsbOutput.data,
|
||||
tsu: tsuOutput.data
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
setup: 'nestorama',
|
||||
exec: {
|
||||
output:
|
||||
'{' +
|
||||
'"tsb":{' +
|
||||
'"name":"tsb",' +
|
||||
'"args":{"toggle":"false"}' +
|
||||
'},' +
|
||||
'"tsu":{' +
|
||||
'"name":"tsu",' +
|
||||
'"args":{"num":"6"}' +
|
||||
'}' +
|
||||
'}'
|
||||
},
|
||||
post: function() {
|
||||
commands.remove('nestorama');
|
||||
}
|
||||
}
|
||||
]);
|
||||
|
||||
};
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testFail.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_fail.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testBasic = function(options) {
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testFile.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_file.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
var local = false;
|
||||
@@ -47,10 +32,7 @@ var local = false;
|
||||
exports.testBasic = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
// These tests require us to be using node directly or to be in
|
||||
// PhantomJS connected to an execute enabled node server or to be in
|
||||
// firefox.
|
||||
skipRemainingIf: options.isPhantomjs || options.isFirefox,
|
||||
skipRemainingIf: options.isFirefox, // No file implementation in Firefox
|
||||
setup: 'tsfile open /',
|
||||
check: {
|
||||
input: 'tsfile open /',
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testFileparser.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_fileparser.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
var fileparser = require('gcli/util/fileparser');
|
||||
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testFilesystem.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_filesystem.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
var filesystem = require('gcli/util/filesystem');
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testFocus.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_focus.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testBasic = function(options) {
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testHistory.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_history.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
var History = require('gcli/ui/history').History;
|
||||
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testIncomplete.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_incomplete.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testInputter.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_inputter.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
var KeyEvent = require('gcli/util/util').KeyEvent;
|
||||
|
||||
@@ -89,7 +74,7 @@ exports.testOutput = function(options) {
|
||||
var ev1 = { keyCode: KeyEvent.DOM_VK_RETURN };
|
||||
return terminal.handleKeyUp(ev1).then(function() {
|
||||
assert.ok(latestEvent != null, 'events this test');
|
||||
assert.is(latestData, 'Exec: tss ', 'last command is tss');
|
||||
assert.is(latestData.name, 'tss', 'last command is tss');
|
||||
|
||||
assert.is(terminal.getInputState().typed,
|
||||
'',
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testIntro.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_intro.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testIntroStatus = function(options) {
|
||||
@@ -67,7 +52,6 @@ exports.testIntroStatus = function(options) {
|
||||
},
|
||||
{
|
||||
setup: 'intro',
|
||||
skipIf: options.isNoDom,
|
||||
check: {
|
||||
typed: 'intro',
|
||||
markup: 'VVVVV',
|
||||
|
||||
@@ -15,73 +15,55 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testJs.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_js.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
var javascript = require('gcli/types/javascript');
|
||||
|
||||
var tempWindow;
|
||||
|
||||
exports.setup = function(options) {
|
||||
if (options.isNoDom) {
|
||||
if (jsTestDisallowed(options)) {
|
||||
return;
|
||||
}
|
||||
|
||||
tempWindow = javascript.getGlobalObject();
|
||||
Object.defineProperty(options.window, 'donteval', {
|
||||
// Check that we're not trespassing on 'donteval'
|
||||
var win = options.requisition.environment.window;
|
||||
Object.defineProperty(win, 'donteval', {
|
||||
get: function() {
|
||||
assert.ok(false, 'donteval should not be used');
|
||||
console.trace();
|
||||
return { cant: '', touch: '', 'this': '' };
|
||||
},
|
||||
enumerable: true,
|
||||
configurable : true
|
||||
configurable: true
|
||||
});
|
||||
javascript.setGlobalObject(options.window);
|
||||
};
|
||||
|
||||
exports.shutdown = function(options) {
|
||||
if (options.isNoDom) {
|
||||
if (jsTestDisallowed(options)) {
|
||||
return;
|
||||
}
|
||||
|
||||
javascript.setGlobalObject(tempWindow);
|
||||
tempWindow = undefined;
|
||||
delete options.window.donteval;
|
||||
delete options.requisition.environment.window.donteval;
|
||||
};
|
||||
|
||||
function jsTestAllowed(options) {
|
||||
return options.isRemote || options.isNoDom ||
|
||||
function jsTestDisallowed(options) {
|
||||
return options.isRemote || // Altering the environment (which isn't remoted)
|
||||
options.isNode ||
|
||||
options.requisition.system.commands.get('{') == null;
|
||||
}
|
||||
|
||||
exports.testBasic = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipRemainingIf: jsTestAllowed,
|
||||
skipRemainingIf: jsTestDisallowed,
|
||||
setup: '{',
|
||||
check: {
|
||||
input: '{',
|
||||
@@ -236,7 +218,7 @@ exports.testBasic = function(options) {
|
||||
exports.testDocument = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipRemainingIf: jsTestAllowed,
|
||||
skipRemainingIf: jsTestDisallowed,
|
||||
setup: '{ docu',
|
||||
check: {
|
||||
input: '{ docu',
|
||||
@@ -315,7 +297,8 @@ exports.testDocument = function(options) {
|
||||
command: { name: '{' },
|
||||
javascript: {
|
||||
value: 'document.title',
|
||||
arg: '{ document.title ',
|
||||
// arg: '{ document.title ',
|
||||
// Node/JSDom gets this wrong and omits the trailing space. Why?
|
||||
status: 'VALID',
|
||||
message: ''
|
||||
}
|
||||
@@ -348,14 +331,9 @@ exports.testDocument = function(options) {
|
||||
};
|
||||
|
||||
exports.testDonteval = function(options) {
|
||||
if (!options.isNoDom) {
|
||||
// nodom causes an eval here, maybe that's node/v8?
|
||||
assert.ok('donteval' in options.window, 'donteval exists');
|
||||
}
|
||||
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipRemainingIf: jsTestAllowed,
|
||||
skipRemainingIf: true, // Commented out until we fix non-enumerable props
|
||||
setup: '{ don',
|
||||
check: {
|
||||
input: '{ don',
|
||||
@@ -476,7 +454,7 @@ exports.testDonteval = function(options) {
|
||||
exports.testExec = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipRemainingIf: jsTestAllowed,
|
||||
skipRemainingIf: jsTestDisallowed,
|
||||
setup: '{ 1+1',
|
||||
check: {
|
||||
input: '{ 1+1',
|
||||
|
||||
@@ -15,46 +15,19 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testKeyboard1.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_keyboard1.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
var javascript = require('gcli/types/javascript');
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
var tempWindow;
|
||||
|
||||
exports.setup = function(options) {
|
||||
tempWindow = javascript.getGlobalObject();
|
||||
javascript.setGlobalObject(options.window);
|
||||
};
|
||||
|
||||
exports.shutdown = function(options) {
|
||||
javascript.setGlobalObject(tempWindow);
|
||||
tempWindow = undefined;
|
||||
};
|
||||
|
||||
exports.testSimple = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
@@ -75,16 +48,12 @@ exports.testSimple = function(options) {
|
||||
exports.testScript = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipIf: function commandJsMissing() {
|
||||
return options.requisition.system.commands.get('{') == null;
|
||||
},
|
||||
skipRemainingIf: options.isRemote ||
|
||||
options.requisition.system.commands.get('{') == null,
|
||||
setup: '{ wind<TAB>',
|
||||
check: { input: '{ window' }
|
||||
},
|
||||
{
|
||||
skipIf: function commandJsMissing() {
|
||||
return options.requisition.system.commands.get('{') == null;
|
||||
},
|
||||
setup: '{ window.docum<TAB>',
|
||||
check: { input: '{ window.document' }
|
||||
}
|
||||
@@ -94,9 +63,8 @@ exports.testScript = function(options) {
|
||||
exports.testJsdom = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipIf: function jsDomOrCommandJsMissing() {
|
||||
return options.requisition.system.commands.get('{') == null;
|
||||
},
|
||||
skipIf: options.isRemote ||
|
||||
options.requisition.system.commands.get('{') == null,
|
||||
setup: '{ window.document.titl<TAB>',
|
||||
check: { input: '{ window.document.title ' }
|
||||
}
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testKeyboard2.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_keyboard2.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testIncr = function(options) {
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testKeyboard3.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_keyboard3.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testDecr = function(options) {
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testKeyboard4.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_keyboard4.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testIncrFloat = function(options) {
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testKeyboard5.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_keyboard5.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testCompleteDown = function(options) {
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testKeyboard6.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_keyboard6.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testCompleteUp = function(options) {
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testMenu.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_menu.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testOptions = function(options) {
|
||||
|
||||
@@ -15,49 +15,22 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testNode.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_node.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
var nodetype = require('gcli/types/node');
|
||||
|
||||
exports.setup = function(options) {
|
||||
if (options.window) {
|
||||
nodetype.setDocument(options.window.document);
|
||||
}
|
||||
};
|
||||
|
||||
exports.shutdown = function(options) {
|
||||
nodetype.unsetDocument();
|
||||
};
|
||||
|
||||
exports.testNode = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipRemainingIf: options.isNoDom,
|
||||
setup: 'tse ',
|
||||
check: {
|
||||
input: 'tse ',
|
||||
@@ -165,11 +138,8 @@ exports.testNode = function(options) {
|
||||
};
|
||||
|
||||
exports.testNodeDom = function(options) {
|
||||
var requisition = options.requisition;
|
||||
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipRemainingIf: options.isNoDom,
|
||||
setup: 'tse :root',
|
||||
check: {
|
||||
input: 'tse :root',
|
||||
@@ -202,10 +172,12 @@ exports.testNodeDom = function(options) {
|
||||
nodes2: { status: 'VALID' }
|
||||
}
|
||||
},
|
||||
post: function() {
|
||||
assert.is(requisition.getAssignment('node').value.tagName,
|
||||
'HTML',
|
||||
'root id');
|
||||
exec: {
|
||||
},
|
||||
post: function(output) {
|
||||
if (!options.isRemote) {
|
||||
assert.is(output.args.node.tagName, 'HTML', ':root tagName');
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -234,11 +206,8 @@ exports.testNodeDom = function(options) {
|
||||
};
|
||||
|
||||
exports.testNodes = function(options) {
|
||||
var requisition = options.requisition;
|
||||
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipRemainingIf: options.isNoDom,
|
||||
setup: 'tse :root --nodes *',
|
||||
check: {
|
||||
input: 'tse :root --nodes *',
|
||||
@@ -253,10 +222,18 @@ exports.testNodes = function(options) {
|
||||
nodes2: { status: 'VALID' }
|
||||
}
|
||||
},
|
||||
post: function() {
|
||||
assert.is(requisition.getAssignment('node').value.tagName,
|
||||
'HTML',
|
||||
'#gcli-input id');
|
||||
exec: {
|
||||
},
|
||||
post: function(output) {
|
||||
if (!options.isRemote) {
|
||||
assert.is(output.args.node.tagName, 'HTML', ':root tagName');
|
||||
assert.ok(output.args.nodes.length > 3, 'nodes length');
|
||||
assert.is(output.args.nodes2.length, 0, 'nodes2 length');
|
||||
}
|
||||
|
||||
assert.is(output.data.args.node, ':root', 'node data');
|
||||
assert.is(output.data.args.nodes, '*', 'nodes data');
|
||||
assert.is(output.data.args.nodes2, 'Error', 'nodes2 data');
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -275,10 +252,18 @@ exports.testNodes = function(options) {
|
||||
nodes2: { arg: ' --nodes2 div', status: 'VALID' }
|
||||
}
|
||||
},
|
||||
post: function() {
|
||||
assert.is(requisition.getAssignment('node').value.tagName,
|
||||
'HTML',
|
||||
'root id');
|
||||
exec: {
|
||||
},
|
||||
post: function(output) {
|
||||
if (!options.isRemote) {
|
||||
assert.is(output.args.node.tagName, 'HTML', ':root tagName');
|
||||
assert.is(output.args.nodes.length, 0, 'nodes length');
|
||||
assert.is(output.args.nodes2.item(0).tagName, 'DIV', 'div tagName');
|
||||
}
|
||||
|
||||
assert.is(output.data.args.node, ':root', 'node data');
|
||||
assert.is(output.data.args.nodes, 'Error', 'nodes data');
|
||||
assert.is(output.data.args.nodes2, 'div', 'nodes2 data');
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -305,13 +290,6 @@ exports.testNodes = function(options) {
|
||||
},
|
||||
nodes2: { arg: '', status: 'VALID', message: '' }
|
||||
}
|
||||
},
|
||||
post: function() {
|
||||
/*
|
||||
assert.is(requisition.getAssignment('nodes2').value.constructor.name,
|
||||
'NodeList',
|
||||
'#gcli-input id');
|
||||
*/
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -333,16 +311,6 @@ exports.testNodes = function(options) {
|
||||
nodes: { arg: '', status: 'VALID', message: '' },
|
||||
nodes2: { arg: ' --nodes2 ffff', status: 'VALID', message: '' }
|
||||
}
|
||||
},
|
||||
post: function() {
|
||||
/*
|
||||
assert.is(requisition.getAssignment('nodes').value.constructor.name,
|
||||
'NodeList',
|
||||
'#gcli-input id');
|
||||
assert.is(requisition.getAssignment('nodes2').value.constructor.name,
|
||||
'NodeList',
|
||||
'#gcli-input id');
|
||||
*/
|
||||
}
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testPref1.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_pref1.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testPrefShowStatus = function(options) {
|
||||
@@ -67,7 +52,7 @@ exports.testPrefShowStatus = function(options) {
|
||||
setup: 'pref show ',
|
||||
check: {
|
||||
typed: 'pref show ',
|
||||
hints: 'allowSet',
|
||||
hints: 'eagerHelper',
|
||||
markup: 'VVVVVVVVVV',
|
||||
status: 'ERROR'
|
||||
}
|
||||
@@ -144,7 +129,7 @@ exports.testPrefSetStatus = function(options) {
|
||||
setup: 'pref set ',
|
||||
check: {
|
||||
typed: 'pref set ',
|
||||
hints: 'allowSet <value>',
|
||||
hints: 'eagerHelper <value>',
|
||||
markup: 'VVVVVVVVV',
|
||||
status: 'ERROR'
|
||||
}
|
||||
@@ -159,6 +144,7 @@ exports.testPrefSetStatus = function(options) {
|
||||
}
|
||||
},
|
||||
{
|
||||
skipIf: options.isRemote,
|
||||
setup: 'pref set tempTBool 4',
|
||||
check: {
|
||||
typed: 'pref set tempTBool 4',
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testPref2.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_pref2.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
var mockSettings = require('./mockSettings');
|
||||
@@ -55,10 +40,6 @@ exports.testPrefExec = function(options) {
|
||||
return;
|
||||
}
|
||||
|
||||
var allowSet = settings.getSetting('allowSet');
|
||||
var initialAllowSet = allowSet.value;
|
||||
allowSet.value = false;
|
||||
|
||||
assert.is(mockSettings.tempNumber.value, 42, 'set to 42');
|
||||
|
||||
return helpers.audit(options, [
|
||||
@@ -73,7 +54,6 @@ exports.testPrefExec = function(options) {
|
||||
}
|
||||
},
|
||||
{
|
||||
skipRemainingIf: options.isNoDom,
|
||||
setup: 'pref set tempNumber 4',
|
||||
check: {
|
||||
input: 'pref set tempNumber 4',
|
||||
@@ -98,16 +78,6 @@ exports.testPrefExec = function(options) {
|
||||
}
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: [ /void your warranty/, /I promise/ ]
|
||||
},
|
||||
post: function() {
|
||||
assert.is(mockSettings.tempNumber.value, 42, 'still set to 42');
|
||||
allowSet.value = true;
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: 'pref set tempNumber 4',
|
||||
exec: {
|
||||
output: ''
|
||||
},
|
||||
@@ -128,8 +98,6 @@ exports.testPrefExec = function(options) {
|
||||
},
|
||||
post: function() {
|
||||
assert.is(mockSettings.tempNumber.value, 42, 'reset to 42');
|
||||
|
||||
allowSet.value = initialAllowSet;
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testRemoteWs.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_remotews.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
@@ -83,8 +68,8 @@ exports.testRemoteWebsocket = function(options) {
|
||||
check: {
|
||||
args: {
|
||||
prefix: {
|
||||
value: function(connection) {
|
||||
assert.is(connection.prefix, 'remote', 'disconnecting remote');
|
||||
value: function(front) {
|
||||
assert.is(front.prefix, 'remote', 'disconnecting remote');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -112,8 +97,8 @@ exports.testRemoteWebsocket = function(options) {
|
||||
check: {
|
||||
args: {
|
||||
prefix: {
|
||||
value: function(connection) {
|
||||
assert.is(connection.prefix, 'remote', 'disconnecting remote');
|
||||
value: function(front) {
|
||||
assert.is(front.prefix, 'remote', 'disconnecting remote');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -466,8 +451,8 @@ exports.testRemoteWebsocket = function(options) {
|
||||
unassigned: [ ],
|
||||
args: {
|
||||
prefix: {
|
||||
value: function(connection) {
|
||||
assert.is(connection.prefix, 'remote', 'disconnecting remote');
|
||||
value: function(front) {
|
||||
assert.is(front.prefix, 'remote', 'disconnecting remote');
|
||||
},
|
||||
arg: ' remote',
|
||||
status: 'VALID',
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testRemoteXhr.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_remotexhr.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
@@ -83,8 +68,8 @@ exports.testRemoteXhr = function(options) {
|
||||
check: {
|
||||
args: {
|
||||
prefix: {
|
||||
value: function(connection) {
|
||||
assert.is(connection.prefix, 'remote', 'disconnecting remote');
|
||||
value: function(front) {
|
||||
assert.is(front.prefix, 'remote', 'disconnecting remote');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -112,8 +97,8 @@ exports.testRemoteXhr = function(options) {
|
||||
check: {
|
||||
args: {
|
||||
prefix: {
|
||||
value: function(connection) {
|
||||
assert.is(connection.prefix, 'remote', 'disconnecting remote');
|
||||
value: function(front) {
|
||||
assert.is(front.prefix, 'remote', 'disconnecting remote');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -466,8 +451,8 @@ exports.testRemoteXhr = function(options) {
|
||||
unassigned: [ ],
|
||||
args: {
|
||||
prefix: {
|
||||
value: function(connection) {
|
||||
assert.is(connection.prefix, 'remote', 'disconnecting remote');
|
||||
value: function(front) {
|
||||
assert.is(front.prefix, 'remote', 'disconnecting remote');
|
||||
},
|
||||
arg: ' remote',
|
||||
status: 'VALID',
|
||||
|
||||
@@ -15,31 +15,17 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testResource.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_resource.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
// var assert = require('../testharness/assert');
|
||||
|
||||
var Promise = require('gcli/util/promise').Promise;
|
||||
@@ -47,84 +33,85 @@ var util = require('gcli/util/util');
|
||||
var resource = require('gcli/types/resource');
|
||||
var Status = require('gcli/types/types').Status;
|
||||
|
||||
|
||||
var tempDocument;
|
||||
|
||||
exports.setup = function(options) {
|
||||
tempDocument = resource.getDocument();
|
||||
if (options.window) {
|
||||
resource.setDocument(options.window.document);
|
||||
}
|
||||
};
|
||||
|
||||
exports.shutdown = function(options) {
|
||||
resource.setDocument(tempDocument);
|
||||
tempDocument = undefined;
|
||||
exports.testCommand = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
setup: 'tsres ',
|
||||
check: {
|
||||
predictionsContains: [ 'inline-css' ],
|
||||
}
|
||||
}
|
||||
]);
|
||||
};
|
||||
|
||||
exports.testAllPredictions1 = function(options) {
|
||||
if (options.isFirefox || options.isNoDom) {
|
||||
assert.log('Skipping checks due to firefox document.stylsheets support.');
|
||||
if (options.isRemote) {
|
||||
assert.log('Can\'t directly test remote types locally.');
|
||||
return;
|
||||
}
|
||||
|
||||
var context = options.requisition.conversionContext;
|
||||
var resource = options.requisition.system.types.createType('resource');
|
||||
return resource.getLookup().then(function(opts) {
|
||||
return resource.getLookup(context).then(function(opts) {
|
||||
assert.ok(opts.length > 1, 'have all resources');
|
||||
|
||||
return util.promiseEach(opts, function(prediction) {
|
||||
return checkPrediction(resource, prediction);
|
||||
return checkPrediction(resource, prediction, context);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
exports.testScriptPredictions = function(options) {
|
||||
if (options.isFirefox || options.isNoDom) {
|
||||
assert.log('Skipping checks due to firefox document.stylsheets support.');
|
||||
if (options.isRemote || options.isNode) {
|
||||
assert.log('Can\'t directly test remote types locally.');
|
||||
return;
|
||||
}
|
||||
|
||||
var context = options.requisition.conversionContext;
|
||||
var types = options.requisition.system.types;
|
||||
var resource = types.createType({ name: 'resource', include: 'text/javascript' });
|
||||
return resource.getLookup().then(function(opts) {
|
||||
return resource.getLookup(context).then(function(opts) {
|
||||
assert.ok(opts.length > 1, 'have js resources');
|
||||
|
||||
return util.promiseEach(opts, function(prediction) {
|
||||
return checkPrediction(resource, prediction);
|
||||
return checkPrediction(resource, prediction, context);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
exports.testStylePredictions = function(options) {
|
||||
if (options.isFirefox || options.isNoDom) {
|
||||
assert.log('Skipping checks due to firefox document.stylsheets support.');
|
||||
if (options.isRemote) {
|
||||
assert.log('Can\'t directly test remote types locally.');
|
||||
return;
|
||||
}
|
||||
|
||||
var context = options.requisition.conversionContext;
|
||||
var types = options.requisition.system.types;
|
||||
var resource = types.createType({ name: 'resource', include: 'text/css' });
|
||||
return resource.getLookup().then(function(opts) {
|
||||
return resource.getLookup(context).then(function(opts) {
|
||||
assert.ok(opts.length >= 1, 'have css resources');
|
||||
|
||||
return util.promiseEach(opts, function(prediction) {
|
||||
return checkPrediction(resource, prediction);
|
||||
return checkPrediction(resource, prediction, context);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
exports.testAllPredictions2 = function(options) {
|
||||
if (options.isNoDom) {
|
||||
assert.log('Skipping checks due to nodom document.stylsheets support.');
|
||||
if (options.isRemote) {
|
||||
assert.log('Can\'t directly test remote types locally.');
|
||||
return;
|
||||
}
|
||||
|
||||
var context = options.requisition.conversionContext;
|
||||
var types = options.requisition.system.types;
|
||||
|
||||
var scriptRes = types.createType({ name: 'resource', include: 'text/javascript' });
|
||||
return scriptRes.getLookup().then(function(scriptOptions) {
|
||||
return scriptRes.getLookup(context).then(function(scriptOptions) {
|
||||
var styleRes = types.createType({ name: 'resource', include: 'text/css' });
|
||||
return styleRes.getLookup().then(function(styleOptions) {
|
||||
return styleRes.getLookup(context).then(function(styleOptions) {
|
||||
var allRes = types.createType({ name: 'resource' });
|
||||
return allRes.getLookup().then(function(allOptions) {
|
||||
return allRes.getLookup(context).then(function(allOptions) {
|
||||
assert.is(scriptOptions.length + styleOptions.length,
|
||||
allOptions.length,
|
||||
'split');
|
||||
@@ -134,27 +121,26 @@ exports.testAllPredictions2 = function(options) {
|
||||
};
|
||||
|
||||
exports.testAllPredictions3 = function(options) {
|
||||
if (options.isNoDom) {
|
||||
assert.log('Skipping checks due to nodom document.stylsheets support.');
|
||||
if (options.isRemote) {
|
||||
assert.log('Can\'t directly test remote types locally.');
|
||||
return;
|
||||
}
|
||||
|
||||
var context = options.requisition.conversionContext;
|
||||
var types = options.requisition.system.types;
|
||||
var res1 = types.createType({ name: 'resource' });
|
||||
return res1.getLookup().then(function(options1) {
|
||||
return res1.getLookup(context).then(function(options1) {
|
||||
var res2 = types.createType('resource');
|
||||
return res2.getLookup().then(function(options2) {
|
||||
return res2.getLookup(context).then(function(options2) {
|
||||
assert.is(options1.length, options2.length, 'type spec');
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
function checkPrediction(res, prediction) {
|
||||
function checkPrediction(res, prediction, context) {
|
||||
var name = prediction.name;
|
||||
var value = prediction.value;
|
||||
|
||||
// resources don't need context so cheat and pass in null
|
||||
var context = null;
|
||||
return res.parseString(name, context).then(function(conversion) {
|
||||
assert.is(conversion.getStatus(), Status.VALID, 'status VALID for ' + name);
|
||||
assert.is(conversion.value, value, 'value for ' + name);
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testShort.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_short.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testBasic = function(options) {
|
||||
|
||||
@@ -14,31 +14,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testSpell.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_spell.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
var spell = require('gcli/util/spell');
|
||||
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testSplit.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_split.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
|
||||
var cli = require('gcli/cli');
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testString.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_string.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testNewLine = function(options) {
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testTokenize.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_tokenize.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
var cli = require('gcli/cli');
|
||||
|
||||
|
||||
@@ -15,40 +15,20 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testTooltip.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_tooltip.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testActivate = function(options) {
|
||||
if (!options.display) {
|
||||
assert.log('No display. Skipping activate tests');
|
||||
return;
|
||||
}
|
||||
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
setup: ' ',
|
||||
|
||||
@@ -15,49 +15,25 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testTypes.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_types.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
var util = require('gcli/util/util');
|
||||
var Promise = require('gcli/util/promise').Promise;
|
||||
var nodetype = require('gcli/types/node');
|
||||
|
||||
exports.setup = function(options) {
|
||||
if (options.window) {
|
||||
nodetype.setDocument(options.window.document);
|
||||
}
|
||||
};
|
||||
|
||||
exports.shutdown = function(options) {
|
||||
nodetype.unsetDocument();
|
||||
};
|
||||
|
||||
function forEachType(options, typeSpec, callback) {
|
||||
function forEachType(options, templateTypeSpec, callback) {
|
||||
var types = options.requisition.system.types;
|
||||
return util.promiseEach(types.getTypeNames(), function(name) {
|
||||
var typeSpec = {};
|
||||
util.copyProperties(templateTypeSpec, typeSpec);
|
||||
typeSpec.name = name;
|
||||
typeSpec.requisition = options.requisition;
|
||||
|
||||
@@ -79,29 +55,19 @@ function forEachType(options, typeSpec, callback) {
|
||||
else if (name === 'union') {
|
||||
typeSpec.alternatives = [{ name: 'string' }];
|
||||
}
|
||||
else if (options.isRemote) {
|
||||
if (name === 'node' || name === 'nodelist') {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var type = types.createType(typeSpec);
|
||||
var reply = callback(type);
|
||||
return Promise.resolve(reply).then(function(value) {
|
||||
// Clean up
|
||||
delete typeSpec.name;
|
||||
delete typeSpec.requisition;
|
||||
delete typeSpec.data;
|
||||
delete typeSpec.delegateType;
|
||||
delete typeSpec.subtype;
|
||||
delete typeSpec.alternatives;
|
||||
|
||||
return value;
|
||||
});
|
||||
return Promise.resolve(reply);
|
||||
});
|
||||
}
|
||||
|
||||
exports.testDefault = function(options) {
|
||||
if (options.isNoDom) {
|
||||
assert.log('Skipping tests due to issues with resource type.');
|
||||
return;
|
||||
}
|
||||
|
||||
return forEachType(options, {}, function(type) {
|
||||
var context = options.requisition.executionContext;
|
||||
var blank = type.getBlank(context).value;
|
||||
|
||||
@@ -15,31 +15,16 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testUnion.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_union.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
@@ -126,7 +111,7 @@ exports.testDefault = function(options) {
|
||||
}
|
||||
},
|
||||
{
|
||||
skipIf: options.isPhantomjs, // Phantom goes weird with predictions
|
||||
skipIf: options.isPhantomjs, // PhantomJS gets predictions wrong
|
||||
setup: 'unionc1 5',
|
||||
check: {
|
||||
input: 'unionc1 5',
|
||||
@@ -160,7 +145,7 @@ exports.testDefault = function(options) {
|
||||
}
|
||||
},
|
||||
{
|
||||
skipRemainingIf: options.isPhantomjs,
|
||||
skipIf: options.isPhantomjs, // PhantomJS URL type is broken
|
||||
setup: 'unionc2 on',
|
||||
check: {
|
||||
input: 'unionc2 on',
|
||||
|
||||
@@ -15,38 +15,23 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var exports = {};
|
||||
|
||||
var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testUrl.js</p>";
|
||||
const exports = {};
|
||||
|
||||
function test() {
|
||||
return Task.spawn(function() {
|
||||
let options = yield helpers.openTab(TEST_URI);
|
||||
yield helpers.openToolbar(options);
|
||||
gcli.addItems(mockCommands.items);
|
||||
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
gcli.removeItems(mockCommands.items);
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
helpers.runTestModule(exports, "browser_gcli_url.js");
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// var assert = require('../testharness/assert');
|
||||
// var helpers = require('./helpers');
|
||||
|
||||
exports.testDefault = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
skipRemainingIf: options.isPhantomjs,
|
||||
skipRemainingIf: options.isPhantomjs, // PhantomJS URL type is broken
|
||||
setup: 'urlc',
|
||||
check: {
|
||||
input: 'urlc',
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
// A copy of this code exists in firefox mochitests. They should be kept
|
||||
// in sync. Hence the exports synonym for non AMD contexts.
|
||||
var { helpers, gcli, assert } = (function() {
|
||||
var { helpers, assert } = (function() {
|
||||
|
||||
var helpers = {};
|
||||
|
||||
@@ -30,23 +30,24 @@ var util = require('gcli/util/util');
|
||||
var Promise = require('gcli/util/promise').Promise;
|
||||
var cli = require('gcli/cli');
|
||||
var KeyEvent = require('gcli/util/util').KeyEvent;
|
||||
var gcli = require('gcli/index');
|
||||
|
||||
const { GcliFront } = require("devtools/server/actors/gcli");
|
||||
|
||||
/**
|
||||
* See notes in helpers.checkOptions()
|
||||
*/
|
||||
var createFFDisplayAutomator = function(display) {
|
||||
var createDeveloperToolbarAutomator = function(toolbar) {
|
||||
var automator = {
|
||||
setInput: function(typed) {
|
||||
return display.inputter.setInput(typed);
|
||||
return toolbar.inputter.setInput(typed);
|
||||
},
|
||||
|
||||
setCursor: function(cursor) {
|
||||
return display.inputter.setCursor(cursor);
|
||||
return toolbar.inputter.setCursor(cursor);
|
||||
},
|
||||
|
||||
focus: function() {
|
||||
return display.inputter.focus();
|
||||
return toolbar.inputter.focus();
|
||||
},
|
||||
|
||||
fakeKey: function(keyCode) {
|
||||
@@ -56,36 +57,36 @@ var createFFDisplayAutomator = function(display) {
|
||||
timeStamp: new Date().getTime()
|
||||
};
|
||||
|
||||
display.inputter.onKeyDown(fakeEvent);
|
||||
toolbar.inputter.onKeyDown(fakeEvent);
|
||||
|
||||
if (keyCode === KeyEvent.DOM_VK_BACK_SPACE) {
|
||||
var input = display.inputter.element;
|
||||
var input = toolbar.inputter.element;
|
||||
input.value = input.value.slice(0, -1);
|
||||
}
|
||||
|
||||
return display.inputter.handleKeyUp(fakeEvent);
|
||||
return toolbar.inputter.handleKeyUp(fakeEvent);
|
||||
},
|
||||
|
||||
getInputState: function() {
|
||||
return display.inputter.getInputState();
|
||||
return toolbar.inputter.getInputState();
|
||||
},
|
||||
|
||||
getCompleterTemplateData: function() {
|
||||
return display.completer._getCompleterTemplateData();
|
||||
return toolbar.completer._getCompleterTemplateData();
|
||||
},
|
||||
|
||||
getErrorMessage: function() {
|
||||
return display.tooltip.errorEle.textContent;
|
||||
return toolbar.tooltip.errorEle.textContent;
|
||||
}
|
||||
};
|
||||
|
||||
Object.defineProperty(automator, 'focusManager', {
|
||||
get: function() { return display.focusManager; },
|
||||
get: function() { return toolbar.focusManager; },
|
||||
enumerable: true
|
||||
});
|
||||
|
||||
Object.defineProperty(automator, 'field', {
|
||||
get: function() { return display.tooltip.field; },
|
||||
get: function() { return toolbar.tooltip.field; },
|
||||
enumerable: true
|
||||
});
|
||||
|
||||
@@ -223,9 +224,9 @@ helpers.openToolbar = function(options) {
|
||||
options.chromeWindow = options.chromeWindow || window;
|
||||
|
||||
return options.chromeWindow.DeveloperToolbar.show(true).then(function() {
|
||||
var display = options.chromeWindow.DeveloperToolbar.display;
|
||||
options.automator = createFFDisplayAutomator(display);
|
||||
options.requisition = display.requisition;
|
||||
var toolbar = options.chromeWindow.DeveloperToolbar;
|
||||
options.automator = createDeveloperToolbarAutomator(toolbar);
|
||||
options.requisition = toolbar.requisition;
|
||||
return options;
|
||||
});
|
||||
};
|
||||
@@ -331,17 +332,17 @@ helpers.promiseify = function(functionWithLastParamCallback, scope) {
|
||||
* Warning: For use with Firefox Mochitests only.
|
||||
*
|
||||
* As addTab, but that also opens the developer toolbar. In addition a new
|
||||
* 'automator' property is added to the options object with the display from GCLI
|
||||
* in the developer toolbar
|
||||
* 'automator' property is added to the options object which uses the
|
||||
* developer toolbar
|
||||
*/
|
||||
helpers.addTabWithToolbar = function(url, callback, options) {
|
||||
return helpers.addTab(url, function(innerOptions) {
|
||||
var win = innerOptions.chromeWindow;
|
||||
|
||||
return win.DeveloperToolbar.show(true).then(function() {
|
||||
var display = win.DeveloperToolbar.display;
|
||||
innerOptions.automator = createFFDisplayAutomator(display);
|
||||
innerOptions.requisition = display.requisition;
|
||||
var toolbar = win.DeveloperToolbar;
|
||||
innerOptions.automator = createDeveloperToolbarAutomator(toolbar);
|
||||
innerOptions.requisition = toolbar.requisition;
|
||||
|
||||
var reply = callback.call(null, innerOptions);
|
||||
|
||||
@@ -376,7 +377,7 @@ helpers.runTests = function(options, tests) {
|
||||
|
||||
var recover = function(error) {
|
||||
ok(false, error);
|
||||
console.error(error);
|
||||
console.error(error, error.stack);
|
||||
};
|
||||
|
||||
info("SETUP");
|
||||
@@ -410,6 +411,87 @@ helpers.runTests = function(options, tests) {
|
||||
}, recover);
|
||||
};
|
||||
|
||||
const MOCK_COMMANDS_URI = "chrome://mochitests/content/browser/toolkit/devtools/commandline/test/mockCommands.js";
|
||||
|
||||
const defer = function() {
|
||||
const deferred = { };
|
||||
deferred.promise = new Promise(function(resolve, reject) {
|
||||
deferred.resolve = resolve;
|
||||
deferred.reject = reject;
|
||||
});
|
||||
return deferred;
|
||||
};
|
||||
|
||||
/**
|
||||
* This does several actions associated with running a GCLI test in mochitest
|
||||
* 1. Create a new tab containing basic markup for GCLI tests
|
||||
* 2. Open the developer toolbar
|
||||
* 3. Register the mock commands with the server process
|
||||
* 4. Wait for the proxy commands to be auto-regitstered with the client
|
||||
* 5. Register the mock converters with the client process
|
||||
* 6. Run all the tests
|
||||
* 7. Tear down all the setup
|
||||
*/
|
||||
helpers.runTestModule = function(exports, name) {
|
||||
return Task.spawn(function*() {
|
||||
const uri = "data:text/html;charset=utf-8," +
|
||||
"<style>div{color:red;}</style>" +
|
||||
"<div id='gcli-root'>" + name + "</div>";
|
||||
|
||||
const options = yield helpers.openTab(uri);
|
||||
options.isRemote = true;
|
||||
|
||||
yield helpers.openToolbar(options);
|
||||
|
||||
const system = options.requisition.system;
|
||||
|
||||
// Register a one time listener with the local set of commands
|
||||
const addedDeferred = defer();
|
||||
const removedDeferred = defer();
|
||||
let state = 'preAdd'; // Then 'postAdd' then 'postRemove'
|
||||
|
||||
system.commands.onCommandsChange.add(function(ev) {
|
||||
if (system.commands.get('tsslow') != null) {
|
||||
if (state === 'preAdd') {
|
||||
addedDeferred.resolve();
|
||||
state = 'postAdd';
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (state === 'postAdd') {
|
||||
removedDeferred.resolve();
|
||||
state = 'postRemove';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Send a message to add the commands to the content process
|
||||
const front = yield GcliFront.create(options.target);
|
||||
yield front._testOnly_addItemsByModule(MOCK_COMMANDS_URI);
|
||||
|
||||
// This will cause the local set of commands to be updated with the
|
||||
// command proxies, wait for that to complete.
|
||||
yield addedDeferred.promise;
|
||||
|
||||
// Now we need to add the converters to the local GCLI
|
||||
const converters = mockCommands.items.filter(item => item.item === 'converter');
|
||||
system.addItems(converters);
|
||||
|
||||
// Next run the tests
|
||||
yield helpers.runTests(options, exports);
|
||||
|
||||
// Finally undo the mock commands and converters
|
||||
system.removeItems(converters);
|
||||
const removePromise = system.commands.onCommandsChange.once();
|
||||
yield front._testOnly_removeItemsByModule(MOCK_COMMANDS_URI);
|
||||
yield removedDeferred.promise;
|
||||
|
||||
// And close everything down
|
||||
yield helpers.closeToolbar(options);
|
||||
yield helpers.closeTab(options);
|
||||
}).then(finish, helpers.handleError);
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
@@ -759,15 +841,15 @@ helpers._check = function(options, name, checks) {
|
||||
var outstanding = [];
|
||||
var suffix = name ? ' (for \'' + name + '\')' : '';
|
||||
|
||||
if (!options.isNoDom && 'input' in checks) {
|
||||
if (!options.isNode && 'input' in checks) {
|
||||
assert.is(helpers._actual.input(options), checks.input, 'input' + suffix);
|
||||
}
|
||||
|
||||
if (!options.isNoDom && 'cursor' in checks) {
|
||||
if (!options.isNode && 'cursor' in checks) {
|
||||
assert.is(helpers._actual.cursor(options), checks.cursor, 'cursor' + suffix);
|
||||
}
|
||||
|
||||
if (!options.isNoDom && 'current' in checks) {
|
||||
if (!options.isNode && 'current' in checks) {
|
||||
assert.is(helpers._actual.current(options), checks.current, 'current' + suffix);
|
||||
}
|
||||
|
||||
@@ -775,18 +857,18 @@ helpers._check = function(options, name, checks) {
|
||||
assert.is(helpers._actual.status(options), checks.status, 'status' + suffix);
|
||||
}
|
||||
|
||||
if (!options.isNoDom && 'markup' in checks) {
|
||||
if (!options.isNode && 'markup' in checks) {
|
||||
assert.is(helpers._actual.markup(options), checks.markup, 'markup' + suffix);
|
||||
}
|
||||
|
||||
if (!options.isNoDom && 'hints' in checks) {
|
||||
if (!options.isNode && 'hints' in checks) {
|
||||
var hintCheck = function(actualHints) {
|
||||
assert.is(actualHints, checks.hints, 'hints' + suffix);
|
||||
};
|
||||
outstanding.push(helpers._actual.hints(options).then(hintCheck));
|
||||
}
|
||||
|
||||
if (!options.isNoDom && 'predictions' in checks) {
|
||||
if (!options.isNode && 'predictions' in checks) {
|
||||
var predictionsCheck = function(actualPredictions) {
|
||||
helpers.arrayIs(actualPredictions,
|
||||
checks.predictions,
|
||||
@@ -795,12 +877,16 @@ helpers._check = function(options, name, checks) {
|
||||
outstanding.push(helpers._actual.predictions(options).then(predictionsCheck));
|
||||
}
|
||||
|
||||
if (!options.isNoDom && 'predictionsContains' in checks) {
|
||||
if (!options.isNode && 'predictionsContains' in checks) {
|
||||
var containsCheck = function(actualPredictions) {
|
||||
checks.predictionsContains.forEach(function(prediction) {
|
||||
var index = actualPredictions.indexOf(prediction);
|
||||
assert.ok(index !== -1,
|
||||
'predictionsContains:' + prediction + suffix);
|
||||
if (index === -1) {
|
||||
log('Actual predictions (' + actualPredictions.length + '): ' +
|
||||
actualPredictions.join(', '));
|
||||
}
|
||||
});
|
||||
};
|
||||
outstanding.push(helpers._actual.predictions(options).then(containsCheck));
|
||||
@@ -813,26 +899,26 @@ helpers._check = function(options, name, checks) {
|
||||
}
|
||||
|
||||
/* TODO: Fix this
|
||||
if (!options.isNoDom && 'tooltipState' in checks) {
|
||||
if (!options.isNode && 'tooltipState' in checks) {
|
||||
assert.is(helpers._actual.tooltipState(options),
|
||||
checks.tooltipState,
|
||||
'tooltipState' + suffix);
|
||||
}
|
||||
*/
|
||||
|
||||
if (!options.isNoDom && 'outputState' in checks) {
|
||||
if (!options.isNode && 'outputState' in checks) {
|
||||
assert.is(helpers._actual.outputState(options),
|
||||
checks.outputState,
|
||||
'outputState' + suffix);
|
||||
}
|
||||
|
||||
if (!options.isNoDom && 'options' in checks) {
|
||||
if (!options.isNode && 'options' in checks) {
|
||||
helpers.arrayIs(helpers._actual.options(options),
|
||||
checks.options,
|
||||
'options' + suffix);
|
||||
}
|
||||
|
||||
if (!options.isNoDom && 'error' in checks) {
|
||||
if (!options.isNode && 'error' in checks) {
|
||||
assert.is(helpers._actual.message(options), checks.error, 'error' + suffix);
|
||||
}
|
||||
|
||||
@@ -894,7 +980,7 @@ helpers._check = function(options, name, checks) {
|
||||
'arg.' + paramName + '.status' + suffix);
|
||||
}
|
||||
|
||||
if (!options.isNoDom && 'message' in check) {
|
||||
if (!options.isNode && 'message' in check) {
|
||||
if (typeof check.message.test === 'function') {
|
||||
assert.ok(check.message.test(assignment.message),
|
||||
'arg.' + paramName + '.message' + suffix);
|
||||
@@ -952,12 +1038,12 @@ helpers._exec = function(options, name, expected) {
|
||||
|
||||
var context = requisition.conversionContext;
|
||||
var convertPromise;
|
||||
if (options.isNoDom) {
|
||||
if (options.isNode) {
|
||||
convertPromise = output.convert('string', context);
|
||||
}
|
||||
else {
|
||||
convertPromise = output.convert('dom', context).then(function(node) {
|
||||
return node.textContent.trim();
|
||||
return (node == null) ? '' : node.textContent.trim();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1171,9 +1257,8 @@ helpers.audit = function(options, audits) {
|
||||
'';
|
||||
assert.log('Skipped ' + name + ' ' + skipReason);
|
||||
|
||||
// Tests need at least one pass, fail or todo. Let's create a dummy pass
|
||||
// in case there are none.
|
||||
ok(true, "Each test requires at least one pass, fail or todo so here is a pass.");
|
||||
// Tests need at least one pass, fail or todo. Create a dummy pass
|
||||
assert.ok(true, 'Each test requires at least one pass, fail or todo');
|
||||
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
@@ -1270,5 +1355,5 @@ function log(message) {
|
||||
}
|
||||
}
|
||||
|
||||
return { helpers: helpers, gcli: gcli, assert: assert };
|
||||
return { helpers: helpers, assert: assert };
|
||||
})();
|
||||
|
||||
@@ -15,16 +15,21 @@
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
// PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT
|
||||
|
||||
var Promise = require('gcli/util/promise').Promise;
|
||||
var mockCommands = {};
|
||||
|
||||
var mockCommands;
|
||||
if (typeof exports !== 'undefined') {
|
||||
// If we're being loaded via require();
|
||||
mockCommands = exports;
|
||||
}
|
||||
else {
|
||||
// If we're being loaded via loadScript in mochitest
|
||||
mockCommands = {};
|
||||
}
|
||||
|
||||
// We use an alias for exports here because this module is used in Firefox
|
||||
// mochitests where we don't have define/require
|
||||
@@ -41,32 +46,70 @@ mockCommands.shutdown = function(requisition) {
|
||||
};
|
||||
|
||||
function createExec(name) {
|
||||
return function(args, executionContext) {
|
||||
var argsOut = Object.keys(args).map(function(key) {
|
||||
return key + '=' + args[key];
|
||||
}).join(', ');
|
||||
return 'Exec: ' + name + ' ' + argsOut;
|
||||
return function(args, context) {
|
||||
var promises = [];
|
||||
|
||||
Object.keys(args).map(function(argName) {
|
||||
var value = args[argName];
|
||||
var type = this.getParameterByName(argName).type;
|
||||
var promise = Promise.resolve(type.stringify(value, context));
|
||||
promises.push(promise.then(function(str) {
|
||||
return { name: argName, value: str };
|
||||
}.bind(this)));
|
||||
}.bind(this));
|
||||
|
||||
return Promise.all(promises).then(function(data) {
|
||||
var argValues = {};
|
||||
data.forEach(function(entry) { argValues[entry.name] = entry.value; });
|
||||
|
||||
return context.typedData('testCommandOutput', {
|
||||
name: name,
|
||||
args: argValues
|
||||
});
|
||||
}.bind(this));
|
||||
};
|
||||
}
|
||||
|
||||
mockCommands.items = [
|
||||
{
|
||||
item: 'converter',
|
||||
from: 'json',
|
||||
to: 'string',
|
||||
exec: function(json, context) {
|
||||
return JSON.stringify(json, null, ' ');
|
||||
from: 'testCommandOutput',
|
||||
to: 'dom',
|
||||
exec: function(testCommandOutput, context) {
|
||||
var view = context.createView({
|
||||
data: testCommandOutput,
|
||||
html: '' +
|
||||
'<table>' +
|
||||
'<thead>' +
|
||||
'<tr>' +
|
||||
'<th colspan="3">Exec: ${name}</th>' +
|
||||
'</tr>' +
|
||||
'</thead>' +
|
||||
'<tbody>' +
|
||||
'<tr foreach="key in ${args}">' +
|
||||
'<td> ${key}</td>' +
|
||||
'<td>=</td>' +
|
||||
'<td>${args[key]}</td>' +
|
||||
'</tr>' +
|
||||
'</tbody>' +
|
||||
'</table>',
|
||||
options: {
|
||||
allowEval: true
|
||||
}
|
||||
});
|
||||
|
||||
return view.toDom(context.document);
|
||||
}
|
||||
},
|
||||
{
|
||||
item: 'converter',
|
||||
from: 'json',
|
||||
to: 'view',
|
||||
exec: function(json, context) {
|
||||
var html = JSON.stringify(json, null, ' ').replace(/\n/g, '<br/>');
|
||||
return {
|
||||
html: '<pre>' + html + '</pre>'
|
||||
};
|
||||
from: 'testCommandOutput',
|
||||
to: 'string',
|
||||
exec: function(testCommandOutput, context) {
|
||||
var argsOut = Object.keys(testCommandOutput.args).map(function(key) {
|
||||
return key + '=' + testCommandOutput.args[key];
|
||||
}).join(' ');
|
||||
return 'Exec: ' + testCommandOutput.name + ' ' + argsOut;
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -508,7 +551,7 @@ mockCommands.items = [
|
||||
exec: function(args, context) {
|
||||
if (args.method === 'reject') {
|
||||
return new Promise(function(resolve, reject) {
|
||||
setTimeout(function() {
|
||||
context.environment.window.setTimeout(function() {
|
||||
reject('rejected promise');
|
||||
}, 10);
|
||||
});
|
||||
@@ -516,7 +559,7 @@ mockCommands.items = [
|
||||
|
||||
if (args.method === 'rejecttyped') {
|
||||
return new Promise(function(resolve, reject) {
|
||||
setTimeout(function() {
|
||||
context.environment.window.setTimeout(function() {
|
||||
reject(context.typedData('number', 54));
|
||||
}, 10);
|
||||
});
|
||||
@@ -524,7 +567,7 @@ mockCommands.items = [
|
||||
|
||||
if (args.method === 'throwinpromise') {
|
||||
return new Promise(function(resolve, reject) {
|
||||
setTimeout(function() {
|
||||
context.environment.window.setTimeout(function() {
|
||||
resolve('should be lost');
|
||||
}, 10);
|
||||
}).then(function() {
|
||||
@@ -655,7 +698,7 @@ mockCommands.items = [
|
||||
name: 'selection',
|
||||
data: function(context) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
setTimeout(function() {
|
||||
context.environment.window.setTimeout(function() {
|
||||
resolve([
|
||||
'Shalom', 'Namasté', 'Hallo', 'Dydd-da',
|
||||
'Chào', 'Hej', 'Saluton', 'Sawubona'
|
||||
@@ -738,5 +781,16 @@ mockCommands.items = [
|
||||
exec: function(args, context) {
|
||||
return args;
|
||||
}
|
||||
},
|
||||
{
|
||||
item: 'command',
|
||||
name: 'tsres',
|
||||
params: [
|
||||
{
|
||||
name: 'resource',
|
||||
type: 'resource'
|
||||
}
|
||||
],
|
||||
exec: createExec('tsres'),
|
||||
}
|
||||
];
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"use strict";
|
||||
|
||||
const { Cc, Ci, Cu } = require("chrome");
|
||||
const gcli = require("gcli/index");
|
||||
const l10n = require("gcli/l10n");
|
||||
|
||||
loader.lazyImporter(this, "gDevTools", "resource://gre/modules/devtools/gDevTools.jsm");
|
||||
|
||||
@@ -67,8 +67,8 @@ function getAllSources(dbg) {
|
||||
*/
|
||||
exports.items.push({
|
||||
name: "break",
|
||||
description: gcli.lookup("breakDesc"),
|
||||
manual: gcli.lookup("breakManual")
|
||||
description: l10n.lookup("breakDesc"),
|
||||
manual: l10n.lookup("breakManual")
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -76,7 +76,9 @@ exports.items.push({
|
||||
*/
|
||||
exports.items.push({
|
||||
name: "break list",
|
||||
description: gcli.lookup("breaklistDesc"),
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
description: l10n.lookup("breaklistDesc"),
|
||||
returnType: "breakpoints",
|
||||
exec: function(args, context) {
|
||||
let dbg = getPanel(context, "jsdebugger", { ensureOpened: true });
|
||||
@@ -102,7 +104,7 @@ exports.items.push({
|
||||
} else {
|
||||
return context.createView({
|
||||
html: "<p>${message}</p>",
|
||||
data: { message: gcli.lookup("breaklistNone") }
|
||||
data: { message: l10n.lookup("breaklistNone") }
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -126,7 +128,7 @@ var breakListHtml = "" +
|
||||
" data-command='break del ${breakpoint.label}'" +
|
||||
" onclick='${onclick}'" +
|
||||
" ondblclick='${ondblclick}'>" +
|
||||
" " + gcli.lookup("breaklistOutRemove") + "</span>" +
|
||||
" " + l10n.lookup("breaklistOutRemove") + "</span>" +
|
||||
" </td>" +
|
||||
" </tr>" +
|
||||
" </tbody>" +
|
||||
@@ -141,16 +143,18 @@ var MAX_LABEL_LENGTH = 20;
|
||||
*/
|
||||
exports.items.push({
|
||||
name: "break add",
|
||||
description: gcli.lookup("breakaddDesc"),
|
||||
manual: gcli.lookup("breakaddManual")
|
||||
description: l10n.lookup("breakaddDesc"),
|
||||
manual: l10n.lookup("breakaddManual")
|
||||
});
|
||||
|
||||
/**
|
||||
* 'break add line' command
|
||||
*/
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "break add line",
|
||||
description: gcli.lookup("breakaddlineDesc"),
|
||||
description: l10n.lookup("breakaddlineDesc"),
|
||||
params: [
|
||||
{
|
||||
name: "file",
|
||||
@@ -160,19 +164,19 @@ exports.items.push({
|
||||
return getAllSources(getPanel(context, "jsdebugger"));
|
||||
}
|
||||
},
|
||||
description: gcli.lookup("breakaddlineFileDesc")
|
||||
description: l10n.lookup("breakaddlineFileDesc")
|
||||
},
|
||||
{
|
||||
name: "line",
|
||||
type: { name: "number", min: 1, step: 10 },
|
||||
description: gcli.lookup("breakaddlineLineDesc")
|
||||
description: l10n.lookup("breakaddlineLineDesc")
|
||||
}
|
||||
],
|
||||
returnType: "string",
|
||||
exec: function(args, context) {
|
||||
let dbg = getPanel(context, "jsdebugger");
|
||||
if (!dbg) {
|
||||
return gcli.lookup("debuggerStopped");
|
||||
return l10n.lookup("debuggerStopped");
|
||||
}
|
||||
|
||||
let deferred = context.defer();
|
||||
@@ -182,9 +186,9 @@ exports.items.push({
|
||||
let position = { actor: item.value, line: args.line };
|
||||
|
||||
dbg.addBreakpoint(position).then(() => {
|
||||
deferred.resolve(gcli.lookup("breakaddAdded"));
|
||||
deferred.resolve(l10n.lookup("breakaddAdded"));
|
||||
}, aError => {
|
||||
deferred.resolve(gcli.lookupFormat("breakaddFailed", [aError]));
|
||||
deferred.resolve(l10n.lookupFormat("breakaddFailed", [aError]));
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
@@ -195,8 +199,10 @@ exports.items.push({
|
||||
* 'break del' command
|
||||
*/
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "break del",
|
||||
description: gcli.lookup("breakdelDesc"),
|
||||
description: l10n.lookup("breakdelDesc"),
|
||||
params: [
|
||||
{
|
||||
name: "breakpoint",
|
||||
@@ -214,14 +220,14 @@ exports.items.push({
|
||||
}));
|
||||
}
|
||||
},
|
||||
description: gcli.lookup("breakdelBreakidDesc")
|
||||
description: l10n.lookup("breakdelBreakidDesc")
|
||||
}
|
||||
],
|
||||
returnType: "string",
|
||||
exec: function(args, context) {
|
||||
let dbg = getPanel(context, "jsdebugger");
|
||||
if (!dbg) {
|
||||
return gcli.lookup("debuggerStopped");
|
||||
return l10n.lookup("debuggerStopped");
|
||||
}
|
||||
|
||||
let source = dbg._view.Sources.getItemForAttachment(a => {
|
||||
@@ -233,9 +239,9 @@ exports.items.push({
|
||||
line: args.breakpoint.lineNumber };
|
||||
|
||||
dbg.removeBreakpoint(position).then(() => {
|
||||
deferred.resolve(gcli.lookup("breakdelRemoved"));
|
||||
deferred.resolve(l10n.lookup("breakdelRemoved"));
|
||||
}, () => {
|
||||
deferred.resolve(gcli.lookup("breakNotFound"));
|
||||
deferred.resolve(l10n.lookup("breakNotFound"));
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
@@ -247,16 +253,18 @@ exports.items.push({
|
||||
*/
|
||||
exports.items.push({
|
||||
name: "dbg",
|
||||
description: gcli.lookup("dbgDesc"),
|
||||
manual: gcli.lookup("dbgManual")
|
||||
description: l10n.lookup("dbgDesc"),
|
||||
manual: l10n.lookup("dbgManual")
|
||||
});
|
||||
|
||||
/**
|
||||
* 'dbg open' command
|
||||
*/
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "dbg open",
|
||||
description: gcli.lookup("dbgOpen"),
|
||||
description: l10n.lookup("dbgOpen"),
|
||||
params: [],
|
||||
exec: function(args, context) {
|
||||
let target = context.environment.target;
|
||||
@@ -268,8 +276,10 @@ exports.items.push({
|
||||
* 'dbg close' command
|
||||
*/
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "dbg close",
|
||||
description: gcli.lookup("dbgClose"),
|
||||
description: l10n.lookup("dbgClose"),
|
||||
params: [],
|
||||
exec: function(args, context) {
|
||||
if (!getPanel(context, "jsdebugger")) {
|
||||
@@ -284,13 +294,15 @@ exports.items.push({
|
||||
* 'dbg interrupt' command
|
||||
*/
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "dbg interrupt",
|
||||
description: gcli.lookup("dbgInterrupt"),
|
||||
description: l10n.lookup("dbgInterrupt"),
|
||||
params: [],
|
||||
exec: function(args, context) {
|
||||
let dbg = getPanel(context, "jsdebugger");
|
||||
if (!dbg) {
|
||||
return gcli.lookup("debuggerStopped");
|
||||
return l10n.lookup("debuggerStopped");
|
||||
}
|
||||
|
||||
let controller = dbg._controller;
|
||||
@@ -305,13 +317,15 @@ exports.items.push({
|
||||
* 'dbg continue' command
|
||||
*/
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "dbg continue",
|
||||
description: gcli.lookup("dbgContinue"),
|
||||
description: l10n.lookup("dbgContinue"),
|
||||
params: [],
|
||||
exec: function(args, context) {
|
||||
let dbg = getPanel(context, "jsdebugger");
|
||||
if (!dbg) {
|
||||
return gcli.lookup("debuggerStopped");
|
||||
return l10n.lookup("debuggerStopped");
|
||||
}
|
||||
|
||||
let controller = dbg._controller;
|
||||
@@ -326,22 +340,26 @@ exports.items.push({
|
||||
* 'dbg step' command
|
||||
*/
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "dbg step",
|
||||
description: gcli.lookup("dbgStepDesc"),
|
||||
manual: gcli.lookup("dbgStepManual")
|
||||
description: l10n.lookup("dbgStepDesc"),
|
||||
manual: l10n.lookup("dbgStepManual")
|
||||
});
|
||||
|
||||
/**
|
||||
* 'dbg step over' command
|
||||
*/
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "dbg step over",
|
||||
description: gcli.lookup("dbgStepOverDesc"),
|
||||
description: l10n.lookup("dbgStepOverDesc"),
|
||||
params: [],
|
||||
exec: function(args, context) {
|
||||
let dbg = getPanel(context, "jsdebugger");
|
||||
if (!dbg) {
|
||||
return gcli.lookup("debuggerStopped");
|
||||
return l10n.lookup("debuggerStopped");
|
||||
}
|
||||
|
||||
let controller = dbg._controller;
|
||||
@@ -356,13 +374,15 @@ exports.items.push({
|
||||
* 'dbg step in' command
|
||||
*/
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: 'dbg step in',
|
||||
description: gcli.lookup("dbgStepInDesc"),
|
||||
description: l10n.lookup("dbgStepInDesc"),
|
||||
params: [],
|
||||
exec: function(args, context) {
|
||||
let dbg = getPanel(context, "jsdebugger");
|
||||
if (!dbg) {
|
||||
return gcli.lookup("debuggerStopped");
|
||||
return l10n.lookup("debuggerStopped");
|
||||
}
|
||||
|
||||
let controller = dbg._controller;
|
||||
@@ -377,13 +397,15 @@ exports.items.push({
|
||||
* 'dbg step over' command
|
||||
*/
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: 'dbg step out',
|
||||
description: gcli.lookup("dbgStepOutDesc"),
|
||||
description: l10n.lookup("dbgStepOutDesc"),
|
||||
params: [],
|
||||
exec: function(args, context) {
|
||||
let dbg = getPanel(context, "jsdebugger");
|
||||
if (!dbg) {
|
||||
return gcli.lookup("debuggerStopped");
|
||||
return l10n.lookup("debuggerStopped");
|
||||
}
|
||||
|
||||
let controller = dbg._controller;
|
||||
@@ -398,14 +420,16 @@ exports.items.push({
|
||||
* 'dbg list' command
|
||||
*/
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "dbg list",
|
||||
description: gcli.lookup("dbgListSourcesDesc"),
|
||||
description: l10n.lookup("dbgListSourcesDesc"),
|
||||
params: [],
|
||||
returnType: "dom",
|
||||
exec: function(args, context) {
|
||||
let dbg = getPanel(context, "jsdebugger");
|
||||
if (!dbg) {
|
||||
return gcli.lookup("debuggerClosed");
|
||||
return l10n.lookup("debuggerClosed");
|
||||
}
|
||||
|
||||
let sources = getAllSources(dbg);
|
||||
@@ -440,10 +464,12 @@ exports.items.push({
|
||||
}
|
||||
].forEach(function(cmd) {
|
||||
const lookup = function(id) {
|
||||
return gcli.lookup(cmd.l10nPrefix + id);
|
||||
return l10n.lookup(cmd.l10nPrefix + id);
|
||||
};
|
||||
|
||||
exports.items.push({
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "dbg " + cmd.name,
|
||||
description: lookup("Desc"),
|
||||
params: [
|
||||
@@ -475,7 +501,7 @@ exports.items.push({
|
||||
const dbg = getPanel(context, "jsdebugger");
|
||||
const doc = context.environment.chromeDocument;
|
||||
if (!dbg) {
|
||||
throw new Error(gcli.lookup("debuggerClosed"));
|
||||
throw new Error(l10n.lookup("debuggerClosed"));
|
||||
}
|
||||
|
||||
const { promise, resolve, reject } = context.defer();
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
const gcli = require("gcli/index");
|
||||
const l10n = require("gcli/l10n");
|
||||
const EventEmitter = require("devtools/toolkit/event-emitter");
|
||||
const eventEmitter = new EventEmitter();
|
||||
|
||||
@@ -12,14 +12,19 @@ let { Eyedropper, EyedropperManager } = require("devtools/eyedropper/eyedropper"
|
||||
* 'eyedropper' command
|
||||
*/
|
||||
exports.items = [{
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "eyedropper",
|
||||
description: gcli.lookup("eyedropperDesc"),
|
||||
manual: gcli.lookup("eyedropperManual"),
|
||||
description: l10n.lookup("eyedropperDesc"),
|
||||
manual: l10n.lookup("eyedropperManual"),
|
||||
buttonId: "command-button-eyedropper",
|
||||
buttonClass: "command-button command-button-invertable",
|
||||
tooltipText: gcli.lookup("eyedropperTooltip"),
|
||||
tooltipText: l10n.lookup("eyedropperTooltip"),
|
||||
state: {
|
||||
isChecked: function(target) {
|
||||
if (!target.tab) {
|
||||
return false;
|
||||
}
|
||||
let chromeWindow = target.tab.ownerDocument.defaultView;
|
||||
let dropper = EyedropperManager.getInstance(chromeWindow);
|
||||
if (dropper) {
|
||||
|
||||
@@ -808,6 +808,11 @@ let gDevToolsBrowser = {
|
||||
return !!(widgetWrapper && widgetWrapper.provider == CustomizableUI.PROVIDER_API);
|
||||
},
|
||||
|
||||
/**
|
||||
* The deferred promise will be resolved by WebIDE's UI.init()
|
||||
*/
|
||||
isWebIDEInitialized: promise.defer(),
|
||||
|
||||
/**
|
||||
* Uninstall WebIDE widget
|
||||
*/
|
||||
|
||||
@@ -5,9 +5,11 @@ support-files =
|
||||
browser_toolbox_options_disable_js_iframe.html
|
||||
browser_toolbox_options_disable_cache.sjs
|
||||
browser_toolbox_sidebar_tool.xul
|
||||
code_math.js
|
||||
head.js
|
||||
helper_disable_cache.js
|
||||
doc_theme.css
|
||||
doc_viewsource.html
|
||||
browser_toolbox_options_enable_serviceworkers_testing.html
|
||||
serviceworker.js
|
||||
|
||||
@@ -47,6 +49,10 @@ skip-if = e10s # Bug 1069044 - destroyInspector may hang during shutdown
|
||||
[browser_toolbox_tool_ready.js]
|
||||
[browser_toolbox_tool_remote_reopen.js]
|
||||
[browser_toolbox_transport_events.js]
|
||||
[browser_toolbox_view_source_01.js]
|
||||
[browser_toolbox_view_source_02.js]
|
||||
[browser_toolbox_view_source_03.js]
|
||||
[browser_toolbox_view_source_04.js]
|
||||
[browser_toolbox_window_reload_target.js]
|
||||
[browser_toolbox_window_shortcuts.js]
|
||||
skip-if = os == "mac" && os_version == "10.8" || os == "win" && os_version == "5.1" # Bug 851129 - Re-enable browser_toolbox_window_shortcuts.js test after leaks are fixed
|
||||
@@ -55,6 +61,6 @@ skip-if = os == "mac" && os_version == "10.8" || os == "win" && os_version == "5
|
||||
[browser_toolbox_custom_host.js]
|
||||
[browser_toolbox_theme_registration.js]
|
||||
[browser_toolbox_options_enable_serviceworkers_testing.js]
|
||||
skip-if = e10s # Bug 1030318
|
||||
skip-if = true # Bug 1153407 - this test breaks subsequent tests and is not e10s compatible
|
||||
|
||||
|
||||
|
||||
@@ -118,6 +118,10 @@ function test() {
|
||||
todo(false, "Front for " + actor + " still held in pool!");
|
||||
continue;
|
||||
}
|
||||
// gcliActor is for the commandline which is separate to the toolbox
|
||||
if (actor.contains("gcliActor")) {
|
||||
continue;
|
||||
}
|
||||
ok(false, "Front for " + actor + " still held in pool!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/**
|
||||
* Tests that Toolbox#viewSourceInDebugger works when debugger is not
|
||||
* yet opened.
|
||||
*/
|
||||
|
||||
let URL = `${URL_ROOT}doc_viewsource.html`;
|
||||
let JS_URL = `${URL_ROOT}code_math.js`;
|
||||
|
||||
function *viewSource() {
|
||||
let toolbox = yield loadToolbox(URL);
|
||||
|
||||
yield toolbox.viewSourceInDebugger(JS_URL, 2);
|
||||
|
||||
let debuggerPanel = toolbox.getPanel("jsdebugger");
|
||||
ok(debuggerPanel, "The debugger panel was opened.");
|
||||
is(toolbox.currentToolId, "jsdebugger", "The debugger panel was selected.");
|
||||
|
||||
let { DebuggerView } = debuggerPanel.panelWin;
|
||||
let Sources = DebuggerView.Sources;
|
||||
|
||||
is(Sources.selectedValue, getSourceActor(Sources, JS_URL),
|
||||
"The correct source is shown in the debugger.");
|
||||
is(DebuggerView.editor.getCursor().line + 1, 2,
|
||||
"The correct line is highlighted in the debugger's source editor.");
|
||||
|
||||
yield unloadToolbox(toolbox);
|
||||
finish();
|
||||
}
|
||||
|
||||
function test () {
|
||||
Task.spawn(viewSource).then(finish, (aError) => {
|
||||
ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
|
||||
finish();
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/**
|
||||
* Tests that Toolbox#viewSourceInDebugger works when debugger is already loaded.
|
||||
*/
|
||||
|
||||
let URL = `${URL_ROOT}doc_viewsource.html`;
|
||||
let JS_URL = `${URL_ROOT}code_math.js`;
|
||||
|
||||
function *viewSource() {
|
||||
let toolbox = yield loadToolbox(URL);
|
||||
let { panelWin: debuggerWin } = yield toolbox.selectTool("jsdebugger");
|
||||
let debuggerEvents = debuggerWin.EVENTS;
|
||||
let { DebuggerView } = debuggerWin;
|
||||
let Sources = DebuggerView.Sources;
|
||||
|
||||
yield debuggerWin.once(debuggerEvents.SOURCE_SHOWN);
|
||||
ok("A source was shown in the debugger.");
|
||||
|
||||
is(Sources.selectedValue, getSourceActor(Sources, JS_URL),
|
||||
"The correct source is initially shown in the debugger.");
|
||||
is(DebuggerView.editor.getCursor().line, 0,
|
||||
"The correct line is initially highlighted in the debugger's source editor.");
|
||||
|
||||
yield toolbox.viewSourceInDebugger(JS_URL, 2);
|
||||
|
||||
let debuggerPanel = toolbox.getPanel("jsdebugger");
|
||||
ok(debuggerPanel, "The debugger panel was opened.");
|
||||
is(toolbox.currentToolId, "jsdebugger", "The debugger panel was selected.");
|
||||
|
||||
is(Sources.selectedValue, getSourceActor(Sources, JS_URL),
|
||||
"The correct source is shown in the debugger.");
|
||||
is(DebuggerView.editor.getCursor().line + 1, 2,
|
||||
"The correct line is highlighted in the debugger's source editor.");
|
||||
|
||||
yield unloadToolbox(toolbox);
|
||||
finish();
|
||||
}
|
||||
|
||||
function test () {
|
||||
Task.spawn(viewSource).then(finish, (aError) => {
|
||||
ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
|
||||
finish();
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/**
|
||||
* Tests that Toolbox#viewSourceInStyleEditor works when style editor is not
|
||||
* yet opened.
|
||||
*/
|
||||
|
||||
let URL = `${URL_ROOT}doc_viewsource.html`;
|
||||
let CSS_URL = `${URL_ROOT}doc_theme.css`;
|
||||
|
||||
function *viewSource() {
|
||||
let toolbox = yield loadToolbox(URL);
|
||||
|
||||
let fileFound = yield toolbox.viewSourceInStyleEditor(CSS_URL, 2);
|
||||
ok(fileFound, "viewSourceInStyleEditor should resolve to true if source found.");
|
||||
|
||||
let stylePanel = toolbox.getPanel("styleeditor");
|
||||
ok(stylePanel, "The style editor panel was opened.");
|
||||
is(toolbox.currentToolId, "styleeditor", "The style editor panel was selected.");
|
||||
|
||||
let { UI } = stylePanel;
|
||||
|
||||
is(UI.selectedEditor.styleSheet.href, CSS_URL,
|
||||
"The correct source is shown in the style editor.");
|
||||
is(UI.selectedEditor.sourceEditor.getCursor().line + 1, 2,
|
||||
"The correct line is highlighted in the style editor's source editor.");
|
||||
|
||||
yield unloadToolbox(toolbox);
|
||||
finish();
|
||||
}
|
||||
|
||||
function test () {
|
||||
Task.spawn(viewSource).then(finish, (aError) => {
|
||||
ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
|
||||
finish();
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/**
|
||||
* Tests that Toolbox#viewSourceInScratchpad works.
|
||||
*/
|
||||
|
||||
let URL = `${URL_ROOT}doc_viewsource.html`;
|
||||
|
||||
function *viewSource() {
|
||||
let toolbox = yield loadToolbox(URL);
|
||||
let win = yield openScratchpadWindow();
|
||||
let { Scratchpad: scratchpad } = win;
|
||||
|
||||
// Brahm's Cello Sonata No.1, Op.38 now in the scratchpad
|
||||
scratchpad.setText("E G B C B\nA B A G A B\nG E");
|
||||
let scratchpadURL = scratchpad.uniqueName;
|
||||
|
||||
// Now select another tool for focus
|
||||
yield toolbox.selectTool("webconsole");
|
||||
|
||||
yield toolbox.viewSourceInScratchpad(scratchpadURL, 2);
|
||||
|
||||
is(scratchpad.editor.getCursor().line, 2,
|
||||
"The correct line is highlighted in scratchpad's editor.");
|
||||
|
||||
win.close();
|
||||
yield unloadToolbox(toolbox);
|
||||
finish();
|
||||
}
|
||||
|
||||
function test () {
|
||||
Task.spawn(viewSource).then(finish, (aError) => {
|
||||
ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
|
||||
finish();
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
function add(a, b, k) {
|
||||
var result = a + b;
|
||||
return k(result);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Toolbox test for View Source methods</title>
|
||||
<!-- Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ -->
|
||||
<link charset="UTF-8" rel="stylesheet" href="doc_theme.css" />
|
||||
<script src="code_math.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
@@ -7,6 +7,7 @@ let TargetFactory = gDevTools.TargetFactory;
|
||||
const { console } = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
|
||||
const { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {});
|
||||
const { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {});
|
||||
const { ScratchpadManager } = Cu.import("resource:///modules/devtools/scratchpad-manager.jsm", {});
|
||||
|
||||
const URL_ROOT = "http://example.com/browser/browser/devtools/framework/test/";
|
||||
const CHROME_URL_ROOT = "chrome://mochitests/content/browser/browser/devtools/framework/test/";
|
||||
@@ -175,3 +176,49 @@ function getChromeActors(callback)
|
||||
DebuggerServer.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
function loadToolbox (url) {
|
||||
let { promise: p, resolve } = promise.defer();
|
||||
gBrowser.selectedTab = gBrowser.addTab();
|
||||
let target = TargetFactory.forTab(gBrowser.selectedTab);
|
||||
|
||||
gBrowser.selectedBrowser.addEventListener("load", function onLoad(evt) {
|
||||
gBrowser.selectedBrowser.removeEventListener(evt.type, onLoad, true);
|
||||
gDevTools.showToolbox(target).then(resolve);
|
||||
}, true);
|
||||
|
||||
content.location = url;
|
||||
return p;
|
||||
}
|
||||
|
||||
function unloadToolbox (toolbox) {
|
||||
return toolbox.destroy().then(function() {
|
||||
gBrowser.removeCurrentTab();
|
||||
});
|
||||
}
|
||||
|
||||
function getSourceActor(aSources, aURL) {
|
||||
let item = aSources.getItemForAttachment(a => a.source.url === aURL);
|
||||
return item && item.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a Scratchpad window.
|
||||
*
|
||||
* @return nsIDOMWindow
|
||||
* The new window object that holds Scratchpad.
|
||||
*/
|
||||
function *openScratchpadWindow () {
|
||||
let { promise: p, resolve } = promise.defer();
|
||||
let win = ScratchpadManager.openScratchpad();
|
||||
|
||||
yield once(win, "load");
|
||||
|
||||
win.Scratchpad.addObserver({
|
||||
onReady: function () {
|
||||
win.Scratchpad.removeObserver(this);
|
||||
resolve(win);
|
||||
}
|
||||
});
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ let Telemetry = require("devtools/shared/telemetry");
|
||||
let {getHighlighterUtils} = require("devtools/framework/toolbox-highlighter-utils");
|
||||
let {HUDService} = require("devtools/webconsole/hudservice");
|
||||
let {showDoorhanger} = require("devtools/shared/doorhanger");
|
||||
let sourceUtils = require("devtools/shared/source-utils");
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
@@ -716,10 +717,13 @@ Toolbox.prototype = {
|
||||
this._buildPickerButton();
|
||||
}
|
||||
|
||||
let spec = CommandUtils.getCommandbarSpec("devtools.toolbox.toolbarSpec");
|
||||
let environment = CommandUtils.createEnvironment(this, '_target');
|
||||
return CommandUtils.createRequisition(environment).then(requisition => {
|
||||
const options = {
|
||||
environment: CommandUtils.createEnvironment(this, '_target')
|
||||
};
|
||||
return CommandUtils.createRequisition(this.target, options).then(requisition => {
|
||||
this._requisition = requisition;
|
||||
|
||||
const spec = CommandUtils.getCommandbarSpec("devtools.toolbox.toolbarSpec");
|
||||
return CommandUtils.createButtons(spec, this.target, this.doc,
|
||||
requisition).then(buttons => {
|
||||
let container = this.doc.getElementById("toolbox-buttons");
|
||||
@@ -1704,6 +1708,7 @@ Toolbox.prototype = {
|
||||
gDevTools.off("pref-changed", this._prefChanged);
|
||||
|
||||
this._lastFocusedElement = null;
|
||||
|
||||
if (this.webconsolePanel) {
|
||||
this._saveSplitConsoleHeight();
|
||||
this.webconsolePanel.removeEventListener("resize",
|
||||
@@ -1751,7 +1756,7 @@ Toolbox.prototype = {
|
||||
let win = this.frame.ownerGlobal;
|
||||
|
||||
if (this._requisition) {
|
||||
this._requisition.destroy();
|
||||
CommandUtils.destroyRequisition(this._requisition, this.target);
|
||||
}
|
||||
this._telemetry.toolClosed("toolbox");
|
||||
this._telemetry.destroy();
|
||||
@@ -1873,4 +1878,48 @@ Toolbox.prototype = {
|
||||
yield this._performanceConnection.destroy();
|
||||
this._performanceConnection = null;
|
||||
}),
|
||||
|
||||
/**
|
||||
* Returns gViewSourceUtils for viewing source.
|
||||
*/
|
||||
get gViewSourceUtils() {
|
||||
return this.frame.contentWindow.gViewSourceUtils;
|
||||
},
|
||||
|
||||
/**
|
||||
* Opens source in style editor. Falls back to plain "view-source:".
|
||||
* @see browser/devtools/shared/source-utils.js
|
||||
*/
|
||||
viewSourceInStyleEditor: function (sourceURL, sourceLine) {
|
||||
return sourceUtils.viewSourceInStyleEditor(this, sourceURL, sourceLine);
|
||||
},
|
||||
|
||||
/**
|
||||
* Opens source in debugger. Falls back to plain "view-source:".
|
||||
* @see browser/devtools/shared/source-utils.js
|
||||
*/
|
||||
viewSourceInDebugger: function (sourceURL, sourceLine) {
|
||||
return sourceUtils.viewSourceInDebugger(this, sourceURL, sourceLine);
|
||||
},
|
||||
|
||||
/**
|
||||
* Opens source in scratchpad. Falls back to plain "view-source:".
|
||||
* TODO The `sourceURL` for scratchpad instances are like `Scratchpad/1`.
|
||||
* If instances are scoped one-per-browser-window, then we should be able
|
||||
* to infer the URL from this toolbox, or use the built in scratchpad IN
|
||||
* the toolbox.
|
||||
*
|
||||
* @see browser/devtools/shared/source-utils.js
|
||||
*/
|
||||
viewSourceInScratchpad: function (sourceURL, sourceLine) {
|
||||
return sourceUtils.viewSourceInScratchpad(sourceURL, sourceLine);
|
||||
},
|
||||
|
||||
/**
|
||||
* Opens source in plain "view-source:".
|
||||
* @see browser/devtools/shared/source-utils.js
|
||||
*/
|
||||
viewSource: function (sourceURL, sourceLine) {
|
||||
return sourceUtils.viewSource(this, sourceURL, sourceLine);
|
||||
},
|
||||
};
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
|
||||
<script type="application/javascript;version=1.8"
|
||||
src="chrome://global/content/devtools/theme-switching.js"/>
|
||||
<script type="application/javascript"
|
||||
src="chrome://global/content/viewSourceUtils.js"/>
|
||||
|
||||
<script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
|
||||
|
||||
<commandset id="editMenuCommands"/>
|
||||
|
||||
@@ -19,11 +19,7 @@ Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "console",
|
||||
"resource://gre/modules/devtools/Console.jsm");
|
||||
|
||||
'do not use strict';
|
||||
|
||||
// WARNING: do not 'use strict' without reading the notes in envEval();
|
||||
// Also don't remove the 'do not use strict' marker. The orion build uses these
|
||||
// markers to know where to insert AMD headers.
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* For full documentation, see:
|
||||
@@ -69,9 +65,9 @@ var template = function(node, data, options) {
|
||||
processNode(state, node, data);
|
||||
};
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
if (typeof exports !== 'undefined') {
|
||||
exports.template = template;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper for the places where we need to act asynchronously and keep track of
|
||||
@@ -182,6 +178,7 @@ function processNode(state, node, data) {
|
||||
replacement = envEval(state, value.slice(2, -1), data, value);
|
||||
if (replacement && typeof replacement.then === 'function') {
|
||||
node.setAttribute(name, '');
|
||||
/* jshint loopfunc:true */
|
||||
replacement.then(function(newValue) {
|
||||
node.setAttribute(name, newValue);
|
||||
}).then(null, console.error);
|
||||
@@ -361,15 +358,16 @@ function processForEachMember(state, member, templNode, siblingNode, data, param
|
||||
});
|
||||
newData[paramName] = reply;
|
||||
if (node.parentNode != null) {
|
||||
var clone;
|
||||
if (templNode.nodeName.toLowerCase() === 'loop') {
|
||||
for (var i = 0; i < templNode.childNodes.length; i++) {
|
||||
var clone = templNode.childNodes[i].cloneNode(true);
|
||||
clone = templNode.childNodes[i].cloneNode(true);
|
||||
node.parentNode.insertBefore(clone, node);
|
||||
processNode(cState, clone, newData);
|
||||
}
|
||||
}
|
||||
else {
|
||||
var clone = templNode.cloneNode(true);
|
||||
clone = templNode.cloneNode(true);
|
||||
clone.removeAttribute('foreach');
|
||||
node.parentNode.insertBefore(clone, node);
|
||||
processNode(cState, clone, newData);
|
||||
@@ -543,10 +541,6 @@ function property(state, path, data, newValue) {
|
||||
/**
|
||||
* Like eval, but that creates a context of the variables in <tt>env</tt> in
|
||||
* which the script is evaluated.
|
||||
* WARNING: This script uses 'with' which is generally regarded to be evil.
|
||||
* The alternative is to create a Function at runtime that takes X parameters
|
||||
* according to the X keys in the env object, and then call that function using
|
||||
* the values in the env object. This is likely to be slow, but workable.
|
||||
* @param script The string to be evaluated.
|
||||
* @param data The environment in which to eval the script.
|
||||
* @param frame Optional debugging string in case of failure.
|
||||
@@ -566,9 +560,26 @@ function envEval(state, script, data, frame) {
|
||||
' can not be resolved using a simple property path.');
|
||||
return '${' + script + '}';
|
||||
}
|
||||
with (data) {
|
||||
return eval(script);
|
||||
}
|
||||
|
||||
// What we're looking to do is basically:
|
||||
// with(data) { return eval(script); }
|
||||
// except in strict mode where 'with' is banned.
|
||||
// So we create a function which has a parameter list the same as the
|
||||
// keys in 'data' and with 'script' as its function body.
|
||||
// We then call this function with the values in 'data'
|
||||
var keys = allKeys(data);
|
||||
var func = Function.apply(null, keys.concat("return " + script));
|
||||
|
||||
var values = keys.map(function(key) { return data[key]; });
|
||||
return func.apply(null, values);
|
||||
|
||||
// TODO: The 'with' method is different from the code above in the value
|
||||
// of 'this' when calling functions. For example:
|
||||
// envEval(state, 'foo()', { foo: function() { return this; } }, ...);
|
||||
// The global for 'foo' when using 'with' is the data object. However the
|
||||
// code above, the global is null. (Using 'func.apply(data, values)'
|
||||
// changes 'this' in the 'foo()' frame, but not in the inside the body
|
||||
// of 'foo', so that wouldn't help)
|
||||
}
|
||||
}
|
||||
catch (ex) {
|
||||
@@ -580,6 +591,15 @@ function envEval(state, script, data, frame) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Object.keys() that respects the prototype chain
|
||||
*/
|
||||
function allKeys(data) {
|
||||
var keys = [];
|
||||
for (var key in data) { keys.push(key); }
|
||||
return keys;
|
||||
}
|
||||
|
||||
/**
|
||||
* A generic way of reporting errors, for easy overloading in different
|
||||
* environments.
|
||||
@@ -599,5 +619,5 @@ function handleError(state, message, ex) {
|
||||
* @param message the error message to report.
|
||||
*/
|
||||
function logError(message) {
|
||||
console.log(message);
|
||||
console.error(message);
|
||||
}
|
||||
|
||||
@@ -4,9 +4,33 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* You can't require the AddonManager in a child process, but GCLI wants to
|
||||
* check for 'items' in all processes, so we return empty array if the
|
||||
* AddonManager is not available
|
||||
*/
|
||||
function getAddonManager() {
|
||||
try {
|
||||
return {
|
||||
AddonManager: require("resource://gre/modules/AddonManager.jsm").AddonManager,
|
||||
addonManagerActive: true
|
||||
};
|
||||
}
|
||||
catch (ex) {
|
||||
// Fake up an AddonManager just enough to let the file load
|
||||
return {
|
||||
AddonManager: {
|
||||
getAllAddons() {},
|
||||
getAddonsByTypes() {}
|
||||
},
|
||||
addonManagerActive: false
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const { Cc, Ci, Cu } = require("chrome");
|
||||
const { AddonManager } = Cu.import("resource://gre/modules/AddonManager.jsm", {});
|
||||
const gcli = require("gcli/index");
|
||||
const { AddonManager, addonManagerActive } = getAddonManager();
|
||||
const l10n = require("gcli/l10n");
|
||||
const { Promise: promise } = require("resource://gre/modules/Promise.jsm");
|
||||
|
||||
const BRAND_SHORT_NAME = Cc["@mozilla.org/intl/stringbundle;1"]
|
||||
@@ -49,7 +73,7 @@ function pendingOperations(addon) {
|
||||
}, []);
|
||||
}
|
||||
|
||||
exports.items = [
|
||||
var items = [
|
||||
{
|
||||
item: "type",
|
||||
name: "addon",
|
||||
@@ -76,11 +100,11 @@ exports.items = [
|
||||
},
|
||||
{
|
||||
name: "addon",
|
||||
description: gcli.lookup("addonDesc")
|
||||
description: l10n.lookup("addonDesc")
|
||||
},
|
||||
{
|
||||
name: "addon list",
|
||||
description: gcli.lookup("addonListDesc"),
|
||||
description: l10n.lookup("addonListDesc"),
|
||||
returnType: "addonsInfo",
|
||||
params: [{
|
||||
name: "type",
|
||||
@@ -89,7 +113,7 @@ exports.items = [
|
||||
data: [ "dictionary", "extension", "locale", "plugin", "theme", "all" ]
|
||||
},
|
||||
defaultValue: "all",
|
||||
description: gcli.lookup("addonListTypeDesc")
|
||||
description: l10n.lookup("addonListTypeDesc")
|
||||
}],
|
||||
exec: function(args, context) {
|
||||
let types = (args.type === "all") ? null : [ args.type ];
|
||||
@@ -114,7 +138,7 @@ exports.items = [
|
||||
if (!addonsInfo.addons.length) {
|
||||
return context.createView({
|
||||
html: "<p>${message}</p>",
|
||||
data: { message: gcli.lookup("addonNoneOfType") }
|
||||
data: { message: l10n.lookup("addonNoneOfType") }
|
||||
});
|
||||
}
|
||||
|
||||
@@ -126,7 +150,7 @@ exports.items = [
|
||||
"theme": "addonListThemeHeading",
|
||||
"all": "addonListAllHeading"
|
||||
};
|
||||
let header = gcli.lookup(headerLookups[addonsInfo.type] ||
|
||||
let header = l10n.lookup(headerLookups[addonsInfo.type] ||
|
||||
"addonListUnknownHeading");
|
||||
|
||||
let operationLookups = {
|
||||
@@ -138,7 +162,7 @@ exports.items = [
|
||||
};
|
||||
function lookupOperation(opName) {
|
||||
let lookupName = operationLookups[opName];
|
||||
return lookupName ? gcli.lookup(lookupName) : opName;
|
||||
return lookupName ? l10n.lookup(lookupName) : opName;
|
||||
}
|
||||
|
||||
function arrangeAddons(addons) {
|
||||
@@ -193,14 +217,14 @@ exports.items = [
|
||||
status: addon.isActive ? "enabled" : "disabled",
|
||||
version: addon.version,
|
||||
pendingOperations: addon.pendingOperations.length ?
|
||||
(" (" + gcli.lookup("addonPending") + ": "
|
||||
(" (" + l10n.lookup("addonPending") + ": "
|
||||
+ addon.pendingOperations.map(lookupOperation).join(", ")
|
||||
+ ")") :
|
||||
"",
|
||||
toggleActionName: isActiveForToggle(addon) ? "disable": "enable",
|
||||
toggleActionMessage: isActiveForToggle(addon) ?
|
||||
gcli.lookup("addonListOutDisable") :
|
||||
gcli.lookup("addonListOutEnable")
|
||||
l10n.lookup("addonListOutDisable") :
|
||||
l10n.lookup("addonListOutEnable")
|
||||
};
|
||||
}),
|
||||
onclick: context.update,
|
||||
@@ -210,33 +234,37 @@ exports.items = [
|
||||
}
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "addon enable",
|
||||
description: gcli.lookup("addonEnableDesc"),
|
||||
description: l10n.lookup("addonEnableDesc"),
|
||||
params: [
|
||||
{
|
||||
name: "addon",
|
||||
type: "addon",
|
||||
description: gcli.lookup("addonNameDesc")
|
||||
description: l10n.lookup("addonNameDesc")
|
||||
}
|
||||
],
|
||||
exec: function(args, context) {
|
||||
let name = (args.addon.name + " " + args.addon.version).trim();
|
||||
if (args.addon.userDisabled) {
|
||||
args.addon.userDisabled = false;
|
||||
return gcli.lookupFormat("addonEnabled", [ name ]);
|
||||
return l10n.lookupFormat("addonEnabled", [ name ]);
|
||||
}
|
||||
|
||||
return gcli.lookupFormat("addonAlreadyEnabled", [ name ]);
|
||||
return l10n.lookupFormat("addonAlreadyEnabled", [ name ]);
|
||||
}
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "addon disable",
|
||||
description: gcli.lookup("addonDisableDesc"),
|
||||
description: l10n.lookup("addonDisableDesc"),
|
||||
params: [
|
||||
{
|
||||
name: "addon",
|
||||
type: "addon",
|
||||
description: gcli.lookup("addonNameDesc")
|
||||
description: l10n.lookup("addonNameDesc")
|
||||
}
|
||||
],
|
||||
exec: function(args, context) {
|
||||
@@ -247,26 +275,28 @@ exports.items = [
|
||||
if (!args.addon.userDisabled ||
|
||||
args.addon.userDisabled === AddonManager.STATE_ASK_TO_ACTIVATE) {
|
||||
args.addon.userDisabled = true;
|
||||
return gcli.lookupFormat("addonDisabled", [ name ]);
|
||||
return l10n.lookupFormat("addonDisabled", [ name ]);
|
||||
}
|
||||
|
||||
return gcli.lookupFormat("addonAlreadyDisabled", [ name ]);
|
||||
return l10n.lookupFormat("addonAlreadyDisabled", [ name ]);
|
||||
}
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "addon ctp",
|
||||
description: gcli.lookup("addonCtpDesc"),
|
||||
description: l10n.lookup("addonCtpDesc"),
|
||||
params: [
|
||||
{
|
||||
name: "addon",
|
||||
type: "addon",
|
||||
description: gcli.lookup("addonNameDesc")
|
||||
description: l10n.lookup("addonNameDesc")
|
||||
}
|
||||
],
|
||||
exec: function(args, context) {
|
||||
let name = (args.addon.name + " " + args.addon.version).trim();
|
||||
if (args.addon.type !== "plugin") {
|
||||
return gcli.lookupFormat("addonCantCtp", [ name ]);
|
||||
return l10n.lookupFormat("addonCantCtp", [ name ]);
|
||||
}
|
||||
|
||||
if (!args.addon.userDisabled ||
|
||||
@@ -277,13 +307,15 @@ exports.items = [
|
||||
// Some plugins (e.g. OpenH264 shipped with Pale Moon) cannot be set to
|
||||
// click-to-play. Handle this.
|
||||
|
||||
return gcli.lookupFormat("addonNoCtp", [ name ]);
|
||||
return l10n.lookupFormat("addonNoCtp", [ name ]);
|
||||
}
|
||||
|
||||
return gcli.lookupFormat("addonCtp", [ name ]);
|
||||
return l10n.lookupFormat("addonCtp", [ name ]);
|
||||
}
|
||||
|
||||
return gcli.lookupFormat("addonAlreadyCtp", [ name ]);
|
||||
return l10n.lookupFormat("addonAlreadyCtp", [ name ]);
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
exports.items = addonManagerActive ? items : [];
|
||||
|
||||
@@ -4,19 +4,22 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const gcli = require("gcli/index");
|
||||
const l10n = require("gcli/l10n");
|
||||
|
||||
loader.lazyImporter(this, "AppCacheUtils", "resource://gre/modules/devtools/AppCacheUtils.jsm");
|
||||
|
||||
exports.items = [
|
||||
{
|
||||
item: "command",
|
||||
name: "appcache",
|
||||
description: gcli.lookup("appCacheDesc")
|
||||
description: l10n.lookup("appCacheDesc")
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "server",
|
||||
name: "appcache validate",
|
||||
description: gcli.lookup("appCacheValidateDesc"),
|
||||
manual: gcli.lookup("appCacheValidateManual"),
|
||||
description: l10n.lookup("appCacheValidateDesc"),
|
||||
manual: l10n.lookup("appCacheValidateManual"),
|
||||
returnType: "appcacheerrors",
|
||||
params: [{
|
||||
group: "options",
|
||||
@@ -24,7 +27,7 @@ exports.items = [
|
||||
{
|
||||
type: "string",
|
||||
name: "uri",
|
||||
description: gcli.lookup("appCacheValidateUriDesc"),
|
||||
description: l10n.lookup("appCacheValidateUriDesc"),
|
||||
defaultValue: null,
|
||||
}
|
||||
]
|
||||
@@ -53,7 +56,7 @@ exports.items = [
|
||||
exec: function([errors, manifestURI], context) {
|
||||
if (errors.length == 0) {
|
||||
return context.createView({
|
||||
html: "<span>" + gcli.lookup("appCacheValidatedSuccessfully") + "</span>"
|
||||
html: "<span>" + l10n.lookup("appCacheValidatedSuccessfully") + "</span>"
|
||||
});
|
||||
}
|
||||
|
||||
@@ -73,20 +76,24 @@ exports.items = [
|
||||
}
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "server",
|
||||
name: "appcache clear",
|
||||
description: gcli.lookup("appCacheClearDesc"),
|
||||
manual: gcli.lookup("appCacheClearManual"),
|
||||
description: l10n.lookup("appCacheClearDesc"),
|
||||
manual: l10n.lookup("appCacheClearManual"),
|
||||
exec: function(args, context) {
|
||||
let utils = new AppCacheUtils(args.uri);
|
||||
utils.clearAll();
|
||||
|
||||
return gcli.lookup("appCacheClearCleared");
|
||||
return l10n.lookup("appCacheClearCleared");
|
||||
}
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "server",
|
||||
name: "appcache list",
|
||||
description: gcli.lookup("appCacheListDesc"),
|
||||
manual: gcli.lookup("appCacheListManual"),
|
||||
description: l10n.lookup("appCacheListDesc"),
|
||||
manual: l10n.lookup("appCacheListManual"),
|
||||
returnType: "appcacheentries",
|
||||
params: [{
|
||||
group: "options",
|
||||
@@ -94,7 +101,7 @@ exports.items = [
|
||||
{
|
||||
type: "string",
|
||||
name: "search",
|
||||
description: gcli.lookup("appCacheListSearchDesc"),
|
||||
description: l10n.lookup("appCacheListSearchDesc"),
|
||||
defaultValue: null,
|
||||
},
|
||||
]
|
||||
@@ -115,35 +122,35 @@ exports.items = [
|
||||
" <li foreach='entry in ${entries}'>" +
|
||||
" <table class='gcli-appcache-detail'>" +
|
||||
" <tr>" +
|
||||
" <td>" + gcli.lookup("appCacheListKey") + "</td>" +
|
||||
" <td>" + l10n.lookup("appCacheListKey") + "</td>" +
|
||||
" <td>${entry.key}</td>" +
|
||||
" </tr>" +
|
||||
" <tr>" +
|
||||
" <td>" + gcli.lookup("appCacheListFetchCount") + "</td>" +
|
||||
" <td>" + l10n.lookup("appCacheListFetchCount") + "</td>" +
|
||||
" <td>${entry.fetchCount}</td>" +
|
||||
" </tr>" +
|
||||
" <tr>" +
|
||||
" <td>" + gcli.lookup("appCacheListLastFetched") + "</td>" +
|
||||
" <td>" + l10n.lookup("appCacheListLastFetched") + "</td>" +
|
||||
" <td>${entry.lastFetched}</td>" +
|
||||
" </tr>" +
|
||||
" <tr>" +
|
||||
" <td>" + gcli.lookup("appCacheListLastModified") + "</td>" +
|
||||
" <td>" + l10n.lookup("appCacheListLastModified") + "</td>" +
|
||||
" <td>${entry.lastModified}</td>" +
|
||||
" </tr>" +
|
||||
" <tr>" +
|
||||
" <td>" + gcli.lookup("appCacheListExpirationTime") + "</td>" +
|
||||
" <td>" + l10n.lookup("appCacheListExpirationTime") + "</td>" +
|
||||
" <td>${entry.expirationTime}</td>" +
|
||||
" </tr>" +
|
||||
" <tr>" +
|
||||
" <td>" + gcli.lookup("appCacheListDataSize") + "</td>" +
|
||||
" <td>" + l10n.lookup("appCacheListDataSize") + "</td>" +
|
||||
" <td>${entry.dataSize}</td>" +
|
||||
" </tr>" +
|
||||
" <tr>" +
|
||||
" <td>" + gcli.lookup("appCacheListDeviceID") + "</td>" +
|
||||
" <td>" + l10n.lookup("appCacheListDeviceID") + "</td>" +
|
||||
" <td>${entry.deviceID} <span class='gcli-out-shortcut' " +
|
||||
"onclick='${onclick}' ondblclick='${ondblclick}' " +
|
||||
"data-command='appcache viewentry ${entry.key}'" +
|
||||
">" + gcli.lookup("appCacheListViewEntry") + "</span>" +
|
||||
">" + l10n.lookup("appCacheListViewEntry") + "</span>" +
|
||||
" </td>" +
|
||||
" </tr>" +
|
||||
" </table>" +
|
||||
@@ -158,14 +165,16 @@ exports.items = [
|
||||
}
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "server",
|
||||
name: "appcache viewentry",
|
||||
description: gcli.lookup("appCacheViewEntryDesc"),
|
||||
manual: gcli.lookup("appCacheViewEntryManual"),
|
||||
description: l10n.lookup("appCacheViewEntryDesc"),
|
||||
manual: l10n.lookup("appCacheViewEntryManual"),
|
||||
params: [
|
||||
{
|
||||
type: "string",
|
||||
name: "key",
|
||||
description: gcli.lookup("appCacheViewEntryKey"),
|
||||
description: l10n.lookup("appCacheViewEntryKey"),
|
||||
defaultValue: null,
|
||||
}
|
||||
],
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
const { Cc, Ci, Cu } = require("chrome");
|
||||
const TargetFactory = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}).devtools.TargetFactory;
|
||||
const l10n = require("gcli/l10n");
|
||||
const gcli = require("gcli/index");
|
||||
|
||||
loader.lazyImporter(this, "gDevTools", "resource://gre/modules/devtools/gDevTools.jsm");
|
||||
@@ -24,11 +25,13 @@ let sandboxes = [];
|
||||
exports.items = [
|
||||
{
|
||||
name: "calllog",
|
||||
description: gcli.lookup("calllogDesc")
|
||||
description: l10n.lookup("calllogDesc")
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "calllog start",
|
||||
description: gcli.lookup("calllogStartDesc"),
|
||||
description: l10n.lookup("calllogStartDesc"),
|
||||
|
||||
exec: function(args, context) {
|
||||
let contentWindow = context.environment.window;
|
||||
@@ -45,7 +48,7 @@ exports.items = [
|
||||
let target = TargetFactory.forTab(gBrowser.selectedTab);
|
||||
gDevTools.showToolbox(target, "webconsole");
|
||||
|
||||
return gcli.lookup("calllogStartReply");
|
||||
return l10n.lookup("calllogStartReply");
|
||||
},
|
||||
|
||||
callDescription: function(frame) {
|
||||
@@ -72,13 +75,15 @@ exports.items = [
|
||||
}
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "calllog stop",
|
||||
description: gcli.lookup("calllogStopDesc"),
|
||||
description: l10n.lookup("calllogStopDesc"),
|
||||
|
||||
exec: function(args, context) {
|
||||
let numDebuggers = debuggers.length;
|
||||
if (numDebuggers == 0) {
|
||||
return gcli.lookup("calllogStopNoLogging");
|
||||
return l10n.lookup("calllogStopNoLogging");
|
||||
}
|
||||
|
||||
for (let dbg of debuggers) {
|
||||
@@ -86,12 +91,14 @@ exports.items = [
|
||||
}
|
||||
debuggers = [];
|
||||
|
||||
return gcli.lookupFormat("calllogStopReply", [ numDebuggers ]);
|
||||
return l10n.lookupFormat("calllogStopReply", [ numDebuggers ]);
|
||||
}
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "calllog chromestart",
|
||||
description: gcli.lookup("calllogChromeStartDesc"),
|
||||
description: l10n.lookup("calllogChromeStartDesc"),
|
||||
get hidden() gcli.hiddenByChromePref(),
|
||||
params: [
|
||||
{
|
||||
@@ -104,8 +111,8 @@ exports.items = [
|
||||
{
|
||||
name: "source",
|
||||
type: "string",
|
||||
description: gcli.lookup("calllogChromeSourceTypeDesc"),
|
||||
manual: gcli.lookup("calllogChromeSourceTypeManual"),
|
||||
description: l10n.lookup("calllogChromeSourceTypeDesc"),
|
||||
manual: l10n.lookup("calllogChromeSourceTypeManual"),
|
||||
}
|
||||
],
|
||||
exec: function(args, context) {
|
||||
@@ -117,20 +124,20 @@ exports.items = [
|
||||
globalObj = Cu.import(args.source);
|
||||
}
|
||||
catch (e) {
|
||||
return gcli.lookup("callLogChromeInvalidJSM");
|
||||
return l10n.lookup("callLogChromeInvalidJSM");
|
||||
}
|
||||
} else if (args.sourceType == "content-variable") {
|
||||
if (args.source in contentWindow) {
|
||||
globalObj = Cu.getGlobalForObject(contentWindow[args.source]);
|
||||
} else {
|
||||
throw new Error(gcli.lookup("callLogChromeVarNotFoundContent"));
|
||||
throw new Error(l10n.lookup("callLogChromeVarNotFoundContent"));
|
||||
}
|
||||
} else if (args.sourceType == "chrome-variable") {
|
||||
let chromeWin = context.environment.chromeDocument.defaultView;
|
||||
if (args.source in chromeWin) {
|
||||
globalObj = Cu.getGlobalForObject(chromeWin[args.source]);
|
||||
} else {
|
||||
return gcli.lookup("callLogChromeVarNotFoundChrome");
|
||||
return l10n.lookup("callLogChromeVarNotFoundChrome");
|
||||
}
|
||||
} else {
|
||||
let chromeWin = context.environment.chromeDocument.defaultView;
|
||||
@@ -147,13 +154,13 @@ exports.items = [
|
||||
} catch(e) {
|
||||
// We need to save the message before cleaning up else e contains a dead
|
||||
// object.
|
||||
let msg = gcli.lookup("callLogChromeEvalException") + ": " + e;
|
||||
let msg = l10n.lookup("callLogChromeEvalException") + ": " + e;
|
||||
Cu.nukeSandbox(sandbox);
|
||||
return msg;
|
||||
}
|
||||
|
||||
if (typeof returnVal == "undefined") {
|
||||
return gcli.lookup("callLogChromeEvalNeedsObject");
|
||||
return l10n.lookup("callLogChromeEvalNeedsObject");
|
||||
}
|
||||
|
||||
globalObj = Cu.getGlobalForObject(returnVal);
|
||||
@@ -164,7 +171,7 @@ exports.items = [
|
||||
|
||||
dbg.onEnterFrame = function(frame) {
|
||||
// BUG 773652 - Make the output from the GCLI calllog command nicer
|
||||
contentWindow.console.log(gcli.lookup("callLogChromeMethodCall") +
|
||||
contentWindow.console.log(l10n.lookup("callLogChromeMethodCall") +
|
||||
": " + this.callDescription(frame));
|
||||
}.bind(this);
|
||||
|
||||
@@ -172,7 +179,7 @@ exports.items = [
|
||||
let target = TargetFactory.forTab(gBrowser.selectedTab);
|
||||
gDevTools.showToolbox(target, "webconsole");
|
||||
|
||||
return gcli.lookup("calllogChromeStartReply");
|
||||
return l10n.lookup("calllogChromeStartReply");
|
||||
},
|
||||
|
||||
valueToString: function(value) {
|
||||
@@ -182,19 +189,21 @@ exports.items = [
|
||||
},
|
||||
|
||||
callDescription: function(frame) {
|
||||
let name = frame.callee.name || gcli.lookup("callLogChromeAnonFunction");
|
||||
let name = frame.callee.name || l10n.lookup("callLogChromeAnonFunction");
|
||||
let args = frame.arguments.map(this.valueToString).join(", ");
|
||||
return name + "(" + args + ")";
|
||||
}
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "calllog chromestop",
|
||||
description: gcli.lookup("calllogChromeStopDesc"),
|
||||
description: l10n.lookup("calllogChromeStopDesc"),
|
||||
get hidden() gcli.hiddenByChromePref(),
|
||||
exec: function(args, context) {
|
||||
let numDebuggers = chromeDebuggers.length;
|
||||
if (numDebuggers == 0) {
|
||||
return gcli.lookup("calllogChromeStopNoLogging");
|
||||
return l10n.lookup("calllogChromeStopNoLogging");
|
||||
}
|
||||
|
||||
for (let dbg of chromeDebuggers) {
|
||||
@@ -207,7 +216,7 @@ exports.items = [
|
||||
chromeDebuggers = [];
|
||||
sandboxes = [];
|
||||
|
||||
return gcli.lookupFormat("calllogChromeStopReply", [ numDebuggers ]);
|
||||
return l10n.lookupFormat("calllogChromeStopReply", [ numDebuggers ]);
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
@@ -11,6 +11,7 @@ const { Promise: promise } = require("resource://gre/modules/Promise.jsm");
|
||||
const { OS } = Cu.import("resource://gre/modules/osfile.jsm", {});
|
||||
const { TextEncoder, TextDecoder } = Cu.import('resource://gre/modules/commonjs/toolkit/loader.js', {});
|
||||
const gcli = require("gcli/index");
|
||||
const l10n = require("gcli/l10n");
|
||||
|
||||
loader.lazyGetter(this, "prefBranch", function() {
|
||||
let prefService = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
|
||||
@@ -127,11 +128,13 @@ exports.items = [
|
||||
get hidden() {
|
||||
return !prefBranch.prefHasUserValue(PREF_DIR);
|
||||
},
|
||||
description: gcli.lookup("cmdDesc")
|
||||
description: l10n.lookup("cmdDesc")
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "cmd refresh",
|
||||
description: gcli.lookup("cmdRefreshDesc"),
|
||||
description: l10n.lookup("cmdRefreshDesc"),
|
||||
get hidden() {
|
||||
return !prefBranch.prefHasUserValue(PREF_DIR);
|
||||
},
|
||||
@@ -140,17 +143,19 @@ exports.items = [
|
||||
|
||||
let dirName = prefBranch.getComplexValue(PREF_DIR,
|
||||
Ci.nsISupportsString).data.trim();
|
||||
return gcli.lookupFormat("cmdStatus3", [ dirName ]);
|
||||
return l10n.lookupFormat("cmdStatus3", [ dirName ]);
|
||||
}
|
||||
},
|
||||
{
|
||||
item: "command",
|
||||
runAt: "client",
|
||||
name: "cmd setdir",
|
||||
description: gcli.lookup("cmdSetdirDesc"),
|
||||
manual: gcli.lookup("cmdSetdirManual2"),
|
||||
description: l10n.lookup("cmdSetdirDesc"),
|
||||
manual: l10n.lookup("cmdSetdirManual2"),
|
||||
params: [
|
||||
{
|
||||
name: "directory",
|
||||
description: gcli.lookup("cmdSetdirDirectoryDesc"),
|
||||
description: l10n.lookup("cmdSetdirDirectoryDesc"),
|
||||
type: {
|
||||
name: "file",
|
||||
filetype: "directory",
|
||||
@@ -169,7 +174,7 @@ exports.items = [
|
||||
|
||||
gcli.load();
|
||||
|
||||
return gcli.lookupFormat("cmdStatus3", [ args.directory ]);
|
||||
return l10n.lookupFormat("cmdStatus3", [ args.directory ]);
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user