userver: /data/code/userver/libraries/protobuf/tests/json/null_value_to_json_test.cpp Source File
Loading...
Searching...
No Matches
null_value_to_json_test.cpp
1#include <gtest/gtest.h>
2
3#include <string>
4
5#include <userver/protobuf/json/convert.hpp>
6#include <userver/utest/assert_macros.hpp>
7
8#include "utils.hpp"
9
10USERVER_NAMESPACE_BEGIN
11
12namespace protobuf::json::tests {
13
14struct NullValueToJsonSuccessTestParam {
15 NullValueMessageData input = {};
16 std::string expected_json = {};
17 PrintOptions options = {};
18
19 // This variable is used to disable some checks that fail in the native protobuf implementation.
20 bool skip_native_check = false;
21};
22
23class NullValueToJsonSuccessTest : public ::testing::TestWithParam<NullValueToJsonSuccessTestParam> {};
24
25INSTANTIATE_TEST_SUITE_P(
26 ,
27 NullValueToJsonSuccessTest,
28 ::testing::Values(
29 NullValueToJsonSuccessTestParam{NullValueMessageData{}, R"({})"},
30 NullValueToJsonSuccessTestParam{
31 NullValueMessageData{},
32 R"({"field1":null,"field3":[],"field4":{}})",
33 {.always_print_fields_with_no_presence = true},
34 // Old protobuf version use NULL_VALUE for 'null'.
35 !kIsModernProtoJson
36 },
37 NullValueToJsonSuccessTestParam{NullValueMessageData{.field2 = kNullConst}, R"({"field2":null})"},
38 NullValueToJsonSuccessTestParam{
40 .field2 = kNullConst,
41 .field3 = {kNullConst, kNullConst},
42 .field4 = {{1, kNullConst}, {2, kNullConst}}
43 },
44 R"({"field2":null,"field3":[null,null],"field4":{"1":null,"2":null}})"
45 }
46 )
47);
48
49TEST_P(NullValueToJsonSuccessTest, Test) {
50 const auto& param = GetParam();
51
52 auto input = PrepareTestData(param.input);
53 formats::json::Value json;
54 formats::json::Value expected_json;
55 formats::json::Value sample_json;
56
57 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
58 UASSERT_NO_THROW((expected_json = PrepareJsonTestData(param.expected_json)));
59
60 if (!param.skip_native_check) {
61 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
62 EXPECT_EQ(json, sample_json);
63 }
64
65 EXPECT_EQ(json, expected_json);
66}
67
68} // namespace protobuf::json::tests
69
70USERVER_NAMESPACE_END