Add OnSendToIRCMessage and OnSendToClientMessage

This also alters PutClient such that the CMessage variant handles
sending messages, rather than the CString variant. As a side bonus, this
gives callers better information on whether the message was sent to the
client. Additionally, it eliminates the need for a hook to let modules
set the tags sent to a client, as that can now be done inside
OnSendToClientMessage.
This commit is contained in:
Eli Young
2017-04-11 13:03:38 -07:00
parent f37aa308e1
commit 823ac07240
13 changed files with 123 additions and 26 deletions
+20
View File
@@ -343,3 +343,23 @@ TEST_F(ClientTest, OnUserQuitMessage) {
m_pTestClient->ReadLine(msg.ToString());
EXPECT_THAT(m_pTestSock->vsLines, IsEmpty()); // quit is never forwarded
}
TEST_F(ClientTest, OnSendToClientMessage) {
CMessage msg("PRIVMSG #chan :text");
m_pTestModule->eAction = CModule::HALT;
m_pTestModule->bSendHooks = true;
m_pTestClient->PutClient(msg.ToString());
EXPECT_THAT(m_pTestModule->vsHooks, ElementsAre("OnSendToClientMessage"));
EXPECT_THAT(m_pTestModule->vsMessages, ElementsAre(msg.ToString()));
EXPECT_THAT(m_pTestModule->vNetworks, ElementsAre(m_pTestClient->GetNetwork()));
EXPECT_THAT(m_pTestModule->vClients, ElementsAre(m_pTestClient));
EXPECT_THAT(m_pTestModule->vChannels, ElementsAre(nullptr));
EXPECT_THAT(m_pTestSock->vsLines, IsEmpty()); // halt
m_pTestModule->eAction = CModule::CONTINUE;
m_pTestClient->ReadLine(msg.ToString());
EXPECT_THAT(m_pTestSock->vsLines, ElementsAre(msg.ToString()));
m_pTestModule->bSendHooks = false;
}
+19
View File
@@ -361,6 +361,25 @@ TEST_F(IRCSockTest, OnQuitMessage) {
EXPECT_THAT(m_pTestClient->vsLines, ElementsAre(msg.ToString()));
}
TEST_F(IRCSockTest, OnSendToIRCMessage) {
CMessage msg(":nick PRIVMSG #chan :hello");
m_pTestModule->eAction = CModule::HALT;
m_pTestModule->bSendHooks = true;
m_pTestSock->PutIRC(msg.ToString());
EXPECT_THAT(m_pTestModule->vsHooks, ElementsAre("OnSendToIRCMessage"));
EXPECT_THAT(m_pTestModule->vsMessages, ElementsAre(msg.ToString()));
EXPECT_THAT(m_pTestModule->vNetworks, ElementsAre(m_pTestNetwork));
EXPECT_THAT(m_pTestModule->vChannels, ElementsAre(nullptr));
EXPECT_THAT(m_pTestClient->vsLines, IsEmpty()); // halt
m_pTestModule->eAction = CModule::CONTINUE;
m_pTestSock->ReadLine(msg.ToString());
EXPECT_THAT(m_pTestClient->vsLines, ElementsAre(msg.ToString()));
m_pTestModule->bSendHooks = false;
}
TEST_F(IRCSockTest, OnTextMessage) {
CMessage msg(":nick PRIVMSG #chan :hello");
m_pTestModule->eAction = CModule::HALT;
+11
View File
@@ -129,6 +129,16 @@ class TestModule : public CModule {
OnMessage(msg);
}
EModRet OnSendToClientMessage(CMessage& msg) override {
if (!bSendHooks) return CONTINUE;
vsHooks.push_back("OnSendToClientMessage");
return OnMessage(msg);
}
EModRet OnSendToIRCMessage(CMessage& msg) override {
if (!bSendHooks) return CONTINUE;
vsHooks.push_back("OnSendToIRCMessage");
return OnMessage(msg);
}
EModRet OnUserCTCPReplyMessage(CCTCPMessage& msg) override {
vsHooks.push_back("OnUserCTCPReplyMessage");
return OnMessage(msg);
@@ -188,6 +198,7 @@ class TestModule : public CModule {
std::vector<CClient*> vClients;
std::vector<CChan*> vChannels;
EModRet eAction = CONTINUE;
bool bSendHooks = false;
};
class IRCTest : public ::testing::Test {