userver: /data/code/userver/libraries/protobuf/tests/json/string_from_json_test.cpp Source File
Loading...
Searching...
No Matches
string_from_json_test.cpp
1#include <gtest/gtest.h>
2
3#include <ostream>
4#include <string>
5
6#include <fmt/format.h>
7
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
10
11#include "utils.hpp"
12
13USERVER_NAMESPACE_BEGIN
14
15namespace protobuf::json::tests {
16
17struct StringFromJsonSuccessTestParam {
18 std::string input = {};
19 StringMessageData expected_message = {};
20 ParseOptions options = {};
21};
22
23struct StringFromJsonFailureTestParam {
24 std::string input = {};
25 ParseErrorCode expected_errc = {};
26 std::string expected_path = {};
27 ParseOptions options = {};
28};
29
30void PrintTo(const StringFromJsonSuccessTestParam& param, std::ostream* os) {
31 *os << fmt::format("{{ input = '{}' }}", param.input);
32}
33
34void PrintTo(const StringFromJsonFailureTestParam& param, std::ostream* os) {
35 *os << fmt::format("{{ input = '{}' }}", param.input);
36}
37
38class StringFromJsonSuccessTest : public ::testing::TestWithParam<StringFromJsonSuccessTestParam> {};
39class StringFromJsonFailureTest : public ::testing::TestWithParam<StringFromJsonFailureTestParam> {};
40
41INSTANTIATE_TEST_SUITE_P(
42 ,
43 StringFromJsonSuccessTest,
44 ::testing::Values(
45 StringFromJsonSuccessTestParam{R"({})", StringMessageData{""}},
46 StringFromJsonSuccessTestParam{R"({"field1":null})", StringMessageData{""}},
47 StringFromJsonSuccessTestParam{R"({"field1":""})", StringMessageData{""}},
48 StringFromJsonSuccessTestParam{R"({"field1":"hello world"})", StringMessageData{"hello world"}}
49 )
50);
51
52INSTANTIATE_TEST_SUITE_P(
53 ,
54 StringFromJsonFailureTest,
55 ::testing::Values(
56 StringFromJsonFailureTestParam{R"({"field1":[]})", ParseErrorCode::kInvalidType, "field1"},
57 StringFromJsonFailureTestParam{R"({"field1":{}})", ParseErrorCode::kInvalidType, "field1"},
58 StringFromJsonFailureTestParam{R"({"field1":true})", ParseErrorCode::kInvalidType, "field1"},
59 StringFromJsonFailureTestParam{R"({"field1":10})", ParseErrorCode::kInvalidType, "field1"}
60 )
61);
62
63TEST_P(StringFromJsonSuccessTest, Test) {
64 const auto& param = GetParam();
65
66 proto_json::messages::StringMessage message;
67 proto_json::messages::StringMessage expected_message;
68 proto_json::messages::StringMessage sample_message;
69 formats::json::Value input = PrepareJsonTestData(param.input);
70 expected_message = PrepareTestData(param.expected_message);
71
72 message.set_field1("dump");
73
74 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::StringMessage>(input, param.options)));
75 UASSERT_NO_THROW(InitSampleMessage(param.input, sample_message, param.options));
76
77 CheckMessageEqual(message, sample_message);
78 CheckMessageEqual(message, expected_message);
79}
80
81TEST_P(StringFromJsonFailureTest, Test) {
82 const auto& param = GetParam();
83
84 proto_json::messages::StringMessage sample_message;
85 formats::json::Value input = PrepareJsonTestData(param.input);
86
88 (void)JsonToMessage<proto_json::messages::StringMessage>(input, param.options),
89 param.expected_errc,
90 param.expected_path
91 );
92 UEXPECT_THROW(InitSampleMessage(param.input, sample_message, param.options), SampleError);
93}
94
95} // namespace protobuf::json::tests
96
97USERVER_NAMESPACE_END