yaze 0.2.0
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
message_test.cc
Go to the documentation of this file.
1#include "core/message.h"
2
3#include <gtest/gtest.h>
4
5namespace yaze {
6namespace test {
7namespace message {
8
14
16 public:
17 ~TestListener() = default;
18
19 absl::Status OnMessageReceived(const Message& message) override {
20 last_message_ = message;
22 return absl::OkStatus();
23 }
24
25 const Message& last_message() const { return last_message_; }
26 int message_count() const { return message_count_; }
27
28 private:
31};
32
34 public:
35 bool CanHandleMessage(const Message& message) const override {
36 return message.type == "TestMessage";
37 }
38};
39
40class TestFilter : public MessageFilter {
41 public:
42 bool ShouldReceiveMessage(const Message& message) const override {
43 return std::any_cast<int>(message.payload) > 10;
44 }
45};
46
47class MessageDispatcherTest : public ::testing::Test {
48 protected:
49 void SetUp() override {
51 protocol_ = std::make_unique<TestProtocol>();
52 filter_ = std::make_unique<TestFilter>();
53 }
54
55 void TearDown() override {
56 protocol_.reset();
57 filter_.reset();
58 }
59
65 std::unique_ptr<TestProtocol> protocol_;
66 std::unique_ptr<TestFilter> filter_;
67};
68TEST_F(MessageDispatcherTest, RegisterAndSendMessage) {
69 MessageDispatcher dispatcher;
70
71 dispatcher.RegisterListener("TestMessage", &listener1_);
72
73 Message message("TestMessage", nullptr, 42);
74 dispatcher.SendMessage(message);
75
76 EXPECT_EQ(listener1_.message_count(), 1);
77 EXPECT_EQ(std::any_cast<int>(listener1_.last_message().payload), 42);
78}
79
80TEST_F(MessageDispatcherTest, UnregisterListener) {
81 MessageDispatcher dispatcher;
82
83 dispatcher.RegisterListener("TestMessage", &listener1_);
84 dispatcher.UnregisterListener("TestMessage", &listener1_);
85
86 Message message("TestMessage", nullptr, 42);
87 dispatcher.SendMessage(message);
88
89 EXPECT_EQ(listener1_.message_count(), 0);
90}
91
92TEST_F(MessageDispatcherTest, MultipleListeners) {
93 MessageDispatcher dispatcher;
94
95 dispatcher.RegisterListener("TestMessage", &listener1_);
96 dispatcher.RegisterListener("TestMessage", &listener2_);
97
98 Message message("TestMessage", nullptr, 42);
99 dispatcher.SendMessage(message);
100
101 EXPECT_EQ(listener1_.message_count(), 1);
102 EXPECT_EQ(listener2_.message_count(), 1);
103 EXPECT_EQ(std::any_cast<int>(listener1_.last_message().payload), 42);
104 EXPECT_EQ(std::any_cast<int>(listener2_.last_message().payload), 42);
105}
106
107TEST_F(MessageDispatcherTest, FilteredMessageHandling) {
108 MessageDispatcher dispatcher;
109
110 dispatcher.RegisterFilteredListener("TestMessage", &listener1_,
111 std::move(filter_));
112
113 Message valid_message("TestMessage", nullptr, 15);
114 dispatcher.DispatchMessage(valid_message);
115 EXPECT_EQ(listener1_.message_count(), 1);
116
117 Message invalid_message("TestMessage", nullptr, 5);
118 dispatcher.DispatchMessage(invalid_message);
119 EXPECT_EQ(listener1_.message_count(), 1);
120}
121
122} // namespace message
123} // namespace test
124} // namespace yaze
void UnregisterListener(const std::string &message_type, IMessageListener *listener)
Definition message.cc:14
void RegisterListener(const std::string &message_type, IMessageListener *listener)
Definition message.cc:9
void SendMessage(const Message &message)
Definition message.cc:37
void DispatchMessage(const Message &message)
Definition message.cc:44
void RegisterFilteredListener(const std::string &message_type, IMessageListener *listener, std::unique_ptr< MessageFilter > filter)
Definition message.cc:26
std::unique_ptr< TestProtocol > protocol_
std::unique_ptr< TestFilter > filter_
bool ShouldReceiveMessage(const Message &message) const override
const Message & last_message() const
absl::Status OnMessageReceived(const Message &message) override
bool CanHandleMessage(const Message &message) const override
TEST_F(MessageDispatcherTest, RegisterAndSendMessage)
Definition common.cc:21