TEST_F(IRCSockTest, OnTextMessage) { CMessage msg(":nick PRIVMSG #chan :hello"); m_pTestModule->eAction = CModule::HALT; m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, ElementsAre("OnChanTextMessage")); EXPECT_THAT(m_pTestModule->vsMessages, ElementsAre(msg.ToString())); EXPECT_THAT(m_pTestModule->vNetworks, ElementsAre(m_pTestNetwork)); EXPECT_THAT(m_pTestModule->vChannels, ElementsAre(m_pTestChan)); 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_pTestClient->Reset(); m_pTestModule->Reset(); msg.Parse(":nick PRIVMSG me :hello"); m_pTestModule->eAction = CModule::HALT; m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, ElementsAre("OnPrivTextMessage")); 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())); }
TEST_F(IRCSockTest, OnPongMessage) { CMessage msg(":server PONG :arg"); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, IsEmpty()); EXPECT_THAT(m_pTestClient->vsLines, IsEmpty()); }
TEST_F(IRCSockTest, OnCapabilityMessage) { CMessage msg(":server CAP * LS :multi-prefix sasl"); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, IsEmpty()); // no OnCapabilityMessage() hook (yet?) EXPECT_THAT(m_pTestClient->vsLines, IsEmpty()); }
TEST_F(IRCSockTest, OnAccountMessage) { CMessage msg(":nick!user@host ACCOUNT accountname"); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, IsEmpty()); // no OnAccountMessage() hook (yet?) EXPECT_THAT(m_pTestClient->vsLines, IsEmpty()); // account-notify disabled }
TEST_F(IRCSockTest, OnAwayMessage) { CMessage msg(":nick!user@host AWAY :reason"); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, IsEmpty()); // no OnAwayMessage() hook (yet?) EXPECT_THAT(m_pTestClient->vsLines, IsEmpty()); // away-notify disabled }
TEST_F(IRCSockTest, OnCTCPMessage) { CMessage msg(":nick PRIVMSG #chan :\001VERSION\001"); m_pTestModule->eAction = CModule::HALT; m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, ElementsAre("OnChanCTCPMessage")); EXPECT_THAT(m_pTestModule->vsMessages, ElementsAre(msg.ToString())); EXPECT_THAT(m_pTestModule->vNetworks, ElementsAre(m_pTestNetwork)); EXPECT_THAT(m_pTestModule->vChannels, ElementsAre(m_pTestChan)); 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_pTestClient->Reset(); m_pTestModule->Reset(); msg.Parse(":nick PRIVMSG me :\001VERSION\001"); m_pTestModule->eAction = CModule::HALT; m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, ElementsAre("OnPrivCTCPMessage")); 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_pTestClient->Reset(); m_pTestModule->Reset(); msg.Parse(":nick NOTICE me :\001VERSION ZNC 0.0\001"); m_pTestModule->eAction = CModule::HALT; m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, ElementsAre("OnCTCPReplyMessage")); 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())); }
TEST_F(IRCSockTest, OnWallopsMessage) { CMessage msg(":blub!dummy@rox-8DBEFE92 WALLOPS :this is a test"); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, IsEmpty()); // no OnWallopsMessage() hook (yet?) EXPECT_THAT(m_pTestClient->vsLines, ElementsAre(msg.ToString())); }
TEST_F(IRCSockTest, OnModeMessage) { CMessage msg(":nick MODE #chan +k key"); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, IsEmpty()); // no OnModeMessage() hook (yet?) EXPECT_THAT(m_pTestClient->vsLines, ElementsAre(msg.ToString())); }
TEST_F(IRCSockTest, OnInviteMessage) { CMessage msg(":nick INVITE me #znc"); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, IsEmpty()); // no OnInviteMessage() hook (yet?) EXPECT_THAT(m_pTestClient->vsLines, ElementsAre(msg.ToString())); }
TEST_F(IRCSockTest, OnErrorMessage) { CMessage msg(":server ERROR :foo bar"); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, IsEmpty()); // no OnErrorMessage() hook (yet?) EXPECT_THAT( m_pTestClient->vsLines, ElementsAre( ":*[email protected] PRIVMSG me :Error from Server [foo bar]")); }
TEST_F(IRCSockTest, OnNickMessage) { CMessage msg(":nobody NICK nick"); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, ElementsAre("OnNickMessage")); 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()); msg.Parse(":nick NICK somebody"); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestClient->vsLines, ElementsAre(msg.ToString())); }
TEST_F(IRCSockTest, OnTopicMessage) { CMessage msg(":nick TOPIC #chan :topic"); m_pTestModule->eAction = CModule::HALT; m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, ElementsAre("OnTopicMessage")); EXPECT_THAT(m_pTestModule->vsMessages, ElementsAre(msg.ToString())); EXPECT_THAT(m_pTestModule->vNetworks, ElementsAre(m_pTestNetwork)); EXPECT_THAT(m_pTestModule->vChannels, ElementsAre(m_pTestChan)); 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())); }
TEST_F(IRCSockTest, OnNumericMessage) { CMessage msg(":irc.server.com 372 nick :motd"); m_pTestModule->eAction = CModule::HALT; m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestModule->vsHooks, ElementsAre("OnNumericMessage")); 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())); }
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, OnActionMessage) { // 2 callbacks are called in row: OnCTCP, OnAction. // If OnCTCP returns HALT, OnAction isn't called. struct ActionModule : TestModule { ActionModule() { Reset(); } void Reset() { Mock::VerifyAndClear(this); EXPECT_CALL(*this, OnPrivCTCPMessage(_)).Times(0); EXPECT_CALL(*this, OnChanCTCPMessage(_)).Times(0); EXPECT_CALL(*this, OnPrivActionMessage(_)).Times(0); EXPECT_CALL(*this, OnChanActionMessage(_)).Times(0); TestModule::Reset(); } MOCK_METHOD1(OnPrivCTCPMessage, EModRet(CCTCPMessage&)); MOCK_METHOD1(OnChanCTCPMessage, EModRet(CCTCPMessage&)); MOCK_METHOD1(OnPrivActionMessage, EModRet(CActionMessage&)); MOCK_METHOD1(OnChanActionMessage, EModRet(CActionMessage&)); }; ActionModule testModule; CZNC::Get().GetModules().push_back(&testModule); CChan* pExpectedChan = m_pTestChan; CMessage msg(":nick PRIVMSG #chan :\001ACTION hello\001"); auto CON = Invoke([&](CMessage& m) { EXPECT_EQ(m.ToString(), msg.ToString()); EXPECT_EQ(m.GetNetwork(), m_pTestNetwork); EXPECT_EQ(m.GetChan(), pExpectedChan); return CModule::CONTINUE; }); auto HAL = Invoke([&](CMessage& m) { EXPECT_EQ(m.ToString(), msg.ToString()); EXPECT_EQ(m.GetNetwork(), m_pTestNetwork); EXPECT_EQ(m.GetChan(), pExpectedChan); return CModule::HALT; }); auto Reset = [&]() { testModule.Reset(); m_pTestClient->Reset(); }; Reset(); { InSequence seq; EXPECT_CALL(testModule, OnChanCTCPMessage(_)).WillOnce(CON); EXPECT_CALL(testModule, OnChanActionMessage(_)).WillOnce(CON); } m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestClient->vsLines, ElementsAre(msg.ToString())); Reset(); { InSequence seq; EXPECT_CALL(testModule, OnChanCTCPMessage(_)).WillOnce(CON); EXPECT_CALL(testModule, OnChanActionMessage(_)).WillOnce(HAL); } m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestClient->vsLines, IsEmpty()); Reset(); EXPECT_CALL(testModule, OnChanCTCPMessage(_)).WillOnce(HAL); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestClient->vsLines, IsEmpty()); msg.Parse(":nick PRIVMSG me :\001ACTION hello\001"); pExpectedChan = nullptr; Reset(); { InSequence seq; EXPECT_CALL(testModule, OnPrivCTCPMessage(_)).WillOnce(CON); EXPECT_CALL(testModule, OnPrivActionMessage(_)).WillOnce(CON); } m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestClient->vsLines, ElementsAre(msg.ToString())); Reset(); { InSequence seq; EXPECT_CALL(testModule, OnPrivCTCPMessage(_)).WillOnce(CON); EXPECT_CALL(testModule, OnPrivActionMessage(_)).WillOnce(HAL); } m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestClient->vsLines, IsEmpty()); Reset(); EXPECT_CALL(testModule, OnPrivCTCPMessage(_)).WillOnce(HAL); m_pTestSock->ReadLine(msg.ToString()); EXPECT_THAT(m_pTestClient->vsLines, IsEmpty()); }