1#include <gtest/gtest.h>
9#include <userver/protobuf/json/convert.hpp>
10#include <userver/utest/assert_macros.hpp>
14USERVER_NAMESPACE_BEGIN
18constexpr double kMax = std::numeric_limits<
double>::max();
19constexpr double kMin = std::numeric_limits<
double>::min();
21struct DoubleToJsonSuccessTestParam {
23 WriteOptions options = {};
26void PrintTo(
const DoubleToJsonSuccessTestParam& param, std::ostream* os) {
27 *os << fmt::format(
"{{ input = {{.field1={}}} }}", param.input.field1);
30class DoubleToJsonSuccessTest :
public ::testing::TestWithParam<DoubleToJsonSuccessTestParam> {};
32INSTANTIATE_TEST_SUITE_P(
34 DoubleToJsonSuccessTest,
36 DoubleToJsonSuccessTestParam{DoubleMessageData{0.0}},
37 DoubleToJsonSuccessTestParam{DoubleMessageData{0}, WriteOptions{.always_print_fields_with_no_presence =
true}},
38 DoubleToJsonSuccessTestParam{DoubleMessageData{1}},
39 DoubleToJsonSuccessTestParam{DoubleMessageData{-1}},
40 DoubleToJsonSuccessTestParam{DoubleMessageData{100.12357}},
41 DoubleToJsonSuccessTestParam{DoubleMessageData{-100.12357}},
42 DoubleToJsonSuccessTestParam{DoubleMessageData{kMax}},
43 DoubleToJsonSuccessTestParam{DoubleMessageData{-kMax}},
44 DoubleToJsonSuccessTestParam{DoubleMessageData{kMin}},
45 DoubleToJsonSuccessTestParam{DoubleMessageData{-kMin}}
49TEST_P(DoubleToJsonSuccessTest, Test) {
50 const auto& param = GetParam();
52 auto input = PrepareTestData(param.input);
53 formats::json::Value json, sample_json;
55 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
56 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
62 EXPECT_LE(json.GetSize(), std::size_t{1});
63 EXPECT_EQ(json.GetSize(), sample_json.GetSize());
65 if (json.GetSize() == 0) {
69 EXPECT_EQ(json[
"field1"].As<
double>(), param.input.field1);
70 EXPECT_EQ(json[
"field1"].As<
double>(), sample_json[
"field1"].As<
double>());