3#include <gtest/gtest.h>
5#include <oneof/basic.structs.usrv.pb.hpp>
9TEST(OneofBasic, LowercaseEmpty) {
10 oneof::structs::Parent message;
11 static_assert(std::is_same_v<
decltype(message.lowercase), oneof::structs::Parent::Lowercase>);
13 EXPECT_FALSE(message.lowercase.has_integer());
14 EXPECT_THROW([[maybe_unused]]
const auto& not_found = message.lowercase.integer(), proto_structs::OneofAccessError);
17TEST(OneofBasic, LowercaseFundamentalTypes) {
18 oneof::structs::Parent message;
20 message.lowercase.set_integer(10);
21 EXPECT_TRUE(message.lowercase.has_integer());
22 EXPECT_EQ(message.lowercase.integer(), 10);
23 EXPECT_FALSE(message.lowercase.has_string());
24 EXPECT_THROW([[maybe_unused]]
const auto& not_found1 = message.lowercase.string(), proto_structs::OneofAccessError);
26 message.lowercase.set_string(
"text");
27 EXPECT_TRUE(message.lowercase.has_string());
28 EXPECT_EQ(message.lowercase.string(),
"text");
29 EXPECT_FALSE(message.lowercase.has_integer());
31 [[maybe_unused]]
const auto& not_found2 = message.lowercase.integer(),
32 proto_structs::OneofAccessError
36TEST(OneofBasic, LowercaseMessage) {
37 oneof::structs::Parent message;
39 message.lowercase.set_message1(oneof::structs::Message1{.field =
"text"});
40 EXPECT_TRUE(message.lowercase.has_message1());
41 EXPECT_EQ(message.lowercase.message1().field,
"text");
43 message.lowercase.set_message2({.field =
"text"});
44 EXPECT_TRUE(message.lowercase.has_message2());
45 EXPECT_EQ(message.lowercase.message2().field,
"text");
48TEST(OneofBasic, LowercaseEnum) {
49 oneof::structs::Parent message;
51 message.lowercase.set_enum1(oneof::structs::Enum1::kFoo);
52 EXPECT_TRUE(message.lowercase.has_enum1());
53 EXPECT_EQ(message.lowercase.enum1(), oneof::structs::Enum1::kFoo);
55 message.lowercase.set_enum2(oneof::structs::Parent::Enum2::kFoo);
56 EXPECT_TRUE(message.lowercase.has_enum2());
57 EXPECT_EQ(message.lowercase.enum2(), oneof::structs::Parent::Enum2::kFoo);
60TEST(OneofBasic, Uppercase) {
61 oneof::structs::Parent message;
62 static_assert(std::is_same_v<
decltype(message.Uppercase), oneof::structs::Parent::TUppercase>);
64 message.Uppercase.set_foo(
"text");
65 EXPECT_TRUE(message.Uppercase.has_foo());
66 EXPECT_EQ(message.Uppercase.foo(),
"text");
68 message.Uppercase.set_bar(10);
69 EXPECT_TRUE(message.Uppercase.has_bar());
70 EXPECT_EQ(message.Uppercase.bar(), 10);
73TEST(OneofBasic, SingleFieldOneof) {
74 oneof::structs::Parent message;
75 static_assert(std::is_same_v<
decltype(message.single_field_oneof), oneof::structs::Parent::SingleFieldOneof>);
77 EXPECT_FALSE(message.single_field_oneof.has_single());
79 message.single_field_oneof.set_single(
"text");
80 EXPECT_TRUE(message.single_field_oneof.has_single());
81 EXPECT_EQ(message.single_field_oneof.single(),
"text");
84TEST(OneofBasic, SyntheticOneofIsIgnored) {
85 [[maybe_unused]] oneof::structs::Parent message;
86 static_assert(std::is_same_v<
decltype(message.field_before), std::optional<std::string>>);