Commit fe1fd167 authored by Dominik Charousset's avatar Dominik Charousset

Add regression test for #1321

parent d55bfb0c
...@@ -16,38 +16,69 @@ ...@@ -16,38 +16,69 @@
#include "caf/message.hpp" #include "caf/message.hpp"
#include "caf/type_id_list.hpp" #include "caf/type_id_list.hpp"
using namespace std::literals;
using namespace caf; using namespace caf;
#define STEP(message) \ #define STEP(message) \
MESSAGE(message); \ MESSAGE(message); \
if (true) if (true)
CAF_TEST(message builder can build messages incrermenetally) { SCENARIO("message builders can build messages incrementally") {
message_builder builder; GIVEN("a default-constructed message builder") {
CHECK(builder.empty()); WHEN("calling append and to_message multiple times") {
CHECK(builder.to_message().empty()); THEN("each message contains the values added so far") {
CHECK_EQ(builder.size(), 0u); message_builder builder;
STEP("after adding 1, the message is (1)") { CHECK(builder.empty());
builder.append(int32_t{1}); CHECK(builder.to_message().empty());
auto msg = builder.to_message(); CHECK_EQ(builder.size(), 0u);
CHECK_EQ(builder.size(), 1u); STEP("after adding 1, the message is (1)") {
CHECK_EQ(msg.types(), make_type_id_list<int32_t>()); builder.append(int32_t{1});
CHECK_EQ(to_string(msg.types()), "[int32_t]"); auto msg = builder.to_message();
CHECK_EQ(to_string(msg), "message(1)"); CHECK_EQ(builder.size(), 1u);
} CHECK_EQ(msg.types(), make_type_id_list<int32_t>());
STEP("after adding [2, 3], the message is (1, 2, 3)") { CHECK_EQ(to_string(msg.types()), "[int32_t]");
std::vector<int32_t> xs{2, 3}; CHECK_EQ(to_string(msg), "message(1)");
builder.append(xs.begin(), xs.end()); }
CHECK_EQ(builder.size(), 3u); STEP("after adding [2, 3], the message is (1, 2, 3)") {
auto msg = builder.to_message(); std::vector<int32_t> xs{2, 3};
CHECK_EQ(msg.types(), (make_type_id_list<int32_t, int32_t, int32_t>())); builder.append(xs.begin(), xs.end());
CHECK_EQ(to_string(msg.types()), "[int32_t, int32_t, int32_t]"); CHECK_EQ(builder.size(), 3u);
CHECK_EQ(to_string(msg), "message(1, 2, 3)"); auto msg = builder.to_message();
CHECK_EQ(msg.types(), (make_type_id_list<int32_t, int32_t, int32_t>()));
CHECK_EQ(to_string(msg.types()), "[int32_t, int32_t, int32_t]");
CHECK_EQ(to_string(msg), "message(1, 2, 3)");
}
STEP("moving the content to a message produces the same message again") {
auto msg = builder.move_to_message();
CHECK_EQ(msg.types(), (make_type_id_list<int32_t, int32_t, int32_t>()));
CHECK_EQ(to_string(msg.types()), "[int32_t, int32_t, int32_t]");
CHECK_EQ(to_string(msg), "message(1, 2, 3)");
}
}
}
} }
STEP("moving the content to a message produces the same message again") { }
auto msg = builder.move_to_message();
CHECK_EQ(msg.types(), (make_type_id_list<int32_t, int32_t, int32_t>())); SCENARIO("message builders allows RAII types") {
CHECK_EQ(to_string(msg.types()), "[int32_t, int32_t, int32_t]"); GIVEN("a default-constructed message builder") {
CHECK_EQ(to_string(msg), "message(1, 2, 3)"); WHEN("calling append with a string") {
THEN("to_message copies the string content into a message") {
message_builder builder;
std::string quote = "He who laughs at himself "
"never runs out of things to laugh at.";
builder.append(quote);
auto msg = builder.to_message();
CHECK_EQ(msg.types(), (make_type_id_list<std::string>()));
CHECK_EQ(to_string(msg.types()), "[std::string]");
using view_t = const_typed_message_view<std::string>;
if (auto tup = view_t(msg); CHECK(tup)) {
auto& str = get<0>(tup);
MESSAGE("str: " << str);
MESSAGE("quote: " << quote);
CHECK_EQ(str, quote);
}
}
}
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment