summaryrefslogtreecommitdiff
path: root/tests/unit/plugins
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2023-05-14 15:04:08 +0200
committerSébastien Helleu <flashcode@flashtux.org>2023-05-14 15:33:30 +0200
commit060cb48094f6a9d187d4645ecb1ec4cd4f374931 (patch)
tree818d4ee9df262662344b158247d5bce0e51c993f /tests/unit/plugins
parent283c9d7ccffbcae0eee8fb3693597973b2fca55a (diff)
downloadweechat-060cb48094f6a9d187d4645ecb1ec4cd4f374931.zip
irc: ignore BATCH commands when capability "batch" is not enabled (issue #1292)
Diffstat (limited to 'tests/unit/plugins')
-rw-r--r--tests/unit/plugins/irc/test-irc-protocol.cpp118
1 files changed, 116 insertions, 2 deletions
diff --git a/tests/unit/plugins/irc/test-irc-protocol.cpp b/tests/unit/plugins/irc/test-irc-protocol.cpp
index 35781588e..067e32803 100644
--- a/tests/unit/plugins/irc/test-irc-protocol.cpp
+++ b/tests/unit/plugins/irc/test-irc-protocol.cpp
@@ -795,10 +795,124 @@ TEST(IrcProtocolWithServer, away)
/*
* Tests functions:
- * irc_protocol_cb_batch
+ * irc_protocol_cb_batch (without batch cap)
*/
-TEST(IrcProtocolWithServer, batch)
+TEST(IrcProtocolWithServer, batch_without_batch_cap)
+{
+ SRV_INIT_JOIN2;
+
+ /* not enough parameters */
+ RECV(":server BATCH");
+ CHECK_ERROR_PARAMS("batch", 0, 1);
+ RECV(":server BATCH +test");
+ CHECK_NO_MSG;
+
+ /* invalid reference: does not start with '+' or '-' */
+ RECV(":server BATCH zzz type");
+ CHECK_NO_MSG;
+ POINTERS_EQUAL(NULL, ptr_server->batches);
+
+ /* start batch without parameters */
+ RECV(":server BATCH +ref example");
+ CHECK_NO_MSG;
+ POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "ref"));
+
+ /* new messages with batch reference */
+ RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :this is a test");
+ CHECK_CHAN("bob this is a test");
+ RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :second test");
+ CHECK_CHAN("bob second test");
+ RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :third test");
+ CHECK_CHAN("bob third test");
+
+ /* end batch */
+ RECV(":server BATCH -ref");
+ CHECK_NO_MSG;
+
+ /* start batch with parameters */
+ RECV(":server BATCH +ref example param1 param2 param3");
+ CHECK_NO_MSG;
+ POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "ref"));
+
+ /* new messages with batch reference */
+ RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :test 1");
+ CHECK_CHAN("bob test 1");
+ RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :test 2");
+ CHECK_CHAN("bob test 2");
+ RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :test 3");
+ CHECK_CHAN("bob test 3");
+
+ /* end batch */
+ RECV(":server BATCH -ref");
+ CHECK_NO_MSG;
+
+ /* start/end batch without parameters */
+ RECV(":server BATCH +ref example");
+ RECV(":server BATCH -ref");
+ CHECK_NO_MSG;
+ POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "ref"));
+
+ /* interleaving batches */
+ RECV(":server BATCH +1 example");
+ CHECK_NO_MSG;
+ RECV("@batch=1 :bob!user_b@host_b PRIVMSG #test :message 1");
+ CHECK_CHAN("bob message 1");
+ RECV(":server BATCH +2 example");
+ CHECK_NO_MSG;
+ RECV("@batch=1 :bob!user_b@host_b PRIVMSG #test :message 2");
+ CHECK_CHAN("bob message 2");
+ RECV("@batch=2 :bob!user_b@host_b PRIVMSG #test :message 4");
+ CHECK_CHAN("bob message 4");
+ RECV("@batch=1 :bob!user_b@host_b PRIVMSG #test :message 3");
+ CHECK_CHAN("bob message 3");
+ RECV(":server BATCH -1");
+ CHECK_NO_MSG;
+ RECV("@batch=2 :bob!user_b@host_b PRIVMSG #test :message 5");
+ CHECK_CHAN("bob message 5");
+ RECV(":server BATCH -2");
+ CHECK_NO_MSG;
+
+ /* nested batch */
+ RECV(":server BATCH +ref1 example1");
+ CHECK_NO_MSG;
+ RECV("@batch=ref1 :server BATCH +ref2 example2");
+ RECV("@batch=ref1 :bob!user_b@host_b PRIVMSG #test :test ref1");
+ CHECK_CHAN("bob test ref1");
+ RECV("@batch=ref2 :bob!user_b@host_b PRIVMSG #test :test ref2");
+ CHECK_CHAN("bob test ref2");
+ RECV(":server BATCH -ref2");
+ CHECK_NO_MSG;
+ RECV(":server BATCH -ref1");
+ CHECK_NO_MSG;
+
+ /* multiline */
+ RECV(":server BATCH +ref draft/multiline #test");
+ CHECK_NO_MSG;
+ RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :line 1");
+ CHECK_CHAN("bob line 1");
+ RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :line 2");
+ CHECK_CHAN("bob line 2");
+ RECV(":server BATCH -ref");
+ CHECK_NO_MSG;
+
+ /* multiline with CTCP */
+ RECV(":server BATCH +ref draft/multiline #test");
+ CHECK_NO_MSG;
+ RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :\01ACTION is testing");
+ CHECK_CHAN(" * bob is testing");
+ RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :again\01");
+ CHECK_CHAN("bob again\01");
+ RECV(":server BATCH -ref");
+ CHECK_NO_MSG;
+}
+
+/*
+ * Tests functions:
+ * irc_protocol_cb_batch (with batch cap)
+ */
+
+TEST(IrcProtocolWithServer, batch_with_batch_cap)
{
struct t_irc_batch *ptr_batch;