3#include <gtest/gtest.h>
5#include <simple/file1.structs.usrv.pb.hpp>
7namespace ss = simple::structs;
11TEST(SingleFile, SimpleStruct) {
12 static_assert(std::is_aggregate_v<ss::SimpleStruct>);
13 [[maybe_unused]] ss::SimpleStruct message;
14 message.some_integer = 5;
15 message.some_text = std::optional<std::string>(
"foo");
16 message.is_condition =
true;
17 message.some_bytes = {
"foo",
"bar"};
20TEST(SingleFile, NestedStruct) {
21 static_assert(std::is_aggregate_v<ss::SimpleStruct::NestedStruct>);
22 [[maybe_unused]] ss::SimpleStruct::NestedStruct nested;
25 static_assert(std::is_aggregate_v<ss::SimpleStruct::NestedStruct::NestedStruct2>);
26 [[maybe_unused]] ss::SimpleStruct::NestedStruct::NestedStruct2 nested2;
27 nested2.swag2 =
"bar";
30TEST(SingleFile, InnerEnum1) {
31 static_assert(std::is_enum_v<ss::SimpleStruct::NestedStruct::NestedStruct2::InnerEnum1>);
32 [[maybe_unused]]
const auto inner_enum1 = ss::SimpleStruct::NestedStruct::NestedStruct2::InnerEnum1::BAR_VAL;
35TEST(SingleFile, InnerEnum2) {
36 static_assert(std::is_enum_v<ss::SimpleStruct::InnerEnum2>);
37 [[maybe_unused]]
const auto inner_enum2 = ss::SimpleStruct::InnerEnum2::FOO_VAL;
40TEST(SingleFile, SecondStruct) {
41 static_assert(std::is_aggregate_v<ss::SecondStruct>);
42 [[maybe_unused]] ss::SecondStruct message;
45TEST(SingleFile, GlobalEnum) {
46 static_assert(std::is_enum_v<ss::GlobalEnum>);
47 [[maybe_unused]] ss::GlobalEnum message{};
51 const ss::SimpleStruct::Something none;
53 EXPECT_FALSE(none.has_foo());
54 EXPECT_FALSE(none.has_bar());
55 EXPECT_THROW(none.foo(), std::bad_optional_access);
56 EXPECT_THROW(none.bar(), std::bad_optional_access);
60 ss::SimpleStruct::Something foo;
63 EXPECT_TRUE(foo.has_foo());
64 EXPECT_NO_THROW(EXPECT_EQ(foo.foo(), 42));
65 EXPECT_FALSE(foo.has_bar());
66 EXPECT_THROW(foo.bar(), std::bad_variant_access);
70 ss::SimpleStruct::Something bar;
73 EXPECT_FALSE(bar.has_foo());
74 EXPECT_THROW(bar.foo(), std::bad_variant_access);
75 EXPECT_TRUE(bar.has_bar());
76 EXPECT_NO_THROW(EXPECT_EQ(bar.bar(),
"bar"));
79TEST(Oneof, OneofInStruct) {
80 [[maybe_unused]] ss::SimpleStruct message;
81 message.something.set_bar(
"bar");
82 EXPECT_EQ(message.something.bar(),
"bar");