1#include <gtest/gtest.h>
5#include <userver/utils/box.hpp>
7#include <box/autobox/dependency_on_nested.structs.usrv.pb.hpp>
8#include <test_utils/type_assertions.hpp>
10USERVER_NAMESPACE_BEGIN
12TEST(BoxDependencyOnNested, NonCyclic) {
13 using Scope = box::autobox::structs::DependencyOnNested;
14 AssertFieldCount<Scope::Foo, 1>();
15 AssertFieldType<
decltype(Scope::Foo::field), Scope::Bar::Nested>();
18TEST(BoxDependencyOnNested, NonCyclicDoublyNested) {
19 using Scope = box::autobox::structs::DependencyOnNestedNested;
20 AssertFieldCount<Scope::Foo, 1>();
21 AssertFieldType<
decltype(Scope::Foo::field), Scope::Bar::Nested::Nested2>();
24TEST(BoxDependencyOnNested, RepeatedNonCyclic) {
25 using Scope = box::autobox::structs::RepeatedDependencyOnNested;
26 AssertFieldCount<Scope::Foo, 1>();
27 AssertFieldType<
decltype(Scope::Foo::field), std::vector<Scope::Bar::Nested>>();
30TEST(BoxDependencyOnNested, Cyclic) {
31 using Scope = box::autobox::structs::CyclicDependencyOnNested;
33 AssertFieldCount<Scope::Foo, 1>();
34 AssertFieldType<
decltype(Scope::Foo::field), Scope::Bar::Nested>();
36 AssertFieldCount<Scope::Bar, 1>();
37 AssertFieldType<
decltype(Scope::Bar::field), utils::Box<Scope::Foo>>();
40TEST(BoxDependencyOnNested, RepeatedCyclic) {
41 using Scope = box::autobox::structs::RepeatedCyclicDependencyOnNested;
43 AssertFieldCount<Scope::Foo, 1>();
44 AssertFieldType<
decltype(Scope::Foo::field), std::vector<Scope::Bar::Nested>>();
46 AssertFieldCount<Scope::Bar, 1>();
47 AssertFieldType<
decltype(Scope::Bar::field), utils::Box<Scope::Foo>>();
50TEST(BoxDependencyOnNested, VectorsDoNotCreateCycles) {
51 using Scope = box::autobox::structs::VectorsDoNotCreateCycles;
53 AssertFieldCount<Scope::Foo, 1>();
54 AssertFieldType<
decltype(Scope::Foo::field), std::vector<Scope::Bar>>();
56 AssertFieldCount<Scope::Bar, 1>();
57 AssertFieldType<
decltype(Scope::Bar::field), std::vector<Scope::Foo>>();