userver: /data/code/userver/libraries/protobuf/tests/json/int64_to_json_test.cpp Source File
Loading...
Searching...
No Matches
int64_to_json_test.cpp
1#include <gtest/gtest.h>
2
3#include <limits>
4#include <ostream>
5#include <string>
6
7#include <fmt/format.h>
8
9#include <userver/protobuf/json/convert.hpp>
10#include <userver/utest/assert_macros.hpp>
11
12#include "utils.hpp"
13
14USERVER_NAMESPACE_BEGIN
15
16namespace protobuf::json::tests {
17
18constexpr std::int64_t kMax = std::numeric_limits<std::int64_t>::max(); // 9223372036854775807
19constexpr std::int64_t kMin = std::numeric_limits<std::int64_t>::min(); // -9223372036854775808
20
21struct Int64ToJsonSuccessTestParam {
22 Int64MessageData input = {};
23 std::string expected_json = {};
24 WriteOptions options = {};
25};
26
27void PrintTo(const Int64ToJsonSuccessTestParam& param, std::ostream* os) {
28 *os << fmt::format(
29 "{{ input = {{.field1={}, .field2={}, .field3={}}} }}",
30 param.input.field1,
31 param.input.field2,
32 param.input.field3
33 );
34}
35
36class Int64ToJsonSuccessTest : public ::testing::TestWithParam<Int64ToJsonSuccessTestParam> {};
37
38INSTANTIATE_TEST_SUITE_P(
39 ,
40 Int64ToJsonSuccessTest,
41 ::testing::Values(
42 Int64ToJsonSuccessTestParam{Int64MessageData{0, 0, 0}, R"({})"},
43 Int64ToJsonSuccessTestParam{
44 Int64MessageData{0, 0, 0},
45 R"({"field1":"0","field2":"0","field3":"0"})",
46 WriteOptions{.always_print_fields_with_no_presence = true}
47 },
48 Int64ToJsonSuccessTestParam{Int64MessageData{1, 2, 3}, R"({"field1":"1","field2":"2","field3":"3"})"},
49 Int64ToJsonSuccessTestParam{Int64MessageData{-1, -2, -3}, R"({"field1":"-1","field2":"-2","field3":"-3"})"},
50 Int64ToJsonSuccessTestParam{
51 Int64MessageData{kMax, kMax, kMax},
52 R"({"field1":"9223372036854775807","field2":"9223372036854775807","field3":"9223372036854775807"})"
53 },
54 Int64ToJsonSuccessTestParam{
55 Int64MessageData{kMin, kMin, kMin},
56 R"({"field1":"-9223372036854775808","field2":"-9223372036854775808","field3":"-9223372036854775808"})"
57 }
58 )
59);
60
61TEST_P(Int64ToJsonSuccessTest, Test) {
62 const auto& param = GetParam();
63
64 auto input = PrepareTestData(param.input);
65 formats::json::Value json, expected_json, sample_json;
66
67 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
68 UASSERT_NO_THROW((expected_json = PrepareJsonTestData(param.expected_json)));
69 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
70
71 EXPECT_EQ(json, expected_json);
72 EXPECT_EQ(expected_json, sample_json);
73}
74
75} // namespace protobuf::json::tests
76
77USERVER_NAMESPACE_END