userver: /data/code/userver/libraries/proto-structs/codegen-tests/src/box/options/initialization_test.cpp Source File
Loading...
Searching...
No Matches
initialization_test.cpp
1#include <gtest/gtest.h>
2
3#include <concepts>
4#include <optional>
5#include <vector>
6
7#include <fmt/format.h>
8
9#include <userver/proto-structs/convert.hpp>
10#include <userver/proto-structs/hash_map.hpp>
11#include <userver/proto-structs/type_mapping.hpp>
12
13#include <box/options/initialization.pb.h>
14#include <box/options/initialization.structs.usrv.pb.hpp>
15#include <test_utils/type_assertions.hpp>
16
17namespace structs = box::options::structs;
18
19USERVER_NAMESPACE_BEGIN
20
21TEST(BoxInitialization, NotDefinedYet) { AssertFieldCount<structs::NotDefinedYet, 0>(); }
22
23namespace {
24
25template <typename FieldType, typename MessageType>
26void CheckDependsOnNotDefinedYet() {
27 AssertFieldCount<MessageType, 5>();
28 AssertFieldType<decltype(MessageType::plain_field), utils::Box<FieldType>>();
29 AssertFieldType<decltype(MessageType::optional_field), std::optional<utils::Box<FieldType>>>();
30 AssertFieldType<decltype(MessageType::vector_field), std::vector<FieldType>>();
31 AssertFieldType<decltype(MessageType::map_field), utils::Box<proto_structs::HashMap<std::string, FieldType>>>();
32 AssertFieldType<decltype(MessageType::oneof), typename MessageType::Oneof>();
33
34 static_assert(std::same_as<
35 proto_structs::OneofAlternativeType<0, typename MessageType::Oneof>,
36 utils::Box<FieldType>>);
37
38 MessageType test_struct{
39 .plain_field = FieldType{},
40 .optional_field = FieldType{},
41 .vector_field = {FieldType{}},
42 .map_field = {{{"key", FieldType{}}}},
43 .oneof = MessageType::Oneof::make_oneof_field(FieldType{}),
44 };
45
46 auto test_message = proto_structs::StructToMessage(test_struct);
47 auto test_struct_again = proto_structs::MessageToStruct<MessageType>(test_message);
48
49 ASSERT_EQ(test_struct_again, test_struct);
50}
51
52} // namespace
53
54TEST(BoxInitialization, DependsOnNotDefinedYet) {
55 CheckDependsOnNotDefinedYet<structs::NotDefinedYet, structs::DependsOnNotDefinedYet>();
56}
57
58TEST(BoxInitialization, IndirectlyDependsOnNotDefinedYet) {
59 CheckDependsOnNotDefinedYet<structs::DependsOnNotDefinedYet, structs::IndirectlyDependsOnNotDefinedYet>();
60}
61
62USERVER_NAMESPACE_END