mirror of
https://github.com/znc/znc.git
synced 2026-08-08 09:52:55 +02:00
Rework MODE/RPL_CHANMODEIS handling for trailing args (#1661)
Some servers may send a colon even if the last parameter doesn't need it, currently this leads to issues with permission/mode tracking, as the core doesn't handle the colon properly. This fix replaces reconstructing the parameter string with just passing a vector of the relevant parameters to CChan::SetModes() and adds overrides for CChan::SetModes() and CChan::ModeChange() that accept the vector instead. Clean up uses of old CModeMessage::GetModes()
This commit is contained in:
committed by
Alexey Sokolov
parent
51e82fc7e8
commit
95369455fc
@@ -330,6 +330,23 @@ TEST_F(IRCSockTest, OnPartMessage) {
|
||||
EXPECT_THAT(m_pTestModule->vChannels, ElementsAre(m_pTestChan));
|
||||
}
|
||||
|
||||
TEST_F(IRCSockTest, StatusModes) {
|
||||
m_pTestSock->ReadLine(":server 005 user PREFIX=(Yohv)!@%+ :are supported by this server");
|
||||
|
||||
EXPECT_TRUE(m_pTestSock->IsPermMode('Y'));
|
||||
EXPECT_TRUE(m_pTestSock->IsPermMode('o'));
|
||||
EXPECT_TRUE(m_pTestSock->IsPermMode('h'));
|
||||
EXPECT_TRUE(m_pTestSock->IsPermMode('v'));
|
||||
|
||||
m_pTestChan->SetModes("+sp");
|
||||
m_pTestChan->ModeChange("+Y :nick");
|
||||
EXPECT_EQ(m_pTestChan->GetModeString(), "+ps");
|
||||
|
||||
const CNick& pNick = m_pTestChan->GetNicks().at("nick");
|
||||
EXPECT_TRUE(pNick.HasPerm('!'));
|
||||
EXPECT_FALSE(pNick.HasPerm('@'));
|
||||
}
|
||||
|
||||
TEST_F(IRCSockTest, OnPingMessage) {
|
||||
CMessage msg(":server PING :arg");
|
||||
m_pTestSock->ReadLine(msg.ToString());
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
using ::testing::IsEmpty;
|
||||
using ::testing::ContainerEq;
|
||||
using ::testing::ElementsAre;
|
||||
|
||||
TEST(MessageTest, SetParam) {
|
||||
CMessage msg;
|
||||
@@ -70,6 +71,42 @@ TEST(MessageTest, GetParams) {
|
||||
EXPECT_EQ(CMessage("CMD p1 :p2 p3").GetParams(-1, 10), "");
|
||||
}
|
||||
|
||||
TEST(MessageTest, GetParamsSplit) {
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(0), IsEmpty());
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(1), IsEmpty());
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(-1), IsEmpty());
|
||||
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(0, 0), IsEmpty());
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(1, 0), IsEmpty());
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(-1, 0), IsEmpty());
|
||||
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(0, 1), IsEmpty());
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(1, 1), IsEmpty());
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(-1, 1), IsEmpty());
|
||||
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(0, 10), IsEmpty());
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(1, 10), IsEmpty());
|
||||
EXPECT_THAT(CMessage("CMD").GetParamsSplit(-1, 10), IsEmpty());
|
||||
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(0), ElementsAre("p1", "p2 p3"));
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(1), ElementsAre("p2 p3"));
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(-1), IsEmpty());
|
||||
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(0, 0), IsEmpty());
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(1, 0), IsEmpty());
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(-1, 0), IsEmpty());
|
||||
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(0, 1), ElementsAre("p1"));
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(1, 1), ElementsAre("p2 p3"));
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(-1, 1), IsEmpty());
|
||||
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(0, 10), ElementsAre("p1", "p2 p3"));
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(1, 10), ElementsAre("p2 p3"));
|
||||
EXPECT_THAT(CMessage("CMD p1 :p2 p3").GetParamsSplit(-1, 10), IsEmpty());
|
||||
|
||||
EXPECT_THAT(CMessage("CMD p1 :").GetParamsSplit(0), ElementsAre("p1", ""));
|
||||
}
|
||||
|
||||
TEST(MessageTest, ToString) {
|
||||
EXPECT_EQ(CMessage("CMD").ToString(), "CMD");
|
||||
EXPECT_EQ(CMessage("CMD p1").ToString(), "CMD p1");
|
||||
@@ -358,7 +395,14 @@ TEST(MessageTest, Mode) {
|
||||
msg.Parse(":nick MODE nick :+i");
|
||||
EXPECT_EQ(msg.GetModes(), "+i");
|
||||
|
||||
EXPECT_EQ(msg.GetModeList(), "+i");
|
||||
|
||||
EXPECT_EQ(msg.ToString(), ":nick MODE nick :+i");
|
||||
|
||||
msg.Parse(":nick MODE nick +ov Person :Other");
|
||||
|
||||
EXPECT_EQ(msg.GetModeList(), "+ov");
|
||||
EXPECT_THAT(msg.GetModeParams(), ElementsAre("Person", "Other"));
|
||||
}
|
||||
|
||||
TEST(MessageTest, Nick) {
|
||||
|
||||
Reference in New Issue
Block a user