1 /*
2 * Copyright (C) 2004-2020 ZNC, see the NOTICE file for details.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include <gtest/gtest.h>
18 #include <znc/Modules.h>
19 #include <znc/znc.h>
20
21 class ModulesTest : public ::testing::Test {
22 protected:
SetUp()23 void SetUp() override { CZNC::CreateInstance(); }
TearDown()24 void TearDown() override { CZNC::DestroyInstance(); }
25 };
26
27 class CLegacyModule : public CModule {
28 public:
CLegacyModule()29 CLegacyModule()
30 : CModule(nullptr, nullptr, nullptr, "legacy", "",
31 CModInfo::NetworkModule) {}
32
OnUserCTCPReply(CString & sTarget,CString & sMessage)33 EModRet OnUserCTCPReply(CString& sTarget, CString& sMessage) override {
34 sTarget = "#legacy";
35 sMessage = "CLegacyModule::OnUserCTCPReply";
36 return eAction;
37 }
OnUserCTCP(CString & sTarget,CString & sMessage)38 EModRet OnUserCTCP(CString& sTarget, CString& sMessage) override {
39 sTarget = "#legacy";
40 sMessage = "CLegacyModule::OnUserCTCP";
41 return eAction;
42 }
OnUserAction(CString & sTarget,CString & sMessage)43 EModRet OnUserAction(CString& sTarget, CString& sMessage) override {
44 sTarget = "#legacy";
45 sMessage = "CLegacyModule::OnUserAction";
46 return eAction;
47 }
OnUserMsg(CString & sTarget,CString & sMessage)48 EModRet OnUserMsg(CString& sTarget, CString& sMessage) override {
49 sTarget = "#legacy";
50 sMessage = "CLegacyModule::OnUserMsg";
51 return eAction;
52 }
OnUserNotice(CString & sTarget,CString & sMessage)53 EModRet OnUserNotice(CString& sTarget, CString& sMessage) override {
54 sTarget = "#legacy";
55 sMessage = "CLegacyModule::OnUserNotice";
56 return eAction;
57 }
OnUserJoin(CString & sChannel,CString & sKey)58 EModRet OnUserJoin(CString& sChannel, CString& sKey) override {
59 sChannel = "#legacy";
60 sKey = "CLegacyModule::OnUserJoin";
61 return eAction;
62 }
OnUserPart(CString & sChannel,CString & sMessage)63 EModRet OnUserPart(CString& sChannel, CString& sMessage) override {
64 sChannel = "#legacy";
65 sMessage = "CLegacyModule::OnUserPart";
66 return eAction;
67 }
OnUserTopic(CString & sChannel,CString & sTopic)68 EModRet OnUserTopic(CString& sChannel, CString& sTopic) override {
69 sChannel = "#legacy";
70 sTopic = "CLegacyModule::OnUserTopic";
71 return eAction;
72 }
OnUserQuit(CString & sMessage)73 EModRet OnUserQuit(CString& sMessage) override {
74 sMessage = "CLegacyModule::OnUserQuit";
75 return eAction;
76 }
77
OnCTCPReply(CNick & Nick,CString & sMessage)78 EModRet OnCTCPReply(CNick& Nick, CString& sMessage) override {
79 Nick.Parse("legacy!znc@znc.in");
80 sMessage = "CLegacyModule::OnCTCPReply";
81 return eAction;
82 }
OnPrivCTCP(CNick & Nick,CString & sMessage)83 EModRet OnPrivCTCP(CNick& Nick, CString& sMessage) override {
84 Nick.Parse("legacy!znc@znc.in");
85 sMessage = "CLegacyModule::OnPrivCTCP";
86 return eAction;
87 }
OnChanCTCP(CNick & Nick,CChan & Channel,CString & sMessage)88 EModRet OnChanCTCP(CNick& Nick, CChan& Channel,
89 CString& sMessage) override {
90 Nick.Parse("legacy!znc@znc.in");
91 sMessage = "CLegacyModule::OnChanCTCP";
92 return eAction;
93 }
OnPrivAction(CNick & Nick,CString & sMessage)94 EModRet OnPrivAction(CNick& Nick, CString& sMessage) override {
95 Nick.Parse("legacy!znc@znc.in");
96 sMessage = "CLegacyModule::OnPrivAction";
97 return eAction;
98 }
OnChanAction(CNick & Nick,CChan & Channel,CString & sMessage)99 EModRet OnChanAction(CNick& Nick, CChan& Channel,
100 CString& sMessage) override {
101 Nick.Parse("legacy!znc@znc.in");
102 sMessage = "CLegacyModule::OnChanAction";
103 return eAction;
104 }
OnPrivMsg(CNick & Nick,CString & sMessage)105 EModRet OnPrivMsg(CNick& Nick, CString& sMessage) override {
106 Nick.Parse("legacy!znc@znc.in");
107 sMessage = "CLegacyModule::OnPrivMsg";
108 return eAction;
109 }
OnChanMsg(CNick & Nick,CChan & Channel,CString & sMessage)110 EModRet OnChanMsg(CNick& Nick, CChan& Channel, CString& sMessage) override {
111 Nick.Parse("legacy!znc@znc.in");
112 sMessage = "CLegacyModule::OnChanMsg";
113 return eAction;
114 }
OnPrivNotice(CNick & Nick,CString & sMessage)115 EModRet OnPrivNotice(CNick& Nick, CString& sMessage) override {
116 Nick.Parse("legacy!znc@znc.in");
117 sMessage = "CLegacyModule::OnPrivNotice";
118 return eAction;
119 }
OnChanNotice(CNick & Nick,CChan & Channel,CString & sMessage)120 EModRet OnChanNotice(CNick& Nick, CChan& Channel,
121 CString& sMessage) override {
122 Nick.Parse("legacy!znc@znc.in");
123 sMessage = "CLegacyModule::OnChanNotice";
124 return eAction;
125 }
OnTopic(CNick & Nick,CChan & Channel,CString & sTopic)126 EModRet OnTopic(CNick& Nick, CChan& Channel, CString& sTopic) override {
127 Nick.Parse("legacy!znc@znc.in");
128 sTopic = "CLegacyModule::OnTopic";
129 return eAction;
130 }
131
132 EModRet eAction = CONTINUE;
133 };
134
135 class CMessageModule : public CModule {
136 public:
CMessageModule()137 CMessageModule()
138 : CModule(nullptr, nullptr, nullptr, "CMessage", "",
139 CModInfo::NetworkModule) {}
140
OnUserCTCPReplyMessage(CCTCPMessage & Message)141 EModRet OnUserCTCPReplyMessage(CCTCPMessage& Message) override {
142 Message.SetTarget("#target");
143 Message.SetText("CMessageModule::OnUserCTCPReplyMessage");
144 return eAction;
145 }
OnUserCTCPMessage(CCTCPMessage & Message)146 EModRet OnUserCTCPMessage(CCTCPMessage& Message) override {
147 Message.SetTarget("#target");
148 Message.SetText("CMessageModule::OnUserCTCPMessage");
149 return eAction;
150 }
OnUserActionMessage(CActionMessage & Message)151 EModRet OnUserActionMessage(CActionMessage& Message) override {
152 Message.SetTarget("#target");
153 Message.SetText("CMessageModule::OnUserActionMessage");
154 return eAction;
155 }
OnUserTextMessage(CTextMessage & Message)156 EModRet OnUserTextMessage(CTextMessage& Message) override {
157 Message.SetTarget("#target");
158 Message.SetText("CMessageModule::OnUserTextMessage");
159 return eAction;
160 }
OnUserNoticeMessage(CNoticeMessage & Message)161 EModRet OnUserNoticeMessage(CNoticeMessage& Message) override {
162 Message.SetTarget("#target");
163 Message.SetText("CMessageModule::OnUserNoticeMessage");
164 return eAction;
165 }
OnUserJoinMessage(CJoinMessage & Message)166 EModRet OnUserJoinMessage(CJoinMessage& Message) override {
167 Message.SetTarget("#target");
168 Message.SetKey("CMessageModule::OnUserJoinMessage");
169 return eAction;
170 }
OnUserPartMessage(CPartMessage & Message)171 EModRet OnUserPartMessage(CPartMessage& Message) override {
172 Message.SetTarget("#target");
173 Message.SetReason("CMessageModule::OnUserPartMessage");
174 return eAction;
175 }
OnUserTopicMessage(CTopicMessage & Message)176 EModRet OnUserTopicMessage(CTopicMessage& Message) override {
177 Message.SetTarget("#target");
178 Message.SetTopic("CMessageModule::OnUserTopicMessage");
179 return eAction;
180 }
OnUserQuitMessage(CQuitMessage & Message)181 EModRet OnUserQuitMessage(CQuitMessage& Message) override {
182 Message.SetReason("CMessageModule::OnUserQuitMessage");
183 return eAction;
184 }
185
OnCTCPReplyMessage(CCTCPMessage & Message)186 EModRet OnCTCPReplyMessage(CCTCPMessage& Message) override {
187 Message.GetNick().SetNick("nick");
188 Message.SetText("CMessageModule::OnCTCPReplyMessage");
189 return eAction;
190 }
OnPrivCTCPMessage(CCTCPMessage & Message)191 EModRet OnPrivCTCPMessage(CCTCPMessage& Message) override {
192 Message.GetNick().SetNick("nick");
193 Message.SetText("CMessageModule::OnPrivCTCPMessage");
194 return eAction;
195 }
OnChanCTCPMessage(CCTCPMessage & Message)196 EModRet OnChanCTCPMessage(CCTCPMessage& Message) override {
197 Message.GetNick().SetNick("nick");
198 Message.SetText("CMessageModule::OnChanCTCPMessage");
199 return eAction;
200 }
OnPrivActionMessage(CActionMessage & Message)201 EModRet OnPrivActionMessage(CActionMessage& Message) override {
202 Message.GetNick().SetNick("nick");
203 Message.SetText("CMessageModule::OnPrivActionMessage");
204 return eAction;
205 }
OnChanActionMessage(CActionMessage & Message)206 EModRet OnChanActionMessage(CActionMessage& Message) override {
207 Message.GetNick().SetNick("nick");
208 Message.SetText("CMessageModule::OnChanActionMessage");
209 return eAction;
210 }
OnPrivTextMessage(CTextMessage & Message)211 EModRet OnPrivTextMessage(CTextMessage& Message) override {
212 Message.GetNick().SetNick("nick");
213 Message.SetText("CMessageModule::OnPrivTextMessage");
214 return eAction;
215 }
OnChanTextMessage(CTextMessage & Message)216 EModRet OnChanTextMessage(CTextMessage& Message) override {
217 Message.GetNick().SetNick("nick");
218 Message.SetText("CMessageModule::OnChanTextMessage");
219 return eAction;
220 }
OnPrivNoticeMessage(CNoticeMessage & Message)221 EModRet OnPrivNoticeMessage(CNoticeMessage& Message) override {
222 Message.GetNick().SetNick("nick");
223 Message.SetText("CMessageModule::OnPrivNoticeMessage");
224 return eAction;
225 }
OnChanNoticeMessage(CNoticeMessage & Message)226 EModRet OnChanNoticeMessage(CNoticeMessage& Message) override {
227 Message.GetNick().SetNick("nick");
228 Message.SetText("CMessageModule::OnChanNoticeMessage");
229 return eAction;
230 }
OnTopicMessage(CTopicMessage & Message)231 EModRet OnTopicMessage(CTopicMessage& Message) override {
232 Message.GetNick().SetNick("nick");
233 Message.SetTopic("CMessageModule::OnTopicMessage");
234 return eAction;
235 }
OnNumericMessage(CNumericMessage & Message)236 EModRet OnNumericMessage(CNumericMessage& Message) override {
237 Message.GetNick().SetNick("nick");
238 Message.SetCommand("123");
239 return eAction;
240 }
241
242 EModRet eAction = CONTINUE;
243 };
244
TEST_F(ModulesTest,Hooks)245 TEST_F(ModulesTest, Hooks) {
246 CModules& Modules = CZNC::Get().GetModules();
247
248 CLegacyModule LegacyMod;
249 Modules.push_back(&LegacyMod);
250
251 CMessageModule MessageMod;
252 Modules.push_back(&MessageMod);
253
254 CCTCPMessage UserCTCPReply;
255 LegacyMod.eAction = CModule::HALT;
256 Modules.OnUserCTCPReplyMessage(UserCTCPReply);
257 EXPECT_EQ(UserCTCPReply.GetTarget(), "#legacy");
258 EXPECT_EQ(UserCTCPReply.GetText(), "CLegacyModule::OnUserCTCPReply");
259 LegacyMod.eAction = CModule::CONTINUE;
260 Modules.OnUserCTCPReplyMessage(UserCTCPReply);
261 EXPECT_EQ(UserCTCPReply.GetTarget(), "#target");
262 EXPECT_EQ(UserCTCPReply.GetText(),
263 "CMessageModule::OnUserCTCPReplyMessage");
264
265 CCTCPMessage UserCTCPMsg;
266 LegacyMod.eAction = CModule::HALT;
267 Modules.OnUserCTCPMessage(UserCTCPMsg);
268 EXPECT_EQ(UserCTCPMsg.GetTarget(), "#legacy");
269 EXPECT_EQ(UserCTCPMsg.GetText(), "CLegacyModule::OnUserCTCP");
270 LegacyMod.eAction = CModule::CONTINUE;
271 Modules.OnUserCTCPMessage(UserCTCPMsg);
272 EXPECT_EQ(UserCTCPMsg.GetTarget(), "#target");
273 EXPECT_EQ(UserCTCPMsg.GetText(), "CMessageModule::OnUserCTCPMessage");
274
275 CActionMessage UserActionMsg;
276 LegacyMod.eAction = CModule::HALT;
277 Modules.OnUserActionMessage(UserActionMsg);
278 EXPECT_EQ(UserActionMsg.GetTarget(), "#legacy");
279 EXPECT_EQ(UserActionMsg.GetText(), "CLegacyModule::OnUserAction");
280 LegacyMod.eAction = CModule::CONTINUE;
281 Modules.OnUserActionMessage(UserActionMsg);
282 EXPECT_EQ(UserActionMsg.GetTarget(), "#target");
283 EXPECT_EQ(UserActionMsg.GetText(), "CMessageModule::OnUserActionMessage");
284
285 CTextMessage UserTextMsg;
286 LegacyMod.eAction = CModule::HALT;
287 Modules.OnUserTextMessage(UserTextMsg);
288 EXPECT_EQ(UserTextMsg.GetTarget(), "#legacy");
289 EXPECT_EQ(UserTextMsg.GetText(), "CLegacyModule::OnUserMsg");
290 LegacyMod.eAction = CModule::CONTINUE;
291 Modules.OnUserTextMessage(UserTextMsg);
292 EXPECT_EQ(UserTextMsg.GetTarget(), "#target");
293 EXPECT_EQ(UserTextMsg.GetText(), "CMessageModule::OnUserTextMessage");
294
295 CNoticeMessage UserNoticeMsg;
296 LegacyMod.eAction = CModule::HALT;
297 Modules.OnUserNoticeMessage(UserNoticeMsg);
298 EXPECT_EQ(UserNoticeMsg.GetTarget(), "#legacy");
299 EXPECT_EQ(UserNoticeMsg.GetText(), "CLegacyModule::OnUserNotice");
300 LegacyMod.eAction = CModule::CONTINUE;
301 Modules.OnUserNoticeMessage(UserNoticeMsg);
302 EXPECT_EQ(UserNoticeMsg.GetTarget(), "#target");
303 EXPECT_EQ(UserNoticeMsg.GetText(), "CMessageModule::OnUserNoticeMessage");
304
305 CJoinMessage UserJoinMsg;
306 LegacyMod.eAction = CModule::HALT;
307 Modules.OnUserJoinMessage(UserJoinMsg);
308 EXPECT_EQ(UserJoinMsg.GetTarget(), "#legacy");
309 EXPECT_EQ(UserJoinMsg.GetKey(), "CLegacyModule::OnUserJoin");
310 LegacyMod.eAction = CModule::CONTINUE;
311 Modules.OnUserJoinMessage(UserJoinMsg);
312 EXPECT_EQ(UserJoinMsg.GetTarget(), "#target");
313 EXPECT_EQ(UserJoinMsg.GetKey(), "CMessageModule::OnUserJoinMessage");
314
315 CPartMessage UserPartMsg;
316 LegacyMod.eAction = CModule::HALT;
317 Modules.OnUserPartMessage(UserPartMsg);
318 EXPECT_EQ(UserPartMsg.GetTarget(), "#legacy");
319 EXPECT_EQ(UserPartMsg.GetReason(), "CLegacyModule::OnUserPart");
320 LegacyMod.eAction = CModule::CONTINUE;
321 Modules.OnUserPartMessage(UserPartMsg);
322 EXPECT_EQ(UserPartMsg.GetTarget(), "#target");
323 EXPECT_EQ(UserPartMsg.GetReason(), "CMessageModule::OnUserPartMessage");
324
325 CTopicMessage UserTopicMsg;
326 LegacyMod.eAction = CModule::HALT;
327 Modules.OnUserTopicMessage(UserTopicMsg);
328 EXPECT_EQ(UserTopicMsg.GetTarget(), "#legacy");
329 EXPECT_EQ(UserTopicMsg.GetTopic(), "CLegacyModule::OnUserTopic");
330 LegacyMod.eAction = CModule::CONTINUE;
331 Modules.OnUserTopicMessage(UserTopicMsg);
332 EXPECT_EQ(UserTopicMsg.GetTarget(), "#target");
333 EXPECT_EQ(UserTopicMsg.GetTopic(), "CMessageModule::OnUserTopicMessage");
334
335 CQuitMessage UserQuitMsg;
336 LegacyMod.eAction = CModule::HALT;
337 Modules.OnUserQuitMessage(UserQuitMsg);
338 EXPECT_EQ(UserQuitMsg.GetReason(), "CLegacyModule::OnUserQuit");
339 LegacyMod.eAction = CModule::CONTINUE;
340 Modules.OnUserQuitMessage(UserQuitMsg);
341 EXPECT_EQ(UserQuitMsg.GetReason(), "CMessageModule::OnUserQuitMessage");
342
343 CCTCPMessage CTCPReply;
344 LegacyMod.eAction = CModule::HALT;
345 Modules.OnCTCPReplyMessage(CTCPReply);
346 EXPECT_EQ(CTCPReply.GetNick().GetNick(), "legacy");
347 EXPECT_EQ(CTCPReply.GetText(), "CLegacyModule::OnCTCPReply");
348 LegacyMod.eAction = CModule::CONTINUE;
349 Modules.OnCTCPReplyMessage(CTCPReply);
350 EXPECT_EQ(CTCPReply.GetNick().GetNick(), "nick");
351 EXPECT_EQ(CTCPReply.GetText(), "CMessageModule::OnCTCPReplyMessage");
352
353 CCTCPMessage PrivCTCP;
354 LegacyMod.eAction = CModule::HALT;
355 Modules.OnPrivCTCPMessage(PrivCTCP);
356 EXPECT_EQ(PrivCTCP.GetNick().GetNick(), "legacy");
357 EXPECT_EQ(PrivCTCP.GetText(), "CLegacyModule::OnPrivCTCP");
358 LegacyMod.eAction = CModule::CONTINUE;
359 Modules.OnPrivCTCPMessage(PrivCTCP);
360 EXPECT_EQ(PrivCTCP.GetNick().GetNick(), "nick");
361 EXPECT_EQ(PrivCTCP.GetText(), "CMessageModule::OnPrivCTCPMessage");
362
363 CCTCPMessage ChanCTCP;
364 LegacyMod.eAction = CModule::HALT;
365 Modules.OnChanCTCPMessage(ChanCTCP);
366 EXPECT_EQ(ChanCTCP.GetNick().GetNick(), "legacy");
367 EXPECT_EQ(ChanCTCP.GetText(), "CLegacyModule::OnChanCTCP");
368 LegacyMod.eAction = CModule::CONTINUE;
369 Modules.OnChanCTCPMessage(ChanCTCP);
370 EXPECT_EQ(ChanCTCP.GetNick().GetNick(), "nick");
371 EXPECT_EQ(ChanCTCP.GetText(), "CMessageModule::OnChanCTCPMessage");
372
373 CActionMessage PrivAction;
374 LegacyMod.eAction = CModule::HALT;
375 Modules.OnPrivActionMessage(PrivAction);
376 EXPECT_EQ(PrivAction.GetNick().GetNick(), "legacy");
377 EXPECT_EQ(PrivAction.GetText(), "CLegacyModule::OnPrivAction");
378 LegacyMod.eAction = CModule::CONTINUE;
379 Modules.OnPrivActionMessage(PrivAction);
380 EXPECT_EQ(PrivAction.GetNick().GetNick(), "nick");
381 EXPECT_EQ(PrivAction.GetText(), "CMessageModule::OnPrivActionMessage");
382
383 CActionMessage ChanAction;
384 LegacyMod.eAction = CModule::HALT;
385 Modules.OnChanActionMessage(ChanAction);
386 EXPECT_EQ(ChanAction.GetNick().GetNick(), "legacy");
387 EXPECT_EQ(ChanAction.GetText(), "CLegacyModule::OnChanAction");
388 LegacyMod.eAction = CModule::CONTINUE;
389 Modules.OnChanActionMessage(ChanAction);
390 EXPECT_EQ(ChanAction.GetNick().GetNick(), "nick");
391 EXPECT_EQ(ChanAction.GetText(), "CMessageModule::OnChanActionMessage");
392
393 CTextMessage PrivMsg;
394 LegacyMod.eAction = CModule::HALT;
395 Modules.OnPrivTextMessage(PrivMsg);
396 EXPECT_EQ(PrivMsg.GetNick().GetNick(), "legacy");
397 EXPECT_EQ(PrivMsg.GetText(), "CLegacyModule::OnPrivMsg");
398 LegacyMod.eAction = CModule::CONTINUE;
399 Modules.OnPrivTextMessage(PrivMsg);
400 EXPECT_EQ(PrivMsg.GetNick().GetNick(), "nick");
401 EXPECT_EQ(PrivMsg.GetText(), "CMessageModule::OnPrivTextMessage");
402
403 CTextMessage ChanMsg;
404 LegacyMod.eAction = CModule::HALT;
405 Modules.OnChanTextMessage(ChanMsg);
406 EXPECT_EQ(ChanMsg.GetNick().GetNick(), "legacy");
407 EXPECT_EQ(ChanMsg.GetText(), "CLegacyModule::OnChanMsg");
408 LegacyMod.eAction = CModule::CONTINUE;
409 Modules.OnChanTextMessage(ChanMsg);
410 EXPECT_EQ(ChanMsg.GetNick().GetNick(), "nick");
411 EXPECT_EQ(ChanMsg.GetText(), "CMessageModule::OnChanTextMessage");
412
413 CNoticeMessage PrivNotice;
414 LegacyMod.eAction = CModule::HALT;
415 Modules.OnPrivNoticeMessage(PrivNotice);
416 EXPECT_EQ(PrivNotice.GetNick().GetNick(), "legacy");
417 EXPECT_EQ(PrivNotice.GetText(), "CLegacyModule::OnPrivNotice");
418 LegacyMod.eAction = CModule::CONTINUE;
419 Modules.OnPrivNoticeMessage(PrivNotice);
420 EXPECT_EQ(PrivNotice.GetNick().GetNick(), "nick");
421 EXPECT_EQ(PrivNotice.GetText(), "CMessageModule::OnPrivNoticeMessage");
422
423 CNoticeMessage ChanNotice;
424 LegacyMod.eAction = CModule::HALT;
425 Modules.OnChanNoticeMessage(ChanNotice);
426 EXPECT_EQ(ChanNotice.GetNick().GetNick(), "legacy");
427 EXPECT_EQ(ChanNotice.GetText(), "CLegacyModule::OnChanNotice");
428 LegacyMod.eAction = CModule::CONTINUE;
429 Modules.OnChanNoticeMessage(ChanNotice);
430 EXPECT_EQ(ChanNotice.GetNick().GetNick(), "nick");
431 EXPECT_EQ(ChanNotice.GetText(), "CMessageModule::OnChanNoticeMessage");
432
433 CTopicMessage TopicMsg;
434 LegacyMod.eAction = CModule::HALT;
435 Modules.OnTopicMessage(TopicMsg);
436 EXPECT_EQ(TopicMsg.GetNick().GetNick(), "legacy");
437 EXPECT_EQ(TopicMsg.GetTopic(), "CLegacyModule::OnTopic");
438 LegacyMod.eAction = CModule::CONTINUE;
439 Modules.OnTopicMessage(TopicMsg);
440 EXPECT_EQ(TopicMsg.GetNick().GetNick(), "nick");
441 EXPECT_EQ(TopicMsg.GetTopic(), "CMessageModule::OnTopicMessage");
442
443 CNumericMessage NumericMsg;
444 Modules.OnNumericMessage(NumericMsg);
445 EXPECT_EQ(TopicMsg.GetNick().GetNick(), "nick");
446 EXPECT_EQ(NumericMsg.GetCode(), 123u);
447
448 Modules.clear();
449 }
450