summaryrefslogtreecommitdiffstats
path: root/comm/chat/protocols/irc/test/test_ircServerTime.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/chat/protocols/irc/test/test_ircServerTime.js')
-rw-r--r--comm/chat/protocols/irc/test/test_ircServerTime.js130
1 files changed, 130 insertions, 0 deletions
diff --git a/comm/chat/protocols/irc/test/test_ircServerTime.js b/comm/chat/protocols/irc/test/test_ircServerTime.js
new file mode 100644
index 0000000000..9f91ab7432
--- /dev/null
+++ b/comm/chat/protocols/irc/test/test_ircServerTime.js
@@ -0,0 +1,130 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+var { tagServerTime } = ChromeUtils.importESModule(
+ "resource:///modules/ircServerTime.sys.mjs"
+);
+var { ircMessage } = ChromeUtils.importESModule(
+ "resource:///modules/ircAccount.sys.mjs"
+);
+
+function getTags(aRawMsg) {
+ const { tags } = ircMessage(aRawMsg, "does.not@matter");
+
+ return tags;
+}
+
+function run_test() {
+ add_test(specMessages);
+
+ run_next_test();
+}
+
+function specMessages() {
+ const kMessages = [
+ {
+ tags: getTags(
+ "@time=2011-10-19T16:40:51.620Z :Angel!angel@example.com PRIVMSG #test :Hello"
+ ),
+ who: "Angel!angel@example.com",
+ get originalMessage() {
+ return "Hello";
+ },
+ message: "Hello",
+ incoming: true,
+ },
+ {
+ tags: getTags(
+ "@time=2012-06-30T23:59:60.419Z :John!~john@1.2.3.4 JOIN #chan"
+ ),
+ who: "John!~john@1.2.3.4",
+ message: "John joined #chan",
+ get originalMessage() {
+ return "John joined #chan";
+ },
+ system: true,
+ incoming: true,
+ },
+ {
+ tags: getTags(
+ "@znc.in/server-time-iso=2016-11-13T19:20:45.284Z :John!~john@1.2.3.4 JOIN #chan"
+ ),
+ who: "John!~john@1.2.3.4",
+ message: "John joined #chan",
+ get originalMessage() {
+ return "John joined #chan";
+ },
+ system: true,
+ incoming: true,
+ },
+ {
+ tags: getTags("@time= :empty!Empty@host.local JOIN #test"),
+ who: "empty!Empty@localhost",
+ message: "Empty joined #test",
+ get originalMessage() {
+ return "Empty joined #test";
+ },
+ system: true,
+ incoming: true,
+ },
+ {
+ tags: getTags("NoTags!notags@1.2.3.4 PART #test"),
+ who: "NoTags!notags@1.2.3.4",
+ message: "NoTags left #test",
+ get originalMessage() {
+ return "NoTags left #test";
+ },
+ system: true,
+ incoming: true,
+ },
+ ];
+
+ const kExpectedTimes = [
+ Math.floor(Date.parse(kMessages[0].tags.get("time")) / 1000),
+ Math.floor(Date.parse("2012-06-30T23:59:59.999Z") / 1000),
+ Math.floor(
+ Date.parse(kMessages[2].tags.get("znc.in/server-time-iso")) / 1000
+ ),
+ undefined,
+ undefined,
+ ];
+
+ for (let m in kMessages) {
+ const msg = kMessages[m];
+ const isZNC = kMessages[m].tags.has("znc.in/server-time-iso");
+ const tag = isZNC ? "znc.in/server-time-iso" : "time";
+ const tagMessage = {
+ message: Object.assign({}, msg),
+ tagName: tag,
+ tagValue: msg.tags.get(tag),
+ };
+ tagServerTime.commands[tag](tagMessage);
+
+ // Ensuring that the expected properties and their values as given in
+ // kMessages are still the same after the handler.
+ for (let i in msg) {
+ equal(
+ tagMessage.message[i],
+ msg[i],
+ "Property '" + i + "' was not modified"
+ );
+ }
+ // The time should only be adjusted when we expect a valid server-time tag.
+ equal(
+ "time" in tagMessage.message,
+ kExpectedTimes[m] !== undefined,
+ "Message time was set when expected"
+ );
+
+ if (kExpectedTimes[m] !== undefined) {
+ ok(tagMessage.message.delayed, "Delayed flag was set");
+ equal(
+ kExpectedTimes[m],
+ tagMessage.message.time,
+ "Time was parsed properly"
+ );
+ }
+ }
+
+ run_next_test();
+}