1#include <gtest/gtest.h>
9#include <userver/protobuf/json/convert.hpp>
10#include <userver/utest/assert_macros.hpp>
14USERVER_NAMESPACE_BEGIN
16namespace protobuf::json::tests {
18constexpr std::uint32_t kMax = std::numeric_limits<std::uint32_t>::max();
20struct UInt32FromJsonSuccessTestParam {
21 std::string input = {};
27 bool skip_native_parsing_for_older_versions =
false;
30struct UInt32FromJsonFailureTestParam {
31 std::string input = {};
33 std::string expected_path = {};
37void PrintTo(
const UInt32FromJsonSuccessTestParam& param, std::ostream* os) {
38 *os << fmt::format(
"{{ input = '{}' }}", param.input);
41void PrintTo(
const UInt32FromJsonFailureTestParam& param, std::ostream* os) {
42 *os << fmt::format(
"{{ input = '{}' }}", param.input);
45class UInt32FromJsonSuccessTest :
public ::testing::TestWithParam<UInt32FromJsonSuccessTestParam> {};
46class UInt32FromJsonFailureTest :
public ::testing::TestWithParam<UInt32FromJsonFailureTestParam> {};
48INSTANTIATE_TEST_SUITE_P(
50 UInt32FromJsonSuccessTest,
53 UInt32FromJsonSuccessTestParam{R"({"field1":null,"field2":null})",
UInt32MessageData{0, 0}},
54 UInt32FromJsonSuccessTestParam{R"({"field1":0,"field2":1})",
UInt32MessageData{0, 1}},
55 UInt32FromJsonSuccessTestParam{R"({"field1":"0","field2":"1"})",
UInt32MessageData{0, 1}},
56 UInt32FromJsonSuccessTestParam{R"({"field1":4294967295,"field2":"4294967295"})",
UInt32MessageData{kMax, kMax}},
57 UInt32FromJsonSuccessTestParam{R"({"field1":10e2,"field2":3e0})",
UInt32MessageData{1000, 3}},
58 UInt32FromJsonSuccessTestParam{R"({"field1":"10e2","field2":"3e0"})",
UInt32MessageData{1000, 3}, {},
true},
59 UInt32FromJsonSuccessTestParam{R"({"field1":8500E-2,"field2":1.8E+2})",
UInt32MessageData{85, 180}},
60 UInt32FromJsonSuccessTestParam{
61 R"({"field1":"8500E-2","field2":"1.8E+2"})",
69INSTANTIATE_TEST_SUITE_P(
71 UInt32FromJsonFailureTest,
78 UInt32FromJsonFailureTestParam{
79 R"({"field1":"4294967296","field2":1})",
97TEST_P(UInt32FromJsonSuccessTest, Test) {
98 const auto& param = GetParam();
100 proto_json::messages::UInt32Message message;
101 proto_json::messages::UInt32Message expected_message;
102 proto_json::messages::UInt32Message sample_message;
103 formats::
json::
Value input = PrepareJsonTestData(param.input);
104 expected_message = PrepareTestData(param.expected_message);
106 message.set_field1(100001);
107 message.set_field2(200002);
109 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::UInt32Message>(input, param.options)));
111#if GOOGLE_PROTOBUF_VERSION
>= 6030000
112 UASSERT_NO_THROW(InitSampleMessage(param.input, sample_message, param.options));
113 CheckMessageEqual(message, sample_message);
115 if (!param.skip_native_parsing_for_older_versions) {
116 UASSERT_NO_THROW(InitSampleMessage(param.input, sample_message, param.options));
117 CheckMessageEqual(message, sample_message);
121 CheckMessageEqual(message, expected_message);
124TEST_P(UInt32FromJsonFailureTest, Test) {
125 const auto& param = GetParam();
127 proto_json::messages::UInt32Message sample_message;
128 formats::
json::
Value input = PrepareJsonTestData(param.input);
131 (
void)JsonToMessage<proto_json::messages::UInt32Message>(input, param.options),