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#include <userver/utils/box.hpp>
13
14#include <box/options/initialization.pb.h>
15#include <box/options/initialization.structs.usrv.pb.hpp>
16#include <test_utils/type_assertions.hpp>
17
18namespace structs = box::options::structs;
19
20USERVER_NAMESPACE_BEGIN
21
22TEST(BoxInitialization, NotDefinedYet) { AssertFieldCount<structs::NotDefinedYet, 0>(); }
23
24namespace {
25
26template <typename FieldType, typename MessageType>
27void CheckDependsOnNotDefinedYet() {
28 AssertFieldCount<MessageType, 5>();
29 AssertFieldType<decltype(MessageType::plain_field), utils::Box<FieldType>>();
30 AssertFieldType<decltype(MessageType::optional_field), std::optional<utils::Box<FieldType>>>();
31 AssertFieldType<decltype(MessageType::vector_field), std::vector<FieldType>>();
32 AssertFieldType<decltype(MessageType::map_field), utils::Box<proto_structs::HashMap<std::string, FieldType>>>();
33 AssertFieldType<decltype(MessageType::oneof), typename MessageType::Oneof>();
34
35 static_assert(std::same_as<
36 proto_structs::OneofAlternativeType<0, typename MessageType::Oneof>,
37 utils::Box<FieldType>>);
38
39 MessageType test_struct{
40 .plain_field = FieldType{},
41 .optional_field = FieldType{},
42 .vector_field = {FieldType{}},
43 .map_field = {{{"key", FieldType{}}}},
44 .oneof = MessageType::Oneof::make_oneof_field(FieldType{}),
45 };
46
47 auto test_message = proto_structs::StructToMessage(test_struct);
48 auto test_struct_again = proto_structs::MessageToStruct<MessageType>(test_message);
49
50 // TODO re-enable test once operator== is available
51 // ASSERT_EQ(test_struct_again, test_struct);
52}
53
54} // namespace
55
56TEST(BoxInitialization, DependsOnNotDefinedYet) {
57 CheckDependsOnNotDefinedYet<structs::NotDefinedYet, structs::DependsOnNotDefinedYet>();
58}
59
60TEST(BoxInitialization, IndirectlyDependsOnNotDefinedYet) {
61 CheckDependsOnNotDefinedYet<structs::DependsOnNotDefinedYet, structs::IndirectlyDependsOnNotDefinedYet>();
62}
63
64USERVER_NAMESPACE_END