3#include <gtest/gtest.h>
5#include <oneof/proto2.structs.usrv.pb.hpp>
9TEST(OneofProto2, OneofEmpty) {
10 oneof::structs::Proto2 message;
11 static_assert(std::is_same_v<
decltype(message.oneof), oneof::structs::Proto2::Oneof>);
13 EXPECT_FALSE(message.oneof.has_integer());
14 EXPECT_THROW([[maybe_unused]]
const auto& not_found = message.oneof.integer(), proto_structs::OneofAccessError);
17TEST(OneofProto2, OneofFundamentalTypes) {
18 oneof::structs::Proto2 message;
20 message.oneof.set_integer(42);
21 EXPECT_TRUE(message.oneof.has_integer());
22 EXPECT_EQ(message.oneof.integer(), 42);
23 EXPECT_FALSE(message.oneof.has_string());
24 EXPECT_THROW([[maybe_unused]]
const auto& not_found1 = message.oneof.string(), proto_structs::OneofAccessError);
26 message.oneof.set_string(
"proto2_text");
27 EXPECT_TRUE(message.oneof.has_string());
28 EXPECT_EQ(message.oneof.string(),
"proto2_text");
29 EXPECT_FALSE(message.oneof.has_integer());
30 EXPECT_THROW([[maybe_unused]]
const auto& not_found2 = message.oneof.integer(), proto_structs::OneofAccessError);
33TEST(OneofProto2, OneofMessage) {
34 oneof::structs::Proto2 message;
36 message.oneof.set_message({.field =
"message_text"});
37 EXPECT_TRUE(message.oneof.has_message());
38 EXPECT_EQ(message.oneof.message().field,
"message_text");
41TEST(OneofProto2, OneofEnum) {
42 oneof::structs::Proto2 message;
44 message.oneof.set_enum_(oneof::structs::Proto2::Enum::kFoo);
45 EXPECT_TRUE(message.oneof.has_enum_());
46 EXPECT_EQ(message.oneof.enum_(), oneof::structs::Proto2::Enum::kFoo);
49TEST(OneofProto2, OneofGroup) {
50 oneof::structs::Proto2 message;
52 oneof::structs::Proto2::Group group;
54 group.y =
"group_text";
55 message.oneof.set_group(group);
57 EXPECT_TRUE(message.oneof.has_group());
58 EXPECT_EQ(message.oneof.group().x, 100);
59 EXPECT_EQ(message.oneof.group().y,
"group_text");
62TEST(OneofProto2, GroupOneof) {
63 oneof::structs::Proto2 message;
65 oneof::structs::Proto2::Group group;
67 group.group_oneof.set_z({.field =
"nested_message"});
68 message.oneof.set_group(group);
70 EXPECT_TRUE(message.oneof.has_group());
71 EXPECT_TRUE(message.oneof.group().group_oneof.has_z());
72 EXPECT_EQ(message.oneof.group().group_oneof.z().field,
"nested_message");
75 message.oneof.mutable_group().group_oneof.set_w(oneof::structs::Proto2::Enum::kFoo);
76 EXPECT_TRUE(message.oneof.mutable_group().group_oneof.has_w());
77 EXPECT_EQ(message.oneof.mutable_group().group_oneof.w(), oneof::structs::Proto2::Enum::kFoo);
78 EXPECT_FALSE(message.oneof.mutable_group().group_oneof.has_z());
81TEST(OneofProto2, NestedTypesOutsideGroup) {
82 oneof::structs::Proto2 message;
85 message.message_from_group.foo =
"foo_value";
86 EXPECT_EQ(message.message_from_group.foo,
"foo_value");
89 message.enum_from_group.push_back(oneof::structs::Proto2::Group::EnumInGroup::kFoo);
90 EXPECT_EQ(message.enum_from_group.size(), std::size_t{1});
91 EXPECT_EQ(message.enum_from_group[0], oneof::structs::Proto2::Group::EnumInGroup::kFoo);
94TEST(OneofProto2, SingleFieldOneof) {
95 oneof::structs::Proto2 message;
96 static_assert(std::is_same_v<
decltype(message.single_field_oneof), oneof::structs::Proto2::SingleFieldOneof>);
98 EXPECT_FALSE(message.single_field_oneof.has_single());
100 message.single_field_oneof.set_single(
"single_field_text");
101 EXPECT_TRUE(message.single_field_oneof.has_single());
102 EXPECT_EQ(message.single_field_oneof.single(),
"single_field_text");
105TEST(OneofProto2, OptionalFieldBefore) {
106 oneof::structs::Proto2 message;
107 static_assert(std::is_same_v<
decltype(message.field_before), std::optional<std::string>>);
109 EXPECT_FALSE(message.field_before.has_value());
111 message.field_before =
"field_before_value";
112 EXPECT_TRUE(message.field_before.has_value());
113 EXPECT_EQ(*message.field_before,
"field_before_value");