1#include <gtest/gtest.h>
5#include <userver/protobuf/json/convert.hpp>
6#include <userver/utest/assert_macros.hpp>
10USERVER_NAMESPACE_BEGIN
14struct NullValueToJsonSuccessTestParam {
16 std::string expected_json = {};
17 WriteOptions options = {};
20class NullValueToJsonSuccessTest :
public ::testing::TestWithParam<NullValueToJsonSuccessTestParam> {};
22INSTANTIATE_TEST_SUITE_P(
24 NullValueToJsonSuccessTest,
26 NullValueToJsonSuccessTestParam{NullValueMessageData{}, R"({})"},
27 NullValueToJsonSuccessTestParam{
28 NullValueMessageData{},
29 R"({"field1":null,"field3":[],"field4":{}})",
30 {.always_print_fields_with_no_presence =
true}
32 NullValueToJsonSuccessTestParam{NullValueMessageData{.field2 = kNullConst}, R"({"field2":null})"},
33 NullValueToJsonSuccessTestParam{
36 .field3 = {kNullConst, kNullConst},
37 .field4 = {{1, kNullConst}, {2, kNullConst}}
39 R"({"field2":null,"field3":[null,null],"field4":{"1":null,"2":null}})"
44TEST_P(NullValueToJsonSuccessTest, Test) {
45 const auto& param = GetParam();
47 auto input = PrepareTestData(param.input);
48 formats::json::Value json, expected_json, sample_json;
50 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
51 UASSERT_NO_THROW((expected_json = PrepareJsonTestData(param.expected_json)));
52 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
54 EXPECT_EQ(json, expected_json);
55 EXPECT_EQ(expected_json, sample_json);