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);
36TEST(OneofProto2, OneofMessage) {
37 oneof::structs::Proto2 message;
39 message.oneof.set_message({.field =
"message_text"});
40 EXPECT_TRUE(message.oneof.has_message());
41 EXPECT_EQ(message.oneof.message().field,
"message_text");
44TEST(OneofProto2, OneofEnum) {
45 oneof::structs::Proto2 message;
47 message.oneof.set_enum(oneof::structs::Proto2::ENUM2_FOO);
48 EXPECT_TRUE(message.oneof.has_enum());
49 EXPECT_EQ(message.oneof.enum_(), oneof::structs::Proto2::ENUM2_FOO);
52TEST(OneofProto2, OneofGroup) {
53 oneof::structs::Proto2 message;
55 oneof::structs::Proto2::Group group;
57 group.y =
"group_text";
58 message.oneof.set_group(group);
60 EXPECT_TRUE(message.oneof.has_group());
61 EXPECT_EQ(message.oneof.group().x, 100);
62 EXPECT_EQ(message.oneof.group().y,
"group_text");
65TEST(OneofProto2, GroupOneof) {
66 oneof::structs::Proto2 message;
68 oneof::structs::Proto2::Group group;
70 group.group_oneof.set_z({.field =
"nested_message"});
71 message.oneof.set_group(group);
73 EXPECT_TRUE(message.oneof.has_group());
74 EXPECT_TRUE(message.oneof.group().group_oneof.has_z());
75 EXPECT_EQ(message.oneof.group().group_oneof.z().field,
"nested_message");
78 message.oneof.group().group_oneof.set_w(oneof::structs::Proto2::ENUM2_FOO);
79 EXPECT_TRUE(message.oneof.group().group_oneof.has_w());
80 EXPECT_EQ(message.oneof.group().group_oneof.w(), oneof::structs::Proto2::ENUM2_FOO);
81 EXPECT_FALSE(message.oneof.group().group_oneof.has_z());
84TEST(OneofProto2, NestedTypesOutsideGroup) {
85 oneof::structs::Proto2 message;
88 message.message_from_group.foo =
"foo_value";
89 EXPECT_EQ(message.message_from_group.foo,
"foo_value");
92 message.enum_from_group.push_back(oneof::structs::Proto2::Group::ENUM_IN_GROUP_FOO);
93 EXPECT_EQ(message.enum_from_group.size(), 1);
94 EXPECT_EQ(message.enum_from_group[0], oneof::structs::Proto2::Group::ENUM_IN_GROUP_FOO);
99TEST(OneofProto2, SingleFieldOneof) {
100 oneof::structs::Proto2 message;
101 static_assert(std::is_same_v<
decltype(message.single_field_oneof), oneof::structs::Proto2::SingleFieldOneof>);
103 EXPECT_FALSE(message.single_field_oneof.has_single());
105 message.single_field_oneof.set_single(
"single_field_text");
106 EXPECT_TRUE(message.single_field_oneof.has_single());
107 EXPECT_EQ(message.single_field_oneof.single(),
"single_field_text");
110TEST(OneofProto2, OptionalFieldBefore) {
111 oneof::structs::Proto2 message;
112 static_assert(std::is_same_v<
decltype(message.field_before), std::optional<std::string>>);
114 EXPECT_FALSE(message.field_before.has_value());
116 message.field_before =
"field_before_value";
117 EXPECT_TRUE(message.field_before.has_value());
118 EXPECT_EQ(*message.field_before,
"field_before_value");