1#include <gtest/gtest.h>
8#include <userver/protobuf/json/convert.hpp>
9#include <userver/utest/assert_macros.hpp>
13USERVER_NAMESPACE_BEGIN
17struct OneofToJsonSuccessTestParam {
19 std::string expected_json = {};
20 WriteOptions options = {};
23void PrintTo(
const OneofToJsonSuccessTestParam& param, std::ostream* os) {
25 "{{ input = {{.field1={}, .field2={}}} }}",
26 (param.input.field1 ? std::to_string(param.input.field1.value()) :
"nullopt"),
27 param.input.field2.value_or(
"nullopt")
31class OneofToJsonSuccessTest :
public ::testing::TestWithParam<OneofToJsonSuccessTestParam> {};
33INSTANTIATE_TEST_SUITE_P(
35 OneofToJsonSuccessTest,
37 OneofToJsonSuccessTestParam{OneofMessageData{}, R"({})"},
38 OneofToJsonSuccessTestParam{OneofMessageData{.field1 = 10}, R"({"field1":10})"},
39 OneofToJsonSuccessTestParam{OneofMessageData{.field2 =
"hello"}, R"({"field2":"hello"})"}
43TEST_P(OneofToJsonSuccessTest, Test) {
44 const auto& param = GetParam();
46 auto input = PrepareTestData(param.input);
47 formats::json::Value json, expected_json, sample_json;
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)));
53 EXPECT_EQ(json, expected_json);
54 EXPECT_EQ(expected_json, sample_json);