1#include <gtest/gtest.h>
3#include <userver/proto-structs/json.hpp>
4#include <userver/utest/assert_macros.hpp>
6#include "messages.pb.h"
11namespace proto_structs::tests {
15messages::Scalar MakeMessage() {
18 msg.set_f2(std::numeric_limits<int32_t>::min());
19 msg.set_f3(std::numeric_limits<uint32_t>::max());
20 msg.set_f4(std::numeric_limits<int64_t>::min());
21 msg.set_f5(std::numeric_limits<uint64_t>::max());
22 msg.set_f6(
static_cast<
float>(1.5));
26 msg.set_f10(messages::TestEnum::TEST_ENUM_VALUE1);
31formats::json::Value MakeJson() {
32 auto builder = formats::json::ValueBuilder{formats::common::Type::kObject};
34 builder[
"f2"] = std::numeric_limits<int32_t>::min();
35 builder[
"f3"] = std::numeric_limits<uint32_t>::max();
37 builder[
"f4"] = std::to_string(std::numeric_limits<int64_t>::min());
38 builder[
"f5"] = std::to_string(std::numeric_limits<uint64_t>::max());
39 builder[
"f6"] =
static_cast<
float>(1.5);
41 builder[
"f8"] =
"test1";
42 builder[
"f9"] =
"dGVzdDI=";
43 builder[
"f10"] =
"TEST_ENUM_VALUE1";
45 return builder.ExtractValue();
50TEST(JsonToStruct, JsonValue) {
52 UASSERT_NO_THROW(result = JsonToStruct<structs::Scalar>(MakeJson(), {}));
53 structs::CheckScalarEqual(result, MakeMessage());
56TEST(JsonToStruct, JsonString) {
57 const auto json_string = formats::json::ToString(MakeJson());
59 UASSERT_NO_THROW(result = JsonStringToStruct<structs::
Scalar>(json_string, {}));
60 structs::CheckScalarEqual(result, MakeMessage());
63TEST(JsonToStruct, Parse) {
65 UASSERT_NO_THROW(result = MakeJson().As<structs::Scalar>());
66 structs::CheckScalarEqual(result, MakeMessage());