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:
J-P Nurmi
2015-08-16 17:57:32 +02:00
parent 320abef756
commit 55385a5d58
2 changed files with 65 additions and 26 deletions
+15 -8
View File
@@ -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
View File
@@ -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) {