userver: /data/code/userver/libraries/protobuf/tests/json/string_to_json_test.cpp Source File
Loading...
Searching...
No Matches
string_to_json_test.cpp
1#include <gtest/gtest.h>
2
3#include <ostream>
4#include <string>
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
17struct StringToJsonSuccessTestParam {
18 StringMessageData input = {};
19 std::string expected_json = {};
20 WriteOptions options = {};
21};
22
23void PrintTo(const StringToJsonSuccessTestParam& param, std::ostream* os) {
24 *os << fmt::format("{{ input = {{.field1='{}'}} }}", param.input.field1);
25}
26
27class StringToJsonSuccessTest : public ::testing::TestWithParam<StringToJsonSuccessTestParam> {};
28
29INSTANTIATE_TEST_SUITE_P(
30 ,
31 StringToJsonSuccessTest,
32 ::testing::Values(
33 StringToJsonSuccessTestParam{StringMessageData{""}, R"({})"},
34 StringToJsonSuccessTestParam{
35 StringMessageData{""},
36 R"({"field1":""})",
37 WriteOptions{.always_print_fields_with_no_presence = true}
38 },
39 StringToJsonSuccessTestParam{StringMessageData{"hello world"}, R"({"field1":"hello world"})"}
40 )
41);
42
43TEST_P(StringToJsonSuccessTest, Test) {
44 const auto& param = GetParam();
45
46 auto input = PrepareTestData(param.input);
47 formats::json::Value json, expected_json, sample_json;
48
49 UASSERT_NO_THROW((json = MessageToJson(input, param.options)));
50 UASSERT_NO_THROW((expected_json = PrepareJsonTestData(param.expected_json)));
51 UASSERT_NO_THROW((sample_json = CreateSampleJson(input, param.options)));
52
53 EXPECT_EQ(json, expected_json);
54 EXPECT_EQ(expected_json, sample_json);
55}
56
57} // namespace protobuf::json::tests
58
59USERVER_NAMESPACE_END