1#include <gtest/gtest.h>
5#include <userver/protobuf/json/convert.hpp>
6#include <userver/utest/assert_macros.hpp>
10USERVER_NAMESPACE_BEGIN
14struct RepeatedToJsonSuccessTestParam {
16 std::string expected_json = {};
17 WriteOptions options = {};
20struct RepeatedToJsonFailureTestParam {
22 WriteErrorCode expected_errc = {};
23 std::string expected_path = {};
24 WriteOptions options = {};
27class RepeatedToJsonSuccessTest :
public ::testing::TestWithParam<RepeatedToJsonSuccessTestParam> {};
28class RepeatedToJsonFailureTest :
public ::testing::TestWithParam<RepeatedToJsonFailureTestParam> {};
30INSTANTIATE_TEST_SUITE_P(
32 RepeatedToJsonSuccessTest,
34 RepeatedToJsonSuccessTestParam{RepeatedMessageData{}, R"({})"},
35 RepeatedToJsonSuccessTestParam{
36 RepeatedMessageData{},
37 R"({"field1":[],"field2":[],"field3":[]})",
38 {.always_print_fields_with_no_presence =
true}
40 RepeatedToJsonSuccessTestParam{RepeatedMessageData{.field1 = {1, 2, 3}}, R"({"field1":[1,2,3]})"},
41 RepeatedToJsonSuccessTestParam{
42 RepeatedMessageData{.field2 = {{
true}, {
false}, {
true}, {
true}}},
43 R"({"field2":[{"field1":true},{},{"field1":true},{"field1":true}]})"
45 RepeatedToJsonSuccessTestParam{
46 RepeatedMessageData{.field3 = {{.seconds = 123, .nanos = 987000000}}},
47 R"({"field3":["123.987s"]})"
49 RepeatedToJsonSuccessTestParam{
50 RepeatedMessageData{.field1 = {0}, .field2 = {{
false}}, .field3 = {{.seconds = 0, .nanos = 0}}},
51 R"({"field1":[0],"field2":[{}],"field3":["0s"]})"
56INSTANTIATE_TEST_SUITE_P(
58 RepeatedToJsonFailureTest,
59 ::testing::Values(RepeatedToJsonFailureTestParam{
61 .field3 = {{.seconds = 1, .nanos = 1}, {.seconds = 1, .nanos = -1}, {.seconds = 0, .nanos = 1}}
63 WriteErrorCode::kInvalidValue,
68TEST_P(RepeatedToJsonSuccessTest, Test) {
69 const auto& param = GetParam();
71 auto input = PrepareTestData(param.input);
72 formats::json::Value json, expected_json, sample_json;
74 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
75 UASSERT_NO_THROW((expected_json = PrepareJsonTestData(param.expected_json)));
76 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
78 EXPECT_EQ(json, expected_json);
79 EXPECT_EQ(expected_json, sample_json);
82TEST_P(RepeatedToJsonFailureTest, Test) {
83 const auto& param = GetParam();
84 auto input = PrepareTestData(param.input);
86 EXPECT_WRITE_ERROR((
void)MessageToJson(input, param.options), param.expected_errc, param.expected_path);
87 UEXPECT_THROW((
void)CreateSampleJson(input, param.options), SampleError);