1#include <gtest/gtest.h>
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
13USERVER_NAMESPACE_BEGIN
15namespace protobuf::json::tests {
17struct StringFromJsonSuccessTestParam {
18 std::string input = {};
20 ParseOptions options = {};
23struct StringFromJsonFailureTestParam {
24 std::string input = {};
25 ParseErrorCode expected_errc = {};
26 std::string expected_path = {};
27 ParseOptions options = {};
30void PrintTo(
const StringFromJsonSuccessTestParam& param, std::ostream* os) {
31 *os << fmt::format(
"{{ input = '{}' }}", param.input);
34void PrintTo(
const StringFromJsonFailureTestParam& param, std::ostream* os) {
35 *os << fmt::format(
"{{ input = '{}' }}", param.input);
38class StringFromJsonSuccessTest :
public ::testing::TestWithParam<StringFromJsonSuccessTestParam> {};
39class StringFromJsonFailureTest :
public ::testing::TestWithParam<StringFromJsonFailureTestParam> {};
41INSTANTIATE_TEST_SUITE_P(
43 StringFromJsonSuccessTest,
45 StringFromJsonSuccessTestParam{R"({})", StringMessageData{
""}},
46 StringFromJsonSuccessTestParam{R"({"field1":null})", StringMessageData{
""}},
47 StringFromJsonSuccessTestParam{R"({"field1":""})", StringMessageData{
""}},
48 StringFromJsonSuccessTestParam{R"({"field1":"hello world"})", StringMessageData{
"hello world"}}
52INSTANTIATE_TEST_SUITE_P(
54 StringFromJsonFailureTest,
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"}
63TEST_P(StringFromJsonSuccessTest, Test) {
64 const auto& param = GetParam();
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);
72 message.set_field1(
"dump");
74 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::StringMessage>(input, param.options)));
75 UASSERT_NO_THROW(InitSampleMessage(param.input, sample_message, param.options));
77 CheckMessageEqual(message, sample_message);
78 CheckMessageEqual(message, expected_message);
81TEST_P(StringFromJsonFailureTest, Test) {
82 const auto& param = GetParam();
84 proto_json::messages::StringMessage sample_message;
85 formats::json::
Value input = PrepareJsonTestData(param.input);
88 (
void)JsonToMessage<proto_json::messages::StringMessage>(input, param.options),
92 UEXPECT_THROW(InitSampleMessage(param.input, sample_message, param.options), SampleError);