@@ -24,19 +24,39 @@ using msg_defn = message<"msg", id_field, field1, field2, field3>;
24
24
25
25
constexpr auto id_match = msg::equal_to<id_field, 0x80 >;
26
26
27
+ constexpr struct custom_match_t {
28
+ using is_matcher = void ;
29
+
30
+ [[nodiscard]] constexpr auto operator ()(msg::owning<msg_defn>) const {
31
+ return true ;
32
+ }
33
+
34
+ [[nodiscard]] constexpr static auto describe () { return " custom" _sc; }
35
+
36
+ [[nodiscard]] constexpr static auto describe_match (msg::owning<msg_defn>) {
37
+ return describe ();
38
+ }
39
+ } custom_match;
40
+
27
41
std::string log_buffer{};
28
42
} // namespace
29
43
30
44
template <>
31
45
inline auto logging::config<> =
32
46
logging::fmt::config{std::back_inserter (log_buffer)};
33
47
34
- TEST_CASE (" callback matches message" , " [callback]" ) {
48
+ TEST_CASE (" callback matches message by view " , " [callback]" ) {
35
49
auto callback = msg::callback<" cb" , msg_defn>(id_match, [] {});
36
50
auto const msg_match = std::array{0x8000ba11u , 0x0042d00du };
37
51
CHECK (callback.is_match (msg_match));
38
52
}
39
53
54
+ TEST_CASE (" callback matches message by owning" , " [callback]" ) {
55
+ auto callback = msg::callback<" cb" , msg_defn>(custom_match, [] {});
56
+ auto const msg_match = std::array{0x8000ba11u , 0x0042d00du };
57
+ CHECK (callback.is_match (msg_match));
58
+ }
59
+
40
60
TEST_CASE (" callback matches message (alternative range)" , " [callback]" ) {
41
61
auto callback = msg::callback<" cb" , msg_defn>(id_match, [] {});
42
62
auto const msg_match = std::array<std::uint8_t , 8 >{0x11 , 0xba , 0x00 , 0x80 ,
@@ -50,7 +70,7 @@ TEST_CASE("callback matches message (typed message)", "[callback]") {
50
70
CHECK (callback.is_match (msg_match));
51
71
}
52
72
53
- TEST_CASE (" callback logs mismatch (raw)" , " [callback]" ) {
73
+ TEST_CASE (" callback logs mismatch by view (raw)" , " [callback]" ) {
54
74
auto callback = msg::callback<" cb" , msg_defn>(id_match, [] {});
55
75
auto const msg_nomatch = std::array{0x8100ba11u , 0x0042d00du };
56
76
CHECK (not callback.is_match (msg_nomatch));
@@ -61,6 +81,16 @@ TEST_CASE("callback logs mismatch (raw)", "[callback]") {
61
81
CHECK (log_buffer.find (" cb - F:(id (0x81) == 0x80)" ) != std::string::npos);
62
82
}
63
83
84
+ TEST_CASE (" callback logs mismatch by owning (raw)" , " [callback]" ) {
85
+ auto callback = msg::callback<" cb" , msg_defn>(custom_match, [] {});
86
+ auto const msg_nomatch = std::array{0x8100ba11u , 0x0042d00du };
87
+
88
+ log_buffer.clear ();
89
+ callback.log_mismatch (msg_nomatch);
90
+ CAPTURE (log_buffer);
91
+ CHECK (log_buffer.find (" cb - F:(custom)" ) != std::string::npos);
92
+ }
93
+
64
94
TEST_CASE (" callback logs mismatch (typed)" , " [callback]" ) {
65
95
auto callback = msg::callback<" cb" , msg_defn>(id_match, [] {});
66
96
auto const msg_nomatch = msg::owning<msg_defn>{" id" _field = 0x81 };
@@ -72,7 +102,7 @@ TEST_CASE("callback logs mismatch (typed)", "[callback]") {
72
102
CHECK (log_buffer.find (" cb - F:(id (0x81) == 0x80)" ) != std::string::npos);
73
103
}
74
104
75
- TEST_CASE (" callback handles message (raw)" , " [callback]" ) {
105
+ TEST_CASE (" callback handles message by view (raw)" , " [callback]" ) {
76
106
auto callback = msg::callback<" cb" , msg_defn>(
77
107
id_match, [](msg::const_view<msg_defn>) { dispatched = true ; });
78
108
auto const msg_match = std::array{0x8000ba11u , 0x0042d00du };
@@ -82,6 +112,16 @@ TEST_CASE("callback handles message (raw)", "[callback]") {
82
112
CHECK (dispatched);
83
113
}
84
114
115
+ TEST_CASE (" callback handles message by owning (raw)" , " [callback]" ) {
116
+ auto callback = msg::callback<" cb" , msg_defn>(
117
+ id_match, [](msg::owning<msg_defn>) { dispatched = true ; });
118
+ auto const msg_match = std::array{0x8000ba11u , 0x0042d00du };
119
+
120
+ dispatched = false ;
121
+ CHECK (callback.handle (msg_match));
122
+ CHECK (dispatched);
123
+ }
124
+
85
125
namespace {
86
126
template <typename T>
87
127
using uint8_view =
0 commit comments