userver: /data/code/userver/libraries/protobuf/tests/json/uint32_to_json_test.cpp Source File
Loading...
Searching...
No Matches
uint32_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::uint32_t kMax = std::numeric_limits<std::uint32_t>::max(); // 4294967295
19
20struct UInt32ToJsonSuccessTestParam {
21 UInt32MessageData input = {};
22 std::string expected_json = {};
23 PrintOptions options = {};
24};
25
26void PrintTo(const UInt32ToJsonSuccessTestParam& param, std::ostream* os) {
27 *os << fmt::format("{{ input = {{.field1={}, .field2={}}} }}", param.input.field1, param.input.field2);
28}
29
30class UInt32ToJsonTest : public ::testing::TestWithParam<UInt32ToJsonSuccessTestParam> {};
31
32INSTANTIATE_TEST_SUITE_P(
33 ,
34 UInt32ToJsonTest,
35 ::testing::Values(
36 UInt32ToJsonSuccessTestParam{UInt32MessageData{0, 0}, R"({})"},
37 UInt32ToJsonSuccessTestParam{
39 R"({"field1":0,"field2":0})",
40 {.always_print_fields_with_no_presence = true}
41 },
42 UInt32ToJsonSuccessTestParam{UInt32MessageData{1, 2}, R"({"field1":1,"field2":2})"},
43 UInt32ToJsonSuccessTestParam{UInt32MessageData{kMax, kMax}, R"({"field1":4294967295,"field2":4294967295})"}
44 )
45);
46
47TEST_P(UInt32ToJsonTest, Test) {
48 const auto& param = GetParam();
49
50 auto input = PrepareTestData(param.input);
51 formats::json::Value json, expected_json, sample_json;
52
53 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
54 UASSERT_NO_THROW((expected_json = PrepareJsonTestData(param.expected_json)));
55 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
56
57 EXPECT_EQ(json, expected_json);
58 EXPECT_EQ(expected_json, sample_json);
59}
60
61} // namespace protobuf::json::tests
62
63USERVER_NAMESPACE_END