mirror of
https://github.com/znc/znc.git
synced 2026-07-30 13:33:42 +02:00
Add CTargetMessage: a base class for "targeted" priv/chan messages
This will be useful for implementing the upcoming OnUserXxxMessage() module hooks, that are allowed to modify the message target.
This commit is contained in:
+15
-8
@@ -87,19 +87,25 @@ private:
|
||||
CChan* m_pChan = nullptr;
|
||||
};
|
||||
|
||||
class CActionMessage : public CMessage {
|
||||
class CTargetMessage : public CMessage {
|
||||
public:
|
||||
CString GetTarget() const { return GetParam(0); }
|
||||
void SetTarget(const CString& sTarget) { SetParam(0, sTarget); }
|
||||
};
|
||||
|
||||
class CActionMessage : public CTargetMessage {
|
||||
public:
|
||||
CString GetText() const { return GetParam(1).TrimPrefix_n("\001ACTION ").TrimSuffix_n("\001"); }
|
||||
void SetText(const CString& sText) { SetParam(1, "\001ACTION " + sText + "\001"); }
|
||||
};
|
||||
|
||||
class CCTCPMessage : public CMessage {
|
||||
class CCTCPMessage : public CTargetMessage {
|
||||
public:
|
||||
CString GetText() const { return GetParam(1).TrimPrefix_n("\001").TrimSuffix_n("\001"); }
|
||||
void SetText(const CString& sText) { SetParam(1, "\001" + sText + "\001"); }
|
||||
};
|
||||
|
||||
class CJoinMessage : public CMessage {
|
||||
class CJoinMessage : public CTargetMessage {
|
||||
public:
|
||||
};
|
||||
|
||||
@@ -110,13 +116,13 @@ public:
|
||||
void SetNewNick(const CString& sNick) { SetParam(0, sNick); }
|
||||
};
|
||||
|
||||
class CNoticeMessage : public CMessage {
|
||||
class CNoticeMessage : public CTargetMessage {
|
||||
public:
|
||||
CString GetText() const { return GetParam(1); }
|
||||
void SetText(const CString& sText) { SetParam(1, sText); }
|
||||
};
|
||||
|
||||
class CKickMessage : public CMessage {
|
||||
class CKickMessage : public CTargetMessage {
|
||||
public:
|
||||
CString GetKickedNick() const { return GetParam(1); }
|
||||
void SetKickedNick(const CString& sNick) { SetParam(1, sNick); }
|
||||
@@ -124,7 +130,7 @@ public:
|
||||
void SetReason(const CString& sReason) { SetParam(2, sReason); }
|
||||
};
|
||||
|
||||
class CPartMessage : public CMessage {
|
||||
class CPartMessage : public CTargetMessage {
|
||||
public:
|
||||
CString GetReason() const { return GetParam(1); }
|
||||
void SetReason(const CString& sReason) { SetParam(1, sReason); }
|
||||
@@ -136,13 +142,13 @@ public:
|
||||
void SetReason(const CString& sReason) { SetParam(0, sReason); }
|
||||
};
|
||||
|
||||
class CTextMessage : public CMessage {
|
||||
class CTextMessage : public CTargetMessage {
|
||||
public:
|
||||
CString GetText() const { return GetParam(1); }
|
||||
void SetText(const CString& sText) { SetParam(1, sText); }
|
||||
};
|
||||
|
||||
class CTopicMessage : public CMessage {
|
||||
class CTopicMessage : public CTargetMessage {
|
||||
public:
|
||||
CString GetTopic() const { return GetParam(1); }
|
||||
void SetTopic(const CString& sTopic) { SetParam(1, sTopic); }
|
||||
@@ -159,6 +165,7 @@ static_assert(sizeof(CPartMessage) == sizeof(CMessage), "No data members allowed
|
||||
static_assert(sizeof(CNickMessage) == sizeof(CMessage), "No data members allowed in CMessage subclasses.");
|
||||
static_assert(sizeof(CKickMessage) == sizeof(CMessage), "No data members allowed in CMessage subclasses.");
|
||||
static_assert(sizeof(CQuitMessage) == sizeof(CMessage), "No data members allowed in CMessage subclasses.");
|
||||
static_assert(sizeof(CTargetMessage) == sizeof(CMessage), "No data members allowed in CMessage subclasses.");
|
||||
static_assert(sizeof(CTextMessage) == sizeof(CMessage), "No data members allowed in CMessage subclasses.");
|
||||
static_assert(sizeof(CTopicMessage) == sizeof(CMessage), "No data members allowed in CMessage subclasses.");
|
||||
|
||||
|
||||
+50
-18
@@ -72,11 +72,14 @@ TEST(MessageTest, ChanAction) {
|
||||
CActionMessage& chan = static_cast<CActionMessage&>(msg);
|
||||
EXPECT_EQ("sender", chan.GetNick().GetNick());
|
||||
EXPECT_EQ("PRIVMSG", chan.GetCommand());
|
||||
EXPECT_EQ("#chan", chan.GetTarget());
|
||||
EXPECT_EQ("ACTS", chan.GetText());
|
||||
|
||||
chan.SetTarget("#znc");
|
||||
EXPECT_EQ("#znc", chan.GetTarget());
|
||||
chan.SetText("foo bar");
|
||||
EXPECT_EQ("foo bar", chan.GetText());
|
||||
EXPECT_EQ(":sender PRIVMSG #chan :\001ACTION foo bar\001", chan.ToString());
|
||||
EXPECT_EQ(":sender PRIVMSG #znc :\001ACTION foo bar\001", chan.ToString());
|
||||
}
|
||||
|
||||
TEST(MessageTest, ChanCTCP) {
|
||||
@@ -84,23 +87,29 @@ TEST(MessageTest, ChanCTCP) {
|
||||
CCTCPMessage& chan = static_cast<CCTCPMessage&>(msg);
|
||||
EXPECT_EQ("sender", chan.GetNick().GetNick());
|
||||
EXPECT_EQ("PRIVMSG", chan.GetCommand());
|
||||
EXPECT_EQ("#chan", chan.GetTarget());
|
||||
EXPECT_EQ("text", chan.GetText());
|
||||
|
||||
chan.SetTarget("#znc");
|
||||
EXPECT_EQ("#znc", chan.GetTarget());
|
||||
chan.SetText("foo bar");
|
||||
EXPECT_EQ("foo bar", chan.GetText());
|
||||
EXPECT_EQ(":sender PRIVMSG #chan :\001foo bar\001", chan.ToString());
|
||||
EXPECT_EQ(":sender PRIVMSG #znc :\001foo bar\001", chan.ToString());
|
||||
}
|
||||
|
||||
TEST(MessageTest, ChanMsg) {
|
||||
CMessage msg(":sender PRIVMSG #chan :text");
|
||||
CTextMessage& priv = static_cast<CTextMessage&>(msg);
|
||||
EXPECT_EQ("sender", priv.GetNick().GetNick());
|
||||
EXPECT_EQ("PRIVMSG", priv.GetCommand());
|
||||
EXPECT_EQ("text", priv.GetText());
|
||||
CTextMessage& chan = static_cast<CTextMessage&>(msg);
|
||||
EXPECT_EQ("sender", chan.GetNick().GetNick());
|
||||
EXPECT_EQ("PRIVMSG", chan.GetCommand());
|
||||
EXPECT_EQ("#chan", chan.GetTarget());
|
||||
EXPECT_EQ("text", chan.GetText());
|
||||
|
||||
priv.SetText("foo bar");
|
||||
EXPECT_EQ("foo bar", priv.GetText());
|
||||
EXPECT_EQ(":sender PRIVMSG #chan :foo bar", priv.ToString());
|
||||
chan.SetTarget("#znc");
|
||||
EXPECT_EQ("#znc", chan.GetTarget());
|
||||
chan.SetText("foo bar");
|
||||
EXPECT_EQ("foo bar", chan.GetText());
|
||||
EXPECT_EQ(":sender PRIVMSG #znc :foo bar", chan.ToString());
|
||||
}
|
||||
|
||||
TEST(MessageTest, Kick) {
|
||||
@@ -108,21 +117,29 @@ TEST(MessageTest, Kick) {
|
||||
CKickMessage& kick = static_cast<CKickMessage&>(msg);
|
||||
EXPECT_EQ("nick", kick.GetNick().GetNick());
|
||||
EXPECT_EQ("KICK", kick.GetCommand());
|
||||
EXPECT_EQ("#chan", kick.GetTarget());
|
||||
EXPECT_EQ("person", kick.GetKickedNick());
|
||||
EXPECT_EQ("reason", kick.GetReason());
|
||||
|
||||
kick.SetTarget("#znc");
|
||||
EXPECT_EQ("#znc", kick.GetTarget());
|
||||
kick.SetKickedNick("noone");
|
||||
EXPECT_EQ("noone", kick.GetKickedNick());
|
||||
kick.SetReason("test");
|
||||
EXPECT_EQ("test", kick.GetReason());
|
||||
EXPECT_EQ(":nick KICK #chan noone test", kick.ToString());
|
||||
EXPECT_EQ(":nick KICK #znc noone test", kick.ToString());
|
||||
}
|
||||
|
||||
TEST(MessageTest, Join) {
|
||||
CMessage msg(":nick JOIN #chan");
|
||||
EXPECT_EQ("nick", msg.GetNick().GetNick());
|
||||
EXPECT_EQ("JOIN", msg.GetCommand());
|
||||
EXPECT_EQ("#chan", msg.GetParam(0));
|
||||
CJoinMessage& join = static_cast<CJoinMessage&>(msg);
|
||||
EXPECT_EQ("nick", join.GetNick().GetNick());
|
||||
EXPECT_EQ("JOIN", join.GetCommand());
|
||||
EXPECT_EQ("#chan", join.GetTarget());
|
||||
|
||||
join.SetTarget("#znc");
|
||||
EXPECT_EQ("#znc", join.GetTarget());
|
||||
EXPECT_EQ(":nick JOIN #znc", join.ToString());
|
||||
}
|
||||
|
||||
TEST(MessageTest, Nick) {
|
||||
@@ -143,11 +160,14 @@ TEST(MessageTest, Part) {
|
||||
CPartMessage& part = static_cast<CPartMessage&>(msg);
|
||||
EXPECT_EQ("nick", part.GetNick().GetNick());
|
||||
EXPECT_EQ("PART", part.GetCommand());
|
||||
EXPECT_EQ("#chan", part.GetTarget());
|
||||
EXPECT_EQ("reason", part.GetReason());
|
||||
|
||||
part.SetTarget("#znc");
|
||||
EXPECT_EQ("#znc", part.GetTarget());
|
||||
part.SetReason("test");
|
||||
EXPECT_EQ("test", part.GetReason());
|
||||
EXPECT_EQ(":nick PART #chan test", part.ToString());
|
||||
EXPECT_EQ(":nick PART #znc test", part.ToString());
|
||||
}
|
||||
|
||||
TEST(MessageTest, PrivAction) {
|
||||
@@ -155,11 +175,14 @@ TEST(MessageTest, PrivAction) {
|
||||
CActionMessage& priv = static_cast<CActionMessage&>(msg);
|
||||
EXPECT_EQ("sender", priv.GetNick().GetNick());
|
||||
EXPECT_EQ("PRIVMSG", priv.GetCommand());
|
||||
EXPECT_EQ("receiver", priv.GetTarget());
|
||||
EXPECT_EQ("ACTS", priv.GetText());
|
||||
|
||||
priv.SetTarget("noone");
|
||||
EXPECT_EQ("noone", priv.GetTarget());
|
||||
priv.SetText("foo bar");
|
||||
EXPECT_EQ("foo bar", priv.GetText());
|
||||
EXPECT_EQ(":sender PRIVMSG receiver :\001ACTION foo bar\001", priv.ToString());
|
||||
EXPECT_EQ(":sender PRIVMSG noone :\001ACTION foo bar\001", priv.ToString());
|
||||
}
|
||||
|
||||
TEST(MessageTest, PrivCTCP) {
|
||||
@@ -167,11 +190,14 @@ TEST(MessageTest, PrivCTCP) {
|
||||
CCTCPMessage& priv = static_cast<CCTCPMessage&>(msg);
|
||||
EXPECT_EQ("sender", priv.GetNick().GetNick());
|
||||
EXPECT_EQ("PRIVMSG", priv.GetCommand());
|
||||
EXPECT_EQ("receiver", priv.GetTarget());
|
||||
EXPECT_EQ("text", priv.GetText());
|
||||
|
||||
priv.SetTarget("noone");
|
||||
EXPECT_EQ("noone", priv.GetTarget());
|
||||
priv.SetText("foo bar");
|
||||
EXPECT_EQ("foo bar", priv.GetText());
|
||||
EXPECT_EQ(":sender PRIVMSG receiver :\001foo bar\001", priv.ToString());
|
||||
EXPECT_EQ(":sender PRIVMSG noone :\001foo bar\001", priv.ToString());
|
||||
}
|
||||
|
||||
TEST(MessageTest, PrivMsg) {
|
||||
@@ -179,11 +205,14 @@ TEST(MessageTest, PrivMsg) {
|
||||
CTextMessage& priv = static_cast<CTextMessage&>(msg);
|
||||
EXPECT_EQ("sender", priv.GetNick().GetNick());
|
||||
EXPECT_EQ("PRIVMSG", priv.GetCommand());
|
||||
EXPECT_EQ("receiver", priv.GetTarget());
|
||||
EXPECT_EQ("foo bar", priv.GetText());
|
||||
|
||||
priv.SetTarget("noone");
|
||||
EXPECT_EQ("noone", priv.GetTarget());
|
||||
priv.SetText(":)");
|
||||
EXPECT_EQ(":)", priv.GetText());
|
||||
EXPECT_EQ(":sender PRIVMSG receiver ::)", priv.ToString());
|
||||
EXPECT_EQ(":sender PRIVMSG noone ::)", priv.ToString());
|
||||
}
|
||||
|
||||
TEST(MessageTest, Quit) {
|
||||
@@ -203,11 +232,14 @@ TEST(MessageTest, Topic) {
|
||||
CTopicMessage& topic = static_cast<CTopicMessage&>(msg);
|
||||
EXPECT_EQ("nick", topic.GetNick().GetNick());
|
||||
EXPECT_EQ("TOPIC", topic.GetCommand());
|
||||
EXPECT_EQ("#chan", topic.GetTarget());
|
||||
EXPECT_EQ("topic", topic.GetTopic());
|
||||
|
||||
topic.SetTarget("#znc");
|
||||
EXPECT_EQ("#znc", topic.GetTarget());
|
||||
topic.SetTopic("test");
|
||||
EXPECT_EQ("test", topic.GetTopic());
|
||||
EXPECT_EQ(":nick TOPIC #chan test", topic.ToString());
|
||||
EXPECT_EQ(":nick TOPIC #znc test", topic.ToString());
|
||||
}
|
||||
|
||||
TEST(MessageTest, Parse) {
|
||||
|
||||
Reference in New Issue
Block a user