1#include <gtest/gtest.h>
9#include <userver/protobuf/json/convert.hpp>
10#include <userver/utest/assert_macros.hpp>
14USERVER_NAMESPACE_BEGIN
18constexpr std::int32_t kMax = std::numeric_limits<std::int32_t>::max();
19constexpr std::int32_t kMin = std::numeric_limits<std::int32_t>::min();
21struct Int32ToJsonSuccessTestParam {
23 std::string expected_json = {};
24 WriteOptions options = {};
27void PrintTo(
const Int32ToJsonSuccessTestParam& param, std::ostream* os) {
29 "{{ input = {{.field1={}, .field2={}, .field3={}}} }}",
36class Int32ToJsonTest :
public ::testing::TestWithParam<Int32ToJsonSuccessTestParam> {};
38INSTANTIATE_TEST_SUITE_P(
42 Int32ToJsonSuccessTestParam{Int32MessageData{0, 0, 0}, R"({})"},
43 Int32ToJsonSuccessTestParam{
44 Int32MessageData{0, 0, 0},
45 R"({"field1":0,"field2":0,"field3":0})",
46 WriteOptions{.always_print_fields_with_no_presence =
true}
48 Int32ToJsonSuccessTestParam{Int32MessageData{1, 2, 3}, R"({"field1":1,"field2":2,"field3":3})"},
49 Int32ToJsonSuccessTestParam{Int32MessageData{-1, -2, -3}, R"({"field1":-1,"field2":-2,"field3":-3})"},
50 Int32ToJsonSuccessTestParam{
51 Int32MessageData{kMax, kMax, kMax},
52 R"({"field1":2147483647,"field2":2147483647,"field3":2147483647})"
54 Int32ToJsonSuccessTestParam{
55 Int32MessageData{kMin, kMin, kMin},
56 R"({"field1":-2147483648,"field2":-2147483648,"field3":-2147483648})"
61TEST_P(Int32ToJsonTest, Test) {
62 const auto& param = GetParam();
64 auto input = PrepareTestData(param.input);
65 formats::json::Value json, expected_json, sample_json;
67 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
68 UASSERT_NO_THROW((expected_json = PrepareJsonTestData(param.expected_json)));
69 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
71 EXPECT_EQ(json, expected_json);
72 EXPECT_EQ(expected_json, sample_json);