userver
C++ Async Framework
Loading...
Searching...
No Matches
complex_from_json_test.cpp
1
#
include
<
gtest
/
gtest
.
h
>
2
3
#
include
<
google
/
protobuf
/
util
/
json_util
.
h
>
4
5
#
include
<
userver
/
formats
/
json
/
serialize
.
hpp
>
6
#
include
<
userver
/
protobuf
/
json
/
convert
.
hpp
>
7
#
include
<
userver
/
utest
/
assert_macros
.
hpp
>
8
9
#
include
"utils.hpp"
10
11
USERVER_NAMESPACE_BEGIN
12
13
namespace
protobuf::json::tests {
14
15
/* NOTE: Uncomment when linkage is fixed (see comment in the convert.hpp)
16
17
using ProtobufStringType =
18
decltype(std::declval<::google::protobuf::Reflection>()
19
.GetString(std::declval<const ::google::protobuf::Message&>(), nullptr));
20
21
TEST(ComplexFromJsonSuccessTest, Test) {
22
const auto json = formats::json::FromString(
23
R"({
24
"inters": [
25
{
26
"bottoms": {
27
"aaa": {"field1":10, "field2":"1.000000002s"},
28
"bbb": {"field1":20, "field2":"3.000000004s"}
29
}
30
},
31
{
32
"bottoms": {
33
"aaa": {"field1":20, "field2":"2.000000004s"},
34
"bbb": {"field1":40, "field2":"6.000000008s"}
35
}
36
}
37
]
38
})"
39
);
40
41
proto_json::messages::ComplexMessage message;
42
proto_json::messages::ComplexMessage::Bottom bottom_message;
43
::google::protobuf::Struct struct_message;
44
::google::protobuf::Value value_message;
45
46
UASSERT_NO_THROW((message = json.As<proto_json::messages::ComplexMessage>()));
47
ASSERT_EQ(message.inters().size(), 2);
48
EXPECT_EQ(message.inters()[0].bottoms().size(), std::size_t{2});
49
50
ASSERT_TRUE(message.inters()[0].bottoms().contains("aaa"));
51
EXPECT_EQ(message.inters()[0].bottoms().at("aaa").field1(), std::uint32_t{10});
52
EXPECT_EQ(message.inters()[0].bottoms().at("aaa").field2().seconds(), 1);
53
EXPECT_EQ(message.inters()[0].bottoms().at("aaa").field2().nanos(), 2);
54
55
ASSERT_TRUE(message.inters()[0].bottoms().contains("bbb"));
56
EXPECT_EQ(message.inters()[0].bottoms().at("bbb").field1(), std::uint32_t{20});
57
EXPECT_EQ(message.inters()[0].bottoms().at("bbb").field2().seconds(), 3);
58
EXPECT_EQ(message.inters()[0].bottoms().at("bbb").field2().nanos(), 4);
59
60
ASSERT_TRUE(message.inters()[1].bottoms().contains("aaa"));
61
EXPECT_EQ(message.inters()[1].bottoms().at("aaa").field1(), std::uint32_t{20});
62
EXPECT_EQ(message.inters()[1].bottoms().at("aaa").field2().seconds(), 2);
63
EXPECT_EQ(message.inters()[1].bottoms().at("aaa").field2().nanos(), 4);
64
65
ASSERT_TRUE(message.inters()[1].bottoms().contains("bbb"));
66
EXPECT_EQ(message.inters()[1].bottoms().at("bbb").field1(), std::uint32_t{40});
67
EXPECT_EQ(message.inters()[1].bottoms().at("bbb").field2().seconds(), 6);
68
EXPECT_EQ(message.inters()[1].bottoms().at("bbb").field2().nanos(), 8);
69
70
UASSERT_NO_THROW(
71
(bottom_message = json["inters"][0]["bottoms"]["bbb"].As<proto_json::messages::ComplexMessage::Bottom>())
72
);
73
EXPECT_EQ(bottom_message.field1(), std::size_t{20});
74
EXPECT_EQ(bottom_message.field2().seconds(), 3);
75
EXPECT_EQ(bottom_message.field2().nanos(), 4);
76
77
UASSERT_NO_THROW((struct_message = json["inters"][1]["bottoms"]["bbb"].As<::google::protobuf::Struct>()));
78
EXPECT_EQ(struct_message.fields().size(), std::size_t{2});
79
ASSERT_TRUE(struct_message.fields().contains("field1"));
80
ASSERT_TRUE(struct_message.fields().at("field1").has_number_value());
81
EXPECT_EQ(struct_message.fields().at("field1").number_value(), std::uint32_t{40});
82
ASSERT_TRUE(struct_message.fields().contains("field2"));
83
ASSERT_TRUE(struct_message.fields().at("field2").has_string_value());
84
EXPECT_EQ(struct_message.fields().at("field2").string_value(), "6.000000008s");
85
86
UASSERT_NO_THROW((value_message = json["inters"][1]["bottoms"]["aaa"]["field1"].As<::google::protobuf::Value>()));
87
ASSERT_TRUE(value_message.has_number_value());
88
EXPECT_EQ(value_message.number_value(), std::uint32_t{20});
89
}
90
91
TEST(ComplexFromJsonFailureTest, Test) {
92
const auto
93
json = formats::json::FromString(R"({"inters":[{"bottoms":{"some.key": {"field1":10, "field2":"oops"}}}]})");
94
95
proto_json::messages::ComplexMessage message;
96
proto_json::messages::ComplexMessage::Bottom bottom_message;
97
98
EXPECT_PARSE_ERROR(
99
(message = json.As<proto_json::messages::ComplexMessage>()),
100
ParseErrorCode::kInvalidValue,
101
"inters[0].bottoms.'some.key'.field2"
102
);
103
EXPECT_PARSE_ERROR(
104
(bottom_message = json["inters"][0]["bottoms"]["some.key"].As<proto_json::messages::ComplexMessage::Bottom>()),
105
ParseErrorCode::kInvalidValue,
106
"field2"
107
);
108
}
109
*/
110
111
}
// namespace protobuf::json::tests
112
113
USERVER_NAMESPACE_END
protobuf
tests
json
complex_from_json_test.cpp
Generated on Tue Jan 27 2026 16:43:13 for userver by
Doxygen
1.13.2