From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- comm/chat/components/src/test/test_commands.js | 271 +++++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 comm/chat/components/src/test/test_commands.js (limited to 'comm/chat/components/src/test/test_commands.js') diff --git a/comm/chat/components/src/test/test_commands.js b/comm/chat/components/src/test/test_commands.js new file mode 100644 index 0000000000..de0fd0e665 --- /dev/null +++ b/comm/chat/components/src/test/test_commands.js @@ -0,0 +1,271 @@ +/* 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/. */ + +var { IMServices } = ChromeUtils.importESModule( + "resource:///modules/IMServices.sys.mjs" +); +// We don't load the command service via Services as we want to access +// _findCommands in order to avoid having to intercept command execution. +var { CommandsService } = ChromeUtils.importESModule( + "resource:///modules/imCommands.sys.mjs" +); + +var kPrplId = "green"; +var kPrplId2 = "red"; + +var fakeAccount = { + connected: true, + protocol: { id: kPrplId }, +}; +var fakeDisconnectedAccount = { + connected: false, + protocol: { id: kPrplId }, +}; +var fakeAccount2 = { + connected: true, + protocol: { id: kPrplId2 }, +}; + +var fakeConversation = { + account: fakeAccount, + isChat: true, +}; + +function fakeCommand(aName, aUsageContext) { + this.name = aName; + if (aUsageContext) { + this.usageContext = aUsageContext; + } +} +fakeCommand.prototype = { + get helpString() { + return ""; + }, + usageContext: Ci.imICommand.CMD_CONTEXT_ALL, + priority: Ci.imICommand.CMD_PRIORITY_PRPL, + run: (aMsg, aConv) => true, +}; + +function run_test() { + let cmdserv = new CommandsService(); + cmdserv.initCommands(); + + // Some commands providing multiple possible completions. + cmdserv.registerCommand(new fakeCommand("banana"), kPrplId2); + cmdserv.registerCommand(new fakeCommand("baloney"), kPrplId2); + + // MUC-only command. + cmdserv.registerCommand( + new fakeCommand("balderdash", Ci.imICommand.CMD_CONTEXT_CHAT), + kPrplId + ); + + // Name clashes with global command. + cmdserv.registerCommand(new fakeCommand("offline"), kPrplId); + + // Name starts with another command name. + cmdserv.registerCommand(new fakeCommand("helpme"), kPrplId); + + // Command name contains numbers. + cmdserv.registerCommand(new fakeCommand("r9kbeta"), kPrplId); + + // Array of (possibly partial) command names as entered by the user. + let testCmds = [ + "x", + "b", + "ba", + "bal", + "back", + "hel", + "help", + "off", + "offline", + ]; + + // We test an array of different possible conversations. + // cmdlist lists all the available commands for the given conversation. + // results is an array which for each testCmd provides an array containing + // data with which the return value of _findCommands can be checked. In + // particular, the name of the command and whether the first (i.e. preferred) + // entry in the returned array of commands is a prpl command. (If the latter + // boolean is not given, false is assumed, if the name is not given, that + // corresponds to no commands being returned.) + let testData = [ + { + desc: "No conversation argument.", + cmdlist: "away, back, busy, dnd, help, offline, raw, say", + results: [ + [], + [], + ["back"], + [], + ["back"], + ["help"], + ["help"], + ["offline"], + ["offline"], + ], + }, + { + desc: "Disconnected conversation with fakeAccount.", + conv: { + account: fakeDisconnectedAccount, + }, + cmdlist: + "away, back, busy, dnd, help, helpme, offline, offline, r9kbeta, raw, say", + results: [ + [], + [], + ["back"], + [], + ["back"], + ["help"], + ["help"], + ["offline"], + ["offline"], + ], + }, + { + desc: "Conversation with fakeAccount.", + conv: { + account: fakeAccount, + }, + cmdlist: + "away, back, busy, dnd, help, helpme, offline, offline, r9kbeta, raw, say", + results: [ + [], + [], + ["back"], + [], + ["back"], + [], + ["help"], + ["offline"], + ["offline"], + ], + }, + { + desc: "MUC with fakeAccount.", + conv: { + account: fakeAccount, + isChat: true, + }, + cmdlist: + "away, back, balderdash, busy, dnd, help, helpme, offline, offline, r9kbeta, raw, say", + results: [ + [], + [], + [], + ["balderdash", true], + ["back"], + [], + ["help"], + ["offline"], + ["offline"], + ], + }, + { + desc: "Conversation with fakeAccount2.", + conv: { + account: fakeAccount2, + }, + cmdlist: + "away, back, baloney, banana, busy, dnd, help, offline, raw, say", + results: [ + [], + [], + [], + ["baloney", true], + ["back"], + ["help"], + ["help"], + ["offline"], + ["offline"], + ], + }, + { + desc: "MUC with fakeAccount2.", + conv: { + account: fakeAccount2, + isChat: true, + }, + cmdlist: + "away, back, baloney, banana, busy, dnd, help, offline, raw, say", + results: [ + [], + [], + [], + ["baloney", true], + ["back"], + ["help"], + ["help"], + ["offline"], + ["offline"], + ], + }, + ]; + + for (let test of testData) { + info("The following tests are with: " + test.desc); + + // Check which commands are available in which context. + let cmdlist = cmdserv + .listCommandsForConversation(test.conv) + .map(aCmd => aCmd.name) + .sort() + .join(", "); + Assert.equal(cmdlist, test.cmdlist); + + for (let testCmd of testCmds) { + info("Testing command found for '" + testCmd + "'"); + let expectedResult = test.results.shift(); + let cmdArray = cmdserv._findCommands(test.conv, testCmd); + // Check whether commands are only returned when appropriate. + Assert.equal(cmdArray.length > 0, expectedResult.length > 0); + if (cmdArray.length) { + // Check if the right command was returned. + Assert.equal(cmdArray[0].name, expectedResult[0]); + Assert.equal( + cmdArray[0].priority == Ci.imICommand.CMD_PRIORITY_PRPL, + !!expectedResult[1] + ); + } + } + } + + // Array of messages to test command execution of. + let testMessages = [ + { + message: "/r9kbeta", + result: true, + }, + { + message: "/helpme 2 arguments", + result: true, + }, + { + message: "nocommand", + result: false, + }, + { + message: "/-a", + result: false, + }, + { + message: "/notregistered", + result: false, + }, + ]; + + // Test command execution. + for (let executionTest of testMessages) { + info("Testing command execution for '" + executionTest.message + "'"); + Assert.equal( + cmdserv.executeCommand(executionTest.message, fakeConversation), + executionTest.result + ); + } + + cmdserv.unInitCommands(); +} -- cgit v1.2.3