1#include <gtest/gtest.h>
6#include <userver/utils/box.hpp>
8#include <box/autobox/dependency_on_self.structs.usrv.pb.hpp>
9#include <test_utils/type_assertions.hpp>
11USERVER_NAMESPACE_BEGIN
13TEST(BoxDependencyOnSelf, Direct) {
14 using Scope = box::autobox::structs::DependencyOnSelfDirect;
17 AssertFieldType<
decltype(Scope::field), utils::Box<Scope>>();
20TEST(BoxDependencyOnSelf, Nested) {
21 using Scope = box::autobox::structs::DependencyOnSelfNested;
22 AssertFieldCount<Scope::Nested, 1>();
23 AssertFieldType<
decltype(Scope::Nested::field), utils::Box<Scope>>();
26TEST(BoxDependencyOnSelf, Optional) {
27 using Scope = box::autobox::structs::DependencyOnSelfOptional;
31 const auto [_] = Scope{};
33 AssertFieldType<
decltype(Scope::field), std::optional<utils::Box<Scope>>>();
36TEST(BoxDependencyOnSelf, Repeated) {
37 using Scope = box::autobox::structs::DependencyOnSelfRepeated;
38 AssertFieldCount<Scope, 1>();
39 AssertFieldType<
decltype(Scope::field), std::vector<Scope>>();
42TEST(BoxDependencyOnSelf, DependencyWithin) {
43 using Scope = box::autobox::structs::DependencyWithinSelf;
44 AssertFieldCount<Scope::B, 1>();
45 AssertFieldType<
decltype(Scope::B::field), Scope::A>();
48TEST(BoxDependencyOnSelf, DependencyOnSelfCollateral) {
49 using Scope = box::autobox::structs::DependencyOnSelfCollateral;
54 const auto [_] = Scope{};
56 AssertFieldType<
decltype(Scope::field), std::optional<utils::Box<Scope>>>();
58 AssertFieldCount<Scope::B, 1>();
59 AssertFieldType<
decltype(Scope::B::field), Scope::A>();