diff --git a/test/IRCSockTest.cpp b/test/IRCSockTest.cpp index 3e958377..b223db98 100644 --- a/test/IRCSockTest.cpp +++ b/test/IRCSockTest.cpp @@ -16,109 +16,15 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include +#include "IRCTest.h" #include using ::testing::IsEmpty; using ::testing::ElementsAre; using ::testing::ContainerEq; -class TestClient : public CClient { -public: - TestClient() { SetNick("me"); } - bool Write(const CString& sData) override { - vsLines.push_back(sData.TrimSuffix_n("\r\n")); - return true; - } - void Reset() { vsLines.clear(); } - VCString vsLines; -}; - -class TestIRCSock : public CIRCSock { -public: - TestIRCSock(CIRCNetwork* pNetwork) : CIRCSock(pNetwork) { m_Nick.SetNick("me"); } -}; - -class TestModule : public CModule { -public: - TestModule() : CModule(nullptr, nullptr, nullptr, "testmod", "", CModInfo::NetworkModule) {} - - EModRet OnCTCPReplyMessage(CCTCPMessage& msg) override { vsHooks.push_back("OnCTCPReplyMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } - EModRet OnPrivCTCPMessage(CCTCPMessage& msg) override { vsHooks.push_back("OnPrivCTCPMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } - EModRet OnChanCTCPMessage(CCTCPMessage& msg) override { vsHooks.push_back("OnChanCTCPMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } - EModRet OnPrivActionMessage(CActionMessage& msg) override { vsHooks.push_back("OnPrivActionMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } - EModRet OnChanActionMessage(CActionMessage& msg) override { vsHooks.push_back("OnChanActionMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } - EModRet OnPrivMessage(CTextMessage& msg) override { vsHooks.push_back("OnPrivMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } - EModRet OnChanMessage(CTextMessage& msg) override { vsHooks.push_back("OnChanMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } - EModRet OnPrivNoticeMessage(CNoticeMessage& msg) override { vsHooks.push_back("OnPrivNoticeMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } - EModRet OnChanNoticeMessage(CNoticeMessage& msg) override { vsHooks.push_back("OnChanNoticeMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } - EModRet OnTopicMessage(CTopicMessage& msg) override { vsHooks.push_back("OnTopicMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } - EModRet OnNumericMessage(CNumericMessage& msg) override { vsHooks.push_back("OnNumericMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } - void OnJoinMessage(CJoinMessage& msg) override { vsHooks.push_back("OnJoinMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); } - void OnKickMessage(CKickMessage& msg) override { vsHooks.push_back("OnKickMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); } - void OnNickMessage(CNickMessage& msg, const std::vector& vChans) override { vsHooks.push_back("OnNickMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); } - void OnPartMessage(CPartMessage& msg) override { vsHooks.push_back("OnPartMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); } - void OnQuitMessage(CQuitMessage& msg, const std::vector& vChans) override { vsHooks.push_back("OnQuitMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); } - - void Reset() { - vsHooks.clear(); - vsMessages.clear(); - vNetworks.clear(); - vChannels.clear(); - } - - VCString vsHooks; - VCString vsMessages; - std::vector vNetworks; - std::vector vChannels; - EModRet eAction = CONTINUE; -}; - -class IRCSockTest : public ::testing::Test { +class IRCSockTest : public IRCTest { protected: - IRCSockTest() { CDebug::SetDebug(false); CZNC::CreateInstance(); } - ~IRCSockTest() { CZNC::DestroyInstance(); } - - void SetUp() { - m_pTestUser = new CUser("user"); - m_pTestNetwork = new CIRCNetwork(m_pTestUser, "network"); - m_pTestChan = new CChan("#chan", m_pTestNetwork, false); - m_pTestSock = new TestIRCSock(m_pTestNetwork); - m_pTestClient = new TestClient; - m_pTestModule = new TestModule; - - m_pTestUser->AddNetwork(m_pTestNetwork); - m_pTestNetwork->AddChan(m_pTestChan); - m_pTestChan->AddNick("nick"); - m_pTestClient->AcceptLogin(*m_pTestUser); - m_pTestClient->vsLines.clear(); // :irc.znc.in 001 me :- Welcome to ZNC - - CZNC::Get().GetModules().push_back(m_pTestModule); - } - void TearDown() { - m_pTestUser->RemoveNetwork(m_pTestNetwork); - m_pTestNetwork->ClientDisconnected(m_pTestClient); - CZNC::Get().GetModules().clear(); - - delete m_pTestClient; - delete m_pTestSock; - delete m_pTestNetwork; - delete m_pTestUser; - delete m_pTestModule; - } - - CUser* m_pTestUser; - CIRCNetwork* m_pTestNetwork; - CChan* m_pTestChan; - CIRCSock* m_pTestSock; - TestClient* m_pTestClient; - TestModule* m_pTestModule; }; TEST_F(IRCSockTest, OnAccountMessage) { diff --git a/test/IRCTest.h b/test/IRCTest.h new file mode 100644 index 00000000..b9bc2f99 --- /dev/null +++ b/test/IRCTest.h @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2004-2015 ZNC, see the NOTICE file for details. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef IRCTEST_H +#define IRCTEST_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class TestClient : public CClient { +public: + TestClient() { SetNick("me"); } + bool Write(const CString& sData) override { + vsLines.push_back(sData.TrimSuffix_n("\r\n")); + return true; + } + void Reset() { vsLines.clear(); } + VCString vsLines; +}; + +class TestIRCSock : public CIRCSock { +public: + TestIRCSock(CIRCNetwork* pNetwork) : CIRCSock(pNetwork) { m_Nick.SetNick("me"); } +}; + +class TestModule : public CModule { +public: + TestModule() : CModule(nullptr, nullptr, nullptr, "testmod", "", CModInfo::NetworkModule) {} + + EModRet OnCTCPReplyMessage(CCTCPMessage& msg) override { vsHooks.push_back("OnCTCPReplyMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } + EModRet OnPrivCTCPMessage(CCTCPMessage& msg) override { vsHooks.push_back("OnPrivCTCPMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } + EModRet OnChanCTCPMessage(CCTCPMessage& msg) override { vsHooks.push_back("OnChanCTCPMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } + EModRet OnPrivActionMessage(CActionMessage& msg) override { vsHooks.push_back("OnPrivActionMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } + EModRet OnChanActionMessage(CActionMessage& msg) override { vsHooks.push_back("OnChanActionMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } + EModRet OnPrivMessage(CTextMessage& msg) override { vsHooks.push_back("OnPrivMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } + EModRet OnChanMessage(CTextMessage& msg) override { vsHooks.push_back("OnChanMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } + EModRet OnPrivNoticeMessage(CNoticeMessage& msg) override { vsHooks.push_back("OnPrivNoticeMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } + EModRet OnChanNoticeMessage(CNoticeMessage& msg) override { vsHooks.push_back("OnChanNoticeMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } + EModRet OnTopicMessage(CTopicMessage& msg) override { vsHooks.push_back("OnTopicMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } + EModRet OnNumericMessage(CNumericMessage& msg) override { vsHooks.push_back("OnNumericMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); return eAction; } + void OnJoinMessage(CJoinMessage& msg) override { vsHooks.push_back("OnJoinMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); } + void OnKickMessage(CKickMessage& msg) override { vsHooks.push_back("OnKickMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); } + void OnNickMessage(CNickMessage& msg, const std::vector& vChans) override { vsHooks.push_back("OnNickMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); } + void OnPartMessage(CPartMessage& msg) override { vsHooks.push_back("OnPartMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); } + void OnQuitMessage(CQuitMessage& msg, const std::vector& vChans) override { vsHooks.push_back("OnQuitMessage"); vsMessages.push_back(msg.ToString()); vNetworks.push_back(msg.GetNetwork()); vChannels.push_back(msg.GetChan()); } + + void Reset() { + vsHooks.clear(); + vsMessages.clear(); + vNetworks.clear(); + vChannels.clear(); + } + + VCString vsHooks; + VCString vsMessages; + std::vector vNetworks; + std::vector vChannels; + EModRet eAction = CONTINUE; +}; + +class IRCTest : public ::testing::Test { +protected: + IRCTest() { CDebug::SetDebug(false); CZNC::CreateInstance(); } + ~IRCTest() { CZNC::DestroyInstance(); } + + void SetUp() { + m_pTestUser = new CUser("user"); + m_pTestNetwork = new CIRCNetwork(m_pTestUser, "network"); + m_pTestChan = new CChan("#chan", m_pTestNetwork, false); + m_pTestSock = new TestIRCSock(m_pTestNetwork); + m_pTestClient = new TestClient; + m_pTestModule = new TestModule; + + m_pTestUser->AddNetwork(m_pTestNetwork); + m_pTestNetwork->AddChan(m_pTestChan); + m_pTestChan->AddNick("nick"); + m_pTestClient->AcceptLogin(*m_pTestUser); + m_pTestClient->vsLines.clear(); // :irc.znc.in 001 me :- Welcome to ZNC - + CZNC::Get().GetModules().push_back(m_pTestModule); + } + + void TearDown() { + m_pTestUser->RemoveNetwork(m_pTestNetwork); + m_pTestNetwork->ClientDisconnected(m_pTestClient); + CZNC::Get().GetModules().clear(); + + delete m_pTestClient; + delete m_pTestSock; + delete m_pTestNetwork; + delete m_pTestUser; + delete m_pTestModule; + } + + CUser* m_pTestUser; + CIRCNetwork* m_pTestNetwork; + CChan* m_pTestChan; + CIRCSock* m_pTestSock; + TestClient* m_pTestClient; + TestModule* m_pTestModule; +}; + +#endif // IRCTEST_H diff --git a/test/QueryTest.cpp b/test/QueryTest.cpp index 332bd582..7fec4ee6 100644 --- a/test/QueryTest.cpp +++ b/test/QueryTest.cpp @@ -16,13 +16,8 @@ #include #include +#include "IRCTest.h" #include -#include -#include -#include -#include -#include -#include using ::testing::SizeIs; using ::testing::ElementsAre; @@ -73,15 +68,6 @@ TEST_F(QueryTest, BufferSize) { EXPECT_EQ(1000u, query.GetBufferCount()); } -class TestClient : public CClient { -public: - bool Write(const CString& sData) override { - lines.push_back(sData); - return true; - } - VCString lines; -}; - TEST_F(QueryTest, SendBuffer) { CUser user("user"); CIRCNetwork network(&user, "network"); @@ -90,28 +76,28 @@ TEST_F(QueryTest, SendBuffer) { TestClient client; client.SetNick("me"); client.AcceptLogin(user); - client.lines.clear(); + client.Reset(); CQuery query("query", &network); query.AddBuffer(":sender PRIVMSG {target} :{text}", "a message"); query.AddBuffer(":me PRIVMSG someone :{text}", "a self-message"); query.AddBuffer(":sender NOTICE #znc :{text}", "a notice"); - client.lines.clear(); + client.Reset(); query.SendBuffer(&client); - EXPECT_THAT(client.lines, ElementsAre(MatchesRegex(R"(:sender PRIVMSG me :\[\d\d:\d\d:\d\d\] a message)"), - MatchesRegex(R"(:sender NOTICE #znc :\[\d\d:\d\d:\d\d\] a notice)"))); + EXPECT_THAT(client.vsLines, ElementsAre(MatchesRegex(R"(:sender PRIVMSG me :\[\d\d:\d\d:\d\d\] a message)"), + MatchesRegex(R"(:sender NOTICE #znc :\[\d\d:\d\d:\d\d\] a notice)"))); - client.lines.clear(); + client.Reset(); user.SetTimestampPrepend(false); query.SendBuffer(&client); - EXPECT_THAT(client.lines, ElementsAre(":sender PRIVMSG me :a message", ":sender NOTICE #znc :a notice")); + EXPECT_THAT(client.vsLines, ElementsAre(":sender PRIVMSG me :a message", ":sender NOTICE #znc :a notice")); - client.lines.clear(); + client.Reset(); user.SetTimestampAppend(true); query.SendBuffer(&client); - EXPECT_THAT(client.lines, ElementsAre(MatchesRegex(R"(:sender PRIVMSG me :a message \[\d\d:\d\d:\d\d\])"), - MatchesRegex(R"(:sender NOTICE #znc :a notice \[\d\d:\d\d:\d\d\])"))); + EXPECT_THAT(client.vsLines, ElementsAre(MatchesRegex(R"(:sender PRIVMSG me :a message \[\d\d:\d\d:\d\d\])"), + MatchesRegex(R"(:sender NOTICE #znc :a notice \[\d\d:\d\d:\d\d\])"))); network.ClientDisconnected(&client); }