diff --git a/common/Makefile b/common/Makefile index 6d537643..acce755d 100644 --- a/common/Makefile +++ b/common/Makefile @@ -13,6 +13,8 @@ MOZMILL = mozmill HOSTAPP_PATH = $(shell which $(HOSTAPP)) TEST_DIR = $(BASE)/tests/functional +IDNAME := $(shell echo "$(NAME)" | tr a-z A-Z) + LOCALEDIR = locale DOC_FILES = $(wildcard $(LOCALEDIR)/*/*.xml) @@ -164,7 +166,8 @@ distclean: # TODO: generalize log path test: xpi @echo "Running functional tests..." - $(MOZMILL) --show-all -l /tmp/dactyl-test.log -b $(HOSTAPP_PATH) --addons $(XPI) -t $(TEST_DIR) + $(IDNAME)_INIT="set loadplugins=" \ + $(MOZMILL) --show-all -l /tmp/dactyl-test.log -b $(HOSTAPP_PATH) --addons $(XPI) -t $(TEST_DIR) #### xpi diff --git a/common/content/dactyl.js b/common/content/dactyl.js index 879c745a..0677039a 100644 --- a/common/content/dactyl.js +++ b/common/content/dactyl.js @@ -2036,13 +2036,11 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), { dactyl.log("All modules loaded", 3); try { - if (services.fuel) - var args = services.fuel.storage.get("dactyl.commandlineArgs", null); - if (!args) { - let commandline = services.commandLineHandler.optionValue; - if (commandline) - args = dactyl.parseCommandLine(commandline); - } + var args = services.fuel && services.fuel.storage.get("dactyl.commandlineArgs", null) + || services.commandLineHandler.optionValue; + if (isString(args)) + args = dactyl.parseCommandLine(args); + if (args) { dactyl.commandLineOptions.rcFile = args["+u"]; dactyl.commandLineOptions.noPlugins = "++noplugin" in args; @@ -2112,7 +2110,7 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), { } if (dactyl.commandLineOptions.rcFile == "NONE" || dactyl.commandLineOptions.noPlugins) - options["loadplugins"] = false; + options["loadplugins"] = []; if (options["loadplugins"]) dactyl.loadPlugins(); diff --git a/common/content/quickmarks.js b/common/content/quickmarks.js index 4e1f067c..386bd100 100644 --- a/common/content/quickmarks.js +++ b/common/content/quickmarks.js @@ -133,9 +133,9 @@ var QuickMarks = Module("quickmarks", { quickmarks.remove(args[0]); }, { + argCount: "?", bang: true, - completer: function (context) completion.quickmark(context), - literal: 0 + completer: function (context) completion.quickmark(context) }); commands.add(["qma[rk]"], @@ -171,8 +171,8 @@ var QuickMarks = Module("quickmarks", { function (args) { quickmarks.list(args[0] || ""); }, { + argCount: "?", completer: function (context) completion.quickmark(context), - literal: 0 }); }, completion: function () { diff --git a/common/tests/functional/dactyl.js b/common/tests/functional/dactyl.js index d1b38344..7a95bed0 100644 --- a/common/tests/functional/dactyl.js +++ b/common/tests/functional/dactyl.js @@ -48,9 +48,10 @@ function Controller(controller) { this._counBeep = function countBeep() { self.beepCount++; } + this.errors = []; this._countError = function countError(message, highlight) { if (/\bErrorMsg\b/.test(highlight)) - self.errorMessageCount++; + self.errors.push(String(message)); } this.dactyl.dactyl.registerObserver("beep", this._countBeep); this.dactyl.dactyl.registerObserver("echoLine", this._countError); @@ -69,7 +70,6 @@ Controller.prototype = { beepCount: 0, errorCount: 0, - errorMessageCount: 0, /** * Asserts that an error message is displayed during the execution @@ -83,10 +83,10 @@ Controller.prototype = { * @param {string} message The message to display upon assertion failure. @optional */ assertMessageError: function (func, self, args, message) { - let errorCount = this.errorMessageCount; + let errorCount = this.errors.length; this.assertNoErrors(func, self, args, message); // dump("assertMessageError " + errorCount + " " + this.errorMessageCount + "\n"); - return utils.assert('dactyl.assertMessageError', this.errorMessageCount > errorCount, + return utils.assert('dactyl.assertMessageError', this.errors.length > errorCount, "Expected error but got none" + (message ? ": " + message : "")); }, @@ -213,7 +213,7 @@ Controller.prototype = { */ assertNoErrorMessages: function (func, self, args, message) { let msg = message ? ": " + message : ""; - let count = this.errorMessageCount; + let count = this.errors.length; try { func.apply(self || this, args || []); @@ -222,8 +222,9 @@ Controller.prototype = { this.dactyl.util.reportError(e); } - return utils.assertEqual('dactyl.assertNoErrorMessages', count, this.errorMessageCount, - "Error messsages were reported" + msg); + return utils.assertEqual('dactyl.assertNoErrorMessages', count, this.errors.length, + "Error messsages were reported" + msg + ":\n\t" + + this.errors.slice(count).join("\n\t")); }, /** diff --git a/common/tests/functional/testCommands.js b/common/tests/functional/testCommands.js index e0266a93..356dfaf3 100644 --- a/common/tests/functional/testCommands.js +++ b/common/tests/functional/testCommands.js @@ -78,9 +78,10 @@ var tests = { error: ["", "some-non-existent-scheme"] }, command: { - multiOutput: [""], - someOutput: ["foo"], + init: ["comclear"], + lineOutput: ["", "foobar"], noOutput: ["foo bar", "-js bar baz"], + multiOutput: [""], error: ["foo bar", "-js bar baz"] }, comclear: { @@ -353,7 +354,9 @@ var tests = { complete: ["", "m "] }, qmarks: { - init: ["delqmarks x"], + // init: ["delqmarks a-zA-Z0-9"], + // error: ["", "x"], + init: ["qmark x"], multiOutput: ["", "m", "x"], complete: [""] }, @@ -397,13 +400,36 @@ var tests = { }, sanitize: {}, saveas: {}, - sbclose: {}, + sbclose: { + noOutput: [""] + }, scriptnames: {}, set: {}, - setglobal: {}, - setlocal: {}, - sidebar: {}, - silent: {}, + get setglobal() this.set, + get setlocal() this.set, + sidebar: { + error: ["!", ""], + noOutput: [ + "! Add-ons", "Add-ons", "! Add-ons", + "! Bookmarks", "Bookmarks", "! Bookmarks", + "! Console", "Console", "! Console", + "! Downloads", "Downloads", "! Downloads", + "! History", "History", "! History", + "! Preferences", "Preferences", "! Preferences", + // "!" Previous sidebar isn't saved until the window loads. + // We don't give it enough time. + ], + completions: ["", "! "] + }, + silent: { + noOutput: [ + "echo 'foo'", + "echo " + "foo\nbar".quote(), + "echoerr 'foo'", + "echoerr " + "foo\nbar".quote() + ], + completions: [""] + }, source: {}, stop: {}, stopall: {}, @@ -424,10 +450,6 @@ var tests = { tabprevious: {}, tabrewind: {}, time: {}, - tlistkeys: {}, - tmap: {}, - tmapclear: {}, - tnoremap: {}, toolbarhide: {}, toolbarshow: {}, toolbartoggle: {}, @@ -440,11 +462,6 @@ var tests = { verbose: {}, version: {}, viewsource: {}, - vlistkeys: {}, - vmap: {}, - vmapclear: {}, - vnoremap: {}, - vunmap: {}, winclose: {}, window: {}, winonly: {}, @@ -510,7 +527,7 @@ for (var val in Iterator(tests)) (function ([command, params]) { case "singleOutput": runCommands(command, testName, commands, function (cmd) { dactyl.assertMessageLine(/./, "Expected command output: " + cmd); - }, true); + }, true && !params.errorsOk); break; case "multiOutput": runCommands(command, testName, commands, function (cmd) { @@ -533,7 +550,6 @@ for (var val in Iterator(tests)) (function ([command, params]) { commands.forEach(function (cmd) { dactyl.assertNoErrorMessages(function () { dactyl.runExCompletion(command + cmd.replace(/^(!?) ?/, "$1 ")); - controller.waitForPageLoad(controller.tabs.activeTab); }); }); });