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 BoolFromJsonSuccessTestParam {
18 std::string input = {};
20 ParseOptions options = {};
23struct BoolFromJsonFailureTestParam {
24 std::string input = {};
25 ParseErrorCode expected_errc = {};
26 std::string expected_path = {};
27 ParseOptions options = {};
33 bool skip_native_check =
false;
36void PrintTo(
const BoolFromJsonSuccessTestParam& param, std::ostream* os) {
37 *os << fmt::format(
"{{ input = '{}' }}", param.input);
40void PrintTo(
const BoolFromJsonFailureTestParam& param, std::ostream* os) {
41 *os << fmt::format(
"{{ input = '{}' }}", param.input);
44class BoolFromJsonSuccessTest :
public ::testing::TestWithParam<BoolFromJsonSuccessTestParam> {};
45class BoolFromJsonFailureTest :
public ::testing::TestWithParam<BoolFromJsonFailureTestParam> {};
47INSTANTIATE_TEST_SUITE_P(
49 BoolFromJsonSuccessTest,
52 BoolFromJsonSuccessTestParam{R"({"field1":null})",
BoolMessageData{
false}},
53 BoolFromJsonSuccessTestParam{R"({"field1":false})",
BoolMessageData{
false}},
54 BoolFromJsonSuccessTestParam{R"({"field1":true})",
BoolMessageData{
true}}
58INSTANTIATE_TEST_SUITE_P(
60 BoolFromJsonFailureTest,
62 BoolFromJsonFailureTestParam{R"({"field1":[]})", ParseErrorCode::kInvalidType,
"field1"},
63 BoolFromJsonFailureTestParam{R"({"field1":{}})", ParseErrorCode::kInvalidType,
"field1"},
64 BoolFromJsonFailureTestParam{R"({"field1":"false"})", ParseErrorCode::kInvalidType,
"field1", {},
true},
65 BoolFromJsonFailureTestParam{R"({"field1":"true"})", ParseErrorCode::kInvalidType,
"field1", {},
true},
66 BoolFromJsonFailureTestParam{R"({"field1":0})", ParseErrorCode::kInvalidType,
"field1"},
67 BoolFromJsonFailureTestParam{R"({"field1":1})", ParseErrorCode::kInvalidType,
"field1"}
71TEST_P(BoolFromJsonSuccessTest, Test) {
72 const auto& param = GetParam();
74 proto_json::messages::BoolMessage message, expected_message, sample_message;
76 expected_message = PrepareTestData(param.expected_message);
78 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::BoolMessage>(input, param.options)));
79 UASSERT_NO_THROW(InitSampleMessage(param.input, sample_message, param.options));
81 CheckMessageEqual(message, sample_message);
82 CheckMessageEqual(message, expected_message);
85TEST_P(BoolFromJsonFailureTest, Test) {
86 const auto& param = GetParam();
88 proto_json::messages::BoolMessage sample_message;
92 (
void)JsonToMessage<proto_json::messages::BoolMessage>(input, param.options),
97 if (!param.skip_native_check) {
98 UEXPECT_THROW(InitSampleMessage(param.input, sample_message, param.options), SampleError);