1#include <gtest/gtest.h>
9#include <userver/protobuf/json/convert.hpp>
10#include <userver/utest/assert_macros.hpp>
14USERVER_NAMESPACE_BEGIN
16namespace protobuf::json::tests {
18constexpr float kMax = std::numeric_limits<
float>::max();
19constexpr float kMin = std::numeric_limits<
float>::min();
21struct FloatFromJsonSuccessTestParam {
22 std::string input = {};
27 bool skip_native_check =
false;
30struct FloatFromJsonFailureTestParam {
31 std::string input = {};
33 std::string expected_path = {};
38 bool skip_native_check =
false;
41void PrintTo(
const FloatFromJsonSuccessTestParam& param, std::ostream* os) {
42 *os << fmt::format(
"{{ input = '{}' }}", param.input);
45void PrintTo(
const FloatFromJsonFailureTestParam& param, std::ostream* os) {
46 *os << fmt::format(
"{{ input = '{}' }}", param.input);
49class FloatFromJsonSuccessTest :
public ::testing::TestWithParam<FloatFromJsonSuccessTestParam> {};
50class FloatFromJsonFailureTest :
public ::testing::TestWithParam<FloatFromJsonFailureTestParam> {};
52INSTANTIATE_TEST_SUITE_P(
54 FloatFromJsonSuccessTest,
59 FloatFromJsonSuccessTestParam{R"({"field1":"-0.0e0"})",
FloatMessageData{0}},
61 FloatFromJsonSuccessTestParam{R"({"field1":"-123"})",
FloatMessageData{-123}},
62 FloatFromJsonSuccessTestParam{R"({"field1":100.123567})",
FloatMessageData{100.123567}},
63 FloatFromJsonSuccessTestParam{R"({"field1":"100.123567"})",
FloatMessageData{100.123567}},
64 FloatFromJsonSuccessTestParam{R"({"field1":-100.123567})",
FloatMessageData{-100.123567}},
65 FloatFromJsonSuccessTestParam{R"({"field1":"-100.123567"})",
FloatMessageData{-100.123567}},
66 FloatFromJsonSuccessTestParam{R"({"field1":100.123e-2})",
FloatMessageData{1.00123}},
67 FloatFromJsonSuccessTestParam{R"({"field1":"-100.123567E2"})",
FloatMessageData{-10012.3567}},
68 FloatFromJsonSuccessTestParam{R"({"field1":100.123e-2})",
FloatMessageData{1.00123}},
69 FloatFromJsonSuccessTestParam{R"({"field1":"-100.123567E2"})",
FloatMessageData{-10012.3567}},
70 FloatFromJsonSuccessTestParam{R"({"field1":3.40282347e+38})",
FloatMessageData{kMax}},
71 FloatFromJsonSuccessTestParam{
72 R"({"field1":"3.40282347E38"})",
78 FloatFromJsonSuccessTestParam{R"({"field1":-3.40282347E+38})",
FloatMessageData{-kMax}},
79 FloatFromJsonSuccessTestParam{
80 R"({"field1":"-3.40282347e38"})",
86 FloatFromJsonSuccessTestParam{R"({"field1":1.17549435e-38})",
FloatMessageData{kMin}},
87 FloatFromJsonSuccessTestParam{R"({"field1":"1.17549435E-38"})",
FloatMessageData{kMin}},
88 FloatFromJsonSuccessTestParam{R"({"field1":-1.17549435E-38})",
FloatMessageData{-kMin}},
89 FloatFromJsonSuccessTestParam{R"({"field1":"-1.17549435e-38"})",
FloatMessageData{-kMin}}
93INSTANTIATE_TEST_SUITE_P(
95 FloatFromJsonFailureTest,
110TEST_P(FloatFromJsonSuccessTest, Test) {
111 const auto& param = GetParam();
113 proto_json::messages::FloatMessage message;
114 proto_json::messages::FloatMessage expected_message;
115 proto_json::messages::FloatMessage sample_message;
116 formats::
json::
Value input = PrepareJsonTestData(param.input);
117 expected_message = PrepareTestData(param.expected_message);
119 message.set_field1(100.001);
121 UASSERT_NO_THROW((message = JsonToMessage<proto_json::messages::FloatMessage>(input, param.options)));
123 if (!param.skip_native_check) {
124 UASSERT_NO_THROW(InitSampleMessage(param.input, sample_message, param.options));
125 CheckMessageEqual(message, sample_message);
128 CheckMessageEqual(message, expected_message);
131TEST_P(FloatFromJsonFailureTest, Test) {
132 const auto& param = GetParam();
134 proto_json::messages::FloatMessage sample_message;
135 formats::
json::
Value input = PrepareJsonTestData(param.input);
138 (
void)JsonToMessage<proto_json::messages::FloatMessage>(input, param.options),
143 if (!param.skip_native_check) {