1#include <gtest/gtest.h>
3#include <userver/proto-structs/json.hpp>
4#include <userver/utest/assert_macros.hpp>
5#include <userver/utest/log_capture_fixture.hpp>
7#include "messages.pb.h"
10USERVER_NAMESPACE_BEGIN
12namespace proto_structs::tests {
16structs::
Scalar MakeStruct() {
17 return structs::Scalar{
19 .f2 = std::numeric_limits<int32_t>::min(),
20 .f3 = std::numeric_limits<uint32_t>::max(),
21 .f4 = std::numeric_limits<int64_t>::min(),
22 .f5 = std::numeric_limits<uint64_t>::max(),
23 .f6 =
static_cast<
float>(1.5),
27 .f10 = structs::TestEnum::kValue1,
32formats::json::Value MakeJson() {
33 auto expected_builder = formats::json::ValueBuilder{formats::common::Type::kObject};
34 expected_builder[
"f1"] =
true;
35 expected_builder[
"f2"] = std::numeric_limits<int32_t>::min();
36 expected_builder[
"f3"] = std::numeric_limits<uint32_t>::max();
38 expected_builder[
"f4"] = std::to_string(std::numeric_limits<int64_t>::min());
39 expected_builder[
"f5"] = std::to_string(std::numeric_limits<uint64_t>::max());
40 expected_builder[
"f6"] =
static_cast<
float>(1.5);
41 expected_builder[
"f7"] = -2.5;
42 expected_builder[
"f8"] =
"test1";
43 expected_builder[
"f9"] =
"dGVzdDI=";
44 expected_builder[
"f10"] =
"TEST_ENUM_VALUE1";
45 expected_builder[
"f11"] = 987;
46 return expected_builder.ExtractValue();
51TEST(StructToJson, JsonValue) {
52 formats::json::Value json;
53 UASSERT_NO_THROW(json = StructToJson(MakeStruct(), {}));
54 ASSERT_EQ(json, MakeJson());
57TEST(StructToJson, JsonString) {
58 std::string json_string;
59 UASSERT_NO_THROW(json_string = StructToJsonString(MakeStruct(), {}));
60 ASSERT_EQ(formats::json::FromString(json_string), MakeJson());
63TEST(StructToJson, Serialize) {
64 formats::json::Value json;
65 UASSERT_NO_THROW(json = formats::json::ValueBuilder{MakeStruct()}.ExtractValue());
66 ASSERT_EQ(json, MakeJson());
69using Logging = utest::LogCaptureFixture<>;
71TEST_F(Logging, LogStruct) {
72 const auto obj_string = GetLogCapture().ToStringViaLogging(MakeStruct());
73 EXPECT_EQ(obj_string, ToString(MakeJson()));