diff --git a/common/content/bookmarks.js b/common/content/bookmarks.js index 52c1ecee..d49016c5 100644 --- a/common/content/bookmarks.js +++ b/common/content/bookmarks.js @@ -633,12 +633,12 @@ var Bookmarks = Module("bookmarks", { }; completion.searchEngine = function searchEngine(context, suggest) { - let engines = services.browserSearch.getEngines({}); - if (suggest) - engines = engines.filter(function (e) e.supportsResponseType("application/x-suggestions+json")); - context.title = ["Suggest Engine", "Description"]; - context.completions = engines.map(function (e) [e.alias, e.description]); + context.keys = { text: "keyword", description: "title", icon: "icon" }; + context.completions = values(bookmarks.searchEngines); + if (suggest) + context.filters.push(function ({ item }) item.supportsResponseType("application/x-suggestions+json")); + }; completion.searchEngineSuggest = function searchEngineSuggest(context, engineAliases, kludge) { diff --git a/common/modules/completion.jsm b/common/modules/completion.jsm index 018b5d71..9b177586 100644 --- a/common/modules/completion.jsm +++ b/common/modules/completion.jsm @@ -1047,7 +1047,7 @@ var Completion = Module("completion", { options.add(["complete", "cpt"], "Items which are completed at the :open prompts", "charlist", config.defaults.complete == null ? "slf" : config.defaults.complete, - { get values() values(completion.urlCompleters) }); + { get values() values(completion.urlCompleters).toArray() }); options.add(["wildanchor", "wia"], "Define which completion groups only match at the beginning of their text", diff --git a/common/modules/io.jsm b/common/modules/io.jsm index 3e85b02d..bdcdf940 100644 --- a/common/modules/io.jsm +++ b/common/modules/io.jsm @@ -1036,7 +1036,7 @@ unlet s:cpo_save }); }, options: function (dactyl, modules, window) { - const { options } = modules; + const { completion, options } = modules; var shell, shellcmdflag; if (util.OS.isWindows) { diff --git a/common/tests/functional/dactyl.jsm b/common/tests/functional/dactyl.jsm index 69b352c6..b32b7313 100644 --- a/common/tests/functional/dactyl.jsm +++ b/common/tests/functional/dactyl.jsm @@ -387,6 +387,33 @@ Controller.prototype = { } }), + /** + * Triggers a completion function with the given arguments an + * ensures that no errors have occurred during the process. + * + * @param {object} self The 'this' object for which to trigger the + * completer. + * @param {function|string} func The method or method name to call. + * @param {string} string The method or method name to call. @optional + * @param {string} message The message to display upon assertion failure. @optional + * @param {...} Extra arguments are passed to the completion + * function directly. + */ + testCompleter: wrapAssertNoErrors(function testCompleter(self, func, string, message) { + var context = this.modules.CompletionContext(string || ""); + context.tabPressed = true; + context.forkapply("completions", 0, self, func, Array.slice(arguments, testCompleter.length)); + + utils.assert("dactyl.runCompletions", context.wait(5000), + message || "Completion failed: " + self + "." + func); + + for (var [, ctxt] in Iterator(context.contextList)) + for (var [, item] in Iterator(ctxt.items)) + ctxt.createRow(item); + + return context; + }), + /** * Triggers Ex completion for the given command string and ensures * that no errors have occurred during the process. diff --git a/common/tests/functional/testCommands.js b/common/tests/functional/testCommands.js index 4a4f0a98..62eefa5c 100644 --- a/common/tests/functional/testCommands.js +++ b/common/tests/functional/testCommands.js @@ -2,7 +2,6 @@ var utils = require("utils"); const { module } = utils; - var dactyllib = module("dactyl"); var jumlib = module("resource://mozmill/modules/jum.js"); @@ -637,7 +636,9 @@ var tests = { ["Navigation Toolbar", toolbarState("#nav-bar", false)], ["Bookmarks Toolbar", toolbarState("#PersonalToolbar", false)], ["Navigation Toolbar", toolbarState("#nav-bar", true)], - ["Bookmarks Toolbar", toolbarState("#PersonalToolbar", true)] + ["Bookmarks Toolbar", toolbarState("#PersonalToolbar", true)], + ["Navigation Toolbar", toolbarState("#nav-bar", false)], + ["Bookmarks Toolbar", toolbarState("#PersonalToolbar", false)] ], error: ["", "foo"] }, diff --git a/common/tests/functional/testOptions.js b/common/tests/functional/testOptions.js new file mode 100644 index 00000000..c268743b --- /dev/null +++ b/common/tests/functional/testOptions.js @@ -0,0 +1,40 @@ +// Runs a slew of generic option tests + +var utils = require("utils"); +const { module } = utils; + +var dactyllib = module("dactyl"); +var jumlib = module("resource://mozmill/modules/jum.js"); + +var setupModule = function (module) { + controller = mozmill.getBrowserController(); + dactyl = new dactyllib.Controller(controller); +}; +var teardownModule = function (module) { + dactyl.teardown(); +} + +function $(selector) controller.window.document.querySelector(selector); + +function testDefaultValidators() { + for (var option in dactyl.modules.options) + dactyl.assertNoErrors(function () { + dactyl.assertNoErrorMessages(function () { + dump("OPT VAL " + option.name + "\n"); + utils.assert("testOptions.testValidators", option.validator(option.value), + "Option '" + option.name + "' validator failed"); + }); + }); +} + +var options = {}; + +function testCompleters() { + for (var option in dactyl.modules.options) + for (var [,value] in Iterator([""].concat(options[option.name] || []))) { + dump("OPT COMP " + option.name + " " + value + "\n"); + dactyl.testCompleter(option, "completer", value, "Option '" + option.name + "' completer failed"); + } +} + +// vim: sw=4 ts=8 et: