userver: /data/code/userver/libraries/protobuf/tests/json/double_to_json_test.cpp Source File
Loading...
Searching...
No Matches
double_to_json_test.cpp
1#include <gtest/gtest.h>
2
3#include <limits>
4#include <ostream>
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
17constexpr double kMax = std::numeric_limits<double>::max();
18constexpr double kMin = std::numeric_limits<double>::min();
19
20struct DoubleToJsonSuccessTestParam {
21 DoubleMessageData input = {};
22 PrintOptions options = {};
23};
24
25void PrintTo(const DoubleToJsonSuccessTestParam& param, std::ostream* os) {
26 *os << fmt::format("{{ input = {{.field1={}}} }}", param.input.field1);
27}
28
29class DoubleToJsonSuccessTest : public ::testing::TestWithParam<DoubleToJsonSuccessTestParam> {};
30
31INSTANTIATE_TEST_SUITE_P(
32 ,
33 DoubleToJsonSuccessTest,
34 ::testing::Values(
35 DoubleToJsonSuccessTestParam{DoubleMessageData{0.0}},
36 DoubleToJsonSuccessTestParam{DoubleMessageData{0}, {.always_print_fields_with_no_presence = true}},
37 DoubleToJsonSuccessTestParam{DoubleMessageData{1}},
38 DoubleToJsonSuccessTestParam{DoubleMessageData{-1}},
39 DoubleToJsonSuccessTestParam{DoubleMessageData{100.12357}},
40 DoubleToJsonSuccessTestParam{DoubleMessageData{-100.12357}},
41 DoubleToJsonSuccessTestParam{DoubleMessageData{kMax}},
42 DoubleToJsonSuccessTestParam{DoubleMessageData{-kMax}},
43 DoubleToJsonSuccessTestParam{DoubleMessageData{kMin}},
44 DoubleToJsonSuccessTestParam{DoubleMessageData{-kMin}}
45 )
46);
47
48TEST_P(DoubleToJsonSuccessTest, Test) {
49 const auto& param = GetParam();
50
51 auto input = PrepareTestData(param.input);
52 formats::json::Value json;
53 formats::json::Value sample_json;
54
55 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
56 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
57
58 // Can't compare 'formats::json::Value' using 'operator==' because protobuf json writer outputs
59 // distinct number of fractional digits than usever's one. Still after converting to target
60 // type values should be equal.
61
62 EXPECT_LE(json.GetSize(), std::size_t{1});
63 EXPECT_EQ(json.GetSize(), sample_json.GetSize());
64
65 if (json.GetSize() == 0) {
66 return;
67 }
68
69 EXPECT_EQ(json["field1"].As<double>(), param.input.field1);
70 EXPECT_EQ(json["field1"].As<double>(), sample_json["field1"].As<double>());
71}
72
73} // namespace protobuf::json::tests
74
75USERVER_NAMESPACE_END