userver: /home/antonyzhilin/arcadia/taxi/uservices/userver/libraries/proto-structs/codegen-tests/src/oneof/basic_test.cpp Source File
Loading...
Searching...
No Matches
basic_test.cpp
1#include <type_traits>
2
3#include <gtest/gtest.h>
4
5#include <oneof/basic.structs.usrv.pb.hpp>
6
7USERVER_NAMESPACE_BEGIN
8
9TEST(OneofBasic, LowercaseEmpty) {
10 oneof::structs::Parent message;
11 static_assert(std::is_same_v<decltype(message.lowercase), oneof::structs::Parent::Lowercase>);
12
13 EXPECT_FALSE(message.lowercase.has_integer());
14 EXPECT_THROW([[maybe_unused]] const auto& not_found = message.lowercase.integer(), proto_structs::OneofAccessError);
15}
16
17TEST(OneofBasic, LowercaseFundamentalTypes) {
18 oneof::structs::Parent message;
19
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);
25
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());
30 EXPECT_THROW(
31 [[maybe_unused]] const auto& not_found2 = message.lowercase.integer(), proto_structs::OneofAccessError
32 );
33}
34
35// TODO enable once fields of message and enum types are implemented.
36#if 0
37
38TEST(OneofBasic, LowercaseMessage) {
39 oneof::structs::Parent message;
40
41 message.lowercase.set_message1(oneof::structs::Message1{.field = "text"});
42 EXPECT_TRUE(message.lowercase.has_message1());
43 EXPECT_EQ(message.lowecase.message1().field, "text");
44
45 message.lowercase.set_message2({.field = "text"});
46 EXPECT_TRUE(message.lowercase.has_message2());
47 EXPECT_EQ(message.lowercase.message2().field, "text");
48}
49
50TEST(OneofBasic, LowercaseEnum) {
51 oneof::structs::Parent message;
52
53 message.lowercase.set_enum1(oneof::structs::Enum1::ENUM1_FOO);
54 EXPECT_TRUE(message.lowercase.has_enum1());
55 EXPECT_EQ(message.lowercase.enum1(), oneof::structs::Enum1::ENUM1_FOO);
56
57 message.lowercase.set_enum2(oneof::structs::Parent::Enum2::ENUM2_FOO);
58 EXPECT_TRUE(message.lowercase.has_enum2());
59 EXPECT_EQ(message.lowercase.enum2(), oneof::structs::Parent::Enum2::ENUM2_FOO);
60}
61
62#endif
63
64TEST(OneofBasic, Uppercase) {
65 oneof::structs::Parent message;
66 static_assert(std::is_same_v<decltype(message.Uppercase), oneof::structs::Parent::TUppercase>);
67
68 message.Uppercase.set_foo("text");
69 EXPECT_TRUE(message.Uppercase.has_foo());
70 EXPECT_EQ(message.Uppercase.foo(), "text");
71
72 message.Uppercase.set_bar(10);
73 EXPECT_TRUE(message.Uppercase.has_bar());
74 EXPECT_EQ(message.Uppercase.bar(), 10);
75}
76
77TEST(OneofBasic, SingleFieldOneof) {
78 oneof::structs::Parent message;
79 static_assert(std::is_same_v<decltype(message.single_field_oneof), oneof::structs::Parent::SingleFieldOneof>);
80
81 EXPECT_FALSE(message.single_field_oneof.has_single());
82
83 message.single_field_oneof.set_single("text");
84 EXPECT_TRUE(message.single_field_oneof.has_single());
85 EXPECT_EQ(message.single_field_oneof.single(), "text");
86}
87
88TEST(OneofBasic, SyntheticOneofIsIgnored) {
89 [[maybe_unused]] oneof::structs::Parent message;
90 static_assert(std::is_same_v<decltype(message.field_before), std::optional<std::string>>);
91}
92
93USERVER_NAMESPACE_END