diff options
Diffstat (limited to 'common/tests')
-rw-r--r-- | common/tests/functional/testCommands.js | 394 |
1 files changed, 394 insertions, 0 deletions
diff --git a/common/tests/functional/testCommands.js b/common/tests/functional/testCommands.js new file mode 100644 index 00000000..0565c4c5 --- /dev/null +++ b/common/tests/functional/testCommands.js @@ -0,0 +1,394 @@ +// Runs a slew of generic command tests + +var dactyllib = require("dactyl"); + +var setupModule = function (module) { + controller = mozmill.getBrowserController(); + dactyl = new dactyllib.Controller(controller); + + dactyl.dactyl.options["autocomplete"] = []; + dactyl.dactyl.options["wildmode"] = ["list"]; +}; +var teardownModule = function (module) { + dactyl.teardown(); +} + +var tests = { + "!": { + multiOutput: ["echo foo"] + }, + abbreviate: { + someOutput: ["", "abc"], + noOutput: ["abc def", "-js abc def"], + completions: ["", "abc ", "-js abc "] + }, + abclear: { + noOutput: [""] + }, + addons: { + multiOutput: ["", "dactyl", "-type=extension", "-type=extension dactyl"] + }, + autocmd: { + multiOutput: ["", "DOMLoad", "DOMLoad foo"], + noOutput: ["DOMLoad foo bar", "-js DOMLoad foo bar"], + completions: ["", "DOMLoad foo ", "-js DOMLoad foo "] + }, + back: { noOutput: [""] }, + bdelete: { + init: ["tabopen about:pentadactyl", "tabopen about:pentadactyl"], + noOutput: [""], + anyOutput: ["about:pentadactyl"] + }, + bmark: { + anyOutput: ["bmark", "bmark -tags=foo -titlt=bar -keyword=baz -charset=UTF-8 -post=quux about:pentadactyl"], + error: ["bmark -tags=foo -titlt=bar -keyword=baz -charset=nonExistentCharset -post=quux about:pentadactyl"], + completions: [ + "-max=1 -keyword=", + "-max=1 -keyword=foo -tags=", + "-max=1 -keyword=foo -tags=bar -title=", + "-max=1 -keyword=foo -tags=bar -title=baz -charset=", + "-max=1 -keyword=foo -tags=bar -title=baz -charset= about:" + ] + }, + bmarks: { + multiOutput: ["-max=1", "-max=1 -keyword=foo -tags=bar -title=baz about:pentadactyl"], + completions: [ + "-max=1 -keyword=", + "-max=1 -keyword=foo -tags=", + "-max=1 -keyword=foo -tags=bar -title=", + "-max=1 -keyword=foo -tags=bar -title=baz about:" + ] + }, + buffer: { + anyOutput: ["", "1"], + noOutput: ["!", "! 1"], + completions: ["", "1"] + }, + buffers: { + multiOutput: ["", "1"], + completions: ["", "1"] + }, + cd: { + anyOutput: ["", "~/"], + completions: ["", "~/"] + }, + colorscheme: { + error: ["", "some-non-existent-scheme"] + }, + command: { + anyOutput: ["", "foo", "foo bar", "-js bar baz"], + error: ["foo bar", "-js bar baz"] + }, + comclear: { + noOutput: [""] + }, + contexts: {}, // Not testable in this manner + cookies: { + anyOutput: ["dactyl.sf.net", "dactyl.sf.net list"], + error: [""], + completions: ["", "dactyl.sf.net "] + }, + delbmarks: { anyOutput: ["", "about:pentadactyl"] }, + delcommand: { + noOutput: ["foo"] + }, + delmacros: { + error: [""], + noOutput: ["x"], + completions: ["", "x"] + }, + delmapgroup: {}, // Skip for now + get delmarks() this.delmacros, + get delqmarks() this.delmacros, + delstyle: { + completions: [ + "", "-name=", "-name=foo ", "-index=", "-index=" + ] + }, + dialog: { + // Skip implementation for now + completions: ["", "pre"] + }, + doautoall: {}, // Skip for now + doautocmd: {}, // Skip for now + downloads: { + multiOutput: ["", "dactyl", "-type=extension", "-type=extension dactyl"] + }, + echo: { + singleOutput: ["' - '"], + multiOutput: ["'\\n'", "window"], + completions: [ + "", + "window", + "window.", + "window['", + "commands.get('" + ] + }, + get echoerr() this.echo, + get echomsg() this.echo, + else: {}, // Skip for now + elseif: {}, // Skip for now + emenu: { + noOutput: ["View.Zoom.Zoom In", "View.Zoom.Zoom Out"], + error: [""], + completions: ["", "View."] + }, + endif: {}, // Skip for now + execute: { + noOutput: ["", "'js " + "".quote() + "'"], + someOutput: ["'ls'"] + }, + extadd: { error: [""] }, + extdelete: { error: [""] }, + extdisable: { error: [""] }, + extenable: { error: [""] }, + extoptions: { error: [""] }, + extrehash: { error: [""] }, + exttoggle: { error: [""] }, + extupdate: { error: [""] }, + feedkeys: { + noOutput: ["<Exc>"], + error: [""] + }, + finish: { noOutput: [""] }, + forward: { noOutput: [""] }, + frameonly: { noOutput: [""] }, + hardcopy: {}, // Skip for now + help: { + noOutput: ["", "intro"], + cleanup: ["tabdelete", "tabdelete"], + completions: ["", "'wild"] + }, + get helpall() this.help, + highlight: { + multiOutput: ["", "Help"], + noOutput: [ + "Help foo: bar;", + "Help -group=FontCode", + "Help -group=FontCode foo: bar;" + ], + completions: [ + "", + "Help", + "Help ", + "Help -group=", + "Help -group=FontCode ", + "Help foo: bar; -moz" + ] + }, + history: { + anyOutput: ["-max=1", "-max=1 -sort=+date", "-max=1 dactyl"], + completions: [ + "", + "dactyl", + "-sort=+", + "-sort=-", + "-sort=+date ", + "-sort=+date dactyl" + ] + }, + if: {}, // Skip for now + javascript: { + noOutput: ["''", "'\\n'", "<pre>foo bar</pre>", "window"], + completions: [ + "", + "window", + "window.", + "window['", + "commands.get('" + ] + }, + jumps: { + multiOutput: [""] + }, + keepalt: { + error: [""], + noOutput: ["js ''"], + anyOutput: ["echo 'foo'"] + }, + let: {}, // Deprecated. Fuck it. + listcommands: { + anyOutput: ["", "in"], + completions: ["", "in "] + }, + get listkeys() this.listcommands, + get listoptions() this.listcommands, + loadplugins: {}, + macros: { + multiOutput: [""] + }, + map: { + multiOutput: ["", "i"], + noOutput: ["i j", "-b i j", "-js i j()", "-ex i :j"] + }, + mapclear: { + noOutput: [""] + }, + mapgroup: {}, + mark: {}, + marks: {}, + messages: {}, + messclear: {}, + mkpentadactylrc: {}, + mksyntax: {}, + mlistkeys: {}, + mmap: {}, + mmapclear: {}, + mnoremap: {}, + munmap: {}, + nlistkeys: {}, + nmap: {}, + nmapclear: {}, + nnoremap: {}, + nohlfind: {}, + noremap: {}, + normal: {}, + nunmap: {}, + open: {}, + pageinfo: {}, + pagestyle: {}, + preferences: {}, + pwd: {}, + qmark: {}, + qmarks: {}, + quit: {}, + quitall: {}, + redraw: {}, + rehash: {}, + reload: {}, + reloadall: {}, + restart: {}, + runtime: {}, + sanitize: {}, + saveas: {}, + sbclose: {}, + scriptnames: {}, + set: {}, + setglobal: {}, + setlocal: {}, + sidebar: {}, + silent: {}, + source: {}, + stop: {}, + stopall: {}, + style: {}, + styledisable: {}, + styleenable: {}, + styletoggle: {}, + tab: {}, + tabattach: {}, + tabdetach: {}, + tabdo: {}, + tabduplicate: {}, + tablast: {}, + tabmove: {}, + tabnext: {}, + tabonly: {}, + tabopen: {}, + tabprevious: {}, + tabrewind: {}, + time: {}, + tlistkeys: {}, + tmap: {}, + tmapclear: {}, + tnoremap: {}, + toolbarhide: {}, + toolbarshow: {}, + toolbartoggle: {}, + tunmap: {}, + unabbreviate: {}, + undo: {}, + undoall: {}, + unlet: {}, + unmap: {}, + verbose: {}, + version: {}, + viewsource: {}, + vlistkeys: {}, + vmap: {}, + vmapclear: {}, + vnoremap: {}, + vunmap: {}, + winclose: {}, + window: {}, + winonly: {}, + winopen: {}, + wqall: {}, + yank: {}, + zoom: {} +}; + +var global = this; +function addTest(cmdName, testName, func) { + global["testCommand_" + cmdName + "_" + testName] = func; +} + +function runCommands(cmdName, testName, commands, test) { + addTest(cmdName, testName, function () { + commands.forEach(function (cmd) { + // dump("CMD: " + cmdName + " " + cmd + "\n"); + dactyl.clearMessage(); + dactyl.closeMessageWindow(); + cmd = cmdName + cmd.replace(/^(!?) ?/, "$1 "); + dactyl.runExCommand(cmd); + test(cmd); + }); + }); +} + +for (var val in Iterator(tests)) (function ([command, params]) { + if (params.init) + runCommands(command, "init", params.init, function () {}); + + // Goddamn stupid fucking MozMill and its stupid fucking sandboxes with their ancient fucking JS versions. + for (var val in Iterator(params)) (function ([testName, commands]) { + switch (testName) { + case "noOutput": + runCommands(command, testName, commands, function (cmd) { + dactyl.assertMessage(function (msg) !msg, "Unexpected command output: " + cmd); + }); + break; + case "anyOutput": + runCommands(command, testName, commands, function (cmd) {}); + break; + case "someOutput": + runCommands(command, testName, commands, function (cmd) { + dactyl.assertMessage(/./, "Expected command output: " + cmd); + }); + break; + case "singleOutput": + runCommands(command, testName, commands, function (cmd) { + dactyl.assertMessageLine(/./, "Expected command output: " + cmd); + }); + break; + case "multiOutput": + runCommands(command, testName, commands, function (cmd) { + dactyl.assertMessageWindowOpen(true, "Expected command output: " + cmd); + }); + break; + case "error": + addTest(command, testName, function () { + commands.forEach(function (cmd) { + cmd = command + cmd.replace(/^(!?) ?/, "$1 "); + dactyl.assertMessageError(function () { + dactyl.runExCommand(cmd); + }, null, [], cmd); + }); + }); + break; + case "completions": + addTest(command, testName, function () { + commands.forEach(function (cmd) { + dactyl.runExCompletion(command + cmd.replace(/^(!?) ?/, "$1 ")); + }); + }); + break; + } + })(val); + + if (params.cleanup) + runCommands(command, "cleanup", params.cleanup, function () {}); +})(val); + +// vim: sw=4 ts=8 et: |