mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Backed out changeset d6249744132e (bug 839862) because xpcshell bustage
This commit is contained in:
parent
0930729c5f
commit
c990c6fadd
@ -9,14 +9,12 @@ const BRAND_SHORT_NAME = Cc["@mozilla.org/intl/stringbundle;1"]
|
||||
.createBundle("chrome://branding/locale/brand.properties")
|
||||
.GetStringFromName("brandShortName");
|
||||
|
||||
this.EXPORTED_SYMBOLS = [ "CmdAddonFlags", "CmdCommands", "DEFAULT_DEBUG_PORT", "connect" ];
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js");
|
||||
Cu.import("resource://gre/modules/osfile.jsm")
|
||||
this.EXPORTED_SYMBOLS = [ "CmdAddonFlags", "CmdCommands" ];
|
||||
|
||||
Cu.import("resource:///modules/devtools/gcli.jsm");
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/osfile.jsm");
|
||||
Cu.import("resource:///modules/devtools/shared/event-emitter.js");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "gDevTools",
|
||||
@ -39,16 +37,16 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
};
|
||||
|
||||
/**
|
||||
* 'addon' command.
|
||||
*/
|
||||
* 'addon' command.
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "addon",
|
||||
description: gcli.lookup("addonDesc")
|
||||
});
|
||||
|
||||
/**
|
||||
* 'addon list' command.
|
||||
*/
|
||||
* 'addon list' command.
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "addon list",
|
||||
description: gcli.lookup("addonListDesc"),
|
||||
@ -263,11 +261,11 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
params: [nameParameter],
|
||||
exec: function(aArgs, context) {
|
||||
/**
|
||||
* Enables the addon in the passed list which has a name that matches
|
||||
* according to the passed name comparer, and resolves the promise which
|
||||
* is the scope (this) of this function to display the result of this
|
||||
* enable attempt.
|
||||
*/
|
||||
* Enables the addon in the passed list which has a name that matches
|
||||
* according to the passed name comparer, and resolves the promise which
|
||||
* is the scope (this) of this function to display the result of this
|
||||
* enable attempt.
|
||||
*/
|
||||
function enable(aName, addons) {
|
||||
// Find the add-on.
|
||||
let addon = null;
|
||||
@ -300,8 +298,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
});
|
||||
|
||||
/**
|
||||
* 'addon disable' command.
|
||||
*/
|
||||
* 'addon disable' command.
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "addon disable",
|
||||
description: gcli.lookup("addonDisableDesc"),
|
||||
@ -412,22 +410,22 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
let debuggers = [];
|
||||
|
||||
/**
|
||||
* 'calllog' command
|
||||
*/
|
||||
* 'calllog' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "calllog",
|
||||
description: gcli.lookup("calllogDesc")
|
||||
})
|
||||
|
||||
/**
|
||||
* 'calllog start' command
|
||||
*/
|
||||
* 'calllog start' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "calllog start",
|
||||
description: gcli.lookup("calllogStartDesc"),
|
||||
|
||||
exec: function(args, context) {
|
||||
let contentWindow = context.environment.window;
|
||||
let contentWindow = context.environment.contentDocument.defaultView;
|
||||
|
||||
let dbg = new Debugger(contentWindow);
|
||||
dbg.onEnterFrame = function(frame) {
|
||||
@ -469,8 +467,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
});
|
||||
|
||||
/**
|
||||
* 'calllog stop' command
|
||||
*/
|
||||
* 'calllog stop' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "calllog stop",
|
||||
description: gcli.lookup("calllogStopDesc"),
|
||||
@ -508,8 +506,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
let sandboxes = [];
|
||||
|
||||
/**
|
||||
* 'calllog chromestart' command
|
||||
*/
|
||||
* 'calllog chromestart' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "calllog chromestart",
|
||||
description: gcli.lookup("calllogChromeStartDesc"),
|
||||
@ -531,7 +529,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
],
|
||||
exec: function(args, context) {
|
||||
let globalObj;
|
||||
let contentWindow = context.environment.window;
|
||||
let contentWindow = context.environment.contentDocument.defaultView;
|
||||
|
||||
if (args.sourceType == "jsm") {
|
||||
try {
|
||||
@ -610,8 +608,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
});
|
||||
|
||||
/**
|
||||
* 'calllog chromestop' command
|
||||
*/
|
||||
* 'calllog chromestop' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "calllog chromestop",
|
||||
description: gcli.lookup("calllogChromeStopDesc"),
|
||||
@ -654,22 +652,22 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
const PREF_DIR = "devtools.commands.dir";
|
||||
|
||||
/**
|
||||
* A place to store the names of the commands that we have added as a result of
|
||||
* calling refreshAutoCommands(). Used by refreshAutoCommands to remove the
|
||||
* added commands.
|
||||
*/
|
||||
* A place to store the names of the commands that we have added as a result of
|
||||
* calling refreshAutoCommands(). Used by refreshAutoCommands to remove the
|
||||
* added commands.
|
||||
*/
|
||||
let commands = [];
|
||||
|
||||
/**
|
||||
* Exported API
|
||||
*/
|
||||
* Exported API
|
||||
*/
|
||||
this.CmdCommands = {
|
||||
/**
|
||||
* Called to look in a directory pointed at by the devtools.commands.dir pref
|
||||
* for *.mozcmd files which are then loaded.
|
||||
* @param nsIPrincipal aSandboxPrincipal Scope object for the Sandbox in which
|
||||
* we eval the script from the .mozcmd file. This should be a chrome window.
|
||||
*/
|
||||
* Called to look in a directory pointed at by the devtools.commands.dir pref
|
||||
* for *.mozcmd files which are then loaded.
|
||||
* @param nsIPrincipal aSandboxPrincipal Scope object for the Sandbox in which
|
||||
* we eval the script from the .mozcmd file. This should be a chrome window.
|
||||
*/
|
||||
refreshAutoCommands: function GC_refreshAutoCommands(aSandboxPrincipal) {
|
||||
// First get rid of the last set of commands
|
||||
commands.forEach(function(name) {
|
||||
@ -736,12 +734,12 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
};
|
||||
|
||||
/**
|
||||
* Load the commands from a single file
|
||||
* @param OS.File.DirectoryIterator.Entry aFileEntry The DirectoryIterator
|
||||
* Entry of the file containing the commands that we should read
|
||||
* @param nsIPrincipal aSandboxPrincipal Scope object for the Sandbox in which
|
||||
* we eval the script from the .mozcmd file. This should be a chrome window.
|
||||
*/
|
||||
* Load the commands from a single file
|
||||
* @param OS.File.DirectoryIterator.Entry aFileEntry The DirectoryIterator
|
||||
* Entry of the file containing the commands that we should read
|
||||
* @param nsIPrincipal aSandboxPrincipal Scope object for the Sandbox in which
|
||||
* we eval the script from the .mozcmd file. This should be a chrome window.
|
||||
*/
|
||||
function loadCommandFile(aFileEntry, aSandboxPrincipal) {
|
||||
let promise = OS.File.read(aFileEntry.path);
|
||||
promise = promise.then(
|
||||
@ -775,8 +773,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
}
|
||||
|
||||
/**
|
||||
* 'cmd' command
|
||||
*/
|
||||
* 'cmd' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "cmd",
|
||||
get hidden() { return !prefBranch.prefHasUserValue(PREF_DIR); },
|
||||
@ -784,8 +782,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
});
|
||||
|
||||
/**
|
||||
* 'cmd refresh' command
|
||||
*/
|
||||
* 'cmd refresh' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "cmd refresh",
|
||||
description: gcli.lookup("cmdRefreshDesc"),
|
||||
@ -804,8 +802,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
"resource:///modules/HUDService.jsm");
|
||||
|
||||
/**
|
||||
* 'console' command
|
||||
*/
|
||||
* 'console' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "console",
|
||||
description: gcli.lookup("consoleDesc"),
|
||||
@ -813,13 +811,14 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
});
|
||||
|
||||
/**
|
||||
* 'console clear' command
|
||||
*/
|
||||
* 'console clear' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "console clear",
|
||||
description: gcli.lookup("consoleclearDesc"),
|
||||
exec: function Command_consoleClear(args, context) {
|
||||
let hud = HUDService.getHudByWindow(context.environment.window);
|
||||
let window = context.environment.contentDocument.defaultView;
|
||||
let hud = HUDService.getHudByWindow(window);
|
||||
// hud will be null if the web console has not been opened for this window
|
||||
if (hud) {
|
||||
hud.jsterm.clearOutput();
|
||||
@ -828,8 +827,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
});
|
||||
|
||||
/**
|
||||
* 'console close' command
|
||||
*/
|
||||
* 'console close' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "console close",
|
||||
description: gcli.lookup("consolecloseDesc"),
|
||||
@ -841,8 +840,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
});
|
||||
|
||||
/**
|
||||
* 'console open' command
|
||||
*/
|
||||
* 'console open' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "console open",
|
||||
description: gcli.lookup("consoleopenDesc"),
|
||||
@ -1024,7 +1023,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
|
||||
let cookies = [];
|
||||
while (enm.hasMoreElements()) {
|
||||
let cookie = enm.getNext().QueryInterface(Ci.nsICookie);
|
||||
let cookie = enm.getNext().QueryInterface(Components.interfaces.nsICookie);
|
||||
if (isCookieAtHost(cookie, host)) {
|
||||
if (cookie.name == args.name) {
|
||||
cookieMgr.remove(cookie.host, cookie.name, cookie.path, false);
|
||||
@ -1157,21 +1156,45 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
}
|
||||
}(this));
|
||||
|
||||
/* CmdEcho ----------------------------------------------------------------- */
|
||||
|
||||
(function(module) {
|
||||
/**
|
||||
* 'echo' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "echo",
|
||||
description: gcli.lookup("echoDesc"),
|
||||
params: [
|
||||
{
|
||||
name: "message",
|
||||
type: "string",
|
||||
description: gcli.lookup("echoMessageDesc")
|
||||
}
|
||||
],
|
||||
returnType: "string",
|
||||
hidden: true,
|
||||
exec: function Command_echo(args, context) {
|
||||
return args.message;
|
||||
}
|
||||
});
|
||||
}(this));
|
||||
|
||||
/* CmdExport --------------------------------------------------------------- */
|
||||
|
||||
(function(module) {
|
||||
/**
|
||||
* 'export' command
|
||||
*/
|
||||
* 'export' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "export",
|
||||
description: gcli.lookup("exportDesc"),
|
||||
});
|
||||
|
||||
/**
|
||||
* The 'export html' command. This command allows the user to export the page to
|
||||
* HTML after they do DOM changes.
|
||||
*/
|
||||
* The 'export html' command. This command allows the user to export the page to
|
||||
* HTML after they do DOM changes.
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "export html",
|
||||
description: gcli.lookup("exportHtmlDesc"),
|
||||
@ -1193,8 +1216,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
"resource:///modules/devtools/Jsbeautify.jsm");
|
||||
|
||||
/**
|
||||
* jsb command.
|
||||
*/
|
||||
* jsb command.
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: 'jsb',
|
||||
description: gcli.lookup('jsbDesc'),
|
||||
@ -1320,17 +1343,17 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
|
||||
(function(module) {
|
||||
/**
|
||||
* 'pagemod' command
|
||||
*/
|
||||
* 'pagemod' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "pagemod",
|
||||
description: gcli.lookup("pagemodDesc"),
|
||||
});
|
||||
|
||||
/**
|
||||
* The 'pagemod replace' command. This command allows the user to search and
|
||||
* replace within text nodes and attributes.
|
||||
*/
|
||||
* The 'pagemod replace' command. This command allows the user to search and
|
||||
* replace within text nodes and attributes.
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "pagemod replace",
|
||||
description: gcli.lookup("pagemodReplaceDesc"),
|
||||
@ -1380,6 +1403,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
},
|
||||
],
|
||||
exec: function(args, context) {
|
||||
let document = context.environment.contentDocument;
|
||||
let searchTextNodes = !args.attrOnly;
|
||||
let searchAttributes = !args.contentOnly;
|
||||
let regexOptions = args.ignoreCase ? 'ig' : 'g';
|
||||
@ -1389,7 +1413,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
attributeRegex = new RegExp(args.attributes, regexOptions);
|
||||
}
|
||||
|
||||
let root = args.root || context.environment.document;
|
||||
let root = args.root || document;
|
||||
let elements = root.querySelectorAll(args.selector);
|
||||
elements = Array.prototype.slice.call(elements);
|
||||
|
||||
@ -1436,8 +1460,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
});
|
||||
|
||||
/**
|
||||
* 'pagemod remove' command
|
||||
*/
|
||||
* 'pagemod remove' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "pagemod remove",
|
||||
description: gcli.lookup("pagemodRemoveDesc"),
|
||||
@ -1445,8 +1469,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
|
||||
|
||||
/**
|
||||
* The 'pagemod remove element' command.
|
||||
*/
|
||||
* The 'pagemod remove element' command.
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "pagemod remove element",
|
||||
description: gcli.lookup("pagemodRemoveElementDesc"),
|
||||
@ -1474,7 +1498,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
},
|
||||
],
|
||||
exec: function(args, context) {
|
||||
let root = args.root || context.environment.document;
|
||||
let document = context.environment.contentDocument;
|
||||
let root = args.root || document;
|
||||
let elements = Array.prototype.slice.call(root.querySelectorAll(args.search));
|
||||
|
||||
let removed = 0;
|
||||
@ -1501,8 +1526,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
});
|
||||
|
||||
/**
|
||||
* The 'pagemod remove attribute' command.
|
||||
*/
|
||||
* The 'pagemod remove attribute' command.
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "pagemod remove attribute",
|
||||
description: gcli.lookup("pagemodRemoveAttributeDesc"),
|
||||
@ -1530,7 +1555,9 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
},
|
||||
],
|
||||
exec: function(args, context) {
|
||||
let root = args.root || context.environment.document;
|
||||
let document = context.environment.contentDocument;
|
||||
|
||||
let root = args.root || document;
|
||||
let regexOptions = args.ignoreCase ? 'ig' : 'g';
|
||||
let attributeRegex = new RegExp(args.searchAttributes, regexOptions);
|
||||
let elements = root.querySelectorAll(args.searchElements);
|
||||
@ -1559,13 +1586,13 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
});
|
||||
|
||||
/**
|
||||
* Make a given string safe to use in a regular expression.
|
||||
*
|
||||
* @param string aString
|
||||
* The string you want to use in a regex.
|
||||
* @return string
|
||||
* The equivalent of |aString| but safe to use in a regex.
|
||||
*/
|
||||
* Make a given string safe to use in a regular expression.
|
||||
*
|
||||
* @param string aString
|
||||
* The string you want to use in a regex.
|
||||
* @return string
|
||||
* The equivalent of |aString| but safe to use in a regex.
|
||||
*/
|
||||
function escapeRegex(aString) {
|
||||
return aString.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
||||
}
|
||||
@ -1595,21 +1622,22 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
],
|
||||
returnType: "string",
|
||||
exec: function(args, context) {
|
||||
return OS.File.exists(args.srcdir + "/CLOBBER").then(function(exists) {
|
||||
let promise = context.createPromise();
|
||||
let existsPromise = OS.File.exists(args.srcdir + "/CLOBBER");
|
||||
existsPromise.then(function(exists) {
|
||||
if (exists) {
|
||||
let str = Cc["@mozilla.org/supports-string;1"]
|
||||
.createInstance(Ci.nsISupportsString);
|
||||
var str = Cc["@mozilla.org/supports-string;1"]
|
||||
.createInstance(Ci.nsISupportsString);
|
||||
str.data = args.srcdir;
|
||||
Services.prefs.setComplexValue("devtools.loader.srcdir",
|
||||
Ci.nsISupportsString, str);
|
||||
Components.interfaces.nsISupportsString, str);
|
||||
devtools.reload();
|
||||
|
||||
let msg = gcli.lookupFormat("toolsSrcdirReloaded", [args.srcdir]);
|
||||
throw new Error(msg);
|
||||
promise.resolve(gcli.lookupFormat("toolsSrcdirReloaded", [args.srcdir]));
|
||||
return;
|
||||
}
|
||||
|
||||
return gcli.lookupFormat("toolsSrcdirNotFound", [args.srcdir]);
|
||||
promise.reject(gcli.lookupFormat("toolsSrcdirNotFound", [args.srcdir]));
|
||||
});
|
||||
return promise;
|
||||
}
|
||||
});
|
||||
|
||||
@ -1643,17 +1671,18 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
|
||||
(function(module) {
|
||||
/**
|
||||
* Restart command
|
||||
*
|
||||
* @param boolean nocache
|
||||
* Disables loading content from cache upon restart.
|
||||
*
|
||||
* Examples :
|
||||
* >> restart
|
||||
* - restarts browser immediately
|
||||
* >> restart --nocache
|
||||
* - restarts immediately and starts Firefox without using cache
|
||||
*/
|
||||
* Restart command
|
||||
*
|
||||
* @param boolean nocache
|
||||
* Disables loading content from cache upon restart.
|
||||
*
|
||||
* Examples :
|
||||
* >> restart
|
||||
* - restarts browser immediately
|
||||
* >> restart --nocache
|
||||
* - restarts immediately and starts Firefox without using cache
|
||||
*/
|
||||
|
||||
gcli.addCommand({
|
||||
name: "restart",
|
||||
description: gcli.lookupFormat("restartBrowserDesc", [BRAND_SHORT_NAME]),
|
||||
@ -1698,13 +1727,13 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
const FILENAME_DEFAULT_VALUE = " ";
|
||||
|
||||
/**
|
||||
* 'screenshot' command
|
||||
*/
|
||||
* 'screenshot' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "screenshot",
|
||||
description: gcli.lookup("screenshotDesc"),
|
||||
manual: gcli.lookup("screenshotManual"),
|
||||
returnType: "dom",
|
||||
returnType: "html",
|
||||
params: [
|
||||
{
|
||||
name: "filename",
|
||||
@ -1759,7 +1788,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
throw new Error(gcli.lookup("screenshotSelectorChromeConflict"));
|
||||
}
|
||||
var document = args.chrome? context.environment.chromeDocument
|
||||
: context.environment.document;
|
||||
: context.environment.contentDocument;
|
||||
if (args.delay > 0) {
|
||||
var deferred = context.defer();
|
||||
document.defaultView.setTimeout(function Command_screenshotDelay() {
|
||||
@ -1774,7 +1803,9 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
args.fullpage, args.selector);
|
||||
}
|
||||
},
|
||||
grabScreen: function(document, filename, clipboard, fullpage, node) {
|
||||
grabScreen:
|
||||
function Command_screenshotGrabScreen(document, filename, clipboard,
|
||||
fullpage, node) {
|
||||
let window = document.defaultView;
|
||||
let canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
|
||||
let left = 0;
|
||||
@ -1917,205 +1948,13 @@ XPCOMUtils.defineLazyModuleGetter(this, "AppCacheUtils",
|
||||
});
|
||||
}(this));
|
||||
|
||||
|
||||
/* Remoting ----------------------------------------------------------- */
|
||||
|
||||
const { DebuggerServer } = Cu.import("resource://gre/modules/devtools/dbg-server.jsm", {});
|
||||
|
||||
/**
|
||||
* 'listen' command
|
||||
*/
|
||||
gcli.addCommand({
|
||||
name: "listen",
|
||||
description: gcli.lookup("listenDesc"),
|
||||
manual: gcli.lookup("listenManual"),
|
||||
params: [
|
||||
{
|
||||
name: "port",
|
||||
type: "number",
|
||||
get defaultValue() {
|
||||
return Services.prefs.getIntPref("devtools.debugger.chrome-debugging-port");
|
||||
},
|
||||
description: gcli.lookup("listenPortDesc"),
|
||||
}
|
||||
],
|
||||
exec: function Command_screenshot(args, context) {
|
||||
if (!DebuggerServer.initialized) {
|
||||
DebuggerServer.init();
|
||||
DebuggerServer.addBrowserActors();
|
||||
}
|
||||
var reply = DebuggerServer.openListener(args.port);
|
||||
if (!reply) {
|
||||
throw new Error(gcli.lookup("listenDisabledOutput"));
|
||||
}
|
||||
|
||||
if (DebuggerServer.initialized) {
|
||||
return gcli.lookupFormat("listenInitOutput", [ '' + args.port ]);
|
||||
}
|
||||
|
||||
return gcli.lookup("listenNoInitOutput");
|
||||
},
|
||||
});
|
||||
|
||||
const {
|
||||
debuggerSocketConnect, DebuggerClient
|
||||
} = Cu.import('resource://gre/modules/devtools/dbg-client.jsm', {});
|
||||
|
||||
/**
|
||||
* Create a Connection object and initiate a connection.
|
||||
*/
|
||||
function connect(prefix, host, port) {
|
||||
let connection = new Connection(prefix, host, port);
|
||||
return connection.connect().then(function() {
|
||||
return connection;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Manage a named connection to an HTTP server over web-sockets using socket.io
|
||||
*/
|
||||
function Connection(prefix, host, port) {
|
||||
this.prefix = prefix;
|
||||
this.host = host;
|
||||
this.port = port;
|
||||
|
||||
// Properties setup by connect()
|
||||
this.actor = undefined;
|
||||
this.transport = undefined;
|
||||
this.client = undefined;
|
||||
|
||||
this.requests = {};
|
||||
this.nextRequestId = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup socket.io, retrieve the list of remote commands and register them with
|
||||
* the local canon.
|
||||
* @return a promise which resolves (to undefined) when the connection is made
|
||||
* or is rejected (with an error message) if the connection fails
|
||||
*/
|
||||
Connection.prototype.connect = function() {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
this.transport = debuggerSocketConnect(this.host, this.port);
|
||||
this.client = new DebuggerClient(this.transport);
|
||||
|
||||
this.client.connect(() => {
|
||||
this.client.listTabs(response => {
|
||||
this.actor = response.gcliActor;
|
||||
deferred.resolve();
|
||||
});
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
* Retrieve the list of remote commands.
|
||||
* @return a promise of an array of commandSpecs
|
||||
*/
|
||||
Connection.prototype.getCommandSpecs = function() {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
let request = { to: this.actor, type: 'getCommandSpecs' };
|
||||
|
||||
this.client.request(request, (response) => {
|
||||
deferred.resolve(response.commandSpecs);
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
* Send an execute request. Replies are handled by the setup in connect()
|
||||
*/
|
||||
Connection.prototype.execute = function(typed, cmdArgs) {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
let request = {
|
||||
to: this.actor,
|
||||
type: 'execute',
|
||||
typed: typed,
|
||||
args: cmdArgs
|
||||
};
|
||||
|
||||
this.client.request(request, (response) => {
|
||||
deferred.resolve(response.reply);
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
* Send an execute request.
|
||||
*/
|
||||
Connection.prototype.execute = function(typed, cmdArgs) {
|
||||
var request = new Request(this.actor, typed, cmdArgs);
|
||||
this.requests[request.json.id] = request;
|
||||
|
||||
this.client.request(request.json, (response) => {
|
||||
let request = this.requests[response.id];
|
||||
delete this.requests[response.id];
|
||||
|
||||
request.complete(response.error, response.type, response.data);
|
||||
});
|
||||
|
||||
return request.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
* Kill this connection
|
||||
*/
|
||||
Connection.prototype.disconnect = function() {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
this.client.close(() => {
|
||||
deferred.resolve();
|
||||
});
|
||||
|
||||
return request.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
* A Request is a command typed at the client which lives until the command
|
||||
* has finished executing on the server
|
||||
*/
|
||||
function Request(actor, typed, args) {
|
||||
this.json = {
|
||||
to: actor,
|
||||
type: 'execute',
|
||||
typed: typed,
|
||||
args: args,
|
||||
id: Request._nextRequestId++,
|
||||
};
|
||||
|
||||
this._deferred = Promise.defer();
|
||||
this.promise = this._deferred.promise;
|
||||
}
|
||||
|
||||
Request._nextRequestId = 0;
|
||||
|
||||
/**
|
||||
* Called by the connection when a remote command has finished executing
|
||||
* @param error boolean indicating output state
|
||||
* @param type the type of the returned data
|
||||
* @param data the data itself
|
||||
*/
|
||||
Request.prototype.complete = function(error, type, data) {
|
||||
this._deferred.resolve({
|
||||
error: error,
|
||||
type: type,
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/* CmdPaintFlashing ------------------------------------------------------- */
|
||||
|
||||
(function(module) {
|
||||
/**
|
||||
* 'paintflashing' command
|
||||
*/
|
||||
* 'paintflashing' command
|
||||
*/
|
||||
|
||||
gcli.addCommand({
|
||||
name: 'paintflashing',
|
||||
description: gcli.lookup('paintflashingDesc')
|
||||
@ -2137,13 +1976,15 @@ Request.prototype.complete = function(error, type, data) {
|
||||
]
|
||||
}],
|
||||
exec: function(args, context) {
|
||||
var window = args.chrome ?
|
||||
context.environment.chromeWindow :
|
||||
context.environment.window;
|
||||
|
||||
window.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindowUtils)
|
||||
.paintFlashing = true;
|
||||
var window;
|
||||
if (args.chrome) {
|
||||
window = context.environment.chromeDocument.defaultView;
|
||||
} else {
|
||||
window = context.environment.contentDocument.defaultView;
|
||||
}
|
||||
window.QueryInterface(Ci.nsIInterfaceRequestor).
|
||||
getInterface(Ci.nsIDOMWindowUtils).
|
||||
paintFlashing = true;
|
||||
onPaintFlashingChanged(context);
|
||||
}
|
||||
});
|
||||
@ -2164,13 +2005,14 @@ Request.prototype.complete = function(error, type, data) {
|
||||
]
|
||||
}],
|
||||
exec: function(args, context) {
|
||||
var window = args.chrome ?
|
||||
context.environment.chromeWindow :
|
||||
context.environment.window;
|
||||
|
||||
window.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindowUtils)
|
||||
.paintFlashing = false;
|
||||
if (args.chrome) {
|
||||
var window = context.environment.chromeDocument.defaultView;
|
||||
} else {
|
||||
var window = context.environment.contentDocument.defaultView;
|
||||
}
|
||||
window.QueryInterface(Ci.nsIInterfaceRequestor).
|
||||
getInterface(Ci.nsIDOMWindowUtils).
|
||||
paintFlashing = false;
|
||||
onPaintFlashingChanged(context);
|
||||
}
|
||||
});
|
||||
@ -2229,8 +2071,8 @@ Request.prototype.complete = function(error, type, data) {
|
||||
|
||||
(function(module) {
|
||||
/**
|
||||
* 'appcache' command
|
||||
*/
|
||||
* 'appcache' command
|
||||
*/
|
||||
|
||||
gcli.addCommand({
|
||||
name: 'appcache',
|
||||
@ -2283,19 +2125,20 @@ Request.prototype.complete = function(error, type, data) {
|
||||
}],
|
||||
exec: function(args, context) {
|
||||
let utils;
|
||||
let deferred = context.defer();
|
||||
let promise = context.createPromise();
|
||||
|
||||
if (args.uri) {
|
||||
utils = new AppCacheUtils(args.uri);
|
||||
} else {
|
||||
utils = new AppCacheUtils(context.environment.document);
|
||||
let doc = context.environment.contentDocument;
|
||||
utils = new AppCacheUtils(doc);
|
||||
}
|
||||
|
||||
utils.validateManifest().then(function(errors) {
|
||||
deferred.resolve([errors, utils.manifestURI || "-"]);
|
||||
promise.resolve([errors, utils.manifestURI || "-"]);
|
||||
});
|
||||
|
||||
return deferred.promise;
|
||||
return promise;
|
||||
}
|
||||
});
|
||||
|
||||
@ -2395,8 +2238,11 @@ Request.prototype.complete = function(error, type, data) {
|
||||
]
|
||||
}],
|
||||
exec: function(args, context) {
|
||||
let doc = context.environment.contentDocument;
|
||||
let utils = new AppCacheUtils();
|
||||
return utils.listEntries(args.search);
|
||||
|
||||
let entries = utils.listEntries(args.search);
|
||||
return entries;
|
||||
}
|
||||
});
|
||||
|
||||
@ -2413,8 +2259,13 @@ Request.prototype.complete = function(error, type, data) {
|
||||
}
|
||||
],
|
||||
exec: function(args, context) {
|
||||
let doc = context.environment.contentDocument;
|
||||
let utils = new AppCacheUtils();
|
||||
return utils.viewEntry(args.key);
|
||||
|
||||
let result = utils.viewEntry(args.key);
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -31,7 +31,6 @@ MOCHITEST_BROWSER_FILES = \
|
||||
browser_cmd_appcache_valid_page2.html \
|
||||
browser_cmd_appcache_valid_page3.html \
|
||||
browser_cmd_commands.js \
|
||||
browser_cmd_cookie.html \
|
||||
browser_cmd_cookie.js \
|
||||
browser_cmd_jsb.js \
|
||||
browser_cmd_jsb_script.jsi \
|
||||
|
@ -56,8 +56,8 @@ function test() {
|
||||
exec: {
|
||||
output: [ /page1/, /page2/, /page3/ ]
|
||||
},
|
||||
post: function(output, text) {
|
||||
ok(!text.contains("index"), "index is not contained in output");
|
||||
post: function(output) {
|
||||
ok(!output.contains("index"), "index is not contained in output");
|
||||
}
|
||||
},
|
||||
|
||||
@ -118,11 +118,11 @@ function test() {
|
||||
exec: {
|
||||
output: [ /no results/ ]
|
||||
},
|
||||
post: function(output, text) {
|
||||
ok(!text.contains("index"), "index is not contained in output");
|
||||
ok(!text.contains("page1"), "page1 is not contained in output");
|
||||
ok(!text.contains("page2"), "page1 is not contained in output");
|
||||
ok(!text.contains("page3"), "page1 is not contained in output");
|
||||
post: function(output) {
|
||||
ok(!output.contains("index"), "index is not contained in output");
|
||||
ok(!output.contains("page1"), "page1 is not contained in output");
|
||||
ok(!output.contains("page2"), "page1 is not contained in output");
|
||||
ok(!output.contains("page3"), "page1 is not contained in output");
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -15,6 +15,17 @@ function test() {
|
||||
}).then(finish);
|
||||
}
|
||||
|
||||
tests.testEcho = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
setup: "echo message",
|
||||
exec: {
|
||||
output: "message",
|
||||
}
|
||||
}
|
||||
]);
|
||||
};
|
||||
|
||||
tests.testConsole = function(options) {
|
||||
let deferred = Promise.defer();
|
||||
let hud = null;
|
||||
|
@ -1,18 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>GCLI cookie command test</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<p>Cookie test</p>
|
||||
<p id=result></p>
|
||||
<script type="text/javascript">
|
||||
document.cookie = "zap=zep";
|
||||
document.cookie = "zip=zop";
|
||||
document.getElementById("result").innerHTML = document.cookie;
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -3,8 +3,7 @@
|
||||
|
||||
// Tests that the cookie commands works as they should
|
||||
|
||||
const TEST_URI = "http://example.com/browser/browser/devtools/commandline/"+
|
||||
"test/browser_cmd_cookie.html";
|
||||
const TEST_URI = "data:text/html;charset=utf-8,gcli-cookie";
|
||||
|
||||
function test() {
|
||||
helpers.addTabWithToolbar(TEST_URI, function(options) {
|
||||
@ -80,14 +79,14 @@ function test() {
|
||||
{
|
||||
setup: "cookie list",
|
||||
exec: {
|
||||
output: [ /zap=zep/, /zip=zop/, /Edit/ ]
|
||||
output: 'No cookies found for host'
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: "cookie set zup banana",
|
||||
setup: "cookie set fruit banana",
|
||||
check: {
|
||||
args: {
|
||||
name: { value: 'zup' },
|
||||
name: { value: 'fruit' },
|
||||
value: { value: 'banana' },
|
||||
}
|
||||
},
|
||||
@ -98,56 +97,24 @@ function test() {
|
||||
{
|
||||
setup: "cookie list",
|
||||
exec: {
|
||||
output: [ /zap=zep/, /zip=zop/, /zup=banana/, /Edit/ ]
|
||||
output: [ /fruit=banana/, /Expires:/, /Edit/ ]
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: "cookie remove zip",
|
||||
exec: { },
|
||||
setup: "cookie remove fruit",
|
||||
check: {
|
||||
args: {
|
||||
name: { value: 'fruit' },
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: ""
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: "cookie list",
|
||||
exec: {
|
||||
output: [ /zap=zep/, /zup=banana/, /Edit/ ]
|
||||
},
|
||||
post: function(output, text) {
|
||||
ok(!text.contains("zip"), "");
|
||||
ok(!text.contains("zop"), "");
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: "cookie remove zap",
|
||||
exec: { },
|
||||
},
|
||||
{
|
||||
setup: "cookie list",
|
||||
exec: {
|
||||
output: [ /zup=banana/, /Edit/ ]
|
||||
},
|
||||
post: function(output, text) {
|
||||
ok(!text.contains("zap"), "");
|
||||
ok(!text.contains("zep"), "");
|
||||
ok(!text.contains("zip"), "");
|
||||
ok(!text.contains("zop"), "");
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: "cookie remove zup",
|
||||
exec: { }
|
||||
},
|
||||
{
|
||||
setup: "cookie list",
|
||||
exec: {
|
||||
output: 'No cookies found for host example.com'
|
||||
},
|
||||
post: function(output, text) {
|
||||
ok(!text.contains("zap"), "");
|
||||
ok(!text.contains("zep"), "");
|
||||
ok(!text.contains("zip"), "");
|
||||
ok(!text.contains("zop"), "");
|
||||
ok(!text.contains("zup"), "");
|
||||
ok(!text.contains("banana"), "");
|
||||
ok(!text.contains("Edit"), "");
|
||||
output: 'No cookies found for host'
|
||||
}
|
||||
},
|
||||
]);
|
||||
|
@ -38,7 +38,6 @@ function test() {
|
||||
// var helpers = require('gclitest/helpers');
|
||||
var canon = require('gcli/canon');
|
||||
// var assert = require('test/assert');
|
||||
var Canon = canon.Canon;
|
||||
|
||||
var startCount = undefined;
|
||||
var events = undefined;
|
||||
@ -158,6 +157,8 @@ exports.testAddRemove2 = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
setup: 'testadd',
|
||||
check: {
|
||||
},
|
||||
exec: {
|
||||
output: /^3$/
|
||||
},
|
||||
@ -198,74 +199,4 @@ exports.testAddRemove3 = function(options) {
|
||||
canon.onCanonChange.remove(canonChange);
|
||||
};
|
||||
|
||||
exports.testAltCanon = function(options) {
|
||||
var altCanon = new Canon();
|
||||
|
||||
var tss = {
|
||||
name: 'tss',
|
||||
params: [
|
||||
{ name: 'str', type: 'string' },
|
||||
{ name: 'num', type: 'number' },
|
||||
{ name: 'opt', type: { name: 'selection', data: [ '1', '2', '3' ] } },
|
||||
],
|
||||
exec: function(args, context) {
|
||||
return context.commandName + ':' +
|
||||
args.str + ':' + args.num + ':' + args.opt;
|
||||
}
|
||||
};
|
||||
altCanon.addCommand(tss);
|
||||
|
||||
var commandSpecs = altCanon.getCommandSpecs();
|
||||
assert.is(JSON.stringify(commandSpecs),
|
||||
'{"tss":{"name":"tss","params":[' +
|
||||
'{"name":"str","type":"string"},' +
|
||||
'{"name":"num","type":"number"},' +
|
||||
'{"name":"opt","type":{"name":"selection","data":["1","2","3"]}}]}}',
|
||||
'JSON.stringify(commandSpecs)');
|
||||
|
||||
var remoter = function(args, context) {
|
||||
assert.is(context.commandName, 'tss', 'commandName is tss');
|
||||
|
||||
var cmd = altCanon.getCommand(context.commandName);
|
||||
return cmd.exec(args, context);
|
||||
};
|
||||
|
||||
canon.addProxyCommands('proxy', commandSpecs, remoter, 'test');
|
||||
|
||||
var parent = canon.getCommand('proxy');
|
||||
assert.is(parent.name, 'proxy', 'Parent command called proxy');
|
||||
|
||||
var child = canon.getCommand('proxy tss');
|
||||
assert.is(child.name, 'proxy tss', 'child command called proxy tss');
|
||||
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
setup: 'proxy tss foo 6 3',
|
||||
check: {
|
||||
input: 'proxy tss foo 6 3',
|
||||
hints: '',
|
||||
markup: 'VVVVVVVVVVVVVVVVV',
|
||||
cursor: 17,
|
||||
status: 'VALID',
|
||||
args: {
|
||||
str: { value: 'foo', status: 'VALID' },
|
||||
num: { value: 6, status: 'VALID' },
|
||||
opt: { value: '3', status: 'VALID' }
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'tss:foo:6:3'
|
||||
},
|
||||
post: function() {
|
||||
canon.removeCommand('proxy');
|
||||
canon.removeCommand('proxy tss');
|
||||
|
||||
assert.is(canon.getCommand('proxy'), undefined, 'remove proxy');
|
||||
assert.is(canon.getCommand('proxy tss'), undefined, 'remove proxy tss');
|
||||
}
|
||||
}
|
||||
]);
|
||||
};
|
||||
|
||||
|
||||
// });
|
||||
|
@ -758,6 +758,7 @@ exports.testSingleFloat = function(options) {
|
||||
current: '__command',
|
||||
status: 'ERROR',
|
||||
error: '',
|
||||
predictions: [ ],
|
||||
unassigned: [ ],
|
||||
args: {
|
||||
command: { name: 'tsf' },
|
||||
|
@ -519,9 +519,9 @@ exports.testSpaceComplete = function(options) {
|
||||
msg: { status: 'INCOMPLETE', message: '' },
|
||||
num: { status: 'VALID' },
|
||||
sel: { status: 'VALID' },
|
||||
bool: { value: false, status: 'VALID' },
|
||||
bool: { value: false,status: 'VALID' },
|
||||
num2: { status: 'VALID' },
|
||||
bool2: { value: false, status: 'VALID' },
|
||||
bool2: { value: false,status: 'VALID' },
|
||||
sel2: {
|
||||
value: 'with space',
|
||||
arg: ' --sel2 \'with space\' ',
|
||||
|
@ -1,276 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012, Mozilla Foundation and contributors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// define(function(require, exports, module) {
|
||||
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
|
||||
var exports = {};
|
||||
|
||||
const TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testContext.js</p>";
|
||||
|
||||
function test() {
|
||||
helpers.addTabWithToolbar(TEST_URI, function(options) {
|
||||
return helpers.runTests(options, exports);
|
||||
}).then(finish);
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
'use strict';
|
||||
|
||||
// var helpers = require('gclitest/helpers');
|
||||
// var mockCommands = require('gclitest/mockCommands');
|
||||
var cli = require('gcli/cli');
|
||||
|
||||
var origLogErrors = undefined;
|
||||
|
||||
exports.setup = function(options) {
|
||||
mockCommands.setup();
|
||||
|
||||
origLogErrors = cli.logErrors;
|
||||
cli.logErrors = false;
|
||||
};
|
||||
|
||||
exports.shutdown = function(options) {
|
||||
mockCommands.shutdown();
|
||||
|
||||
cli.logErrors = origLogErrors;
|
||||
origLogErrors = undefined;
|
||||
};
|
||||
|
||||
exports.testBaseline = function(options) {
|
||||
helpers.audit(options, [
|
||||
// These 3 establish a baseline for comparison when we have used the
|
||||
// context command
|
||||
{
|
||||
setup: 'ext',
|
||||
check: {
|
||||
input: 'ext',
|
||||
hints: ' -> context',
|
||||
markup: 'III',
|
||||
message: '',
|
||||
predictions: [ 'context', 'tsn ext', 'tsn exte', 'tsn exten', 'tsn extend' ],
|
||||
unassigned: [ ],
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: 'ext test',
|
||||
check: {
|
||||
input: 'ext test',
|
||||
hints: '',
|
||||
markup: 'IIIVEEEE',
|
||||
status: 'ERROR',
|
||||
message: 'Too many arguments',
|
||||
unassigned: [ ' test' ],
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: 'tsn',
|
||||
check: {
|
||||
input: 'tsn',
|
||||
hints: '',
|
||||
markup: 'III',
|
||||
cursor: 3,
|
||||
current: '__command',
|
||||
status: 'ERROR',
|
||||
predictionsContains: [ 'tsn', 'tsn deep', 'tsn ext', 'tsn exte' ],
|
||||
args: {
|
||||
command: { name: 'tsn' },
|
||||
}
|
||||
}
|
||||
}
|
||||
]);
|
||||
};
|
||||
|
||||
exports.testContext = function(options) {
|
||||
helpers.audit(options, [
|
||||
// Use the 'tsn' context
|
||||
{
|
||||
setup: 'context tsn',
|
||||
check: {
|
||||
input: 'context tsn',
|
||||
hints: '',
|
||||
markup: 'VVVVVVVVVVV',
|
||||
message: '',
|
||||
predictionsContains: [ 'tsn', 'tsn deep', 'tsn ext', 'tsn exte' ],
|
||||
args: {
|
||||
command: { name: 'context' },
|
||||
prefix: {
|
||||
value: mockCommands.commands.tsn,
|
||||
status: 'VALID',
|
||||
message: ''
|
||||
},
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Using tsn as a command prefix',
|
||||
completed: true,
|
||||
}
|
||||
},
|
||||
// For comparison with earlier
|
||||
{
|
||||
setup: 'ext',
|
||||
check: {
|
||||
input: 'ext',
|
||||
hints: ' <text>',
|
||||
markup: 'VVV',
|
||||
predictions: [ 'tsn ext', 'tsn exte', 'tsn exten', 'tsn extend' ],
|
||||
args: {
|
||||
command: { name: 'tsn ext' },
|
||||
text: {
|
||||
value: undefined,
|
||||
arg: '',
|
||||
status: 'INCOMPLETE',
|
||||
message: ''
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: 'ext test',
|
||||
check: {
|
||||
input: 'ext test',
|
||||
hints: '',
|
||||
markup: 'VVVVVVVV',
|
||||
args: {
|
||||
command: { name: 'tsn ext' },
|
||||
text: {
|
||||
value: 'test',
|
||||
arg: ' test',
|
||||
status: 'VALID',
|
||||
message: ''
|
||||
},
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Exec: tsnExt text=test',
|
||||
completed: true,
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: 'tsn',
|
||||
check: {
|
||||
input: 'tsn',
|
||||
hints: '',
|
||||
markup: 'III',
|
||||
message: '',
|
||||
predictionsContains: [ 'tsn', 'tsn deep', 'tsn ext', 'tsn exte' ],
|
||||
args: {
|
||||
command: { name: 'tsn' },
|
||||
}
|
||||
}
|
||||
},
|
||||
// Does it actually work?
|
||||
{
|
||||
setup: 'tsb true',
|
||||
check: {
|
||||
input: 'tsb true',
|
||||
hints: '',
|
||||
markup: 'VVVVVVVV',
|
||||
options: [ 'true' ],
|
||||
message: '',
|
||||
predictions: [ 'true' ],
|
||||
unassigned: [ ],
|
||||
args: {
|
||||
command: { name: 'tsb' },
|
||||
toggle: { value: true, arg: ' true', status: 'VALID', message: '' },
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
// Bug 866710 - GCLI should allow argument merging for non-string parameters
|
||||
setup: 'context tsn ext',
|
||||
skip: true
|
||||
},
|
||||
{
|
||||
setup: 'context "tsn ext"',
|
||||
check: {
|
||||
input: 'context "tsn ext"',
|
||||
hints: '',
|
||||
markup: 'VVVVVVVVVVVVVVVVV',
|
||||
message: '',
|
||||
predictions: [ ],
|
||||
unassigned: [ ],
|
||||
args: {
|
||||
command: { name: 'context' },
|
||||
prefix: {
|
||||
value: mockCommands.commands.tsnExt,
|
||||
status: 'VALID',
|
||||
message: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Error: Can\'t use \'tsn ext\' as a prefix because it is not a parent command.',
|
||||
completed: true,
|
||||
error: true
|
||||
}
|
||||
},
|
||||
/*
|
||||
{
|
||||
setup: 'context "tsn deep"',
|
||||
check: {
|
||||
input: 'context "tsn deep"',
|
||||
hints: '',
|
||||
markup: 'VVVVVVVVVVVVVVVVVV',
|
||||
status: 'ERROR',
|
||||
message: '',
|
||||
predictions: [ 'tsn deep' ],
|
||||
unassigned: [ ],
|
||||
args: {
|
||||
command: { name: 'context' },
|
||||
prefix: {
|
||||
value: mockCommands.commands.tsnDeep,
|
||||
status: 'VALID',
|
||||
message: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: '',
|
||||
completed: true,
|
||||
}
|
||||
},
|
||||
*/
|
||||
{
|
||||
setup: 'context',
|
||||
check: {
|
||||
input: 'context',
|
||||
hints: ' [prefix]',
|
||||
markup: 'VVVVVVV',
|
||||
status: 'VALID',
|
||||
unassigned: [ ],
|
||||
args: {
|
||||
command: { name: 'context' },
|
||||
prefix: { value: undefined, arg: '', status: 'VALID', message: '' },
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
output: 'Command prefix is unset',
|
||||
completed: true,
|
||||
type: 'string',
|
||||
error: false
|
||||
}
|
||||
}
|
||||
]);
|
||||
};
|
||||
|
||||
|
||||
// });
|
@ -1,99 +0,0 @@
|
||||
/*
|
||||
* Copyright 2009-2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE.txt or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
|
||||
// define(function(require, exports, module) {
|
||||
|
||||
// <INJECTED SOURCE:START>
|
||||
|
||||
// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT
|
||||
// DO NOT EDIT IT DIRECTLY
|
||||
|
||||
var exports = {};
|
||||
|
||||
const TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testFail.js</p>";
|
||||
|
||||
function test() {
|
||||
helpers.addTabWithToolbar(TEST_URI, function(options) {
|
||||
return helpers.runTests(options, exports);
|
||||
}).then(finish);
|
||||
}
|
||||
|
||||
// <INJECTED SOURCE:END>
|
||||
|
||||
'use strict';
|
||||
|
||||
// var helpers = require('gclitest/helpers');
|
||||
// var mockCommands = require('gclitest/mockCommands');
|
||||
var cli = require('gcli/cli');
|
||||
|
||||
var origLogErrors = undefined;
|
||||
|
||||
exports.setup = function(options) {
|
||||
mockCommands.setup();
|
||||
|
||||
origLogErrors = cli.logErrors;
|
||||
cli.logErrors = false;
|
||||
};
|
||||
|
||||
exports.shutdown = function(options) {
|
||||
mockCommands.shutdown();
|
||||
|
||||
cli.logErrors = origLogErrors;
|
||||
origLogErrors = undefined;
|
||||
};
|
||||
|
||||
exports.testBasic = function(options) {
|
||||
return helpers.audit(options, [
|
||||
{
|
||||
setup: 'tsfail reject',
|
||||
exec: {
|
||||
completed: false,
|
||||
output: 'rejected promise',
|
||||
type: 'error',
|
||||
error: true
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: 'tsfail rejecttyped',
|
||||
exec: {
|
||||
completed: false,
|
||||
output: '54',
|
||||
type: 'number',
|
||||
error: true
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: 'tsfail throwerror',
|
||||
exec: {
|
||||
completed: true,
|
||||
output: 'Error: thrown error',
|
||||
type: 'error',
|
||||
error: true
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: 'tsfail throwstring',
|
||||
exec: {
|
||||
completed: true,
|
||||
output: 'thrown string',
|
||||
type: 'error',
|
||||
error: true
|
||||
}
|
||||
},
|
||||
{
|
||||
setup: 'tsfail noerror',
|
||||
exec: {
|
||||
completed: true,
|
||||
output: 'no error',
|
||||
type: 'string',
|
||||
error: false
|
||||
}
|
||||
}
|
||||
]);
|
||||
};
|
||||
|
||||
|
||||
// });
|
@ -40,15 +40,22 @@ var KeyEvent = require('util/util').KeyEvent;
|
||||
// var mockCommands = require('gclitest/mockCommands');
|
||||
|
||||
var latestEvent = undefined;
|
||||
var latestOutput = undefined;
|
||||
var latestData = undefined;
|
||||
|
||||
var outputted = function(ev) {
|
||||
latestEvent = ev;
|
||||
function updateData() {
|
||||
latestData = latestOutput.data;
|
||||
}
|
||||
|
||||
ev.output.promise.then(function() {
|
||||
latestData = ev.output.data;
|
||||
ev.output.onClose();
|
||||
});
|
||||
if (latestOutput != null) {
|
||||
ev.output.onChange.remove(updateData);
|
||||
}
|
||||
|
||||
latestEvent = ev;
|
||||
latestOutput = ev.output;
|
||||
|
||||
ev.output.onChange.add(updateData);
|
||||
};
|
||||
|
||||
|
||||
@ -64,6 +71,7 @@ exports.shutdown = function(options) {
|
||||
|
||||
exports.testOutput = function(options) {
|
||||
latestEvent = undefined;
|
||||
latestOutput = undefined;
|
||||
latestData = undefined;
|
||||
|
||||
var inputter = options.display.inputter;
|
||||
@ -95,6 +103,8 @@ exports.testOutput = function(options) {
|
||||
var ev3 = { keyCode: KeyEvent.DOM_VK_ESCAPE };
|
||||
return inputter.handleKeyUp(ev3).then(function() {
|
||||
assert.ok(!focusManager._helpRequested, 'ESCAPE = anti help');
|
||||
|
||||
latestOutput.onClose();
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -61,7 +61,7 @@ exports.testAllPredictions1 = function(options) {
|
||||
return;
|
||||
}
|
||||
|
||||
var resource = types.createType('resource');
|
||||
var resource = types.getType('resource');
|
||||
return resource.getLookup().then(function(opts) {
|
||||
assert.ok(opts.length > 1, 'have all resources');
|
||||
|
||||
@ -77,7 +77,7 @@ exports.testScriptPredictions = function(options) {
|
||||
return;
|
||||
}
|
||||
|
||||
var resource = types.createType({ name: 'resource', include: 'text/javascript' });
|
||||
var resource = types.getType({ name: 'resource', include: 'text/javascript' });
|
||||
return resource.getLookup().then(function(opts) {
|
||||
assert.ok(opts.length > 1, 'have js resources');
|
||||
|
||||
@ -93,7 +93,7 @@ exports.testStylePredictions = function(options) {
|
||||
return;
|
||||
}
|
||||
|
||||
var resource = types.createType({ name: 'resource', include: 'text/css' });
|
||||
var resource = types.getType({ name: 'resource', include: 'text/css' });
|
||||
return resource.getLookup().then(function(opts) {
|
||||
assert.ok(opts.length >= 1, 'have css resources');
|
||||
|
||||
@ -109,11 +109,11 @@ exports.testAllPredictions2 = function(options) {
|
||||
return;
|
||||
}
|
||||
|
||||
var scriptRes = types.createType({ name: 'resource', include: 'text/javascript' });
|
||||
var scriptRes = types.getType({ name: 'resource', include: 'text/javascript' });
|
||||
return scriptRes.getLookup().then(function(scriptOptions) {
|
||||
var styleRes = types.createType({ name: 'resource', include: 'text/css' });
|
||||
var styleRes = types.getType({ name: 'resource', include: 'text/css' });
|
||||
return styleRes.getLookup().then(function(styleOptions) {
|
||||
var allRes = types.createType({ name: 'resource' });
|
||||
var allRes = types.getType({ name: 'resource' });
|
||||
return allRes.getLookup().then(function(allOptions) {
|
||||
assert.is(scriptOptions.length + styleOptions.length,
|
||||
allOptions.length,
|
||||
@ -129,9 +129,9 @@ exports.testAllPredictions3 = function(options) {
|
||||
return;
|
||||
}
|
||||
|
||||
var res1 = types.createType({ name: 'resource' });
|
||||
var res1 = types.getType({ name: 'resource' });
|
||||
return res1.getLookup().then(function(options1) {
|
||||
var res2 = types.createType('resource');
|
||||
var res2 = types.getType('resource');
|
||||
return res2.getLookup().then(function(options2) {
|
||||
assert.is(options1.length, options2.length, 'type spec');
|
||||
});
|
||||
|
@ -36,7 +36,6 @@ function test() {
|
||||
'use strict';
|
||||
|
||||
// var assert = require('test/assert');
|
||||
var cli = require('gcli/cli');
|
||||
var Requisition = require('gcli/cli').Requisition;
|
||||
var canon = require('gcli/canon');
|
||||
// var mockCommands = require('gclitest/mockCommands');
|
||||
@ -52,26 +51,26 @@ exports.shutdown = function(options) {
|
||||
|
||||
exports.testSplitSimple = function(options) {
|
||||
var args;
|
||||
var requisition = new Requisition();
|
||||
var requ = new Requisition();
|
||||
|
||||
args = cli.tokenize('s');
|
||||
requisition._split(args);
|
||||
args = requ._tokenize('s');
|
||||
requ._split(args);
|
||||
assert.is(0, args.length);
|
||||
assert.is('s', requisition.commandAssignment.arg.text);
|
||||
assert.is('s', requ.commandAssignment.arg.text);
|
||||
};
|
||||
|
||||
exports.testFlatCommand = function(options) {
|
||||
var args;
|
||||
var requisition = new Requisition();
|
||||
var requ = new Requisition();
|
||||
|
||||
args = cli.tokenize('tsv');
|
||||
requisition._split(args);
|
||||
args = requ._tokenize('tsv');
|
||||
requ._split(args);
|
||||
assert.is(0, args.length);
|
||||
assert.is('tsv', requisition.commandAssignment.value.name);
|
||||
assert.is('tsv', requ.commandAssignment.value.name);
|
||||
|
||||
args = cli.tokenize('tsv a b');
|
||||
requisition._split(args);
|
||||
assert.is('tsv', requisition.commandAssignment.value.name);
|
||||
args = requ._tokenize('tsv a b');
|
||||
requ._split(args);
|
||||
assert.is('tsv', requ.commandAssignment.value.name);
|
||||
assert.is(2, args.length);
|
||||
assert.is('a', args[0].text);
|
||||
assert.is('b', args[1].text);
|
||||
@ -84,14 +83,14 @@ exports.testJavascript = function(options) {
|
||||
}
|
||||
|
||||
var args;
|
||||
var requisition = new Requisition();
|
||||
var requ = new Requisition();
|
||||
|
||||
args = cli.tokenize('{');
|
||||
requisition._split(args);
|
||||
args = requ._tokenize('{');
|
||||
requ._split(args);
|
||||
assert.is(1, args.length);
|
||||
assert.is('', args[0].text);
|
||||
assert.is('', requisition.commandAssignment.arg.text);
|
||||
assert.is('{', requisition.commandAssignment.value.name);
|
||||
assert.is('', requ.commandAssignment.arg.text);
|
||||
assert.is('{', requ.commandAssignment.value.name);
|
||||
};
|
||||
|
||||
// BUG 663081 - add tests for sub commands
|
||||
|
@ -36,18 +36,19 @@ function test() {
|
||||
'use strict';
|
||||
|
||||
// var assert = require('test/assert');
|
||||
var cli = require('gcli/cli');
|
||||
var Requisition = require('gcli/cli').Requisition;
|
||||
|
||||
exports.testBlanks = function(options) {
|
||||
var args;
|
||||
var requ = new Requisition();
|
||||
|
||||
args = cli.tokenize('');
|
||||
args = requ._tokenize('');
|
||||
assert.is(1, args.length);
|
||||
assert.is('', args[0].text);
|
||||
assert.is('', args[0].prefix);
|
||||
assert.is('', args[0].suffix);
|
||||
|
||||
args = cli.tokenize(' ');
|
||||
args = requ._tokenize(' ');
|
||||
assert.is(1, args.length);
|
||||
assert.is('', args[0].text);
|
||||
assert.is(' ', args[0].prefix);
|
||||
@ -56,15 +57,16 @@ exports.testBlanks = function(options) {
|
||||
|
||||
exports.testTokSimple = function(options) {
|
||||
var args;
|
||||
var requ = new Requisition();
|
||||
|
||||
args = cli.tokenize('s');
|
||||
args = requ._tokenize('s');
|
||||
assert.is(1, args.length);
|
||||
assert.is('s', args[0].text);
|
||||
assert.is('', args[0].prefix);
|
||||
assert.is('', args[0].suffix);
|
||||
assert.is('Argument', args[0].type);
|
||||
|
||||
args = cli.tokenize('s s');
|
||||
args = requ._tokenize('s s');
|
||||
assert.is(2, args.length);
|
||||
assert.is('s', args[0].text);
|
||||
assert.is('', args[0].prefix);
|
||||
@ -78,22 +80,23 @@ exports.testTokSimple = function(options) {
|
||||
|
||||
exports.testJavascript = function(options) {
|
||||
var args;
|
||||
var requ = new Requisition();
|
||||
|
||||
args = cli.tokenize('{x}');
|
||||
args = requ._tokenize('{x}');
|
||||
assert.is(1, args.length);
|
||||
assert.is('x', args[0].text);
|
||||
assert.is('{', args[0].prefix);
|
||||
assert.is('}', args[0].suffix);
|
||||
assert.is('ScriptArgument', args[0].type);
|
||||
|
||||
args = cli.tokenize('{ x }');
|
||||
args = requ._tokenize('{ x }');
|
||||
assert.is(1, args.length);
|
||||
assert.is('x', args[0].text);
|
||||
assert.is('{ ', args[0].prefix);
|
||||
assert.is(' }', args[0].suffix);
|
||||
assert.is('ScriptArgument', args[0].type);
|
||||
|
||||
args = cli.tokenize('{x} {y}');
|
||||
args = requ._tokenize('{x} {y}');
|
||||
assert.is(2, args.length);
|
||||
assert.is('x', args[0].text);
|
||||
assert.is('{', args[0].prefix);
|
||||
@ -104,7 +107,7 @@ exports.testJavascript = function(options) {
|
||||
assert.is('}', args[1].suffix);
|
||||
assert.is('ScriptArgument', args[1].type);
|
||||
|
||||
args = cli.tokenize('{x}{y}');
|
||||
args = requ._tokenize('{x}{y}');
|
||||
assert.is(2, args.length);
|
||||
assert.is('x', args[0].text);
|
||||
assert.is('{', args[0].prefix);
|
||||
@ -115,21 +118,21 @@ exports.testJavascript = function(options) {
|
||||
assert.is('}', args[1].suffix);
|
||||
assert.is('ScriptArgument', args[1].type);
|
||||
|
||||
args = cli.tokenize('{');
|
||||
args = requ._tokenize('{');
|
||||
assert.is(1, args.length);
|
||||
assert.is('', args[0].text);
|
||||
assert.is('{', args[0].prefix);
|
||||
assert.is('', args[0].suffix);
|
||||
assert.is('ScriptArgument', args[0].type);
|
||||
|
||||
args = cli.tokenize('{ ');
|
||||
args = requ._tokenize('{ ');
|
||||
assert.is(1, args.length);
|
||||
assert.is('', args[0].text);
|
||||
assert.is('{ ', args[0].prefix);
|
||||
assert.is('', args[0].suffix);
|
||||
assert.is('ScriptArgument', args[0].type);
|
||||
|
||||
args = cli.tokenize('{x');
|
||||
args = requ._tokenize('{x');
|
||||
assert.is(1, args.length);
|
||||
assert.is('x', args[0].text);
|
||||
assert.is('{', args[0].prefix);
|
||||
@ -139,29 +142,30 @@ exports.testJavascript = function(options) {
|
||||
|
||||
exports.testRegularNesting = function(options) {
|
||||
var args;
|
||||
var requ = new Requisition();
|
||||
|
||||
args = cli.tokenize('{"x"}');
|
||||
args = requ._tokenize('{"x"}');
|
||||
assert.is(1, args.length);
|
||||
assert.is('"x"', args[0].text);
|
||||
assert.is('{', args[0].prefix);
|
||||
assert.is('}', args[0].suffix);
|
||||
assert.is('ScriptArgument', args[0].type);
|
||||
|
||||
args = cli.tokenize('{\'x\'}');
|
||||
args = requ._tokenize('{\'x\'}');
|
||||
assert.is(1, args.length);
|
||||
assert.is('\'x\'', args[0].text);
|
||||
assert.is('{', args[0].prefix);
|
||||
assert.is('}', args[0].suffix);
|
||||
assert.is('ScriptArgument', args[0].type);
|
||||
|
||||
args = cli.tokenize('"{x}"');
|
||||
args = requ._tokenize('"{x}"');
|
||||
assert.is(1, args.length);
|
||||
assert.is('{x}', args[0].text);
|
||||
assert.is('"', args[0].prefix);
|
||||
assert.is('"', args[0].suffix);
|
||||
assert.is('Argument', args[0].type);
|
||||
|
||||
args = cli.tokenize('\'{x}\'');
|
||||
args = requ._tokenize('\'{x}\'');
|
||||
assert.is(1, args.length);
|
||||
assert.is('{x}', args[0].text);
|
||||
assert.is('\'', args[0].prefix);
|
||||
@ -171,22 +175,23 @@ exports.testRegularNesting = function(options) {
|
||||
|
||||
exports.testDeepNesting = function(options) {
|
||||
var args;
|
||||
var requ = new Requisition();
|
||||
|
||||
args = cli.tokenize('{{}}');
|
||||
args = requ._tokenize('{{}}');
|
||||
assert.is(1, args.length);
|
||||
assert.is('{}', args[0].text);
|
||||
assert.is('{', args[0].prefix);
|
||||
assert.is('}', args[0].suffix);
|
||||
assert.is('ScriptArgument', args[0].type);
|
||||
|
||||
args = cli.tokenize('{{x} {y}}');
|
||||
args = requ._tokenize('{{x} {y}}');
|
||||
assert.is(1, args.length);
|
||||
assert.is('{x} {y}', args[0].text);
|
||||
assert.is('{', args[0].prefix);
|
||||
assert.is('}', args[0].suffix);
|
||||
assert.is('ScriptArgument', args[0].type);
|
||||
|
||||
args = cli.tokenize('{{w} {{{x}}}} {y} {{{z}}}');
|
||||
args = requ._tokenize('{{w} {{{x}}}} {y} {{{z}}}');
|
||||
|
||||
assert.is(3, args.length);
|
||||
|
||||
@ -205,7 +210,7 @@ exports.testDeepNesting = function(options) {
|
||||
assert.is('}', args[2].suffix);
|
||||
assert.is('ScriptArgument', args[2].type);
|
||||
|
||||
args = cli.tokenize('{{w} {{{x}}} {y} {{{z}}}');
|
||||
args = requ._tokenize('{{w} {{{x}}} {y} {{{z}}}');
|
||||
|
||||
assert.is(1, args.length);
|
||||
|
||||
@ -217,9 +222,10 @@ exports.testDeepNesting = function(options) {
|
||||
|
||||
exports.testStrangeNesting = function(options) {
|
||||
var args;
|
||||
var requ = new Requisition();
|
||||
|
||||
// Note: When we get real JS parsing this should break
|
||||
args = cli.tokenize('{"x}"}');
|
||||
args = requ._tokenize('{"x}"}');
|
||||
|
||||
assert.is(2, args.length);
|
||||
|
||||
@ -236,8 +242,9 @@ exports.testStrangeNesting = function(options) {
|
||||
|
||||
exports.testComplex = function(options) {
|
||||
var args;
|
||||
var requ = new Requisition();
|
||||
|
||||
args = cli.tokenize(' 1234 \'12 34\'');
|
||||
args = requ._tokenize(' 1234 \'12 34\'');
|
||||
|
||||
assert.is(2, args.length);
|
||||
|
||||
@ -251,7 +258,7 @@ exports.testComplex = function(options) {
|
||||
assert.is('\'', args[1].suffix);
|
||||
assert.is('Argument', args[1].type);
|
||||
|
||||
args = cli.tokenize('12\'34 "12 34" \\'); // 12'34 "12 34" \
|
||||
args = requ._tokenize('12\'34 "12 34" \\'); // 12'34 "12 34" \
|
||||
|
||||
assert.is(3, args.length);
|
||||
|
||||
@ -273,8 +280,9 @@ exports.testComplex = function(options) {
|
||||
|
||||
exports.testPathological = function(options) {
|
||||
var args;
|
||||
var requ = new Requisition();
|
||||
|
||||
args = cli.tokenize('a\\ b \\t\\n\\r \\\'x\\\" \'d'); // a_b \t\n\r \'x\" 'd
|
||||
args = requ._tokenize('a\\ b \\t\\n\\r \\\'x\\\" \'d'); // a_b \t\n\r \'x\" 'd
|
||||
|
||||
assert.is(4, args.length);
|
||||
|
||||
|
@ -49,22 +49,15 @@ function forEachType(options, typeSpec, callback) {
|
||||
}
|
||||
else if (name === 'delegate') {
|
||||
typeSpec.delegateType = function() {
|
||||
return types.createType('string');
|
||||
return types.getType('string');
|
||||
};
|
||||
}
|
||||
else if (name === 'array') {
|
||||
typeSpec.subtype = 'string';
|
||||
}
|
||||
|
||||
var type = types.createType(typeSpec);
|
||||
var type = types.getType(typeSpec);
|
||||
callback(type);
|
||||
|
||||
// Clean up
|
||||
delete typeSpec.name;
|
||||
delete typeSpec.requisition;
|
||||
delete typeSpec.data;
|
||||
delete typeSpec.delegateType;
|
||||
delete typeSpec.subtype;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,8 @@ let require = (Cu.import("resource://gre/modules/devtools/Require.jsm", {})).req
|
||||
Components.utils.import("resource:///modules/devtools/gcli.jsm", {});
|
||||
|
||||
let console = (Cu.import("resource://gre/modules/devtools/Console.jsm", {})).console;
|
||||
let TargetFactory = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools.TargetFactory;
|
||||
let devtools = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools;
|
||||
let TargetFactory = devtools.TargetFactory;
|
||||
|
||||
let Promise = (Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", {})).Promise;
|
||||
let assert = { ok: ok, is: is, log: info };
|
||||
@ -157,7 +158,6 @@ helpers.runTests = function(options, tests) {
|
||||
});
|
||||
|
||||
var recover = function(error) {
|
||||
ok(false, error);
|
||||
console.error(error);
|
||||
};
|
||||
|
||||
@ -341,7 +341,7 @@ helpers._createDebugCheck = function(options) {
|
||||
output += ' current: \'' + helpers._actual.current(options) + '\',\n';
|
||||
output += ' status: \'' + helpers._actual.status(options) + '\',\n';
|
||||
output += ' options: ' + outputArray(helpers._actual.options(options)) + ',\n';
|
||||
output += ' message: \'' + helpers._actual.message(options) + '\',\n';
|
||||
output += ' error: \'' + helpers._actual.message(options) + '\',\n';
|
||||
output += ' predictions: ' + outputArray(predictions) + ',\n';
|
||||
output += ' unassigned: ' + outputArray(requisition._unassigned) + ',\n';
|
||||
output += ' outputState: \'' + helpers._actual.outputState(options) + '\',\n';
|
||||
@ -378,8 +378,6 @@ helpers._createDebugCheck = function(options) {
|
||||
output += ' exec: {\n';
|
||||
output += ' output: \'\',\n';
|
||||
output += ' completed: true,\n';
|
||||
output += ' type: \'string\',\n';
|
||||
output += ' error: false\n';
|
||||
output += ' }\n';
|
||||
output += ' }\n';
|
||||
output += ']);';
|
||||
@ -704,7 +702,7 @@ helpers._check = function(options, name, checks) {
|
||||
*/
|
||||
helpers._exec = function(options, name, expected) {
|
||||
if (expected == null) {
|
||||
return Promise.resolve({});
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var output = options.display.requisition.exec({ hidden: true });
|
||||
@ -717,32 +715,20 @@ helpers._exec = function(options, name, expected) {
|
||||
|
||||
if (!options.window.document.createElement) {
|
||||
assert.log('skipping output tests (missing doc.createElement) for ' + name);
|
||||
return Promise.resolve({ output: output });
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
if (!('output' in expected)) {
|
||||
return Promise.resolve({ output: output });
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var deferred = Promise.defer();
|
||||
|
||||
var checkOutput = function() {
|
||||
var div = options.window.document.createElement('div');
|
||||
var conversionContext = options.display.requisition.conversionContext;
|
||||
|
||||
if ('type' in expected) {
|
||||
assert.is(output.type,
|
||||
expected.type,
|
||||
'output.type for: ' + name);
|
||||
}
|
||||
|
||||
if ('error' in expected) {
|
||||
assert.is(output.error,
|
||||
expected.error,
|
||||
'output.error for: ' + name);
|
||||
}
|
||||
|
||||
var convertPromise = converters.convert(output.data, output.type, 'dom',
|
||||
conversionContext);
|
||||
return convertPromise.then(function(node) {
|
||||
var nodePromise = converters.convert(output.data, output.type, 'dom',
|
||||
options.display.requisition.context);
|
||||
nodePromise.then(function(node) {
|
||||
div.appendChild(node);
|
||||
var actualOutput = div.textContent.trim();
|
||||
|
||||
@ -771,11 +757,24 @@ helpers._exec = function(options, name, expected) {
|
||||
doTest(expected.output, actualOutput);
|
||||
}
|
||||
|
||||
return { output: output, text: actualOutput };
|
||||
deferred.resolve(actualOutput);
|
||||
});
|
||||
};
|
||||
|
||||
return output.promise.then(checkOutput, checkOutput);
|
||||
if (output.completed !== false) {
|
||||
checkOutput();
|
||||
}
|
||||
else {
|
||||
var changed = function() {
|
||||
if (output.completed !== false) {
|
||||
checkOutput();
|
||||
output.onChange.remove(changed);
|
||||
}
|
||||
};
|
||||
output.onChange.add(changed);
|
||||
}
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -790,15 +789,15 @@ helpers._setup = function(options, name, action) {
|
||||
return Promise.resolve(action());
|
||||
}
|
||||
|
||||
return Promise.reject('\'setup\' property must be a string or a function. Is ' + action);
|
||||
return Promise.reject('setup must be a string or a function');
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper to shutdown the test
|
||||
*/
|
||||
helpers._post = function(name, action, data) {
|
||||
helpers._post = function(name, action, output) {
|
||||
if (typeof action === 'function') {
|
||||
return Promise.resolve(action(data.output, data.text));
|
||||
return Promise.resolve(action(output));
|
||||
}
|
||||
return Promise.resolve(action);
|
||||
};
|
||||
@ -944,22 +943,19 @@ helpers.audit = function(options, audits) {
|
||||
if (typeof chunkLen !== 'number') {
|
||||
chunkLen = 1;
|
||||
}
|
||||
|
||||
if (assert.currentTest) {
|
||||
var responseTime = (new Date().getTime() - start) / chunkLen;
|
||||
totalResponseTime += responseTime;
|
||||
if (responseTime > maxResponseTime) {
|
||||
maxResponseTime = responseTime;
|
||||
maxResponseCulprit = assert.currentTest + '/' + name;
|
||||
}
|
||||
averageOver++;
|
||||
var responseTime = (new Date().getTime() - start) / chunkLen;
|
||||
totalResponseTime += responseTime;
|
||||
if (responseTime > maxResponseTime) {
|
||||
maxResponseTime = responseTime;
|
||||
maxResponseCulprit = assert.currentTest + '/' + name;
|
||||
}
|
||||
averageOver++;
|
||||
|
||||
var checkDone = helpers._check(options, name, audit.check);
|
||||
return checkDone.then(function() {
|
||||
var execDone = helpers._exec(options, name, audit.exec);
|
||||
return execDone.then(function(data) {
|
||||
return helpers._post(name, audit.post, data).then(function() {
|
||||
return execDone.then(function(output) {
|
||||
return helpers._post(name, audit.post, output).then(function() {
|
||||
if (assert.testLogging) {
|
||||
log('- END \'' + name + '\' in ' + assert.currentTest);
|
||||
}
|
||||
@ -967,8 +963,9 @@ helpers.audit = function(options, audits) {
|
||||
});
|
||||
});
|
||||
});
|
||||
}).then(function() {
|
||||
return options.display.inputter.setInput('');
|
||||
}).then(null, function(ex) {
|
||||
console.error(ex.stack);
|
||||
throw(ex);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -29,50 +29,127 @@ Cu.import("resource:///modules/devtools/gcli.jsm", {});
|
||||
|
||||
var mockCommands = {};
|
||||
|
||||
// We use an alias for exports here because this module is used in Firefox
|
||||
// mochitests where we don't have define/require
|
||||
|
||||
'use strict';
|
||||
|
||||
var util = require('util/util');
|
||||
var canon = require('gcli/canon');
|
||||
|
||||
var types = require('gcli/types');
|
||||
var SelectionType = require('gcli/types/selection').SelectionType;
|
||||
var DelegateType = require('gcli/types/basic').DelegateType;
|
||||
|
||||
mockCommands.option1 = { };
|
||||
mockCommands.option2 = { };
|
||||
mockCommands.option3 = { };
|
||||
|
||||
mockCommands.optionType = {
|
||||
/**
|
||||
* Registration and de-registration.
|
||||
*/
|
||||
mockCommands.setup = function(opts) {
|
||||
// setup/shutdown needs to register/unregister types, however that means we
|
||||
// need to re-initialize mockCommands.option1 and mockCommands.option2 with
|
||||
// the actual types
|
||||
mockCommands.option1.type = types.getType('string');
|
||||
mockCommands.option2.type = types.getType('number');
|
||||
|
||||
types.registerType(mockCommands.optionType);
|
||||
types.registerType(mockCommands.optionValue);
|
||||
|
||||
canon.addCommand(mockCommands.tsv);
|
||||
canon.addCommand(mockCommands.tsr);
|
||||
canon.addCommand(mockCommands.tso);
|
||||
canon.addCommand(mockCommands.tse);
|
||||
canon.addCommand(mockCommands.tsj);
|
||||
canon.addCommand(mockCommands.tsb);
|
||||
canon.addCommand(mockCommands.tss);
|
||||
canon.addCommand(mockCommands.tsu);
|
||||
canon.addCommand(mockCommands.tsf);
|
||||
canon.addCommand(mockCommands.tsn);
|
||||
canon.addCommand(mockCommands.tsnDif);
|
||||
canon.addCommand(mockCommands.tsnExt);
|
||||
canon.addCommand(mockCommands.tsnExte);
|
||||
canon.addCommand(mockCommands.tsnExten);
|
||||
canon.addCommand(mockCommands.tsnExtend);
|
||||
canon.addCommand(mockCommands.tsnDeep);
|
||||
canon.addCommand(mockCommands.tsnDeepDown);
|
||||
canon.addCommand(mockCommands.tsnDeepDownNested);
|
||||
canon.addCommand(mockCommands.tsnDeepDownNestedCmd);
|
||||
canon.addCommand(mockCommands.tselarr);
|
||||
canon.addCommand(mockCommands.tsm);
|
||||
canon.addCommand(mockCommands.tsg);
|
||||
canon.addCommand(mockCommands.tshidden);
|
||||
canon.addCommand(mockCommands.tscook);
|
||||
canon.addCommand(mockCommands.tslong);
|
||||
};
|
||||
|
||||
mockCommands.shutdown = function(opts) {
|
||||
canon.removeCommand(mockCommands.tsv);
|
||||
canon.removeCommand(mockCommands.tsr);
|
||||
canon.removeCommand(mockCommands.tso);
|
||||
canon.removeCommand(mockCommands.tse);
|
||||
canon.removeCommand(mockCommands.tsj);
|
||||
canon.removeCommand(mockCommands.tsb);
|
||||
canon.removeCommand(mockCommands.tss);
|
||||
canon.removeCommand(mockCommands.tsu);
|
||||
canon.removeCommand(mockCommands.tsf);
|
||||
canon.removeCommand(mockCommands.tsn);
|
||||
canon.removeCommand(mockCommands.tsnDif);
|
||||
canon.removeCommand(mockCommands.tsnExt);
|
||||
canon.removeCommand(mockCommands.tsnExte);
|
||||
canon.removeCommand(mockCommands.tsnExten);
|
||||
canon.removeCommand(mockCommands.tsnExtend);
|
||||
canon.removeCommand(mockCommands.tsnDeep);
|
||||
canon.removeCommand(mockCommands.tsnDeepDown);
|
||||
canon.removeCommand(mockCommands.tsnDeepDownNested);
|
||||
canon.removeCommand(mockCommands.tsnDeepDownNestedCmd);
|
||||
canon.removeCommand(mockCommands.tselarr);
|
||||
canon.removeCommand(mockCommands.tsm);
|
||||
canon.removeCommand(mockCommands.tsg);
|
||||
canon.removeCommand(mockCommands.tshidden);
|
||||
canon.removeCommand(mockCommands.tscook);
|
||||
canon.removeCommand(mockCommands.tslong);
|
||||
|
||||
types.deregisterType(mockCommands.optionType);
|
||||
types.deregisterType(mockCommands.optionValue);
|
||||
};
|
||||
|
||||
|
||||
mockCommands.option1 = { type: types.getType('string') };
|
||||
mockCommands.option2 = { type: types.getType('number') };
|
||||
mockCommands.option3 = { type: types.getType({
|
||||
name: 'selection',
|
||||
lookup: [
|
||||
{ name: 'one', value: 1 },
|
||||
{ name: 'two', value: 2 },
|
||||
{ name: 'three', value: 3 }
|
||||
]
|
||||
})};
|
||||
|
||||
mockCommands.optionType = new SelectionType({
|
||||
name: 'optionType',
|
||||
parent: 'selection',
|
||||
lookup: [
|
||||
{ name: 'option1', value: mockCommands.option1 },
|
||||
{ name: 'option2', value: mockCommands.option2 },
|
||||
{ name: 'option3', value: mockCommands.option3 }
|
||||
]
|
||||
};
|
||||
});
|
||||
|
||||
mockCommands.optionValue = {
|
||||
mockCommands.optionValue = new DelegateType({
|
||||
name: 'optionValue',
|
||||
parent: 'delegate',
|
||||
delegateType: function(executionContext) {
|
||||
if (executionContext != null) {
|
||||
var option = executionContext.getArgsObject().optionType;
|
||||
delegateType: function(context) {
|
||||
if (context != null) {
|
||||
var option = context.getArgsObject().optionType;
|
||||
if (option != null) {
|
||||
return option.type;
|
||||
}
|
||||
}
|
||||
return types.createType('blank');
|
||||
return types.getType('blank');
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
mockCommands.onCommandExec = util.createEvent('commands.onCommandExec');
|
||||
|
||||
function createExec(name) {
|
||||
return function(args, executionContext) {
|
||||
return function(args, context) {
|
||||
var data = {
|
||||
command: mockCommands[name],
|
||||
args: args,
|
||||
context: executionContext
|
||||
context: context
|
||||
};
|
||||
mockCommands.onCommandExec(data);
|
||||
var argsOut = Object.keys(args).map(function(key) {
|
||||
@ -82,7 +159,7 @@ function createExec(name) {
|
||||
};
|
||||
}
|
||||
|
||||
var tsv = {
|
||||
mockCommands.tsv = {
|
||||
name: 'tsv',
|
||||
params: [
|
||||
{ name: 'optionType', type: 'optionType' },
|
||||
@ -91,19 +168,19 @@ var tsv = {
|
||||
exec: createExec('tsv')
|
||||
};
|
||||
|
||||
var tsr = {
|
||||
mockCommands.tsr = {
|
||||
name: 'tsr',
|
||||
params: [ { name: 'text', type: 'string' } ],
|
||||
exec: createExec('tsr')
|
||||
};
|
||||
|
||||
var tso = {
|
||||
mockCommands.tso = {
|
||||
name: 'tso',
|
||||
params: [ { name: 'text', type: 'string', defaultValue: null } ],
|
||||
exec: createExec('tso')
|
||||
};
|
||||
|
||||
var tse = {
|
||||
mockCommands.tse = {
|
||||
name: 'tse',
|
||||
params: [
|
||||
{ name: 'node', type: 'node' },
|
||||
@ -118,88 +195,88 @@ var tse = {
|
||||
exec: createExec('tse')
|
||||
};
|
||||
|
||||
var tsj = {
|
||||
mockCommands.tsj = {
|
||||
name: 'tsj',
|
||||
params: [ { name: 'javascript', type: 'javascript' } ],
|
||||
exec: createExec('tsj')
|
||||
};
|
||||
|
||||
var tsb = {
|
||||
mockCommands.tsb = {
|
||||
name: 'tsb',
|
||||
params: [ { name: 'toggle', type: 'boolean' } ],
|
||||
exec: createExec('tsb')
|
||||
};
|
||||
|
||||
var tss = {
|
||||
mockCommands.tss = {
|
||||
name: 'tss',
|
||||
exec: createExec('tss')
|
||||
};
|
||||
|
||||
var tsu = {
|
||||
mockCommands.tsu = {
|
||||
name: 'tsu',
|
||||
params: [ { name: 'num', type: { name: 'number', max: 10, min: -5, step: 3 } } ],
|
||||
exec: createExec('tsu')
|
||||
};
|
||||
|
||||
var tsf = {
|
||||
mockCommands.tsf = {
|
||||
name: 'tsf',
|
||||
params: [ { name: 'num', type: { name: 'number', allowFloat: true, max: 11.5, min: -6.5, step: 1.5 } } ],
|
||||
exec: createExec('tsf')
|
||||
};
|
||||
|
||||
var tsn = {
|
||||
mockCommands.tsn = {
|
||||
name: 'tsn'
|
||||
};
|
||||
|
||||
var tsnDif = {
|
||||
mockCommands.tsnDif = {
|
||||
name: 'tsn dif',
|
||||
description: 'tsn dif',
|
||||
params: [ { name: 'text', type: 'string', description: 'tsn dif text' } ],
|
||||
exec: createExec('tsnDif')
|
||||
};
|
||||
|
||||
var tsnExt = {
|
||||
mockCommands.tsnExt = {
|
||||
name: 'tsn ext',
|
||||
params: [ { name: 'text', type: 'string' } ],
|
||||
exec: createExec('tsnExt')
|
||||
};
|
||||
|
||||
var tsnExte = {
|
||||
mockCommands.tsnExte = {
|
||||
name: 'tsn exte',
|
||||
params: [ { name: 'text', type: 'string' } ],
|
||||
exec: createExec('tsnExte')
|
||||
};
|
||||
|
||||
var tsnExten = {
|
||||
mockCommands.tsnExten = {
|
||||
name: 'tsn exten',
|
||||
params: [ { name: 'text', type: 'string' } ],
|
||||
exec: createExec('tsnExten')
|
||||
};
|
||||
|
||||
var tsnExtend = {
|
||||
mockCommands.tsnExtend = {
|
||||
name: 'tsn extend',
|
||||
params: [ { name: 'text', type: 'string' } ],
|
||||
exec: createExec('tsnExtend')
|
||||
};
|
||||
|
||||
var tsnDeep = {
|
||||
mockCommands.tsnDeep = {
|
||||
name: 'tsn deep'
|
||||
};
|
||||
|
||||
var tsnDeepDown = {
|
||||
mockCommands.tsnDeepDown = {
|
||||
name: 'tsn deep down'
|
||||
};
|
||||
|
||||
var tsnDeepDownNested = {
|
||||
mockCommands.tsnDeepDownNested = {
|
||||
name: 'tsn deep down nested'
|
||||
};
|
||||
|
||||
var tsnDeepDownNestedCmd = {
|
||||
mockCommands.tsnDeepDownNestedCmd = {
|
||||
name: 'tsn deep down nested cmd',
|
||||
exec: createExec('tsnDeepDownNestedCmd')
|
||||
};
|
||||
|
||||
var tshidden = {
|
||||
mockCommands.tshidden = {
|
||||
name: 'tshidden',
|
||||
hidden: true,
|
||||
params: [
|
||||
@ -231,7 +308,7 @@ var tshidden = {
|
||||
exec: createExec('tshidden')
|
||||
};
|
||||
|
||||
var tselarr = {
|
||||
mockCommands.tselarr = {
|
||||
name: 'tselarr',
|
||||
params: [
|
||||
{ name: 'num', type: { name: 'selection', data: [ '1', '2', '3' ] } },
|
||||
@ -240,7 +317,7 @@ var tselarr = {
|
||||
exec: createExec('tselarr')
|
||||
};
|
||||
|
||||
var tsm = {
|
||||
mockCommands.tsm = {
|
||||
name: 'tsm',
|
||||
description: 'a 3-param test selection|string|number',
|
||||
params: [
|
||||
@ -251,7 +328,7 @@ var tsm = {
|
||||
exec: createExec('tsm')
|
||||
};
|
||||
|
||||
var tsg = {
|
||||
mockCommands.tsg = {
|
||||
name: 'tsg',
|
||||
description: 'a param group test',
|
||||
params: [
|
||||
@ -294,7 +371,7 @@ var tsg = {
|
||||
exec: createExec('tsg')
|
||||
};
|
||||
|
||||
var tscook = {
|
||||
mockCommands.tscook = {
|
||||
name: 'tscook',
|
||||
description: 'param group test to catch problems with cookie command',
|
||||
params: [
|
||||
@ -334,9 +411,10 @@ var tscook = {
|
||||
exec: createExec('tscook')
|
||||
};
|
||||
|
||||
var tslong = {
|
||||
mockCommands.tslong = {
|
||||
name: 'tslong',
|
||||
description: 'long param tests to catch problems with the jsb command',
|
||||
returnValue:'string',
|
||||
params: [
|
||||
{
|
||||
name: 'msg',
|
||||
@ -395,146 +473,5 @@ var tslong = {
|
||||
exec: createExec('tslong')
|
||||
};
|
||||
|
||||
var tsfail = {
|
||||
name: 'tsfail',
|
||||
description: 'test errors',
|
||||
params: [
|
||||
{
|
||||
name: 'method',
|
||||
type: {
|
||||
name: 'selection',
|
||||
data: [
|
||||
'reject', 'rejecttyped',
|
||||
'throwerror', 'throwstring', 'throwinpromise',
|
||||
'noerror'
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
exec: function(args, context) {
|
||||
if (args.method === 'reject') {
|
||||
var deferred = context.defer();
|
||||
setTimeout(function() {
|
||||
deferred.reject('rejected promise');
|
||||
}, 10);
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
if (args.method === 'rejecttyped') {
|
||||
var deferred = context.defer();
|
||||
setTimeout(function() {
|
||||
deferred.reject(context.typedData('number', 54));
|
||||
}, 10);
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
if (args.method === 'throwinpromise') {
|
||||
var deferred = context.defer();
|
||||
setTimeout(function() {
|
||||
deferred.resolve('should be lost');
|
||||
}, 10);
|
||||
return deferred.promise.then(function() {
|
||||
var t = null;
|
||||
return t.foo;
|
||||
});
|
||||
}
|
||||
|
||||
if (args.method === 'throwerror') {
|
||||
throw new Error('thrown error');
|
||||
}
|
||||
|
||||
if (args.method === 'throwstring') {
|
||||
throw 'thrown string';
|
||||
}
|
||||
|
||||
return 'no error';
|
||||
}
|
||||
};
|
||||
|
||||
mockCommands.commands = {};
|
||||
|
||||
/**
|
||||
* Registration and de-registration.
|
||||
*/
|
||||
mockCommands.setup = function(opts) {
|
||||
// setup/shutdown needs to register/unregister types, however that means we
|
||||
// need to re-initialize mockCommands.option1 and mockCommands.option2 with
|
||||
// the actual types
|
||||
mockCommands.option1.type = types.createType('string');
|
||||
mockCommands.option2.type = types.createType('number');
|
||||
mockCommands.option3.type = types.createType({
|
||||
name: 'selection',
|
||||
lookup: [
|
||||
{ name: 'one', value: 1 },
|
||||
{ name: 'two', value: 2 },
|
||||
{ name: 'three', value: 3 }
|
||||
]
|
||||
});
|
||||
|
||||
types.addType(mockCommands.optionType);
|
||||
types.addType(mockCommands.optionValue);
|
||||
|
||||
mockCommands.commands.tsv = canon.addCommand(tsv);
|
||||
mockCommands.commands.tsr = canon.addCommand(tsr);
|
||||
mockCommands.commands.tso = canon.addCommand(tso);
|
||||
mockCommands.commands.tse = canon.addCommand(tse);
|
||||
mockCommands.commands.tsj = canon.addCommand(tsj);
|
||||
mockCommands.commands.tsb = canon.addCommand(tsb);
|
||||
mockCommands.commands.tss = canon.addCommand(tss);
|
||||
mockCommands.commands.tsu = canon.addCommand(tsu);
|
||||
mockCommands.commands.tsf = canon.addCommand(tsf);
|
||||
mockCommands.commands.tsn = canon.addCommand(tsn);
|
||||
mockCommands.commands.tsnDif = canon.addCommand(tsnDif);
|
||||
mockCommands.commands.tsnExt = canon.addCommand(tsnExt);
|
||||
mockCommands.commands.tsnExte = canon.addCommand(tsnExte);
|
||||
mockCommands.commands.tsnExten = canon.addCommand(tsnExten);
|
||||
mockCommands.commands.tsnExtend = canon.addCommand(tsnExtend);
|
||||
mockCommands.commands.tsnDeep = canon.addCommand(tsnDeep);
|
||||
mockCommands.commands.tsnDeepDown = canon.addCommand(tsnDeepDown);
|
||||
mockCommands.commands.tsnDeepDownNested = canon.addCommand(tsnDeepDownNested);
|
||||
mockCommands.commands.tsnDeepDownNestedCmd = canon.addCommand(tsnDeepDownNestedCmd);
|
||||
mockCommands.commands.tselarr = canon.addCommand(tselarr);
|
||||
mockCommands.commands.tsm = canon.addCommand(tsm);
|
||||
mockCommands.commands.tsg = canon.addCommand(tsg);
|
||||
mockCommands.commands.tshidden = canon.addCommand(tshidden);
|
||||
mockCommands.commands.tscook = canon.addCommand(tscook);
|
||||
mockCommands.commands.tslong = canon.addCommand(tslong);
|
||||
mockCommands.commands.tsfail = canon.addCommand(tsfail);
|
||||
};
|
||||
|
||||
mockCommands.shutdown = function(opts) {
|
||||
canon.removeCommand(tsv);
|
||||
canon.removeCommand(tsr);
|
||||
canon.removeCommand(tso);
|
||||
canon.removeCommand(tse);
|
||||
canon.removeCommand(tsj);
|
||||
canon.removeCommand(tsb);
|
||||
canon.removeCommand(tss);
|
||||
canon.removeCommand(tsu);
|
||||
canon.removeCommand(tsf);
|
||||
canon.removeCommand(tsn);
|
||||
canon.removeCommand(tsnDif);
|
||||
canon.removeCommand(tsnExt);
|
||||
canon.removeCommand(tsnExte);
|
||||
canon.removeCommand(tsnExten);
|
||||
canon.removeCommand(tsnExtend);
|
||||
canon.removeCommand(tsnDeep);
|
||||
canon.removeCommand(tsnDeepDown);
|
||||
canon.removeCommand(tsnDeepDownNested);
|
||||
canon.removeCommand(tsnDeepDownNestedCmd);
|
||||
canon.removeCommand(tselarr);
|
||||
canon.removeCommand(tsm);
|
||||
canon.removeCommand(tsg);
|
||||
canon.removeCommand(tshidden);
|
||||
canon.removeCommand(tscook);
|
||||
canon.removeCommand(tslong);
|
||||
canon.removeCommand(tsfail);
|
||||
|
||||
types.removeType(mockCommands.optionType);
|
||||
types.removeType(mockCommands.optionValue);
|
||||
|
||||
mockCommands.commands = {};
|
||||
};
|
||||
|
||||
|
||||
// });
|
||||
|
@ -157,7 +157,7 @@ gcli.addCommand({
|
||||
description: gcli.lookup("breakaddlineLineDesc")
|
||||
}
|
||||
],
|
||||
returnType: "string",
|
||||
returnType: "html",
|
||||
exec: function(args, context) {
|
||||
args.type = "line";
|
||||
|
||||
@ -201,7 +201,7 @@ gcli.addCommand({
|
||||
description: gcli.lookup("breakdelBreakidDesc")
|
||||
}
|
||||
],
|
||||
returnType: "string",
|
||||
returnType: "html",
|
||||
exec: function(args, context) {
|
||||
let dbg = getPanel(context, "jsdebugger");
|
||||
if (!dbg) {
|
||||
@ -381,7 +381,7 @@ gcli.addCommand({
|
||||
name: "dbg list",
|
||||
description: gcli.lookup("dbgListSourcesDesc"),
|
||||
params: [],
|
||||
returnType: "dom",
|
||||
returnType: "html",
|
||||
exec: function(args, context) {
|
||||
let dbg = getPanel(context, "jsdebugger");
|
||||
let doc = context.environment.chromeDocument;
|
||||
|
@ -24,7 +24,8 @@ let require = (Cu.import("resource://gre/modules/devtools/Require.jsm", {})).req
|
||||
Components.utils.import("resource:///modules/devtools/gcli.jsm", {});
|
||||
|
||||
let console = (Cu.import("resource://gre/modules/devtools/Console.jsm", {})).console;
|
||||
let TargetFactory = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools.TargetFactory;
|
||||
let devtools = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools;
|
||||
let TargetFactory = devtools.TargetFactory;
|
||||
|
||||
let Promise = (Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", {})).Promise;
|
||||
let assert = { ok: ok, is: is, log: info };
|
||||
@ -157,7 +158,6 @@ helpers.runTests = function(options, tests) {
|
||||
});
|
||||
|
||||
var recover = function(error) {
|
||||
ok(false, error);
|
||||
console.error(error);
|
||||
};
|
||||
|
||||
@ -341,7 +341,7 @@ helpers._createDebugCheck = function(options) {
|
||||
output += ' current: \'' + helpers._actual.current(options) + '\',\n';
|
||||
output += ' status: \'' + helpers._actual.status(options) + '\',\n';
|
||||
output += ' options: ' + outputArray(helpers._actual.options(options)) + ',\n';
|
||||
output += ' message: \'' + helpers._actual.message(options) + '\',\n';
|
||||
output += ' error: \'' + helpers._actual.message(options) + '\',\n';
|
||||
output += ' predictions: ' + outputArray(predictions) + ',\n';
|
||||
output += ' unassigned: ' + outputArray(requisition._unassigned) + ',\n';
|
||||
output += ' outputState: \'' + helpers._actual.outputState(options) + '\',\n';
|
||||
@ -378,8 +378,6 @@ helpers._createDebugCheck = function(options) {
|
||||
output += ' exec: {\n';
|
||||
output += ' output: \'\',\n';
|
||||
output += ' completed: true,\n';
|
||||
output += ' type: \'string\',\n';
|
||||
output += ' error: false\n';
|
||||
output += ' }\n';
|
||||
output += ' }\n';
|
||||
output += ']);';
|
||||
@ -704,7 +702,7 @@ helpers._check = function(options, name, checks) {
|
||||
*/
|
||||
helpers._exec = function(options, name, expected) {
|
||||
if (expected == null) {
|
||||
return Promise.resolve({});
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var output = options.display.requisition.exec({ hidden: true });
|
||||
@ -717,32 +715,20 @@ helpers._exec = function(options, name, expected) {
|
||||
|
||||
if (!options.window.document.createElement) {
|
||||
assert.log('skipping output tests (missing doc.createElement) for ' + name);
|
||||
return Promise.resolve({ output: output });
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
if (!('output' in expected)) {
|
||||
return Promise.resolve({ output: output });
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var deferred = Promise.defer();
|
||||
|
||||
var checkOutput = function() {
|
||||
var div = options.window.document.createElement('div');
|
||||
var conversionContext = options.display.requisition.conversionContext;
|
||||
|
||||
if ('type' in expected) {
|
||||
assert.is(output.type,
|
||||
expected.type,
|
||||
'output.type for: ' + name);
|
||||
}
|
||||
|
||||
if ('error' in expected) {
|
||||
assert.is(output.error,
|
||||
expected.error,
|
||||
'output.error for: ' + name);
|
||||
}
|
||||
|
||||
var convertPromise = converters.convert(output.data, output.type, 'dom',
|
||||
conversionContext);
|
||||
return convertPromise.then(function(node) {
|
||||
var nodePromise = converters.convert(output.data, output.type, 'dom',
|
||||
options.display.requisition.context);
|
||||
nodePromise.then(function(node) {
|
||||
div.appendChild(node);
|
||||
var actualOutput = div.textContent.trim();
|
||||
|
||||
@ -771,11 +757,24 @@ helpers._exec = function(options, name, expected) {
|
||||
doTest(expected.output, actualOutput);
|
||||
}
|
||||
|
||||
return { output: output, text: actualOutput };
|
||||
deferred.resolve(actualOutput);
|
||||
});
|
||||
};
|
||||
|
||||
return output.promise.then(checkOutput, checkOutput);
|
||||
if (output.completed !== false) {
|
||||
checkOutput();
|
||||
}
|
||||
else {
|
||||
var changed = function() {
|
||||
if (output.completed !== false) {
|
||||
checkOutput();
|
||||
output.onChange.remove(changed);
|
||||
}
|
||||
};
|
||||
output.onChange.add(changed);
|
||||
}
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -790,15 +789,15 @@ helpers._setup = function(options, name, action) {
|
||||
return Promise.resolve(action());
|
||||
}
|
||||
|
||||
return Promise.reject('\'setup\' property must be a string or a function. Is ' + action);
|
||||
return Promise.reject('setup must be a string or a function');
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper to shutdown the test
|
||||
*/
|
||||
helpers._post = function(name, action, data) {
|
||||
helpers._post = function(name, action, output) {
|
||||
if (typeof action === 'function') {
|
||||
return Promise.resolve(action(data.output, data.text));
|
||||
return Promise.resolve(action(output));
|
||||
}
|
||||
return Promise.resolve(action);
|
||||
};
|
||||
@ -944,22 +943,19 @@ helpers.audit = function(options, audits) {
|
||||
if (typeof chunkLen !== 'number') {
|
||||
chunkLen = 1;
|
||||
}
|
||||
|
||||
if (assert.currentTest) {
|
||||
var responseTime = (new Date().getTime() - start) / chunkLen;
|
||||
totalResponseTime += responseTime;
|
||||
if (responseTime > maxResponseTime) {
|
||||
maxResponseTime = responseTime;
|
||||
maxResponseCulprit = assert.currentTest + '/' + name;
|
||||
}
|
||||
averageOver++;
|
||||
var responseTime = (new Date().getTime() - start) / chunkLen;
|
||||
totalResponseTime += responseTime;
|
||||
if (responseTime > maxResponseTime) {
|
||||
maxResponseTime = responseTime;
|
||||
maxResponseCulprit = assert.currentTest + '/' + name;
|
||||
}
|
||||
averageOver++;
|
||||
|
||||
var checkDone = helpers._check(options, name, audit.check);
|
||||
return checkDone.then(function() {
|
||||
var execDone = helpers._exec(options, name, audit.exec);
|
||||
return execDone.then(function(data) {
|
||||
return helpers._post(name, audit.post, data).then(function() {
|
||||
return execDone.then(function(output) {
|
||||
return helpers._post(name, audit.post, output).then(function() {
|
||||
if (assert.testLogging) {
|
||||
log('- END \'' + name + '\' in ' + assert.currentTest);
|
||||
}
|
||||
@ -967,8 +963,9 @@ helpers.audit = function(options, audits) {
|
||||
});
|
||||
});
|
||||
});
|
||||
}).then(function() {
|
||||
return options.display.inputter.setInput('');
|
||||
}).then(null, function(ex) {
|
||||
console.error(ex.stack);
|
||||
throw(ex);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -24,7 +24,8 @@ let require = (Cu.import("resource://gre/modules/devtools/Require.jsm", {})).req
|
||||
Components.utils.import("resource:///modules/devtools/gcli.jsm", {});
|
||||
|
||||
let console = (Cu.import("resource://gre/modules/devtools/Console.jsm", {})).console;
|
||||
let TargetFactory = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools.TargetFactory;
|
||||
let devtools = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools;
|
||||
let TargetFactory = devtools.TargetFactory;
|
||||
|
||||
let Promise = (Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", {})).Promise;
|
||||
let assert = { ok: ok, is: is, log: info };
|
||||
@ -157,7 +158,6 @@ helpers.runTests = function(options, tests) {
|
||||
});
|
||||
|
||||
var recover = function(error) {
|
||||
ok(false, error);
|
||||
console.error(error);
|
||||
};
|
||||
|
||||
@ -341,7 +341,7 @@ helpers._createDebugCheck = function(options) {
|
||||
output += ' current: \'' + helpers._actual.current(options) + '\',\n';
|
||||
output += ' status: \'' + helpers._actual.status(options) + '\',\n';
|
||||
output += ' options: ' + outputArray(helpers._actual.options(options)) + ',\n';
|
||||
output += ' message: \'' + helpers._actual.message(options) + '\',\n';
|
||||
output += ' error: \'' + helpers._actual.message(options) + '\',\n';
|
||||
output += ' predictions: ' + outputArray(predictions) + ',\n';
|
||||
output += ' unassigned: ' + outputArray(requisition._unassigned) + ',\n';
|
||||
output += ' outputState: \'' + helpers._actual.outputState(options) + '\',\n';
|
||||
@ -378,8 +378,6 @@ helpers._createDebugCheck = function(options) {
|
||||
output += ' exec: {\n';
|
||||
output += ' output: \'\',\n';
|
||||
output += ' completed: true,\n';
|
||||
output += ' type: \'string\',\n';
|
||||
output += ' error: false\n';
|
||||
output += ' }\n';
|
||||
output += ' }\n';
|
||||
output += ']);';
|
||||
@ -704,7 +702,7 @@ helpers._check = function(options, name, checks) {
|
||||
*/
|
||||
helpers._exec = function(options, name, expected) {
|
||||
if (expected == null) {
|
||||
return Promise.resolve({});
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var output = options.display.requisition.exec({ hidden: true });
|
||||
@ -717,32 +715,20 @@ helpers._exec = function(options, name, expected) {
|
||||
|
||||
if (!options.window.document.createElement) {
|
||||
assert.log('skipping output tests (missing doc.createElement) for ' + name);
|
||||
return Promise.resolve({ output: output });
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
if (!('output' in expected)) {
|
||||
return Promise.resolve({ output: output });
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var deferred = Promise.defer();
|
||||
|
||||
var checkOutput = function() {
|
||||
var div = options.window.document.createElement('div');
|
||||
var conversionContext = options.display.requisition.conversionContext;
|
||||
|
||||
if ('type' in expected) {
|
||||
assert.is(output.type,
|
||||
expected.type,
|
||||
'output.type for: ' + name);
|
||||
}
|
||||
|
||||
if ('error' in expected) {
|
||||
assert.is(output.error,
|
||||
expected.error,
|
||||
'output.error for: ' + name);
|
||||
}
|
||||
|
||||
var convertPromise = converters.convert(output.data, output.type, 'dom',
|
||||
conversionContext);
|
||||
return convertPromise.then(function(node) {
|
||||
var nodePromise = converters.convert(output.data, output.type, 'dom',
|
||||
options.display.requisition.context);
|
||||
nodePromise.then(function(node) {
|
||||
div.appendChild(node);
|
||||
var actualOutput = div.textContent.trim();
|
||||
|
||||
@ -771,11 +757,24 @@ helpers._exec = function(options, name, expected) {
|
||||
doTest(expected.output, actualOutput);
|
||||
}
|
||||
|
||||
return { output: output, text: actualOutput };
|
||||
deferred.resolve(actualOutput);
|
||||
});
|
||||
};
|
||||
|
||||
return output.promise.then(checkOutput, checkOutput);
|
||||
if (output.completed !== false) {
|
||||
checkOutput();
|
||||
}
|
||||
else {
|
||||
var changed = function() {
|
||||
if (output.completed !== false) {
|
||||
checkOutput();
|
||||
output.onChange.remove(changed);
|
||||
}
|
||||
};
|
||||
output.onChange.add(changed);
|
||||
}
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -790,15 +789,15 @@ helpers._setup = function(options, name, action) {
|
||||
return Promise.resolve(action());
|
||||
}
|
||||
|
||||
return Promise.reject('\'setup\' property must be a string or a function. Is ' + action);
|
||||
return Promise.reject('setup must be a string or a function');
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper to shutdown the test
|
||||
*/
|
||||
helpers._post = function(name, action, data) {
|
||||
helpers._post = function(name, action, output) {
|
||||
if (typeof action === 'function') {
|
||||
return Promise.resolve(action(data.output, data.text));
|
||||
return Promise.resolve(action(output));
|
||||
}
|
||||
return Promise.resolve(action);
|
||||
};
|
||||
@ -944,22 +943,19 @@ helpers.audit = function(options, audits) {
|
||||
if (typeof chunkLen !== 'number') {
|
||||
chunkLen = 1;
|
||||
}
|
||||
|
||||
if (assert.currentTest) {
|
||||
var responseTime = (new Date().getTime() - start) / chunkLen;
|
||||
totalResponseTime += responseTime;
|
||||
if (responseTime > maxResponseTime) {
|
||||
maxResponseTime = responseTime;
|
||||
maxResponseCulprit = assert.currentTest + '/' + name;
|
||||
}
|
||||
averageOver++;
|
||||
var responseTime = (new Date().getTime() - start) / chunkLen;
|
||||
totalResponseTime += responseTime;
|
||||
if (responseTime > maxResponseTime) {
|
||||
maxResponseTime = responseTime;
|
||||
maxResponseCulprit = assert.currentTest + '/' + name;
|
||||
}
|
||||
averageOver++;
|
||||
|
||||
var checkDone = helpers._check(options, name, audit.check);
|
||||
return checkDone.then(function() {
|
||||
var execDone = helpers._exec(options, name, audit.exec);
|
||||
return execDone.then(function(data) {
|
||||
return helpers._post(name, audit.post, data).then(function() {
|
||||
return execDone.then(function(output) {
|
||||
return helpers._post(name, audit.post, output).then(function() {
|
||||
if (assert.testLogging) {
|
||||
log('- END \'' + name + '\' in ' + assert.currentTest);
|
||||
}
|
||||
@ -967,8 +963,9 @@ helpers.audit = function(options, audits) {
|
||||
});
|
||||
});
|
||||
});
|
||||
}).then(function() {
|
||||
return options.display.inputter.setInput('');
|
||||
}).then(null, function(ex) {
|
||||
console.error(ex.stack);
|
||||
throw(ex);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -24,7 +24,8 @@ let require = (Cu.import("resource://gre/modules/devtools/Require.jsm", {})).req
|
||||
Components.utils.import("resource:///modules/devtools/gcli.jsm", {});
|
||||
|
||||
let console = (Cu.import("resource://gre/modules/devtools/Console.jsm", {})).console;
|
||||
let TargetFactory = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools.TargetFactory;
|
||||
let devtools = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools;
|
||||
let TargetFactory = devtools.TargetFactory;
|
||||
|
||||
let Promise = (Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", {})).Promise;
|
||||
let assert = { ok: ok, is: is, log: info };
|
||||
@ -157,7 +158,6 @@ helpers.runTests = function(options, tests) {
|
||||
});
|
||||
|
||||
var recover = function(error) {
|
||||
ok(false, error);
|
||||
console.error(error);
|
||||
};
|
||||
|
||||
@ -341,7 +341,7 @@ helpers._createDebugCheck = function(options) {
|
||||
output += ' current: \'' + helpers._actual.current(options) + '\',\n';
|
||||
output += ' status: \'' + helpers._actual.status(options) + '\',\n';
|
||||
output += ' options: ' + outputArray(helpers._actual.options(options)) + ',\n';
|
||||
output += ' message: \'' + helpers._actual.message(options) + '\',\n';
|
||||
output += ' error: \'' + helpers._actual.message(options) + '\',\n';
|
||||
output += ' predictions: ' + outputArray(predictions) + ',\n';
|
||||
output += ' unassigned: ' + outputArray(requisition._unassigned) + ',\n';
|
||||
output += ' outputState: \'' + helpers._actual.outputState(options) + '\',\n';
|
||||
@ -378,8 +378,6 @@ helpers._createDebugCheck = function(options) {
|
||||
output += ' exec: {\n';
|
||||
output += ' output: \'\',\n';
|
||||
output += ' completed: true,\n';
|
||||
output += ' type: \'string\',\n';
|
||||
output += ' error: false\n';
|
||||
output += ' }\n';
|
||||
output += ' }\n';
|
||||
output += ']);';
|
||||
@ -704,7 +702,7 @@ helpers._check = function(options, name, checks) {
|
||||
*/
|
||||
helpers._exec = function(options, name, expected) {
|
||||
if (expected == null) {
|
||||
return Promise.resolve({});
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var output = options.display.requisition.exec({ hidden: true });
|
||||
@ -717,32 +715,20 @@ helpers._exec = function(options, name, expected) {
|
||||
|
||||
if (!options.window.document.createElement) {
|
||||
assert.log('skipping output tests (missing doc.createElement) for ' + name);
|
||||
return Promise.resolve({ output: output });
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
if (!('output' in expected)) {
|
||||
return Promise.resolve({ output: output });
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var deferred = Promise.defer();
|
||||
|
||||
var checkOutput = function() {
|
||||
var div = options.window.document.createElement('div');
|
||||
var conversionContext = options.display.requisition.conversionContext;
|
||||
|
||||
if ('type' in expected) {
|
||||
assert.is(output.type,
|
||||
expected.type,
|
||||
'output.type for: ' + name);
|
||||
}
|
||||
|
||||
if ('error' in expected) {
|
||||
assert.is(output.error,
|
||||
expected.error,
|
||||
'output.error for: ' + name);
|
||||
}
|
||||
|
||||
var convertPromise = converters.convert(output.data, output.type, 'dom',
|
||||
conversionContext);
|
||||
return convertPromise.then(function(node) {
|
||||
var nodePromise = converters.convert(output.data, output.type, 'dom',
|
||||
options.display.requisition.context);
|
||||
nodePromise.then(function(node) {
|
||||
div.appendChild(node);
|
||||
var actualOutput = div.textContent.trim();
|
||||
|
||||
@ -771,11 +757,24 @@ helpers._exec = function(options, name, expected) {
|
||||
doTest(expected.output, actualOutput);
|
||||
}
|
||||
|
||||
return { output: output, text: actualOutput };
|
||||
deferred.resolve(actualOutput);
|
||||
});
|
||||
};
|
||||
|
||||
return output.promise.then(checkOutput, checkOutput);
|
||||
if (output.completed !== false) {
|
||||
checkOutput();
|
||||
}
|
||||
else {
|
||||
var changed = function() {
|
||||
if (output.completed !== false) {
|
||||
checkOutput();
|
||||
output.onChange.remove(changed);
|
||||
}
|
||||
};
|
||||
output.onChange.add(changed);
|
||||
}
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -790,15 +789,15 @@ helpers._setup = function(options, name, action) {
|
||||
return Promise.resolve(action());
|
||||
}
|
||||
|
||||
return Promise.reject('\'setup\' property must be a string or a function. Is ' + action);
|
||||
return Promise.reject('setup must be a string or a function');
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper to shutdown the test
|
||||
*/
|
||||
helpers._post = function(name, action, data) {
|
||||
helpers._post = function(name, action, output) {
|
||||
if (typeof action === 'function') {
|
||||
return Promise.resolve(action(data.output, data.text));
|
||||
return Promise.resolve(action(output));
|
||||
}
|
||||
return Promise.resolve(action);
|
||||
};
|
||||
@ -944,22 +943,19 @@ helpers.audit = function(options, audits) {
|
||||
if (typeof chunkLen !== 'number') {
|
||||
chunkLen = 1;
|
||||
}
|
||||
|
||||
if (assert.currentTest) {
|
||||
var responseTime = (new Date().getTime() - start) / chunkLen;
|
||||
totalResponseTime += responseTime;
|
||||
if (responseTime > maxResponseTime) {
|
||||
maxResponseTime = responseTime;
|
||||
maxResponseCulprit = assert.currentTest + '/' + name;
|
||||
}
|
||||
averageOver++;
|
||||
var responseTime = (new Date().getTime() - start) / chunkLen;
|
||||
totalResponseTime += responseTime;
|
||||
if (responseTime > maxResponseTime) {
|
||||
maxResponseTime = responseTime;
|
||||
maxResponseCulprit = assert.currentTest + '/' + name;
|
||||
}
|
||||
averageOver++;
|
||||
|
||||
var checkDone = helpers._check(options, name, audit.check);
|
||||
return checkDone.then(function() {
|
||||
var execDone = helpers._exec(options, name, audit.exec);
|
||||
return execDone.then(function(data) {
|
||||
return helpers._post(name, audit.post, data).then(function() {
|
||||
return execDone.then(function(output) {
|
||||
return helpers._post(name, audit.post, output).then(function() {
|
||||
if (assert.testLogging) {
|
||||
log('- END \'' + name + '\' in ' + assert.currentTest);
|
||||
}
|
||||
@ -967,8 +963,9 @@ helpers.audit = function(options, audits) {
|
||||
});
|
||||
});
|
||||
});
|
||||
}).then(function() {
|
||||
return options.display.inputter.setInput('');
|
||||
}).then(null, function(ex) {
|
||||
console.error(ex.stack);
|
||||
throw(ex);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -153,7 +153,7 @@ let CommandUtils = {
|
||||
createEnvironment: function(chromeDocument, contentDocument) {
|
||||
let environment = {
|
||||
chromeDocument: chromeDocument,
|
||||
chromeWindow: chromeDocument.defaultView,
|
||||
contentDocument: contentDocument, // Use of contentDocument is deprecated
|
||||
|
||||
document: contentDocument,
|
||||
window: contentDocument.defaultView
|
||||
@ -761,7 +761,6 @@ function OutputPanel(aDevToolbar, aLoadCallback)
|
||||
this.displayedOutput = undefined;
|
||||
|
||||
this._onload = this._onload.bind(this);
|
||||
this._update = this._update.bind(this);
|
||||
this._frame.addEventListener("load", this._onload, true);
|
||||
|
||||
this.loaded = false;
|
||||
@ -907,28 +906,18 @@ OutputPanel.prototype._outputChanged = function OP_outputChanged(aEvent)
|
||||
this.remove();
|
||||
|
||||
this.displayedOutput = aEvent.output;
|
||||
this.displayedOutput.onClose.add(this.remove, this);
|
||||
this.update();
|
||||
|
||||
if (this.displayedOutput.completed) {
|
||||
this._update();
|
||||
}
|
||||
else {
|
||||
this.displayedOutput.promise.then(this._update, this._update)
|
||||
.then(null, console.error);
|
||||
}
|
||||
this.displayedOutput.onChange.add(this.update, this);
|
||||
this.displayedOutput.onClose.add(this.remove, this);
|
||||
};
|
||||
|
||||
/**
|
||||
* Called when displayed Output says it's changed or from outputChanged, which
|
||||
* happens when there is a new displayed Output.
|
||||
*/
|
||||
OutputPanel.prototype._update = function OP_update()
|
||||
OutputPanel.prototype.update = function OP_update()
|
||||
{
|
||||
// destroy has been called, bail out
|
||||
if (this._div == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Empty this._div
|
||||
while (this._div.hasChildNodes()) {
|
||||
this._div.removeChild(this._div.firstChild);
|
||||
@ -938,7 +927,7 @@ OutputPanel.prototype._update = function OP_update()
|
||||
let requisition = this._devtoolbar.display.requisition;
|
||||
let nodePromise = converters.convert(this.displayedOutput.data,
|
||||
this.displayedOutput.type, 'dom',
|
||||
requisition.conversionContext);
|
||||
requisition.context);
|
||||
nodePromise.then(function(node) {
|
||||
while (this._div.hasChildNodes()) {
|
||||
this._div.removeChild(this._div.firstChild);
|
||||
@ -969,6 +958,7 @@ OutputPanel.prototype.remove = function OP_remove()
|
||||
}
|
||||
|
||||
if (this.displayedOutput) {
|
||||
this.displayedOutput.onChange.remove(this.update, this);
|
||||
this.displayedOutput.onClose.remove(this.remove, this);
|
||||
delete this.displayedOutput;
|
||||
}
|
||||
|
@ -24,7 +24,8 @@ let require = (Cu.import("resource://gre/modules/devtools/Require.jsm", {})).req
|
||||
Components.utils.import("resource:///modules/devtools/gcli.jsm", {});
|
||||
|
||||
let console = (Cu.import("resource://gre/modules/devtools/Console.jsm", {})).console;
|
||||
let TargetFactory = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools.TargetFactory;
|
||||
let devtools = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools;
|
||||
let TargetFactory = devtools.TargetFactory;
|
||||
|
||||
let Promise = (Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", {})).Promise;
|
||||
let assert = { ok: ok, is: is, log: info };
|
||||
@ -157,7 +158,6 @@ helpers.runTests = function(options, tests) {
|
||||
});
|
||||
|
||||
var recover = function(error) {
|
||||
ok(false, error);
|
||||
console.error(error);
|
||||
};
|
||||
|
||||
@ -341,7 +341,7 @@ helpers._createDebugCheck = function(options) {
|
||||
output += ' current: \'' + helpers._actual.current(options) + '\',\n';
|
||||
output += ' status: \'' + helpers._actual.status(options) + '\',\n';
|
||||
output += ' options: ' + outputArray(helpers._actual.options(options)) + ',\n';
|
||||
output += ' message: \'' + helpers._actual.message(options) + '\',\n';
|
||||
output += ' error: \'' + helpers._actual.message(options) + '\',\n';
|
||||
output += ' predictions: ' + outputArray(predictions) + ',\n';
|
||||
output += ' unassigned: ' + outputArray(requisition._unassigned) + ',\n';
|
||||
output += ' outputState: \'' + helpers._actual.outputState(options) + '\',\n';
|
||||
@ -378,8 +378,6 @@ helpers._createDebugCheck = function(options) {
|
||||
output += ' exec: {\n';
|
||||
output += ' output: \'\',\n';
|
||||
output += ' completed: true,\n';
|
||||
output += ' type: \'string\',\n';
|
||||
output += ' error: false\n';
|
||||
output += ' }\n';
|
||||
output += ' }\n';
|
||||
output += ']);';
|
||||
@ -704,7 +702,7 @@ helpers._check = function(options, name, checks) {
|
||||
*/
|
||||
helpers._exec = function(options, name, expected) {
|
||||
if (expected == null) {
|
||||
return Promise.resolve({});
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var output = options.display.requisition.exec({ hidden: true });
|
||||
@ -717,32 +715,20 @@ helpers._exec = function(options, name, expected) {
|
||||
|
||||
if (!options.window.document.createElement) {
|
||||
assert.log('skipping output tests (missing doc.createElement) for ' + name);
|
||||
return Promise.resolve({ output: output });
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
if (!('output' in expected)) {
|
||||
return Promise.resolve({ output: output });
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
var deferred = Promise.defer();
|
||||
|
||||
var checkOutput = function() {
|
||||
var div = options.window.document.createElement('div');
|
||||
var conversionContext = options.display.requisition.conversionContext;
|
||||
|
||||
if ('type' in expected) {
|
||||
assert.is(output.type,
|
||||
expected.type,
|
||||
'output.type for: ' + name);
|
||||
}
|
||||
|
||||
if ('error' in expected) {
|
||||
assert.is(output.error,
|
||||
expected.error,
|
||||
'output.error for: ' + name);
|
||||
}
|
||||
|
||||
var convertPromise = converters.convert(output.data, output.type, 'dom',
|
||||
conversionContext);
|
||||
return convertPromise.then(function(node) {
|
||||
var nodePromise = converters.convert(output.data, output.type, 'dom',
|
||||
options.display.requisition.context);
|
||||
nodePromise.then(function(node) {
|
||||
div.appendChild(node);
|
||||
var actualOutput = div.textContent.trim();
|
||||
|
||||
@ -771,11 +757,24 @@ helpers._exec = function(options, name, expected) {
|
||||
doTest(expected.output, actualOutput);
|
||||
}
|
||||
|
||||
return { output: output, text: actualOutput };
|
||||
deferred.resolve(actualOutput);
|
||||
});
|
||||
};
|
||||
|
||||
return output.promise.then(checkOutput, checkOutput);
|
||||
if (output.completed !== false) {
|
||||
checkOutput();
|
||||
}
|
||||
else {
|
||||
var changed = function() {
|
||||
if (output.completed !== false) {
|
||||
checkOutput();
|
||||
output.onChange.remove(changed);
|
||||
}
|
||||
};
|
||||
output.onChange.add(changed);
|
||||
}
|
||||
|
||||
return deferred.promise;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -790,15 +789,15 @@ helpers._setup = function(options, name, action) {
|
||||
return Promise.resolve(action());
|
||||
}
|
||||
|
||||
return Promise.reject('\'setup\' property must be a string or a function. Is ' + action);
|
||||
return Promise.reject('setup must be a string or a function');
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper to shutdown the test
|
||||
*/
|
||||
helpers._post = function(name, action, data) {
|
||||
helpers._post = function(name, action, output) {
|
||||
if (typeof action === 'function') {
|
||||
return Promise.resolve(action(data.output, data.text));
|
||||
return Promise.resolve(action(output));
|
||||
}
|
||||
return Promise.resolve(action);
|
||||
};
|
||||
@ -944,22 +943,19 @@ helpers.audit = function(options, audits) {
|
||||
if (typeof chunkLen !== 'number') {
|
||||
chunkLen = 1;
|
||||
}
|
||||
|
||||
if (assert.currentTest) {
|
||||
var responseTime = (new Date().getTime() - start) / chunkLen;
|
||||
totalResponseTime += responseTime;
|
||||
if (responseTime > maxResponseTime) {
|
||||
maxResponseTime = responseTime;
|
||||
maxResponseCulprit = assert.currentTest + '/' + name;
|
||||
}
|
||||
averageOver++;
|
||||
var responseTime = (new Date().getTime() - start) / chunkLen;
|
||||
totalResponseTime += responseTime;
|
||||
if (responseTime > maxResponseTime) {
|
||||
maxResponseTime = responseTime;
|
||||
maxResponseCulprit = assert.currentTest + '/' + name;
|
||||
}
|
||||
averageOver++;
|
||||
|
||||
var checkDone = helpers._check(options, name, audit.check);
|
||||
return checkDone.then(function() {
|
||||
var execDone = helpers._exec(options, name, audit.exec);
|
||||
return execDone.then(function(data) {
|
||||
return helpers._post(name, audit.post, data).then(function() {
|
||||
return execDone.then(function(output) {
|
||||
return helpers._post(name, audit.post, output).then(function() {
|
||||
if (assert.testLogging) {
|
||||
log('- END \'' + name + '\' in ' + assert.currentTest);
|
||||
}
|
||||
@ -967,8 +963,9 @@ helpers.audit = function(options, audits) {
|
||||
});
|
||||
});
|
||||
});
|
||||
}).then(function() {
|
||||
return options.display.inputter.setInput('');
|
||||
}).then(null, function(ex) {
|
||||
console.error(ex.stack);
|
||||
throw(ex);
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -19,20 +19,6 @@ canonDescNone=(No description)
|
||||
# parameters.
|
||||
canonDefaultGroupName=Options
|
||||
|
||||
# LOCALIZATION NOTE (canonProxyDesc): A very short description of a set of
|
||||
# remote commands. This string is designed to be shown in a menu alongside the
|
||||
# command name, which is why it should be as short as possible. See
|
||||
# canonProxyManual for a fuller description of what it does.
|
||||
canonProxyDesc=Execute a command on %S
|
||||
|
||||
# LOCALIZATION NOTE (canonProxyManual): A fuller description of a set of
|
||||
# remote commands. Displayed when the user asks for help on what it does.
|
||||
canonProxyManual=A set of commands that are executed on a remote system. The remote system is reached via %S
|
||||
|
||||
# LOCALIZATION NOTE (canonProxyExists): An error message displayed when we try
|
||||
# to add new command (via a proxy) where one already exists in that name.
|
||||
canonProxyExists=There is already a command called '%S'
|
||||
|
||||
# LOCALIZATION NOTE (cliEvalJavascript): The special '{' command allows entry
|
||||
# of JavaScript like traditional developer tool command lines. This describes
|
||||
# the '{' command.
|
||||
@ -204,92 +190,6 @@ subCommands=Sub-Commands
|
||||
# fact has none
|
||||
subCommandsNone=None
|
||||
|
||||
# LOCALIZATION NOTE (contextDesc): A very short description of the 'context'
|
||||
# command. This string is designed to be shown in a menu alongside the command
|
||||
# name, which is why it should be as short as possible. See contextManual for
|
||||
# a fuller description of what it does.
|
||||
contextDesc=Concentrate on a group of commands
|
||||
|
||||
# LOCALIZATION NOTE (contextManual): A fuller description of the 'context'
|
||||
# command. Displayed when the user asks for help on what it does.
|
||||
contextManual=Setup a default prefix to future commands. For example 'context git' would allow you to type 'commit' rather than 'git commit'.
|
||||
|
||||
# LOCALIZATION NOTE (contextPrefixDesc): A short description of the 'prefix'
|
||||
# parameter to the 'context' command. This string is designed to be shown in a
|
||||
# dialog with restricted space, which is why it should be as short as
|
||||
# possible.
|
||||
contextPrefixDesc=The command prefix
|
||||
|
||||
# LOCALIZATION NOTE (contextNotParentError): An error message displayed during
|
||||
# the processing of the 'context' command, when the found command is not a
|
||||
# parent command.
|
||||
contextNotParentError=Can't use '%1$S' as a prefix because it is not a parent command.
|
||||
|
||||
# LOCALIZATION NOTE (contextReply): A message displayed during the processing
|
||||
# of the 'context' command, to indicate success.
|
||||
contextReply=Using %1$S as a command prefix
|
||||
|
||||
# LOCALIZATION NOTE (contextEmptyReply): A message displayed during the
|
||||
# processing of the 'context' command, to indicate that there is no command
|
||||
# prefix
|
||||
contextEmptyReply=Command prefix is unset
|
||||
|
||||
# LOCALIZATION NOTE (connectDesc): A very short description of the 'connect'
|
||||
# command. This string is designed to be shown in a menu alongside the command
|
||||
# name, which is why it should be as short as possible. See connectManual for
|
||||
# a fuller description of what it does.
|
||||
connectDesc=Proxy commands to server
|
||||
|
||||
# LOCALIZATION NOTE (connectManual): A fuller description of the 'connect'
|
||||
# command. Displayed when the user asks for help on what it does.
|
||||
connectManual=Connect to the server, creating local versions of the commands on the server. Remote commands initially have a prefix to distinguish them from local commands (but see the context command to get past this)
|
||||
|
||||
# LOCALIZATION NOTE (connectPrefixDesc): A short description of the 'prefix'
|
||||
# parameter to the 'connect' command. This string is designed to be shown in a
|
||||
# dialog with restricted space, which is why it should be as short as
|
||||
# possible.
|
||||
connectPrefixDesc=Parent prefix for imported commands
|
||||
|
||||
# LOCALIZATION NOTE (connectPortDesc): A short description of the 'port'
|
||||
# parameter to the 'connect' command. This string is designed to be shown in a
|
||||
# dialog with restricted space, which is why it should be as short as
|
||||
# possible.
|
||||
connectPortDesc=The TCP port to listen on
|
||||
|
||||
# LOCALIZATION NOTE (connectHostDesc): A short description of the 'host'
|
||||
# parameter to the 'connect' command. This string is designed to be shown in a
|
||||
# dialog with restricted space, which is why it should be as short as
|
||||
# possible.
|
||||
connectHostDesc=The hostname to bind to
|
||||
|
||||
# LOCALIZATION NOTE (connectDupReply): An error condition from executing the
|
||||
# 'connect' command
|
||||
connectDupReply=Connection called %S already exists.
|
||||
|
||||
# LOCALIZATION NOTE (connectReply): The output of the 'connect' command,
|
||||
# telling the user what it has done.
|
||||
connectReply=Added %S commands.
|
||||
|
||||
# LOCALIZATION NOTE (disconnectDesc): A very short description of the
|
||||
# 'disconnect' command. This string is designed to be shown in a menu
|
||||
# alongside the command name, which is why it should be as short as possible.
|
||||
# See connectManual for a fuller description of what it does.
|
||||
disconnectDesc=Proxy commands to server
|
||||
|
||||
# LOCALIZATION NOTE (disconnectManual): A fuller description of the
|
||||
# 'disconnect' command. Displayed when the user asks for help on what it does.
|
||||
disconnectManual=Connect to the server, creating local versions of the commands on the server. Remote commands initially have a prefix to distinguish them from local commands (but see the context command to get past this)
|
||||
|
||||
# LOCALIZATION NOTE (disconnectPrefixDesc): A short description of the
|
||||
# 'prefix' parameter to the 'disconnect' command. This string is designed to
|
||||
# be shown in a dialog with restricted space, which is why it should be as
|
||||
# short as possible.
|
||||
disconnectPrefixDesc=Parent prefix for imported commands
|
||||
|
||||
# LOCALIZATION NOTE (disconnectReply): The output of the 'disconnect' command,
|
||||
# telling the user what it's done.
|
||||
disconnectReply=Removed %S commands.
|
||||
|
||||
# LOCALIZATION NOTE (prefDesc): A very short description of the 'pref'
|
||||
# command. This string is designed to be shown in a menu alongside the command
|
||||
# name, which is why it should be as short as possible. See prefManual for a
|
||||
|
@ -12,6 +12,14 @@
|
||||
# A good criteria is the language in which you'd find the best
|
||||
# documentation on web development on the web.
|
||||
|
||||
# LOCALIZATION NOTE (echoDesc) A very short string used to describe the
|
||||
# function of the echo command.
|
||||
echoDesc=Show a message
|
||||
|
||||
# LOCALIZATION NOTE (echoMessageDesc) A very short string used to describe the
|
||||
# message parameter to the echo command.
|
||||
echoMessageDesc=Message
|
||||
|
||||
# LOCALIZATION NOTE (helpDesc) A very short string used to describe the
|
||||
# function of the help command.
|
||||
helpDesc=Get help on the available commands
|
||||
@ -1265,27 +1273,3 @@ profilerStopping2=Stopping…
|
||||
# LOCALIZATION NOTE (profilerNotReady) A message that is displayed whenever
|
||||
# an operation cannot be completed because the profiler has not been opened yet.
|
||||
profilerNotReady=For this command to work you need to open the profiler first
|
||||
|
||||
# LOCALIZATION NOTE (listenDesc) A very short string used to describe the
|
||||
# function of the 'listen' command.
|
||||
listenDesc=Open a remote debug port
|
||||
|
||||
# LOCALIZATION NOTE (listenManual) A longer description of the 'listen'
|
||||
# command.
|
||||
listenManual=Firefox can allow remote debugging over a TCP/IP connection. For security reasons this is turned off by default, but can be enabled using this command.
|
||||
|
||||
# LOCALIZATION NOTE (listenPortDesc) A very short string used to describe the
|
||||
# function of 'port' parameter to the 'listen' command.
|
||||
listenPortDesc=The TCP port to listen on
|
||||
|
||||
# LOCALIZATION NOTE (listenDisabledOutput) Text of a message output during the
|
||||
# execution of the 'listen' command.
|
||||
listenDisabledOutput=Listen is disabled by the devtools.debugger.remote-enabled preference
|
||||
|
||||
# LOCALIZATION NOTE (listenInitOutput) Text of a message output during the
|
||||
# execution of the 'listen' command. %1$S is a port number
|
||||
listenInitOutput=Listening on port %1$S
|
||||
|
||||
# LOCALIZATION NOTE (listenNoInitOutput) Text of a message output during the
|
||||
# execution of the 'listen' command.
|
||||
listenNoInitOutput=DebuggerServer not initialized
|
||||
|
@ -182,10 +182,6 @@ var DebuggerServer = {
|
||||
this.addActors("chrome://global/content/devtools/dbg-webconsole-actors.js");
|
||||
this.addTabActor(this.WebConsoleActor, "consoleActor");
|
||||
this.addGlobalActor(this.WebConsoleActor, "consoleActor");
|
||||
|
||||
this.addActors("chrome://global/content/devtools/dbg-gcli-actors.js");
|
||||
this.addTabActor(this.GcliActor, "gcliActor");
|
||||
this.addGlobalActor(this.GcliActor, "gcliActor");
|
||||
#endif
|
||||
if ("nsIProfiler" in Ci)
|
||||
this.addActors("chrome://global/content/devtools/dbg-profiler-actors.js");
|
||||
|
@ -1,12 +0,0 @@
|
||||
# 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/.
|
||||
|
||||
DEPTH = @DEPTH@
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
@ -1,66 +0,0 @@
|
||||
/* -*- Mode: js2; js2-basic-offset: 2; indent-tabs-mode: nil; -*- */
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* 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";
|
||||
|
||||
let { XPCOMUtils } = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {});
|
||||
|
||||
let { require } = Cu.import("resource://gre/modules/devtools/Require.jsm", {});
|
||||
Cu.import("resource:///modules/devtools/gcli.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "console",
|
||||
"resource://gre/modules/devtools/Console.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "CommandUtils",
|
||||
"resource:///modules/devtools/DeveloperToolbar.jsm");
|
||||
|
||||
let canon = require("gcli/canon");
|
||||
let Requisition = require("gcli/cli").Requisition;
|
||||
let util = require("util/util");
|
||||
|
||||
/**
|
||||
* Manage remote connections that want to talk to GCLI
|
||||
* @constructor
|
||||
* @param connection The connection to the client, DebuggerServerConnection
|
||||
* @param parentActor Optional, the parent actor
|
||||
*/
|
||||
function GcliActor(connection, parentActor) {
|
||||
this.connection = connection;
|
||||
}
|
||||
|
||||
GcliActor.prototype.actorPrefix = "gcli";
|
||||
|
||||
GcliActor.prototype.disconnect = function() {
|
||||
};
|
||||
|
||||
GcliActor.prototype.getCommandSpecs = function(request) {
|
||||
return { commandSpecs: canon.getCommandSpecs() };
|
||||
};
|
||||
|
||||
GcliActor.prototype.execute = function(request) {
|
||||
let windowMediator = Cc["@mozilla.org/appshell/window-mediator;1"]
|
||||
.getService(Ci.nsIWindowMediator);
|
||||
let chromeWindow = windowMediator.getMostRecentWindow("navigator:browser");
|
||||
let contentWindow = chromeWindow.gBrowser.selectedTab.linkedBrowser.contentWindow;
|
||||
|
||||
let environment = CommandUtils.createEnvironment(chromeWindow.document,
|
||||
contentWindow.document);
|
||||
|
||||
let requisition = new Requisition(environment);
|
||||
let outputPromise = requisition.updateExec(request.typed);
|
||||
let output = util.synchronize(outputPromise);
|
||||
|
||||
return {
|
||||
id: request.id,
|
||||
data: output.data,
|
||||
type: output.type,
|
||||
error: output.error
|
||||
};
|
||||
};
|
||||
|
||||
GcliActor.prototype.requestTypes = {
|
||||
getCommandSpecs: GcliActor.prototype.getCommandSpecs,
|
||||
execute: GcliActor.prototype.execute,
|
||||
};
|
@ -7,7 +7,6 @@ toolkit.jar:
|
||||
* content/global/devtools/dbg-server.js (debugger/server/dbg-server.js)
|
||||
content/global/devtools/dbg-script-actors.js (debugger/server/dbg-script-actors.js)
|
||||
content/global/devtools/dbg-browser-actors.js (debugger/server/dbg-browser-actors.js)
|
||||
content/global/devtools/dbg-gcli-actors.js (gcli/dbg-gcli-actors.js)
|
||||
content/global/devtools/dbg-webconsole-actors.js (webconsole/dbg-webconsole-actors.js)
|
||||
content/global/devtools/dbg-profiler-actors.js (debugger/server/dbg-profiler-actors.js)
|
||||
content/global/devtools/dbg-styleeditor-actors.js (styleeditor/dbg-styleeditor-actors.js)
|
||||
|
Loading…
Reference in New Issue
Block a user