aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/protobuf/json/ut
diff options
context:
space:
mode:
authorAnton Samokhvalov <pg83@yandex.ru>2022-02-10 16:45:15 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:45:15 +0300
commit72cb13b4aff9bc9cf22e49251bc8fd143f82538f (patch)
treeda2c34829458c7d4e74bdfbdf85dff449e9e7fb8 /library/cpp/protobuf/json/ut
parent778e51ba091dc39e7b7fcab2b9cf4dbedfb6f2b5 (diff)
downloadydb-72cb13b4aff9bc9cf22e49251bc8fd143f82538f.tar.gz
Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/protobuf/json/ut')
-rw-r--r--library/cpp/protobuf/json/ut/filter_ut.cpp112
-rw-r--r--library/cpp/protobuf/json/ut/inline_ut.cpp158
-rw-r--r--library/cpp/protobuf/json/ut/json.h72
-rw-r--r--library/cpp/protobuf/json/ut/json2proto_ut.cpp1286
-rw-r--r--library/cpp/protobuf/json/ut/proto.h92
-rw-r--r--library/cpp/protobuf/json/ut/proto2json_ut.cpp1456
-rw-r--r--library/cpp/protobuf/json/ut/string_transform_ut.cpp10
7 files changed, 1593 insertions, 1593 deletions
diff --git a/library/cpp/protobuf/json/ut/filter_ut.cpp b/library/cpp/protobuf/json/ut/filter_ut.cpp
index 95c227666f..0e2c13649a 100644
--- a/library/cpp/protobuf/json/ut/filter_ut.cpp
+++ b/library/cpp/protobuf/json/ut/filter_ut.cpp
@@ -22,72 +22,72 @@ static NProtobufJsonUt::TFilterTest GetTestMsg() {
Y_UNIT_TEST_SUITE(TProto2JsonFilterTest){
Y_UNIT_TEST(TestFilterPrinter){
NProtobufJsonUt::TFilterTest msg = GetTestMsg();
-{
- TString expected = R"({"OptFiltered":"1","NotFiltered":"23","RepFiltered":[45,67],)"
- R"("Inner":{"Number":[100,200],"InnerFiltered":235}})";
- TString my = Proto2Json(msg);
- UNIT_ASSERT_STRINGS_EQUAL(my, expected);
-}
-
-{
- TString expected = R"({"NotFiltered":"23",)"
- R"("Inner":{"Number":[100,200]}})";
- TString my = PrintWithFilter(msg, MakeFieldOptionFunctor(NProtobufJsonUt::filter_test, false));
- UNIT_ASSERT_STRINGS_EQUAL(my, expected);
-}
+{
+ TString expected = R"({"OptFiltered":"1","NotFiltered":"23","RepFiltered":[45,67],)"
+ R"("Inner":{"Number":[100,200],"InnerFiltered":235}})";
+ TString my = Proto2Json(msg);
+ UNIT_ASSERT_STRINGS_EQUAL(my, expected);
+}
-{
- TString expected = R"({"OptFiltered":"1","RepFiltered":[45,67]})";
- TString my = PrintWithFilter(msg, MakeFieldOptionFunctor(NProtobufJsonUt::filter_test));
- UNIT_ASSERT_STRINGS_EQUAL(my, expected);
-}
+{
+ TString expected = R"({"NotFiltered":"23",)"
+ R"("Inner":{"Number":[100,200]}})";
+ TString my = PrintWithFilter(msg, MakeFieldOptionFunctor(NProtobufJsonUt::filter_test, false));
+ UNIT_ASSERT_STRINGS_EQUAL(my, expected);
+}
-{
- TString expected = R"({"OptFiltered":"1","NotFiltered":"23",)"
- R"("Inner":{"Number":[100,200]}})";
- TString my;
- PrintWithFilter(msg, MakeFieldOptionFunctor(NProtobufJsonUt::export_test), *CreateJsonMapOutput(my));
- UNIT_ASSERT_STRINGS_EQUAL(my, expected);
-}
-
-{
- TString expected = R"({"NotFiltered":"23",)"
- R"("Inner":{"Number":[100,200]}})";
- auto functor = [](const NProtoBuf::Message&, const NProtoBuf::FieldDescriptor* field) {
- return field->name() == "NotFiltered" || field->name() == "Number" || field->name() == "Inner";
- };
- TString my = PrintWithFilter(msg, functor);
- UNIT_ASSERT_STRINGS_EQUAL(my, expected);
-}
-}
+{
+ TString expected = R"({"OptFiltered":"1","RepFiltered":[45,67]})";
+ TString my = PrintWithFilter(msg, MakeFieldOptionFunctor(NProtobufJsonUt::filter_test));
+ UNIT_ASSERT_STRINGS_EQUAL(my, expected);
+}
+{
+ TString expected = R"({"OptFiltered":"1","NotFiltered":"23",)"
+ R"("Inner":{"Number":[100,200]}})";
+ TString my;
+ PrintWithFilter(msg, MakeFieldOptionFunctor(NProtobufJsonUt::export_test), *CreateJsonMapOutput(my));
+ UNIT_ASSERT_STRINGS_EQUAL(my, expected);
+}
+
+{
+ TString expected = R"({"NotFiltered":"23",)"
+ R"("Inner":{"Number":[100,200]}})";
+ auto functor = [](const NProtoBuf::Message&, const NProtoBuf::FieldDescriptor* field) {
+ return field->name() == "NotFiltered" || field->name() == "Number" || field->name() == "Inner";
+ };
+ TString my = PrintWithFilter(msg, functor);
+ UNIT_ASSERT_STRINGS_EQUAL(my, expected);
+}
+}
+
Y_UNIT_TEST(NoUnnecessaryCopyFunctor) {
- size_t CopyCount = 0;
- struct TFunctorMock {
- TFunctorMock(size_t* copyCount)
- : CopyCount(copyCount)
+ size_t CopyCount = 0;
+ struct TFunctorMock {
+ TFunctorMock(size_t* copyCount)
+ : CopyCount(copyCount)
{
- UNIT_ASSERT(*CopyCount <= 1);
+ UNIT_ASSERT(*CopyCount <= 1);
}
- TFunctorMock(const TFunctorMock& f)
- : CopyCount(f.CopyCount)
+ TFunctorMock(const TFunctorMock& f)
+ : CopyCount(f.CopyCount)
{
- ++*CopyCount;
+ ++*CopyCount;
}
- TFunctorMock(TFunctorMock&& f) = default;
+ TFunctorMock(TFunctorMock&& f) = default;
- bool operator()(const NProtoBuf::Message&, const NProtoBuf::FieldDescriptor*) const {
- return false;
- }
+ bool operator()(const NProtoBuf::Message&, const NProtoBuf::FieldDescriptor*) const {
+ return false;
+ }
- size_t* CopyCount;
- };
+ size_t* CopyCount;
+ };
- TProto2JsonConfig cfg;
- TFilteringPrinter<> printer(TFunctorMock(&CopyCount), cfg);
- UNIT_ASSERT(CopyCount <= 1);
-}
-}
-;
+ TProto2JsonConfig cfg;
+ TFilteringPrinter<> printer(TFunctorMock(&CopyCount), cfg);
+ UNIT_ASSERT(CopyCount <= 1);
+}
+}
+;
diff --git a/library/cpp/protobuf/json/ut/inline_ut.cpp b/library/cpp/protobuf/json/ut/inline_ut.cpp
index c29ad32e7d..0960de3220 100644
--- a/library/cpp/protobuf/json/ut/inline_ut.cpp
+++ b/library/cpp/protobuf/json/ut/inline_ut.cpp
@@ -24,99 +24,99 @@ static NProtobufJsonUt::TInlineTest GetTestMsg() {
Y_UNIT_TEST_SUITE(TProto2JsonInlineTest){
Y_UNIT_TEST(TestNormalPrint){
NProtobufJsonUt::TInlineTest msg = GetTestMsg();
-// normal print should output these fields as just string values
-TString expRaw = R"({"OptJson":"{\"a\":1,\"b\":\"000\"}","NotJson":"12{}34","RepJson":["{}","[1,2]"],)"
- R"("Inner":{"Number":[100,200],"InnerJson":"{\"xxx\":[]}"}})";
-TString myRaw;
-Proto2Json(msg, myRaw);
-UNIT_ASSERT_STRINGS_EQUAL(myRaw, expRaw);
-
-myRaw = PrintInlined(msg, [](const NProtoBuf::Message&, const NProtoBuf::FieldDescriptor*) { return false; });
-UNIT_ASSERT_STRINGS_EQUAL(myRaw, expRaw); // result is the same
-}
+// normal print should output these fields as just string values
+TString expRaw = R"({"OptJson":"{\"a\":1,\"b\":\"000\"}","NotJson":"12{}34","RepJson":["{}","[1,2]"],)"
+ R"("Inner":{"Number":[100,200],"InnerJson":"{\"xxx\":[]}"}})";
+TString myRaw;
+Proto2Json(msg, myRaw);
+UNIT_ASSERT_STRINGS_EQUAL(myRaw, expRaw);
+
+myRaw = PrintInlined(msg, [](const NProtoBuf::Message&, const NProtoBuf::FieldDescriptor*) { return false; });
+UNIT_ASSERT_STRINGS_EQUAL(myRaw, expRaw); // result is the same
+}
Y_UNIT_TEST(TestInliningPrinter) {
- NProtobufJsonUt::TInlineTest msg = GetTestMsg();
- // inlined print should output these fields as inlined json sub-objects
- TString expInlined = R"({"OptJson":{"a":1,"b":"000"},"NotJson":"12{}34","RepJson":[{},[1,2]],)"
- R"("Inner":{"Number":[100,200],"InnerJson":{"xxx":[]}}})";
-
- {
- TString myInlined = PrintInlined(msg, MakeFieldOptionFunctor(NProtobufJsonUt::inline_test));
- UNIT_ASSERT_STRINGS_EQUAL(myInlined, expInlined);
+ NProtobufJsonUt::TInlineTest msg = GetTestMsg();
+ // inlined print should output these fields as inlined json sub-objects
+ TString expInlined = R"({"OptJson":{"a":1,"b":"000"},"NotJson":"12{}34","RepJson":[{},[1,2]],)"
+ R"("Inner":{"Number":[100,200],"InnerJson":{"xxx":[]}}})";
+
+ {
+ TString myInlined = PrintInlined(msg, MakeFieldOptionFunctor(NProtobufJsonUt::inline_test));
+ UNIT_ASSERT_STRINGS_EQUAL(myInlined, expInlined);
}
- {
- auto functor = [](const NProtoBuf::Message&, const NProtoBuf::FieldDescriptor* field) {
- return field->name() == "OptJson" || field->name() == "RepJson" || field->name() == "InnerJson";
- };
- TString myInlined = PrintInlined(msg, functor);
- UNIT_ASSERT_STRINGS_EQUAL(myInlined, expInlined);
- }
-}
+ {
+ auto functor = [](const NProtoBuf::Message&, const NProtoBuf::FieldDescriptor* field) {
+ return field->name() == "OptJson" || field->name() == "RepJson" || field->name() == "InnerJson";
+ };
+ TString myInlined = PrintInlined(msg, functor);
+ UNIT_ASSERT_STRINGS_EQUAL(myInlined, expInlined);
+ }
+}
Y_UNIT_TEST(TestNoValues) {
- // no values - no printing
- NProtobufJsonUt::TInlineTest msg;
- msg.MutableInner()->AddNumber(100);
- msg.MutableInner()->AddNumber(200);
+ // no values - no printing
+ NProtobufJsonUt::TInlineTest msg;
+ msg.MutableInner()->AddNumber(100);
+ msg.MutableInner()->AddNumber(200);
- TString expInlined = R"({"Inner":{"Number":[100,200]}})";
+ TString expInlined = R"({"Inner":{"Number":[100,200]}})";
- TString myInlined = PrintInlined(msg, MakeFieldOptionFunctor(NProtobufJsonUt::inline_test));
- UNIT_ASSERT_STRINGS_EQUAL(myInlined, expInlined);
-}
+ TString myInlined = PrintInlined(msg, MakeFieldOptionFunctor(NProtobufJsonUt::inline_test));
+ UNIT_ASSERT_STRINGS_EQUAL(myInlined, expInlined);
+}
Y_UNIT_TEST(TestMissingKeyModeNull) {
- NProtobufJsonUt::TInlineTest msg;
- msg.MutableInner()->AddNumber(100);
- msg.MutableInner()->AddNumber(200);
+ NProtobufJsonUt::TInlineTest msg;
+ msg.MutableInner()->AddNumber(100);
+ msg.MutableInner()->AddNumber(200);
- TString expInlined = R"({"OptJson":null,"NotJson":null,"RepJson":null,"Inner":{"Number":[100,200],"InnerJson":null}})";
+ TString expInlined = R"({"OptJson":null,"NotJson":null,"RepJson":null,"Inner":{"Number":[100,200],"InnerJson":null}})";
- TProto2JsonConfig cfg;
- cfg.SetMissingSingleKeyMode(TProto2JsonConfig::MissingKeyNull).SetMissingRepeatedKeyMode(TProto2JsonConfig::MissingKeyNull);
- TString myInlined = PrintInlined(msg, MakeFieldOptionFunctor(NProtobufJsonUt::inline_test), cfg);
- UNIT_ASSERT_STRINGS_EQUAL(myInlined, expInlined);
-}
+ TProto2JsonConfig cfg;
+ cfg.SetMissingSingleKeyMode(TProto2JsonConfig::MissingKeyNull).SetMissingRepeatedKeyMode(TProto2JsonConfig::MissingKeyNull);
+ TString myInlined = PrintInlined(msg, MakeFieldOptionFunctor(NProtobufJsonUt::inline_test), cfg);
+ UNIT_ASSERT_STRINGS_EQUAL(myInlined, expInlined);
+}
Y_UNIT_TEST(TestMissingKeyModeDefault) {
- NProtobufJsonUt::TInlineTestDefaultValues msg;
+ NProtobufJsonUt::TInlineTestDefaultValues msg;
- TString expInlined = R"({"OptJson":{"default":1},"Number":0,"RepJson":[],"Inner":{"OptJson":{"default":2}}})";
+ TString expInlined = R"({"OptJson":{"default":1},"Number":0,"RepJson":[],"Inner":{"OptJson":{"default":2}}})";
- TProto2JsonConfig cfg;
- cfg.SetMissingSingleKeyMode(TProto2JsonConfig::MissingKeyDefault).SetMissingRepeatedKeyMode(TProto2JsonConfig::MissingKeyDefault);
- TString myInlined = PrintInlined(msg, MakeFieldOptionFunctor(NProtobufJsonUt::inline_test), cfg);
- UNIT_ASSERT_STRINGS_EQUAL(myInlined, expInlined);
-}
+ TProto2JsonConfig cfg;
+ cfg.SetMissingSingleKeyMode(TProto2JsonConfig::MissingKeyDefault).SetMissingRepeatedKeyMode(TProto2JsonConfig::MissingKeyDefault);
+ TString myInlined = PrintInlined(msg, MakeFieldOptionFunctor(NProtobufJsonUt::inline_test), cfg);
+ UNIT_ASSERT_STRINGS_EQUAL(myInlined, expInlined);
+}
Y_UNIT_TEST(NoUnnecessaryCopyFunctor) {
- size_t CopyCount = 0;
- struct TFunctorMock {
- TFunctorMock(size_t* copyCount)
- : CopyCount(copyCount)
- {
- UNIT_ASSERT(*CopyCount <= 1);
- }
-
- TFunctorMock(const TFunctorMock& f)
- : CopyCount(f.CopyCount)
- {
- ++*CopyCount;
- }
-
- TFunctorMock(TFunctorMock&& f) = default;
-
- bool operator()(const NProtoBuf::Message&, const NProtoBuf::FieldDescriptor*) const {
- return false;
- }
-
- size_t* CopyCount;
- };
-
- TProto2JsonConfig cfg;
- TInliningPrinter<> printer(TFunctorMock(&CopyCount), cfg);
- UNIT_ASSERT(CopyCount <= 1);
-}
-}
-;
+ size_t CopyCount = 0;
+ struct TFunctorMock {
+ TFunctorMock(size_t* copyCount)
+ : CopyCount(copyCount)
+ {
+ UNIT_ASSERT(*CopyCount <= 1);
+ }
+
+ TFunctorMock(const TFunctorMock& f)
+ : CopyCount(f.CopyCount)
+ {
+ ++*CopyCount;
+ }
+
+ TFunctorMock(TFunctorMock&& f) = default;
+
+ bool operator()(const NProtoBuf::Message&, const NProtoBuf::FieldDescriptor*) const {
+ return false;
+ }
+
+ size_t* CopyCount;
+ };
+
+ TProto2JsonConfig cfg;
+ TInliningPrinter<> printer(TFunctorMock(&CopyCount), cfg);
+ UNIT_ASSERT(CopyCount <= 1);
+}
+}
+;
diff --git a/library/cpp/protobuf/json/ut/json.h b/library/cpp/protobuf/json/ut/json.h
index c1f108e6e4..bdab69f4d4 100644
--- a/library/cpp/protobuf/json/ut/json.h
+++ b/library/cpp/protobuf/json/ut/json.h
@@ -12,58 +12,58 @@
#include <util/system/defaults.h>
namespace NProtobufJsonTest {
- inline NJson::TJsonValue
- CreateFlatJson(const THashSet<TString>& skippedKeys = THashSet<TString>()) {
- NJson::TJsonValue json;
+ inline NJson::TJsonValue
+ CreateFlatJson(const THashSet<TString>& skippedKeys = THashSet<TString>()) {
+ NJson::TJsonValue json;
-#define DEFINE_FIELD(name, value) \
- if (skippedKeys.find(#name) == skippedKeys.end()) \
+#define DEFINE_FIELD(name, value) \
+ if (skippedKeys.find(#name) == skippedKeys.end()) \
json.InsertValue(#name, value);
#include "fields.incl"
#undef DEFINE_FIELD
- return json;
- }
-
- inline NJson::TJsonValue
- CreateRepeatedFlatJson(const THashSet<TString>& skippedKeys = THashSet<TString>()) {
- NJson::TJsonValue json;
-
-#define DEFINE_REPEATED_FIELD(name, type, ...) \
- if (skippedKeys.find(#name) == skippedKeys.end()) { \
- type values[] = {__VA_ARGS__}; \
- NJson::TJsonValue array(NJson::JSON_ARRAY); \
- for (size_t i = 0, end = Y_ARRAY_SIZE(values); i < end; ++i) { \
- array.AppendValue(values[i]); \
- } \
- json.InsertValue(#name, array); \
+ return json;
+ }
+
+ inline NJson::TJsonValue
+ CreateRepeatedFlatJson(const THashSet<TString>& skippedKeys = THashSet<TString>()) {
+ NJson::TJsonValue json;
+
+#define DEFINE_REPEATED_FIELD(name, type, ...) \
+ if (skippedKeys.find(#name) == skippedKeys.end()) { \
+ type values[] = {__VA_ARGS__}; \
+ NJson::TJsonValue array(NJson::JSON_ARRAY); \
+ for (size_t i = 0, end = Y_ARRAY_SIZE(values); i < end; ++i) { \
+ array.AppendValue(values[i]); \
+ } \
+ json.InsertValue(#name, array); \
}
#include "repeated_fields.incl"
#undef DEFINE_REPEATED_FIELD
- return json;
- }
+ return json;
+ }
- inline NJson::TJsonValue
- CreateCompositeJson(const THashSet<TString>& skippedKeys = THashSet<TString>()) {
- const NJson::TJsonValue& part = CreateFlatJson(skippedKeys);
- NJson::TJsonValue json;
- json.InsertValue("Part", part);
+ inline NJson::TJsonValue
+ CreateCompositeJson(const THashSet<TString>& skippedKeys = THashSet<TString>()) {
+ const NJson::TJsonValue& part = CreateFlatJson(skippedKeys);
+ NJson::TJsonValue json;
+ json.InsertValue("Part", part);
- return json;
- }
+ return json;
+ }
-#define UNIT_ASSERT_JSONS_EQUAL(lhs, rhs) \
- if (lhs != rhs) { \
+#define UNIT_ASSERT_JSONS_EQUAL(lhs, rhs) \
+ if (lhs != rhs) { \
UNIT_ASSERT_STRINGS_EQUAL(lhs.GetStringRobust(), rhs.GetStringRobust()); \
}
-#define UNIT_ASSERT_JSON_STRINGS_EQUAL(lhs, rhs) \
- if (lhs != rhs) { \
- NJson::TJsonValue _lhs_json, _rhs_json; \
+#define UNIT_ASSERT_JSON_STRINGS_EQUAL(lhs, rhs) \
+ if (lhs != rhs) { \
+ NJson::TJsonValue _lhs_json, _rhs_json; \
UNIT_ASSERT(NJson::ReadJsonTree(lhs, &_lhs_json)); \
UNIT_ASSERT(NJson::ReadJsonTree(rhs, &_rhs_json)); \
- UNIT_ASSERT_JSONS_EQUAL(_lhs_json, _rhs_json); \
+ UNIT_ASSERT_JSONS_EQUAL(_lhs_json, _rhs_json); \
}
-}
+}
diff --git a/library/cpp/protobuf/json/ut/json2proto_ut.cpp b/library/cpp/protobuf/json/ut/json2proto_ut.cpp
index 0dfe57bc7a..c8fbcce65c 100644
--- a/library/cpp/protobuf/json/ut/json2proto_ut.cpp
+++ b/library/cpp/protobuf/json/ut/json2proto_ut.cpp
@@ -24,13 +24,13 @@ using namespace NProtobufJson;
using namespace NProtobufJsonTest;
namespace google {
- namespace protobuf {
- namespace internal {
- void MapTestForceDeterministic() {
- google::protobuf::io::CodedOutputStream::SetDefaultSerializationDeterministic();
- }
- }
- } // namespace protobuf
+ namespace protobuf {
+ namespace internal {
+ void MapTestForceDeterministic() {
+ google::protobuf::io::CodedOutputStream::SetDefaultSerializationDeterministic();
+ }
+ }
+ } // namespace protobuf
}
namespace {
@@ -72,331 +72,331 @@ namespace {
Y_UNIT_TEST_SUITE(TJson2ProtoTest) {
Y_UNIT_TEST(TestFlatOptional){
- {const NJson::TJsonValue& json = CreateFlatJson();
- TFlatOptional proto;
- Json2Proto(json, proto);
- TFlatOptional modelProto;
- FillFlatProto(&modelProto);
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
-}
-
- // Try to skip each field
-#define DEFINE_FIELD(name, value) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- const NJson::TJsonValue& json = CreateFlatJson(skippedField); \
- TFlatOptional proto; \
- Json2Proto(json, proto); \
- TFlatOptional modelProto; \
- FillFlatProto(&modelProto, skippedField); \
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto); \
- }
+ {const NJson::TJsonValue& json = CreateFlatJson();
+ TFlatOptional proto;
+ Json2Proto(json, proto);
+ TFlatOptional modelProto;
+ FillFlatProto(&modelProto);
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+}
+
+ // Try to skip each field
+#define DEFINE_FIELD(name, value) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ const NJson::TJsonValue& json = CreateFlatJson(skippedField); \
+ TFlatOptional proto; \
+ Json2Proto(json, proto); \
+ TFlatOptional modelProto; \
+ FillFlatProto(&modelProto, skippedField); \
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto); \
+ }
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
-} // TestFlatOptional
+} // TestFlatOptional
Y_UNIT_TEST(TestFlatRequired){
- {const NJson::TJsonValue& json = CreateFlatJson();
-TFlatRequired proto;
-Json2Proto(json, proto);
-TFlatRequired modelProto;
-FillFlatProto(&modelProto);
-UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
-}
-
-// Try to skip each field
-#define DEFINE_FIELD(name, value) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- const NJson::TJsonValue& json = CreateFlatJson(skippedField); \
- TFlatRequired proto; \
- UNIT_ASSERT_EXCEPTION(Json2Proto(json, proto), yexception); \
- }
+ {const NJson::TJsonValue& json = CreateFlatJson();
+TFlatRequired proto;
+Json2Proto(json, proto);
+TFlatRequired modelProto;
+FillFlatProto(&modelProto);
+UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+}
+
+// Try to skip each field
+#define DEFINE_FIELD(name, value) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ const NJson::TJsonValue& json = CreateFlatJson(skippedField); \
+ TFlatRequired proto; \
+ UNIT_ASSERT_EXCEPTION(Json2Proto(json, proto), yexception); \
+ }
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
-} // TestFlatRequired
+} // TestFlatRequired
Y_UNIT_TEST(TestNameGenerator) {
- TJson2ProtoConfig cfg;
- cfg.SetNameGenerator([](const NProtoBuf::FieldDescriptor&) { return "42"; });
+ TJson2ProtoConfig cfg;
+ cfg.SetNameGenerator([](const NProtoBuf::FieldDescriptor&) { return "42"; });
- TNameGeneratorType proto;
+ TNameGeneratorType proto;
Json2Proto(TStringBuf(R"({"42":42})"), proto, cfg);
- TNameGeneratorType expected;
- expected.SetField(42);
-
- UNIT_ASSERT_PROTOS_EQUAL(expected, proto);
-}
+ TNameGeneratorType expected;
+ expected.SetField(42);
+ UNIT_ASSERT_PROTOS_EQUAL(expected, proto);
+}
+
Y_UNIT_TEST(TestFlatNoCheckRequired) {
- {
- const NJson::TJsonValue& json = CreateFlatJson();
- TFlatRequired proto;
- Json2Proto(json, proto);
- TFlatRequired modelProto;
- FillFlatProto(&modelProto);
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+ {
+ const NJson::TJsonValue& json = CreateFlatJson();
+ TFlatRequired proto;
+ Json2Proto(json, proto);
+ TFlatRequired modelProto;
+ FillFlatProto(&modelProto);
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
}
- TJson2ProtoConfig cfg;
- cfg.CheckRequiredFields = false;
-
- // Try to skip each field
-#define DEFINE_FIELD(name, value) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- const NJson::TJsonValue& json = CreateFlatJson(skippedField); \
- TFlatRequired proto; \
- UNIT_ASSERT_NO_EXCEPTION(Json2Proto(json, proto, cfg)); \
- }
+ TJson2ProtoConfig cfg;
+ cfg.CheckRequiredFields = false;
+
+ // Try to skip each field
+#define DEFINE_FIELD(name, value) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ const NJson::TJsonValue& json = CreateFlatJson(skippedField); \
+ TFlatRequired proto; \
+ UNIT_ASSERT_NO_EXCEPTION(Json2Proto(json, proto, cfg)); \
+ }
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
-} // TestFlatNoCheckRequired
+} // TestFlatNoCheckRequired
Y_UNIT_TEST(TestFlatRepeated){
- {const NJson::TJsonValue& json = CreateRepeatedFlatJson();
-TFlatRepeated proto;
-Json2Proto(json, proto);
-TFlatRepeated modelProto;
-FillRepeatedProto(&modelProto);
-UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
-}
-
-// Try to skip each field
-#define DEFINE_REPEATED_FIELD(name, ...) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- const NJson::TJsonValue& json = CreateRepeatedFlatJson(skippedField); \
- TFlatRepeated proto; \
- Json2Proto(json, proto); \
- TFlatRepeated modelProto; \
- FillRepeatedProto(&modelProto, skippedField); \
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto); \
- }
+ {const NJson::TJsonValue& json = CreateRepeatedFlatJson();
+TFlatRepeated proto;
+Json2Proto(json, proto);
+TFlatRepeated modelProto;
+FillRepeatedProto(&modelProto);
+UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+}
+
+// Try to skip each field
+#define DEFINE_REPEATED_FIELD(name, ...) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ const NJson::TJsonValue& json = CreateRepeatedFlatJson(skippedField); \
+ TFlatRepeated proto; \
+ Json2Proto(json, proto); \
+ TFlatRepeated modelProto; \
+ FillRepeatedProto(&modelProto, skippedField); \
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto); \
+ }
#include <library/cpp/protobuf/json/ut/repeated_fields.incl>
#undef DEFINE_REPEATED_FIELD
-} // TestFlatRepeated
+} // TestFlatRepeated
Y_UNIT_TEST(TestCompositeOptional){
- {const NJson::TJsonValue& json = CreateCompositeJson();
-TCompositeOptional proto;
-Json2Proto(json, proto);
-TCompositeOptional modelProto;
-FillCompositeProto(&modelProto);
-UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
-}
-
-// Try to skip each field
-#define DEFINE_FIELD(name, value) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- const NJson::TJsonValue& json = CreateCompositeJson(skippedField); \
- TCompositeOptional proto; \
- Json2Proto(json, proto); \
- TCompositeOptional modelProto; \
- FillCompositeProto(&modelProto, skippedField); \
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto); \
- }
+ {const NJson::TJsonValue& json = CreateCompositeJson();
+TCompositeOptional proto;
+Json2Proto(json, proto);
+TCompositeOptional modelProto;
+FillCompositeProto(&modelProto);
+UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+}
+
+// Try to skip each field
+#define DEFINE_FIELD(name, value) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ const NJson::TJsonValue& json = CreateCompositeJson(skippedField); \
+ TCompositeOptional proto; \
+ Json2Proto(json, proto); \
+ TCompositeOptional modelProto; \
+ FillCompositeProto(&modelProto, skippedField); \
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto); \
+ }
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
-} // TestCompositeOptional
+} // TestCompositeOptional
Y_UNIT_TEST(TestCompositeOptionalStringBuf){
- {NJson::TJsonValue json = CreateCompositeJson();
-json["Part"]["Double"] = 42.5;
-TCompositeOptional proto;
-Json2Proto(JsonValueToString(json), proto);
-TCompositeOptional modelProto;
-FillCompositeProto(&modelProto);
-modelProto.MutablePart()->SetDouble(42.5);
-UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
-}
-
-// Try to skip each field
-#define DEFINE_FIELD(name, value) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- NJson::TJsonValue json = CreateCompositeJson(skippedField); \
- if (json["Part"].Has("Double")) { \
- json["Part"]["Double"] = 42.5; \
- } \
- TCompositeOptional proto; \
- Json2Proto(JsonValueToString(json), proto); \
- TCompositeOptional modelProto; \
- FillCompositeProto(&modelProto, skippedField); \
- if (modelProto.GetPart().HasDouble()) { \
- modelProto.MutablePart()->SetDouble(42.5); \
- } \
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto); \
- }
+ {NJson::TJsonValue json = CreateCompositeJson();
+json["Part"]["Double"] = 42.5;
+TCompositeOptional proto;
+Json2Proto(JsonValueToString(json), proto);
+TCompositeOptional modelProto;
+FillCompositeProto(&modelProto);
+modelProto.MutablePart()->SetDouble(42.5);
+UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+}
+
+// Try to skip each field
+#define DEFINE_FIELD(name, value) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ NJson::TJsonValue json = CreateCompositeJson(skippedField); \
+ if (json["Part"].Has("Double")) { \
+ json["Part"]["Double"] = 42.5; \
+ } \
+ TCompositeOptional proto; \
+ Json2Proto(JsonValueToString(json), proto); \
+ TCompositeOptional modelProto; \
+ FillCompositeProto(&modelProto, skippedField); \
+ if (modelProto.GetPart().HasDouble()) { \
+ modelProto.MutablePart()->SetDouble(42.5); \
+ } \
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto); \
+ }
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
-} // TestCompositeOptionalStringBuf
+} // TestCompositeOptionalStringBuf
Y_UNIT_TEST(TestCompositeRequired) {
- {
- const NJson::TJsonValue& json = CreateCompositeJson();
- TCompositeRequired proto;
- Json2Proto(json, proto);
- TCompositeRequired modelProto;
- FillCompositeProto(&modelProto);
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
- }
-
- {
- NJson::TJsonValue json;
- TCompositeRequired proto;
- UNIT_ASSERT_EXCEPTION(Json2Proto(json, proto), yexception);
- }
-} // TestCompositeRequired
+ {
+ const NJson::TJsonValue& json = CreateCompositeJson();
+ TCompositeRequired proto;
+ Json2Proto(json, proto);
+ TCompositeRequired modelProto;
+ FillCompositeProto(&modelProto);
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+ }
+
+ {
+ NJson::TJsonValue json;
+ TCompositeRequired proto;
+ UNIT_ASSERT_EXCEPTION(Json2Proto(json, proto), yexception);
+ }
+} // TestCompositeRequired
Y_UNIT_TEST(TestCompositeRepeated) {
- {
- NJson::TJsonValue json;
- NJson::TJsonValue array;
- array.AppendValue(CreateFlatJson());
- json.InsertValue("Part", array);
-
- TCompositeRepeated proto;
- Json2Proto(json, proto);
-
- TFlatOptional partModelProto;
- FillFlatProto(&partModelProto);
- TCompositeRepeated modelProto;
- modelProto.AddPart()->CopyFrom(partModelProto);
-
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
- }
-
- {
- // Array of messages with each field skipped
- TCompositeRepeated modelProto;
- NJson::TJsonValue array;
-
-#define DEFINE_REPEATED_FIELD(name, ...) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- TFlatOptional partModelProto; \
- FillFlatProto(&partModelProto, skippedField); \
- modelProto.AddPart()->CopyFrom(partModelProto); \
- array.AppendValue(CreateFlatJson(skippedField)); \
- }
+ {
+ NJson::TJsonValue json;
+ NJson::TJsonValue array;
+ array.AppendValue(CreateFlatJson());
+ json.InsertValue("Part", array);
+
+ TCompositeRepeated proto;
+ Json2Proto(json, proto);
+
+ TFlatOptional partModelProto;
+ FillFlatProto(&partModelProto);
+ TCompositeRepeated modelProto;
+ modelProto.AddPart()->CopyFrom(partModelProto);
+
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+ }
+
+ {
+ // Array of messages with each field skipped
+ TCompositeRepeated modelProto;
+ NJson::TJsonValue array;
+
+#define DEFINE_REPEATED_FIELD(name, ...) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ TFlatOptional partModelProto; \
+ FillFlatProto(&partModelProto, skippedField); \
+ modelProto.AddPart()->CopyFrom(partModelProto); \
+ array.AppendValue(CreateFlatJson(skippedField)); \
+ }
#include <library/cpp/protobuf/json/ut/repeated_fields.incl>
#undef DEFINE_REPEATED_FIELD
- NJson::TJsonValue json;
- json.InsertValue("Part", array);
+ NJson::TJsonValue json;
+ json.InsertValue("Part", array);
- TCompositeRepeated proto;
- Json2Proto(json, proto);
+ TCompositeRepeated proto;
+ Json2Proto(json, proto);
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
- }
-} // TestCompositeRepeated
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+ }
+} // TestCompositeRepeated
Y_UNIT_TEST(TestInvalidEnum) {
- {
- NJson::TJsonValue json;
- json.InsertValue("Enum", "E_100");
- TFlatOptional proto;
- UNIT_ASSERT_EXCEPTION(Json2Proto(json, proto), yexception);
- }
-
- {
- NJson::TJsonValue json;
- json.InsertValue("Enum", 100);
- TFlatOptional proto;
- UNIT_ASSERT_EXCEPTION(Json2Proto(json, proto), yexception);
+ {
+ NJson::TJsonValue json;
+ json.InsertValue("Enum", "E_100");
+ TFlatOptional proto;
+ UNIT_ASSERT_EXCEPTION(Json2Proto(json, proto), yexception);
+ }
+
+ {
+ NJson::TJsonValue json;
+ json.InsertValue("Enum", 100);
+ TFlatOptional proto;
+ UNIT_ASSERT_EXCEPTION(Json2Proto(json, proto), yexception);
}
-}
+}
Y_UNIT_TEST(TestFieldNameMode) {
- // Original case 1
- {
- TString modelStr(R"_({"String":"value"})_");
+ // Original case 1
+ {
+ TString modelStr(R"_({"String":"value"})_");
- TFlatOptional proto;
- TJson2ProtoConfig config;
+ TFlatOptional proto;
+ TJson2ProtoConfig config;
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
- UNIT_ASSERT(proto.GetString() == "value");
- }
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
+ UNIT_ASSERT(proto.GetString() == "value");
+ }
- // Original case 2
- {
- TString modelStr(R"_({"String":"value"})_");
+ // Original case 2
+ {
+ TString modelStr(R"_({"String":"value"})_");
- TFlatOptional proto;
- TJson2ProtoConfig config;
- config.FieldNameMode = TJson2ProtoConfig::FieldNameOriginalCase;
+ TFlatOptional proto;
+ TJson2ProtoConfig config;
+ config.FieldNameMode = TJson2ProtoConfig::FieldNameOriginalCase;
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
- UNIT_ASSERT(proto.GetString() == "value");
- }
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
+ UNIT_ASSERT(proto.GetString() == "value");
+ }
- // Lowercase
- {
- TString modelStr(R"_({"string":"value"})_");
+ // Lowercase
+ {
+ TString modelStr(R"_({"string":"value"})_");
- TFlatOptional proto;
- TJson2ProtoConfig config;
- config.FieldNameMode = TJson2ProtoConfig::FieldNameLowerCase;
+ TFlatOptional proto;
+ TJson2ProtoConfig config;
+ config.FieldNameMode = TJson2ProtoConfig::FieldNameLowerCase;
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
- UNIT_ASSERT(proto.GetString() == "value");
- }
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
+ UNIT_ASSERT(proto.GetString() == "value");
+ }
- // Uppercase
- {
- TString modelStr(R"_({"STRING":"value"})_");
+ // Uppercase
+ {
+ TString modelStr(R"_({"STRING":"value"})_");
- TFlatOptional proto;
- TJson2ProtoConfig config;
- config.FieldNameMode = TJson2ProtoConfig::FieldNameUpperCase;
+ TFlatOptional proto;
+ TJson2ProtoConfig config;
+ config.FieldNameMode = TJson2ProtoConfig::FieldNameUpperCase;
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
- UNIT_ASSERT(proto.GetString() == "value");
- }
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
+ UNIT_ASSERT(proto.GetString() == "value");
+ }
- // Camelcase
- {
- TString modelStr(R"_({"string":"value"})_");
+ // Camelcase
+ {
+ TString modelStr(R"_({"string":"value"})_");
- TFlatOptional proto;
- TJson2ProtoConfig config;
- config.FieldNameMode = TJson2ProtoConfig::FieldNameCamelCase;
+ TFlatOptional proto;
+ TJson2ProtoConfig config;
+ config.FieldNameMode = TJson2ProtoConfig::FieldNameCamelCase;
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
- UNIT_ASSERT(proto.GetString() == "value");
- }
- {
- TString modelStr(R"_({"oneString":"value"})_");
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
+ UNIT_ASSERT(proto.GetString() == "value");
+ }
+ {
+ TString modelStr(R"_({"oneString":"value"})_");
- TFlatOptional proto;
- TJson2ProtoConfig config;
- config.FieldNameMode = TJson2ProtoConfig::FieldNameCamelCase;
+ TFlatOptional proto;
+ TJson2ProtoConfig config;
+ config.FieldNameMode = TJson2ProtoConfig::FieldNameCamelCase;
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
- UNIT_ASSERT(proto.GetOneString() == "value");
- }
- {
- TString modelStr(R"_({"oneTwoString":"value"})_");
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
+ UNIT_ASSERT(proto.GetOneString() == "value");
+ }
+ {
+ TString modelStr(R"_({"oneTwoString":"value"})_");
- TFlatOptional proto;
- TJson2ProtoConfig config;
- config.FieldNameMode = TJson2ProtoConfig::FieldNameCamelCase;
+ TFlatOptional proto;
+ TJson2ProtoConfig config;
+ config.FieldNameMode = TJson2ProtoConfig::FieldNameCamelCase;
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
- UNIT_ASSERT(proto.GetOneTwoString() == "value");
- }
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
+ UNIT_ASSERT(proto.GetOneTwoString() == "value");
+ }
// snake_case
{
@@ -430,95 +430,95 @@ Y_UNIT_TEST(TestFieldNameMode) {
UNIT_ASSERT(proto.GetOneTwoString() == "value");
}
- // Original case, repeated
- {
- TString modelStr(R"_({"I32":[1,2]})_");
-
- TFlatRepeated proto;
- TJson2ProtoConfig config;
- config.FieldNameMode = TJson2ProtoConfig::FieldNameOriginalCase;
-
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatRepeated>(modelStr, config));
- UNIT_ASSERT(proto.I32Size() == 2);
- UNIT_ASSERT(proto.GetI32(0) == 1);
- UNIT_ASSERT(proto.GetI32(1) == 2);
- }
-
- // Lower case, repeated
- {
- TString modelStr(R"_({"i32":[1,2]})_");
-
- TFlatRepeated proto;
- TJson2ProtoConfig config;
- config.FieldNameMode = TJson2ProtoConfig::FieldNameLowerCase;
-
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatRepeated>(modelStr, config));
- UNIT_ASSERT(proto.I32Size() == 2);
- UNIT_ASSERT(proto.GetI32(0) == 1);
- UNIT_ASSERT(proto.GetI32(1) == 2);
- }
-
- // UseJsonName
- {
- // FIXME(CONTRIB-139): since protobuf 3.1, Def_upper json name is
- // "DefUpper", but until kernel/ugc/schema and yweb/yasap/pdb are
+ // Original case, repeated
+ {
+ TString modelStr(R"_({"I32":[1,2]})_");
+
+ TFlatRepeated proto;
+ TJson2ProtoConfig config;
+ config.FieldNameMode = TJson2ProtoConfig::FieldNameOriginalCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatRepeated>(modelStr, config));
+ UNIT_ASSERT(proto.I32Size() == 2);
+ UNIT_ASSERT(proto.GetI32(0) == 1);
+ UNIT_ASSERT(proto.GetI32(1) == 2);
+ }
+
+ // Lower case, repeated
+ {
+ TString modelStr(R"_({"i32":[1,2]})_");
+
+ TFlatRepeated proto;
+ TJson2ProtoConfig config;
+ config.FieldNameMode = TJson2ProtoConfig::FieldNameLowerCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatRepeated>(modelStr, config));
+ UNIT_ASSERT(proto.I32Size() == 2);
+ UNIT_ASSERT(proto.GetI32(0) == 1);
+ UNIT_ASSERT(proto.GetI32(1) == 2);
+ }
+
+ // UseJsonName
+ {
+ // FIXME(CONTRIB-139): since protobuf 3.1, Def_upper json name is
+ // "DefUpper", but until kernel/ugc/schema and yweb/yasap/pdb are
// updated, library/cpp/protobuf/json preserves compatibility with
- // protobuf 3.0 by lowercasing default names, making it "defUpper".
- TString modelStr(R"_({"My-Upper":1,"my-lower":2,"defUpper":3,"defLower":4})_");
-
- TWithJsonName proto;
- TJson2ProtoConfig config;
- config.SetUseJsonName(true);
-
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TWithJsonName>(modelStr, config));
- UNIT_ASSERT_EQUAL(proto.Getmy_upper(), 1);
- UNIT_ASSERT_EQUAL(proto.GetMy_lower(), 2);
- UNIT_ASSERT_EQUAL(proto.GetDef_upper(), 3);
- UNIT_ASSERT_EQUAL(proto.Getdef_lower(), 4);
- }
-
- // FieldNameMode with UseJsonName
- {
- TJson2ProtoConfig config;
- config.SetFieldNameMode(TJson2ProtoConfig::FieldNameLowerCase);
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- config.SetUseJsonName(true), yexception, "mutually exclusive");
- }
- {
- TJson2ProtoConfig config;
- config.SetUseJsonName(true);
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- config.SetFieldNameMode(TJson2ProtoConfig::FieldNameLowerCase), yexception, "mutually exclusive");
- }
-} // TestFieldNameMode
-
-class TStringTransform: public IStringTransform {
-public:
- int GetType() const override {
- return 0;
+ // protobuf 3.0 by lowercasing default names, making it "defUpper".
+ TString modelStr(R"_({"My-Upper":1,"my-lower":2,"defUpper":3,"defLower":4})_");
+
+ TWithJsonName proto;
+ TJson2ProtoConfig config;
+ config.SetUseJsonName(true);
+
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TWithJsonName>(modelStr, config));
+ UNIT_ASSERT_EQUAL(proto.Getmy_upper(), 1);
+ UNIT_ASSERT_EQUAL(proto.GetMy_lower(), 2);
+ UNIT_ASSERT_EQUAL(proto.GetDef_upper(), 3);
+ UNIT_ASSERT_EQUAL(proto.Getdef_lower(), 4);
+ }
+
+ // FieldNameMode with UseJsonName
+ {
+ TJson2ProtoConfig config;
+ config.SetFieldNameMode(TJson2ProtoConfig::FieldNameLowerCase);
+ UNIT_ASSERT_EXCEPTION_CONTAINS(
+ config.SetUseJsonName(true), yexception, "mutually exclusive");
+ }
+ {
+ TJson2ProtoConfig config;
+ config.SetUseJsonName(true);
+ UNIT_ASSERT_EXCEPTION_CONTAINS(
+ config.SetFieldNameMode(TJson2ProtoConfig::FieldNameLowerCase), yexception, "mutually exclusive");
+ }
+} // TestFieldNameMode
+
+class TStringTransform: public IStringTransform {
+public:
+ int GetType() const override {
+ return 0;
+ }
+ void Transform(TString& str) const override {
+ str = "transformed_any";
+ }
+};
+
+class TBytesTransform: public IStringTransform {
+public:
+ int GetType() const override {
+ return 0;
}
- void Transform(TString& str) const override {
- str = "transformed_any";
- }
-};
-
-class TBytesTransform: public IStringTransform {
-public:
- int GetType() const override {
- return 0;
- }
- void Transform(TString&) const override {
- }
- void TransformBytes(TString& str) const override {
- str = "transformed_bytes";
- }
-};
+ void Transform(TString&) const override {
+ }
+ void TransformBytes(TString& str) const override {
+ str = "transformed_bytes";
+ }
+};
Y_UNIT_TEST(TestInvalidJson) {
- NJson::TJsonValue val{"bad value"};
- TFlatOptional proto;
- UNIT_ASSERT_EXCEPTION(Json2Proto(val, proto), yexception);
-}
+ NJson::TJsonValue val{"bad value"};
+ TFlatOptional proto;
+ UNIT_ASSERT_EXCEPTION(Json2Proto(val, proto), yexception);
+}
Y_UNIT_TEST(TestInvalidRepeatedFieldWithMapAsObject) {
TCompositeRepeated proto;
@@ -528,149 +528,149 @@ Y_UNIT_TEST(TestInvalidRepeatedFieldWithMapAsObject) {
}
Y_UNIT_TEST(TestStringTransforms) {
- // Check that strings and bytes are transformed
- {
- TString modelStr(R"_({"String":"value_str", "Bytes": "value_bytes"})_");
-
- TFlatOptional proto;
- TJson2ProtoConfig config;
- config.AddStringTransform(new TStringTransform);
-
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
- UNIT_ASSERT(proto.GetString() == "transformed_any");
- UNIT_ASSERT(proto.GetBytes() == "transformed_any");
- }
-
- // Check that bytes are transformed, strings are left intact
- {
- TString modelStr(R"_({"String":"value_str", "Bytes": "value_bytes"})_");
-
- TFlatOptional proto;
- TJson2ProtoConfig config;
- config.AddStringTransform(new TBytesTransform);
-
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
- UNIT_ASSERT(proto.GetString() == "value_str");
- UNIT_ASSERT(proto.GetBytes() == "transformed_bytes");
- }
-
- // Check that repeated bytes are transformed, repeated strings are left intact
- {
- TString modelStr(R"_({"String":["value_str", "str2"], "Bytes": ["value_bytes", "bytes2"]})_");
-
- TFlatRepeated proto;
- TJson2ProtoConfig config;
- config.AddStringTransform(new TBytesTransform);
-
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatRepeated>(modelStr, config));
- UNIT_ASSERT(proto.StringSize() == 2);
- UNIT_ASSERT(proto.GetString(0) == "value_str");
- UNIT_ASSERT(proto.GetString(1) == "str2");
- UNIT_ASSERT(proto.BytesSize() == 2);
- UNIT_ASSERT(proto.GetBytes(0) == "transformed_bytes");
- UNIT_ASSERT(proto.GetBytes(1) == "transformed_bytes");
- }
-
- // Check that bytes are transformed, strings are left intact in composed messages
- {
- TString modelStr(R"_({"Part": {"String":"value_str", "Bytes": "value_bytes"}})_");
-
- TCompositeOptional proto;
- TJson2ProtoConfig config;
- config.AddStringTransform(new TBytesTransform);
-
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TCompositeOptional>(modelStr, config));
- UNIT_ASSERT(proto.GetPart().GetString() == "value_str");
- UNIT_ASSERT(proto.GetPart().GetBytes() == "transformed_bytes");
- }
-} // TestStringTransforms
-
+ // Check that strings and bytes are transformed
+ {
+ TString modelStr(R"_({"String":"value_str", "Bytes": "value_bytes"})_");
+
+ TFlatOptional proto;
+ TJson2ProtoConfig config;
+ config.AddStringTransform(new TStringTransform);
+
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
+ UNIT_ASSERT(proto.GetString() == "transformed_any");
+ UNIT_ASSERT(proto.GetBytes() == "transformed_any");
+ }
+
+ // Check that bytes are transformed, strings are left intact
+ {
+ TString modelStr(R"_({"String":"value_str", "Bytes": "value_bytes"})_");
+
+ TFlatOptional proto;
+ TJson2ProtoConfig config;
+ config.AddStringTransform(new TBytesTransform);
+
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatOptional>(modelStr, config));
+ UNIT_ASSERT(proto.GetString() == "value_str");
+ UNIT_ASSERT(proto.GetBytes() == "transformed_bytes");
+ }
+
+ // Check that repeated bytes are transformed, repeated strings are left intact
+ {
+ TString modelStr(R"_({"String":["value_str", "str2"], "Bytes": ["value_bytes", "bytes2"]})_");
+
+ TFlatRepeated proto;
+ TJson2ProtoConfig config;
+ config.AddStringTransform(new TBytesTransform);
+
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TFlatRepeated>(modelStr, config));
+ UNIT_ASSERT(proto.StringSize() == 2);
+ UNIT_ASSERT(proto.GetString(0) == "value_str");
+ UNIT_ASSERT(proto.GetString(1) == "str2");
+ UNIT_ASSERT(proto.BytesSize() == 2);
+ UNIT_ASSERT(proto.GetBytes(0) == "transformed_bytes");
+ UNIT_ASSERT(proto.GetBytes(1) == "transformed_bytes");
+ }
+
+ // Check that bytes are transformed, strings are left intact in composed messages
+ {
+ TString modelStr(R"_({"Part": {"String":"value_str", "Bytes": "value_bytes"}})_");
+
+ TCompositeOptional proto;
+ TJson2ProtoConfig config;
+ config.AddStringTransform(new TBytesTransform);
+
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TCompositeOptional>(modelStr, config));
+ UNIT_ASSERT(proto.GetPart().GetString() == "value_str");
+ UNIT_ASSERT(proto.GetPart().GetBytes() == "transformed_bytes");
+ }
+} // TestStringTransforms
+
Y_UNIT_TEST(TestCastFromString) {
- // single fields
- {
- NJson::TJsonValue json;
+ // single fields
+ {
+ NJson::TJsonValue json;
#define DEFINE_FIELD(name, value) \
- json.InsertValue(#name, ConvertToString(value));
+ json.InsertValue(#name, ConvertToString(value));
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
- TFlatOptional proto;
- UNIT_ASSERT_EXCEPTION_CONTAINS(Json2Proto(json, proto), yexception, "Invalid type");
-
- TJson2ProtoConfig config;
- config.SetCastFromString(true);
- Json2Proto(json, proto, config);
-
- TFlatOptional modelProto;
- FillFlatProto(&modelProto);
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
- }
-
- // repeated fields
- {
- NJson::TJsonValue json;
-#define DEFINE_REPEATED_FIELD(name, type, ...) \
- { \
- type values[] = {__VA_ARGS__}; \
- NJson::TJsonValue array(NJson::JSON_ARRAY); \
- for (size_t i = 0, end = Y_ARRAY_SIZE(values); i < end; ++i) { \
- array.AppendValue(ConvertToString(values[i])); \
- } \
- json.InsertValue(#name, array); \
- }
+ TFlatOptional proto;
+ UNIT_ASSERT_EXCEPTION_CONTAINS(Json2Proto(json, proto), yexception, "Invalid type");
+
+ TJson2ProtoConfig config;
+ config.SetCastFromString(true);
+ Json2Proto(json, proto, config);
+
+ TFlatOptional modelProto;
+ FillFlatProto(&modelProto);
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+ }
+
+ // repeated fields
+ {
+ NJson::TJsonValue json;
+#define DEFINE_REPEATED_FIELD(name, type, ...) \
+ { \
+ type values[] = {__VA_ARGS__}; \
+ NJson::TJsonValue array(NJson::JSON_ARRAY); \
+ for (size_t i = 0, end = Y_ARRAY_SIZE(values); i < end; ++i) { \
+ array.AppendValue(ConvertToString(values[i])); \
+ } \
+ json.InsertValue(#name, array); \
+ }
#include <library/cpp/protobuf/json/ut/repeated_fields.incl>
#undef DEFINE_REPEATED_FIELD
- TFlatRepeated proto;
- UNIT_ASSERT_EXCEPTION_CONTAINS(Json2Proto(json, proto), yexception, "Invalid type");
+ TFlatRepeated proto;
+ UNIT_ASSERT_EXCEPTION_CONTAINS(Json2Proto(json, proto), yexception, "Invalid type");
- TJson2ProtoConfig config;
- config.SetCastFromString(true);
- Json2Proto(json, proto, config);
+ TJson2ProtoConfig config;
+ config.SetCastFromString(true);
+ Json2Proto(json, proto, config);
- TFlatRepeated modelProto;
- FillRepeatedProto(&modelProto);
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
- }
-} // TestCastFromString
+ TFlatRepeated modelProto;
+ FillRepeatedProto(&modelProto);
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+ }
+} // TestCastFromString
Y_UNIT_TEST(TestMap) {
- TMapType modelProto;
+ TMapType modelProto;
- auto& items = *modelProto.MutableItems();
- items["key1"] = "value1";
- items["key2"] = "value2";
- items["key3"] = "value3";
+ auto& items = *modelProto.MutableItems();
+ items["key1"] = "value1";
+ items["key2"] = "value2";
+ items["key3"] = "value3";
- TString modelStr(R"_({"Items":[{"key":"key3","value":"value3"},{"key":"key2","value":"value2"},{"key":"key1","value":"value1"}]})_");
+ TString modelStr(R"_({"Items":[{"key":"key3","value":"value3"},{"key":"key2","value":"value2"},{"key":"key1","value":"value1"}]})_");
- TJson2ProtoConfig config;
- TMapType proto;
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TMapType>(modelStr, config));
+ TJson2ProtoConfig config;
+ TMapType proto;
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TMapType>(modelStr, config));
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
-} // TestMap
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+} // TestMap
Y_UNIT_TEST(TestCastRobust) {
- NJson::TJsonValue json;
- json["I32"] = "5";
- json["Bool"] = 1;
- json["String"] = 6;
- json["Double"] = 8;
- TFlatOptional proto;
- UNIT_ASSERT_EXCEPTION_CONTAINS(Json2Proto(json, proto), yexception, "Invalid type");
-
- TJson2ProtoConfig config;
- config.SetCastRobust(true);
- Json2Proto(json, proto, config);
-
- TFlatOptional expected;
- expected.SetI32(5);
- expected.SetBool(true);
- expected.SetString("6");
- expected.SetDouble(8);
- UNIT_ASSERT_PROTOS_EQUAL(proto, expected);
-}
+ NJson::TJsonValue json;
+ json["I32"] = "5";
+ json["Bool"] = 1;
+ json["String"] = 6;
+ json["Double"] = 8;
+ TFlatOptional proto;
+ UNIT_ASSERT_EXCEPTION_CONTAINS(Json2Proto(json, proto), yexception, "Invalid type");
+
+ TJson2ProtoConfig config;
+ config.SetCastRobust(true);
+ Json2Proto(json, proto, config);
+
+ TFlatOptional expected;
+ expected.SetI32(5);
+ expected.SetBool(true);
+ expected.SetString("6");
+ expected.SetDouble(8);
+ UNIT_ASSERT_PROTOS_EQUAL(proto, expected);
+}
Y_UNIT_TEST(TestVectorizeScalars) {
NJson::TJsonValue json;
@@ -742,165 +742,165 @@ Y_UNIT_TEST(TestValueVectorizer) {
}
Y_UNIT_TEST(TestMapAsObject) {
- TMapType modelProto;
+ TMapType modelProto;
- auto& items = *modelProto.MutableItems();
- items["key1"] = "value1";
- items["key2"] = "value2";
- items["key3"] = "value3";
+ auto& items = *modelProto.MutableItems();
+ items["key1"] = "value1";
+ items["key2"] = "value2";
+ items["key3"] = "value3";
- TString modelStr(R"_({"Items":{"key1":"value1","key2":"value2","key3":"value3"}})_");
+ TString modelStr(R"_({"Items":{"key1":"value1","key2":"value2","key3":"value3"}})_");
- TJson2ProtoConfig config;
- config.MapAsObject = true;
- TMapType proto;
- UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TMapType>(modelStr, config));
+ TJson2ProtoConfig config;
+ config.MapAsObject = true;
+ TMapType proto;
+ UNIT_ASSERT_NO_EXCEPTION(proto = Json2Proto<TMapType>(modelStr, config));
- UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
-} // TestMapAsObject
+ UNIT_ASSERT_PROTOS_EQUAL(proto, modelProto);
+} // TestMapAsObject
Y_UNIT_TEST(TestComplexMapAsObject_I32) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableI32();
- items[1] = 1;
- items[-2] = -2;
- items[3] = 3;
- },
- R"_({"I32":{"1":1,"-2":-2,"3":3}})_");
-} // TestComplexMapAsObject_I32
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableI32();
+ items[1] = 1;
+ items[-2] = -2;
+ items[3] = 3;
+ },
+ R"_({"I32":{"1":1,"-2":-2,"3":3}})_");
+} // TestComplexMapAsObject_I32
Y_UNIT_TEST(TestComplexMapAsObject_I64) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableI64();
- items[2147483649L] = 2147483649L;
- items[-2147483650L] = -2147483650L;
- items[2147483651L] = 2147483651L;
- },
- R"_({"I64":{"2147483649":2147483649,"-2147483650":-2147483650,"2147483651":2147483651}})_");
-} // TestComplexMapAsObject_I64
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableI64();
+ items[2147483649L] = 2147483649L;
+ items[-2147483650L] = -2147483650L;
+ items[2147483651L] = 2147483651L;
+ },
+ R"_({"I64":{"2147483649":2147483649,"-2147483650":-2147483650,"2147483651":2147483651}})_");
+} // TestComplexMapAsObject_I64
Y_UNIT_TEST(TestComplexMapAsObject_UI32) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableUI32();
- items[1073741825U] = 1073741825U;
- items[1073741826U] = 1073741826U;
- items[1073741827U] = 1073741827U;
- },
- R"_({"UI32":{"1073741825":1073741825,"1073741826":1073741826,"1073741827":1073741827}})_");
-} // TestComplexMapAsObject_UI32
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableUI32();
+ items[1073741825U] = 1073741825U;
+ items[1073741826U] = 1073741826U;
+ items[1073741827U] = 1073741827U;
+ },
+ R"_({"UI32":{"1073741825":1073741825,"1073741826":1073741826,"1073741827":1073741827}})_");
+} // TestComplexMapAsObject_UI32
Y_UNIT_TEST(TestComplexMapAsObject_UI64) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableUI64();
- items[9223372036854775809UL] = 9223372036854775809UL;
- items[9223372036854775810UL] = 9223372036854775810UL;
- items[9223372036854775811UL] = 9223372036854775811UL;
- },
- R"_({"UI64":{"9223372036854775809":9223372036854775809,"9223372036854775810":9223372036854775810,"9223372036854775811":9223372036854775811}})_");
-} // TestComplexMapAsObject_UI64
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableUI64();
+ items[9223372036854775809UL] = 9223372036854775809UL;
+ items[9223372036854775810UL] = 9223372036854775810UL;
+ items[9223372036854775811UL] = 9223372036854775811UL;
+ },
+ R"_({"UI64":{"9223372036854775809":9223372036854775809,"9223372036854775810":9223372036854775810,"9223372036854775811":9223372036854775811}})_");
+} // TestComplexMapAsObject_UI64
Y_UNIT_TEST(TestComplexMapAsObject_SI32) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableSI32();
- items[1] = 1;
- items[-2] = -2;
- items[3] = 3;
- },
- R"_({"SI32":{"1":1,"-2":-2,"3":3}})_");
-} // TestComplexMapAsObject_SI32
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableSI32();
+ items[1] = 1;
+ items[-2] = -2;
+ items[3] = 3;
+ },
+ R"_({"SI32":{"1":1,"-2":-2,"3":3}})_");
+} // TestComplexMapAsObject_SI32
Y_UNIT_TEST(TestComplexMapAsObject_SI64) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableSI64();
- items[2147483649L] = 2147483649L;
- items[-2147483650L] = -2147483650L;
- items[2147483651L] = 2147483651L;
- },
- R"_({"SI64":{"2147483649":2147483649,"-2147483650":-2147483650,"2147483651":2147483651}})_");
-} // TestComplexMapAsObject_SI64
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableSI64();
+ items[2147483649L] = 2147483649L;
+ items[-2147483650L] = -2147483650L;
+ items[2147483651L] = 2147483651L;
+ },
+ R"_({"SI64":{"2147483649":2147483649,"-2147483650":-2147483650,"2147483651":2147483651}})_");
+} // TestComplexMapAsObject_SI64
Y_UNIT_TEST(TestComplexMapAsObject_FI32) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableFI32();
- items[1073741825U] = 1073741825U;
- items[1073741826U] = 1073741826U;
- items[1073741827U] = 1073741827U;
- },
- R"_({"FI32":{"1073741825":1073741825,"1073741826":1073741826,"1073741827":1073741827}})_");
-} // TestComplexMapAsObject_FI32
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableFI32();
+ items[1073741825U] = 1073741825U;
+ items[1073741826U] = 1073741826U;
+ items[1073741827U] = 1073741827U;
+ },
+ R"_({"FI32":{"1073741825":1073741825,"1073741826":1073741826,"1073741827":1073741827}})_");
+} // TestComplexMapAsObject_FI32
Y_UNIT_TEST(TestComplexMapAsObject_FI64) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableFI64();
- items[9223372036854775809UL] = 9223372036854775809UL;
- items[9223372036854775810UL] = 9223372036854775810UL;
- items[9223372036854775811UL] = 9223372036854775811UL;
- },
- R"_({"FI64":{"9223372036854775809":9223372036854775809,"9223372036854775810":9223372036854775810,"9223372036854775811":9223372036854775811}})_");
-} // TestComplexMapAsObject_FI64
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableFI64();
+ items[9223372036854775809UL] = 9223372036854775809UL;
+ items[9223372036854775810UL] = 9223372036854775810UL;
+ items[9223372036854775811UL] = 9223372036854775811UL;
+ },
+ R"_({"FI64":{"9223372036854775809":9223372036854775809,"9223372036854775810":9223372036854775810,"9223372036854775811":9223372036854775811}})_");
+} // TestComplexMapAsObject_FI64
Y_UNIT_TEST(TestComplexMapAsObject_SFI32) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableSFI32();
- items[1] = 1;
- items[-2] = -2;
- items[3] = 3;
- },
- R"_({"SFI32":{"1":1,"-2":-2,"3":3}})_");
-} // TestComplexMapAsObject_SFI32
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableSFI32();
+ items[1] = 1;
+ items[-2] = -2;
+ items[3] = 3;
+ },
+ R"_({"SFI32":{"1":1,"-2":-2,"3":3}})_");
+} // TestComplexMapAsObject_SFI32
Y_UNIT_TEST(TestComplexMapAsObject_SFI64) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableSFI64();
- items[2147483649L] = 2147483649L;
- items[-2147483650L] = -2147483650L;
- items[2147483651L] = 2147483651L;
- },
- R"_({"SFI64":{"2147483649":2147483649,"-2147483650":-2147483650,"2147483651":2147483651}})_");
-} // TestComplexMapAsObject_SFI64
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableSFI64();
+ items[2147483649L] = 2147483649L;
+ items[-2147483650L] = -2147483650L;
+ items[2147483651L] = 2147483651L;
+ },
+ R"_({"SFI64":{"2147483649":2147483649,"-2147483650":-2147483650,"2147483651":2147483651}})_");
+} // TestComplexMapAsObject_SFI64
Y_UNIT_TEST(TestComplexMapAsObject_Bool) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableBool();
- items[true] = true;
- items[false] = false;
- },
- R"_({"Bool":{"true":true,"false":false}})_");
-} // TestComplexMapAsObject_Bool
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableBool();
+ items[true] = true;
+ items[false] = false;
+ },
+ R"_({"Bool":{"true":true,"false":false}})_");
+} // TestComplexMapAsObject_Bool
Y_UNIT_TEST(TestComplexMapAsObject_String) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableString();
- items["key1"] = "value1";
- items["key2"] = "value2";
- items["key3"] = "value3";
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableString();
+ items["key1"] = "value1";
+ items["key2"] = "value2";
+ items["key3"] = "value3";
items[""] = "value4";
- },
+ },
R"_({"String":{"key1":"value1","key2":"value2","key3":"value3","":"value4"}})_");
-} // TestComplexMapAsObject_String
+} // TestComplexMapAsObject_String
Y_UNIT_TEST(TestComplexMapAsObject_Enum) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableEnum();
- items["key1"] = EEnum::E_1;
- items["key2"] = EEnum::E_2;
- items["key3"] = EEnum::E_3;
- },
- R"_({"Enum":{"key1":1,"key2":2,"key3":3}})_");
-} // TestComplexMapAsObject_Enum
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableEnum();
+ items["key1"] = EEnum::E_1;
+ items["key2"] = EEnum::E_2;
+ items["key3"] = EEnum::E_3;
+ },
+ R"_({"Enum":{"key1":1,"key2":2,"key3":3}})_");
+} // TestComplexMapAsObject_Enum
Y_UNIT_TEST(TestComplexMapAsObject_EnumString) {
TestComplexMapAsObject(
@@ -944,49 +944,49 @@ Y_UNIT_TEST(TestComplexMapAsObject_EnumStringSnakeCaseInsensitive) {
} // TestComplexMapAsObject_EnumStringCaseInsensetive
Y_UNIT_TEST(TestComplexMapAsObject_Float) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableFloat();
- items["key1"] = 0.1f;
- items["key2"] = 0.2f;
- items["key3"] = 0.3f;
- },
- R"_({"Float":{"key1":0.1,"key2":0.2,"key3":0.3}})_");
-} // TestComplexMapAsObject_Float
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableFloat();
+ items["key1"] = 0.1f;
+ items["key2"] = 0.2f;
+ items["key3"] = 0.3f;
+ },
+ R"_({"Float":{"key1":0.1,"key2":0.2,"key3":0.3}})_");
+} // TestComplexMapAsObject_Float
Y_UNIT_TEST(TestComplexMapAsObject_Double) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- auto& items = *proto.MutableDouble();
- items["key1"] = 0.1L;
- items["key2"] = 0.2L;
- items["key3"] = 0.3L;
- },
- R"_({"Double":{"key1":0.1,"key2":0.2,"key3":0.3}})_");
-} // TestComplexMapAsObject_Double
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ auto& items = *proto.MutableDouble();
+ items["key1"] = 0.1L;
+ items["key2"] = 0.2L;
+ items["key3"] = 0.3L;
+ },
+ R"_({"Double":{"key1":0.1,"key2":0.2,"key3":0.3}})_");
+} // TestComplexMapAsObject_Double
Y_UNIT_TEST(TestComplexMapAsObject_Nested) {
- TestComplexMapAsObject(
- [](TComplexMapType& proto) {
- TComplexMapType inner;
- auto& innerItems = *inner.MutableString();
- innerItems["key"] = "value";
- auto& items = *proto.MutableNested();
- items["key1"] = inner;
- items["key2"] = inner;
- items["key3"] = inner;
- },
- R"_({"Nested":{"key1":{"String":{"key":"value"}},"key2":{"String":{"key":"value"}},"key3":{"String":{"key":"value"}}}})_");
-} // TestComplexMapAsObject_Nested
+ TestComplexMapAsObject(
+ [](TComplexMapType& proto) {
+ TComplexMapType inner;
+ auto& innerItems = *inner.MutableString();
+ innerItems["key"] = "value";
+ auto& items = *proto.MutableNested();
+ items["key1"] = inner;
+ items["key2"] = inner;
+ items["key3"] = inner;
+ },
+ R"_({"Nested":{"key1":{"String":{"key":"value"}},"key2":{"String":{"key":"value"}},"key3":{"String":{"key":"value"}}}})_");
+} // TestComplexMapAsObject_Nested
Y_UNIT_TEST(TestMapAsObjectConfigNotSet) {
- TString modelStr(R"_({"Items":{"key":"value"}})_");
+ TString modelStr(R"_({"Items":{"key":"value"}})_");
- TJson2ProtoConfig config;
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- Json2Proto<TMapType>(modelStr, config), yexception,
+ TJson2ProtoConfig config;
+ UNIT_ASSERT_EXCEPTION_CONTAINS(
+ Json2Proto<TMapType>(modelStr, config), yexception,
"Map as object representation is not allowed");
-} // TestMapAsObjectNotSet
+} // TestMapAsObjectNotSet
Y_UNIT_TEST(TestMergeFlatOptional) {
const NJson::TJsonValue& json = CreateFlatJson();
diff --git a/library/cpp/protobuf/json/ut/proto.h b/library/cpp/protobuf/json/ut/proto.h
index 8183bfc8e1..b9dec411bd 100644
--- a/library/cpp/protobuf/json/ut/proto.h
+++ b/library/cpp/protobuf/json/ut/proto.h
@@ -6,57 +6,57 @@
#include <util/system/defaults.h>
namespace NProtobufJsonTest {
- template <typename TProto>
- inline void
- FillFlatProto(TProto* proto,
- const THashSet<TString>& skippedFields = THashSet<TString>()) {
-#define DEFINE_FIELD(name, value) \
- if (skippedFields.find(#name) == skippedFields.end()) \
- proto->Set##name(value);
+ template <typename TProto>
+ inline void
+ FillFlatProto(TProto* proto,
+ const THashSet<TString>& skippedFields = THashSet<TString>()) {
+#define DEFINE_FIELD(name, value) \
+ if (skippedFields.find(#name) == skippedFields.end()) \
+ proto->Set##name(value);
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
- }
-
- template <typename TRepeatedField, typename TValue>
- inline void
- AddValue(TRepeatedField* field, TValue value) {
- field->Add(value);
- }
-
- inline void
- AddValue(google::protobuf::RepeatedPtrField<TString>* field, const TString& value) {
- *(field->Add()) = value;
- }
-
- inline void
- FillRepeatedProto(TFlatRepeated* proto,
- const THashSet<TString>& skippedFields = THashSet<TString>()) {
-#define DEFINE_REPEATED_FIELD(name, type, ...) \
- if (skippedFields.find(#name) == skippedFields.end()) { \
- type values[] = {__VA_ARGS__}; \
- for (size_t i = 0, end = Y_ARRAY_SIZE(values); i < end; ++i) { \
- AddValue(proto->Mutable##name(), values[i]); \
- } \
+ }
+
+ template <typename TRepeatedField, typename TValue>
+ inline void
+ AddValue(TRepeatedField* field, TValue value) {
+ field->Add(value);
+ }
+
+ inline void
+ AddValue(google::protobuf::RepeatedPtrField<TString>* field, const TString& value) {
+ *(field->Add()) = value;
+ }
+
+ inline void
+ FillRepeatedProto(TFlatRepeated* proto,
+ const THashSet<TString>& skippedFields = THashSet<TString>()) {
+#define DEFINE_REPEATED_FIELD(name, type, ...) \
+ if (skippedFields.find(#name) == skippedFields.end()) { \
+ type values[] = {__VA_ARGS__}; \
+ for (size_t i = 0, end = Y_ARRAY_SIZE(values); i < end; ++i) { \
+ AddValue(proto->Mutable##name(), values[i]); \
+ } \
}
#include <library/cpp/protobuf/json/ut/repeated_fields.incl>
#undef DEFINE_REPEATED_FIELD
- }
-
- template <typename TProto>
- inline void
- FillCompositeProto(TProto* proto, const THashSet<TString>& skippedFields = THashSet<TString>()) {
- FillFlatProto(proto->MutablePart(), skippedFields);
- }
-
-#define UNIT_ASSERT_PROTOS_EQUAL(lhs, rhs) \
- do { \
- if (lhs.SerializeAsString() != rhs.SerializeAsString()) { \
- Cerr << ">>>>>>>>>> lhs != rhs:" << Endl; \
- Cerr << lhs.DebugString() << Endl; \
- Cerr << rhs.DebugString() << Endl; \
- UNIT_ASSERT_STRINGS_EQUAL(lhs.DebugString(), rhs.DebugString()); \
+ }
+
+ template <typename TProto>
+ inline void
+ FillCompositeProto(TProto* proto, const THashSet<TString>& skippedFields = THashSet<TString>()) {
+ FillFlatProto(proto->MutablePart(), skippedFields);
+ }
+
+#define UNIT_ASSERT_PROTOS_EQUAL(lhs, rhs) \
+ do { \
+ if (lhs.SerializeAsString() != rhs.SerializeAsString()) { \
+ Cerr << ">>>>>>>>>> lhs != rhs:" << Endl; \
+ Cerr << lhs.DebugString() << Endl; \
+ Cerr << rhs.DebugString() << Endl; \
+ UNIT_ASSERT_STRINGS_EQUAL(lhs.DebugString(), rhs.DebugString()); \
UNIT_ASSERT_STRINGS_EQUAL(lhs.SerializeAsString(), rhs.SerializeAsString()); \
- } \
+ } \
} while (false);
-}
+}
diff --git a/library/cpp/protobuf/json/ut/proto2json_ut.cpp b/library/cpp/protobuf/json/ut/proto2json_ut.cpp
index 07e52d7f2f..124ac163cd 100644
--- a/library/cpp/protobuf/json/ut/proto2json_ut.cpp
+++ b/library/cpp/protobuf/json/ut/proto2json_ut.cpp
@@ -33,43 +33,43 @@ Y_UNIT_TEST_SUITE(TProto2JsonFlatTest) {
TProto2JsonConfig cfg;
cfg.SetMissingSingleKeyMode(TProto2JsonConfig::MissingKeyDefault);
UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, cfg));
-#define DEFINE_FIELD(name, value) \
- { \
- auto descr = proto.GetMetadata().descriptor->FindFieldByName(#name); \
- UNIT_ASSERT(descr); \
- UNIT_ASSERT(json.Has(#name)); \
- switch (descr->cpp_type()) { \
- case FieldDescriptor::CPPTYPE_INT32: \
- UNIT_ASSERT(descr->default_value_int32() == json[#name].GetIntegerRobust()); \
- break; \
- case FieldDescriptor::CPPTYPE_INT64: \
- UNIT_ASSERT(descr->default_value_int64() == json[#name].GetIntegerRobust()); \
- break; \
- case FieldDescriptor::CPPTYPE_UINT32: \
- UNIT_ASSERT(descr->default_value_uint32() == json[#name].GetUIntegerRobust()); \
- break; \
- case FieldDescriptor::CPPTYPE_UINT64: \
- UNIT_ASSERT(descr->default_value_uint32() == json[#name].GetUIntegerRobust()); \
- break; \
- case FieldDescriptor::CPPTYPE_DOUBLE: \
- UNIT_ASSERT(descr->default_value_double() == json[#name].GetDoubleRobust()); \
- break; \
- case FieldDescriptor::CPPTYPE_FLOAT: \
- UNIT_ASSERT(descr->default_value_float() == json[#name].GetDoubleRobust()); \
- break; \
- case FieldDescriptor::CPPTYPE_BOOL: \
- UNIT_ASSERT(descr->default_value_bool() == json[#name].GetBooleanRobust()); \
- break; \
- case FieldDescriptor::CPPTYPE_ENUM: \
- UNIT_ASSERT(descr->default_value_enum()->number() == json[#name].GetIntegerRobust()); \
- break; \
- case FieldDescriptor::CPPTYPE_STRING: \
- UNIT_ASSERT(descr->default_value_string() == json[#name].GetStringRobust()); \
- break; \
- default: \
- break; \
- } \
- }
+#define DEFINE_FIELD(name, value) \
+ { \
+ auto descr = proto.GetMetadata().descriptor->FindFieldByName(#name); \
+ UNIT_ASSERT(descr); \
+ UNIT_ASSERT(json.Has(#name)); \
+ switch (descr->cpp_type()) { \
+ case FieldDescriptor::CPPTYPE_INT32: \
+ UNIT_ASSERT(descr->default_value_int32() == json[#name].GetIntegerRobust()); \
+ break; \
+ case FieldDescriptor::CPPTYPE_INT64: \
+ UNIT_ASSERT(descr->default_value_int64() == json[#name].GetIntegerRobust()); \
+ break; \
+ case FieldDescriptor::CPPTYPE_UINT32: \
+ UNIT_ASSERT(descr->default_value_uint32() == json[#name].GetUIntegerRobust()); \
+ break; \
+ case FieldDescriptor::CPPTYPE_UINT64: \
+ UNIT_ASSERT(descr->default_value_uint32() == json[#name].GetUIntegerRobust()); \
+ break; \
+ case FieldDescriptor::CPPTYPE_DOUBLE: \
+ UNIT_ASSERT(descr->default_value_double() == json[#name].GetDoubleRobust()); \
+ break; \
+ case FieldDescriptor::CPPTYPE_FLOAT: \
+ UNIT_ASSERT(descr->default_value_float() == json[#name].GetDoubleRobust()); \
+ break; \
+ case FieldDescriptor::CPPTYPE_BOOL: \
+ UNIT_ASSERT(descr->default_value_bool() == json[#name].GetBooleanRobust()); \
+ break; \
+ case FieldDescriptor::CPPTYPE_ENUM: \
+ UNIT_ASSERT(descr->default_value_enum()->number() == json[#name].GetIntegerRobust()); \
+ break; \
+ case FieldDescriptor::CPPTYPE_STRING: \
+ UNIT_ASSERT(descr->default_value_string() == json[#name].GetStringRobust()); \
+ break; \
+ default: \
+ break; \
+ } \
+ }
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
}
@@ -79,7 +79,7 @@ Y_UNIT_TEST_SUITE(TProto2JsonFlatTest) {
proto.SetField(42);
TProto2JsonConfig cfg;
- cfg.SetNameGenerator([](const NProtoBuf::FieldDescriptor&) { return "42"; });
+ cfg.SetNameGenerator([](const NProtoBuf::FieldDescriptor&) { return "42"; });
TStringStream str;
Proto2Json(proto, str, cfg);
@@ -92,7 +92,7 @@ Y_UNIT_TEST_SUITE(TProto2JsonFlatTest) {
proto.SetEnum(TEnumValueGeneratorType::ENUM_42);
TProto2JsonConfig cfg;
- cfg.SetEnumValueGenerator([](const NProtoBuf::EnumValueDescriptor&) { return "42"; });
+ cfg.SetEnumValueGenerator([](const NProtoBuf::EnumValueDescriptor&) { return "42"; });
TStringStream str;
Proto2Json(proto, str, cfg);
@@ -101,370 +101,370 @@ Y_UNIT_TEST_SUITE(TProto2JsonFlatTest) {
}
Y_UNIT_TEST(TestFlatOptional){
- {TFlatOptional proto;
- FillFlatProto(&proto);
- const NJson::TJsonValue& modelJson = CreateFlatJson();
- {
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- }
-
- {
- TStringStream jsonStream;
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- } // streamed
-}
-
- // Try to skip each field
-#define DEFINE_FIELD(name, value) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- TFlatOptional proto; \
- FillFlatProto(&proto, skippedField); \
- const NJson::TJsonValue& modelJson = CreateFlatJson(skippedField); \
- NJson::TJsonValue json; \
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json)); \
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
- { \
- TStringStream jsonStream; \
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream)); \
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json)); \
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
- } \
- }
+ {TFlatOptional proto;
+ FillFlatProto(&proto);
+ const NJson::TJsonValue& modelJson = CreateFlatJson();
+ {
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ }
+
+ {
+ TStringStream jsonStream;
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ } // streamed
+}
+
+ // Try to skip each field
+#define DEFINE_FIELD(name, value) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ TFlatOptional proto; \
+ FillFlatProto(&proto, skippedField); \
+ const NJson::TJsonValue& modelJson = CreateFlatJson(skippedField); \
+ NJson::TJsonValue json; \
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json)); \
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
+ { \
+ TStringStream jsonStream; \
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream)); \
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json)); \
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
+ } \
+ }
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
-} // TestFlatOptional
+} // TestFlatOptional
Y_UNIT_TEST(TestFlatRequired){
- {TFlatRequired proto;
-FillFlatProto(&proto);
-const NJson::TJsonValue& modelJson = CreateFlatJson();
-{
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
-}
-
-{
- TStringStream jsonStream;
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
-} // streamed
-}
-
-// Try to skip each field
-#define DEFINE_FIELD(name, value) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- TFlatRequired proto; \
- FillFlatProto(&proto, skippedField); \
- const NJson::TJsonValue& modelJson = CreateFlatJson(skippedField); \
- NJson::TJsonValue json; \
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json)); \
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
- { \
- TStringStream jsonStream; \
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream)); \
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json)); \
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
- } \
- }
+ {TFlatRequired proto;
+FillFlatProto(&proto);
+const NJson::TJsonValue& modelJson = CreateFlatJson();
+{
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+}
+
+{
+ TStringStream jsonStream;
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+} // streamed
+}
+
+// Try to skip each field
+#define DEFINE_FIELD(name, value) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ TFlatRequired proto; \
+ FillFlatProto(&proto, skippedField); \
+ const NJson::TJsonValue& modelJson = CreateFlatJson(skippedField); \
+ NJson::TJsonValue json; \
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json)); \
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
+ { \
+ TStringStream jsonStream; \
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream)); \
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json)); \
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
+ } \
+ }
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
-} // TestFlatRequired
+} // TestFlatRequired
Y_UNIT_TEST(TestFlatRepeated) {
- {
- TFlatRepeated proto;
- FillRepeatedProto(&proto);
- const NJson::TJsonValue& modelJson = CreateRepeatedFlatJson();
+ {
+ TFlatRepeated proto;
+ FillRepeatedProto(&proto);
+ const NJson::TJsonValue& modelJson = CreateRepeatedFlatJson();
{
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
}
- {
- TStringStream jsonStream;
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- } // streamed
- }
-
- TProto2JsonConfig config;
- config.SetMissingRepeatedKeyMode(TProto2JsonConfig::MissingKeySkip);
-
- // Try to skip each field
-#define DEFINE_REPEATED_FIELD(name, ...) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- TFlatRepeated proto; \
- FillRepeatedProto(&proto, skippedField); \
- const NJson::TJsonValue& modelJson = CreateRepeatedFlatJson(skippedField); \
- NJson::TJsonValue json; \
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config)); \
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
- { \
- TStringStream jsonStream; \
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream, config)); \
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json)); \
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
- } \
- }
+ {
+ TStringStream jsonStream;
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ } // streamed
+ }
+
+ TProto2JsonConfig config;
+ config.SetMissingRepeatedKeyMode(TProto2JsonConfig::MissingKeySkip);
+
+ // Try to skip each field
+#define DEFINE_REPEATED_FIELD(name, ...) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ TFlatRepeated proto; \
+ FillRepeatedProto(&proto, skippedField); \
+ const NJson::TJsonValue& modelJson = CreateRepeatedFlatJson(skippedField); \
+ NJson::TJsonValue json; \
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config)); \
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
+ { \
+ TStringStream jsonStream; \
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream, config)); \
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json)); \
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
+ } \
+ }
#include <library/cpp/protobuf/json/ut/repeated_fields.incl>
#undef DEFINE_REPEATED_FIELD
-} // TestFlatRepeated
+} // TestFlatRepeated
Y_UNIT_TEST(TestCompositeOptional){
- {TCompositeOptional proto;
-FillCompositeProto(&proto);
-const NJson::TJsonValue& modelJson = CreateCompositeJson();
-{
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
-}
-
-{
- TStringStream jsonStream;
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
-} // streamed
-}
-
-// Try to skip each field
-#define DEFINE_FIELD(name, value) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- TCompositeOptional proto; \
- FillCompositeProto(&proto, skippedField); \
- const NJson::TJsonValue& modelJson = CreateCompositeJson(skippedField); \
- NJson::TJsonValue json; \
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json)); \
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
- { \
- TStringStream jsonStream; \
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream)); \
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json)); \
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
- } \
- }
+ {TCompositeOptional proto;
+FillCompositeProto(&proto);
+const NJson::TJsonValue& modelJson = CreateCompositeJson();
+{
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+}
+
+{
+ TStringStream jsonStream;
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+} // streamed
+}
+
+// Try to skip each field
+#define DEFINE_FIELD(name, value) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ TCompositeOptional proto; \
+ FillCompositeProto(&proto, skippedField); \
+ const NJson::TJsonValue& modelJson = CreateCompositeJson(skippedField); \
+ NJson::TJsonValue json; \
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json)); \
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
+ { \
+ TStringStream jsonStream; \
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream)); \
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json)); \
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
+ } \
+ }
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
-} // TestCompositeOptional
+} // TestCompositeOptional
Y_UNIT_TEST(TestCompositeRequired){
- {TCompositeRequired proto;
-FillCompositeProto(&proto);
-const NJson::TJsonValue& modelJson = CreateCompositeJson();
-{
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
-}
-
-{
- TStringStream jsonStream;
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
-} // streamed
-}
-
-// Try to skip each field
-#define DEFINE_FIELD(name, value) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- TCompositeRequired proto; \
- FillCompositeProto(&proto, skippedField); \
- const NJson::TJsonValue& modelJson = CreateCompositeJson(skippedField); \
- NJson::TJsonValue json; \
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json)); \
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
- { \
- TStringStream jsonStream; \
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream)); \
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json)); \
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
- } \
- }
+ {TCompositeRequired proto;
+FillCompositeProto(&proto);
+const NJson::TJsonValue& modelJson = CreateCompositeJson();
+{
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+}
+
+{
+ TStringStream jsonStream;
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+} // streamed
+}
+
+// Try to skip each field
+#define DEFINE_FIELD(name, value) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ TCompositeRequired proto; \
+ FillCompositeProto(&proto, skippedField); \
+ const NJson::TJsonValue& modelJson = CreateCompositeJson(skippedField); \
+ NJson::TJsonValue json; \
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json)); \
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
+ { \
+ TStringStream jsonStream; \
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream)); \
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json)); \
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson); \
+ } \
+ }
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
-} // TestCompositeRequired
+} // TestCompositeRequired
Y_UNIT_TEST(TestCompositeRepeated) {
- {
- TFlatOptional partProto;
- FillFlatProto(&partProto);
- TCompositeRepeated proto;
- proto.AddPart()->CopyFrom(partProto);
-
- NJson::TJsonValue modelJson;
- NJson::TJsonValue modelArray;
- modelArray.AppendValue(CreateFlatJson());
- modelJson.InsertValue("Part", modelArray);
+ {
+ TFlatOptional partProto;
+ FillFlatProto(&partProto);
+ TCompositeRepeated proto;
+ proto.AddPart()->CopyFrom(partProto);
+
+ NJson::TJsonValue modelJson;
+ NJson::TJsonValue modelArray;
+ modelArray.AppendValue(CreateFlatJson());
+ modelJson.InsertValue("Part", modelArray);
{
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
}
{
- TStringStream jsonStream;
- NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- } // streamed
- }
-
- {
- // Array of messages with each field skipped
- TCompositeRepeated proto;
- NJson::TJsonValue modelArray;
-
-#define DEFINE_REPEATED_FIELD(name, ...) \
- { \
- THashSet<TString> skippedField; \
- skippedField.insert(#name); \
- TFlatOptional partProto; \
- FillFlatProto(&partProto, skippedField); \
- proto.AddPart()->CopyFrom(partProto); \
- modelArray.AppendValue(CreateFlatJson(skippedField)); \
- }
+ TStringStream jsonStream;
+ NJson::TJsonValue json;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ } // streamed
+ }
+
+ {
+ // Array of messages with each field skipped
+ TCompositeRepeated proto;
+ NJson::TJsonValue modelArray;
+
+#define DEFINE_REPEATED_FIELD(name, ...) \
+ { \
+ THashSet<TString> skippedField; \
+ skippedField.insert(#name); \
+ TFlatOptional partProto; \
+ FillFlatProto(&partProto, skippedField); \
+ proto.AddPart()->CopyFrom(partProto); \
+ modelArray.AppendValue(CreateFlatJson(skippedField)); \
+ }
#include <library/cpp/protobuf/json/ut/repeated_fields.incl>
#undef DEFINE_REPEATED_FIELD
- NJson::TJsonValue modelJson;
- modelJson.InsertValue("Part", modelArray);
+ NJson::TJsonValue modelJson;
+ modelJson.InsertValue("Part", modelArray);
{
NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
}
{
- TStringStream jsonStream;
+ TStringStream jsonStream;
NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
- UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStream));
+ UNIT_ASSERT(ReadJsonTree(&jsonStream, &json));
UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- } // streamed
- }
-} // TestCompositeRepeated
+ } // streamed
+ }
+} // TestCompositeRepeated
Y_UNIT_TEST(TestEnumConfig) {
- {
- TFlatOptional proto;
- proto.SetEnum(E_1);
- NJson::TJsonValue modelJson;
- modelJson.InsertValue("Enum", 1);
- NJson::TJsonValue json;
- TProto2JsonConfig config;
- config.EnumMode = TProto2JsonConfig::EnumNumber;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- }
-
- {
- TFlatOptional proto;
- proto.SetEnum(E_1);
- NJson::TJsonValue modelJson;
- modelJson.InsertValue("Enum", "E_1");
- NJson::TJsonValue json;
- TProto2JsonConfig config;
- config.EnumMode = TProto2JsonConfig::EnumName;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- }
-
- {
- TFlatOptional proto;
- proto.SetEnum(E_1);
- NJson::TJsonValue modelJson;
- modelJson.InsertValue("Enum", "NProtobufJsonTest.E_1");
- NJson::TJsonValue json;
- TProto2JsonConfig config;
- config.EnumMode = TProto2JsonConfig::EnumFullName;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- }
-
- {
- TFlatOptional proto;
- proto.SetEnum(E_1);
- NJson::TJsonValue modelJson;
- modelJson.InsertValue("Enum", "e_1");
- NJson::TJsonValue json;
- TProto2JsonConfig config;
- config.EnumMode = TProto2JsonConfig::EnumNameLowerCase;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- }
-
- {
- TFlatOptional proto;
- proto.SetEnum(E_1);
- NJson::TJsonValue modelJson;
- modelJson.InsertValue("Enum", "nprotobufjsontest.e_1");
- NJson::TJsonValue json;
- TProto2JsonConfig config;
- config.EnumMode = TProto2JsonConfig::EnumFullNameLowerCase;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- }
-} // TestEnumConfig
-
+ {
+ TFlatOptional proto;
+ proto.SetEnum(E_1);
+ NJson::TJsonValue modelJson;
+ modelJson.InsertValue("Enum", 1);
+ NJson::TJsonValue json;
+ TProto2JsonConfig config;
+ config.EnumMode = TProto2JsonConfig::EnumNumber;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ }
+
+ {
+ TFlatOptional proto;
+ proto.SetEnum(E_1);
+ NJson::TJsonValue modelJson;
+ modelJson.InsertValue("Enum", "E_1");
+ NJson::TJsonValue json;
+ TProto2JsonConfig config;
+ config.EnumMode = TProto2JsonConfig::EnumName;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ }
+
+ {
+ TFlatOptional proto;
+ proto.SetEnum(E_1);
+ NJson::TJsonValue modelJson;
+ modelJson.InsertValue("Enum", "NProtobufJsonTest.E_1");
+ NJson::TJsonValue json;
+ TProto2JsonConfig config;
+ config.EnumMode = TProto2JsonConfig::EnumFullName;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ }
+
+ {
+ TFlatOptional proto;
+ proto.SetEnum(E_1);
+ NJson::TJsonValue modelJson;
+ modelJson.InsertValue("Enum", "e_1");
+ NJson::TJsonValue json;
+ TProto2JsonConfig config;
+ config.EnumMode = TProto2JsonConfig::EnumNameLowerCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ }
+
+ {
+ TFlatOptional proto;
+ proto.SetEnum(E_1);
+ NJson::TJsonValue modelJson;
+ modelJson.InsertValue("Enum", "nprotobufjsontest.e_1");
+ NJson::TJsonValue json;
+ TProto2JsonConfig config;
+ config.EnumMode = TProto2JsonConfig::EnumFullNameLowerCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ }
+} // TestEnumConfig
+
Y_UNIT_TEST(TestMissingSingleKeyConfig) {
- {
- TFlatOptional proto;
- NJson::TJsonValue modelJson(NJson::JSON_MAP);
- NJson::TJsonValue json;
- TProto2JsonConfig config;
- config.MissingSingleKeyMode = TProto2JsonConfig::MissingKeySkip;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- }
-
- {
- NJson::TJsonValue modelJson;
-#define DEFINE_FIELD(name, value) \
- modelJson.InsertValue(#name, NJson::TJsonValue(NJson::JSON_NULL));
+ {
+ TFlatOptional proto;
+ NJson::TJsonValue modelJson(NJson::JSON_MAP);
+ NJson::TJsonValue json;
+ TProto2JsonConfig config;
+ config.MissingSingleKeyMode = TProto2JsonConfig::MissingKeySkip;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ }
+
+ {
+ NJson::TJsonValue modelJson;
+#define DEFINE_FIELD(name, value) \
+ modelJson.InsertValue(#name, NJson::TJsonValue(NJson::JSON_NULL));
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
- TFlatOptional proto;
- NJson::TJsonValue json;
- TProto2JsonConfig config;
- config.MissingSingleKeyMode = TProto2JsonConfig::MissingKeyNull;
+ TFlatOptional proto;
+ NJson::TJsonValue json;
+ TProto2JsonConfig config;
+ config.MissingSingleKeyMode = TProto2JsonConfig::MissingKeyNull;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- }
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ }
{
// Test MissingKeyExplicitDefaultThrowRequired for non explicit default values.
TFlatOptional proto;
@@ -511,46 +511,46 @@ Y_UNIT_TEST(TestMissingSingleKeyConfig) {
UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
}
-} // TestMissingSingleKeyConfig
+} // TestMissingSingleKeyConfig
Y_UNIT_TEST(TestMissingRepeatedKeyNoConfig) {
- {
- TFlatRepeated proto;
- NJson::TJsonValue modelJson(NJson::JSON_MAP);
- NJson::TJsonValue json;
+ {
+ TFlatRepeated proto;
+ NJson::TJsonValue modelJson(NJson::JSON_MAP);
+ NJson::TJsonValue json;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- }
-} // TestMissingRepeatedKeyNoConfig
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ }
+} // TestMissingRepeatedKeyNoConfig
Y_UNIT_TEST(TestMissingRepeatedKeyConfig) {
- {
- TFlatRepeated proto;
- NJson::TJsonValue modelJson(NJson::JSON_MAP);
- NJson::TJsonValue json;
- TProto2JsonConfig config;
- config.MissingRepeatedKeyMode = TProto2JsonConfig::MissingKeySkip;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- }
-
- {
- NJson::TJsonValue modelJson;
-#define DEFINE_FIELD(name, value) \
- modelJson.InsertValue(#name, NJson::TJsonValue(NJson::JSON_NULL));
+ {
+ TFlatRepeated proto;
+ NJson::TJsonValue modelJson(NJson::JSON_MAP);
+ NJson::TJsonValue json;
+ TProto2JsonConfig config;
+ config.MissingRepeatedKeyMode = TProto2JsonConfig::MissingKeySkip;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ }
+
+ {
+ NJson::TJsonValue modelJson;
+#define DEFINE_FIELD(name, value) \
+ modelJson.InsertValue(#name, NJson::TJsonValue(NJson::JSON_NULL));
#include <library/cpp/protobuf/json/ut/fields.incl>
#undef DEFINE_FIELD
- TFlatRepeated proto;
- NJson::TJsonValue json;
- TProto2JsonConfig config;
- config.MissingRepeatedKeyMode = TProto2JsonConfig::MissingKeyNull;
+ TFlatRepeated proto;
+ NJson::TJsonValue json;
+ TProto2JsonConfig config;
+ config.MissingRepeatedKeyMode = TProto2JsonConfig::MissingKeyNull;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
- UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
- }
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
+ UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
+ }
{
TFlatRepeated proto;
NJson::TJsonValue modelJson(NJson::JSON_MAP);
@@ -562,199 +562,199 @@ Y_UNIT_TEST(TestMissingRepeatedKeyConfig) {
UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, json, config));
UNIT_ASSERT_JSONS_EQUAL(json, modelJson);
}
-} // TestMissingRepeatedKeyConfig
+} // TestMissingRepeatedKeyConfig
Y_UNIT_TEST(TestEscaping) {
- // No escape
- {
- TString modelStr(R"_({"String":"value\""})_");
-
- TFlatOptional proto;
- proto.SetString(R"_(value")_");
- TStringStream jsonStr;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
-
- // TEscapeJTransform
- {
- TString modelStr(R"_({"String":"value\""})_");
-
- TFlatOptional proto;
- proto.SetString(R"_(value")_");
- TProto2JsonConfig config;
- config.StringTransforms.push_back(new TEscapeJTransform<false, true>());
- TStringStream jsonStr;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(modelStr, jsonStr.Str());
- }
-
- // TCEscapeTransform
- {
- TString modelStr(R"_({"String":"value\""})_");
-
- TFlatOptional proto;
- proto.SetString(R"_(value")_");
- TProto2JsonConfig config;
- config.StringTransforms.push_back(new TCEscapeTransform());
- TStringStream jsonStr;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
-
- // TSafeUtf8CEscapeTransform
- {
- TString modelStr(R"_({"String":"value\""})_");
-
- TFlatOptional proto;
- proto.SetString(R"_(value")_");
- TProto2JsonConfig config;
- config.StringTransforms.push_back(new TSafeUtf8CEscapeTransform());
- TStringStream jsonStr;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
-} // TestEscaping
-
-class TBytesTransform: public IStringTransform {
-public:
- int GetType() const override {
- return 0;
- }
- void Transform(TString&) const override {
- }
- void TransformBytes(TString& str) const override {
- str = "bytes";
- }
-};
+ // No escape
+ {
+ TString modelStr(R"_({"String":"value\""})_");
+
+ TFlatOptional proto;
+ proto.SetString(R"_(value")_");
+ TStringStream jsonStr;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+
+ // TEscapeJTransform
+ {
+ TString modelStr(R"_({"String":"value\""})_");
+
+ TFlatOptional proto;
+ proto.SetString(R"_(value")_");
+ TProto2JsonConfig config;
+ config.StringTransforms.push_back(new TEscapeJTransform<false, true>());
+ TStringStream jsonStr;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(modelStr, jsonStr.Str());
+ }
+
+ // TCEscapeTransform
+ {
+ TString modelStr(R"_({"String":"value\""})_");
+
+ TFlatOptional proto;
+ proto.SetString(R"_(value")_");
+ TProto2JsonConfig config;
+ config.StringTransforms.push_back(new TCEscapeTransform());
+ TStringStream jsonStr;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+
+ // TSafeUtf8CEscapeTransform
+ {
+ TString modelStr(R"_({"String":"value\""})_");
+
+ TFlatOptional proto;
+ proto.SetString(R"_(value")_");
+ TProto2JsonConfig config;
+ config.StringTransforms.push_back(new TSafeUtf8CEscapeTransform());
+ TStringStream jsonStr;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+} // TestEscaping
+
+class TBytesTransform: public IStringTransform {
+public:
+ int GetType() const override {
+ return 0;
+ }
+ void Transform(TString&) const override {
+ }
+ void TransformBytes(TString& str) const override {
+ str = "bytes";
+ }
+};
Y_UNIT_TEST(TestBytesTransform) {
- // Test that string field is not changed
- {
- TString modelStr(R"_({"String":"value"})_");
+ // Test that string field is not changed
+ {
+ TString modelStr(R"_({"String":"value"})_");
- TFlatOptional proto;
- proto.SetString(R"_(value)_");
- TProto2JsonConfig config;
- config.StringTransforms.push_back(new TBytesTransform());
- TStringStream jsonStr;
+ TFlatOptional proto;
+ proto.SetString(R"_(value)_");
+ TProto2JsonConfig config;
+ config.StringTransforms.push_back(new TBytesTransform());
+ TStringStream jsonStr;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
- // Test that bytes field is changed
- {
- TString modelStr(R"_({"Bytes":"bytes"})_");
+ // Test that bytes field is changed
+ {
+ TString modelStr(R"_({"Bytes":"bytes"})_");
- TFlatOptional proto;
- proto.SetBytes(R"_(value)_");
- TProto2JsonConfig config;
- config.StringTransforms.push_back(new TBytesTransform());
- TStringStream jsonStr;
+ TFlatOptional proto;
+ proto.SetBytes(R"_(value)_");
+ TProto2JsonConfig config;
+ config.StringTransforms.push_back(new TBytesTransform());
+ TStringStream jsonStr;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
}
-}
+}
Y_UNIT_TEST(TestFieldNameMode) {
- // Original case 1
- {
- TString modelStr(R"_({"String":"value"})_");
-
- TFlatOptional proto;
- proto.SetString("value");
- TStringStream jsonStr;
- TProto2JsonConfig config;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
-
- // Original case 2
- {
- TString modelStr(R"_({"String":"value"})_");
-
- TFlatOptional proto;
- proto.SetString("value");
- TStringStream jsonStr;
- TProto2JsonConfig config;
- config.FieldNameMode = TProto2JsonConfig::FieldNameOriginalCase;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
-
- // Lowercase
- {
- TString modelStr(R"_({"string":"value"})_");
-
- TFlatOptional proto;
- proto.SetString("value");
- TStringStream jsonStr;
- TProto2JsonConfig config;
- config.FieldNameMode = TProto2JsonConfig::FieldNameLowerCase;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
-
- // Uppercase
- {
- TString modelStr(R"_({"STRING":"value"})_");
-
- TFlatOptional proto;
- proto.SetString("value");
- TStringStream jsonStr;
- TProto2JsonConfig config;
- config.FieldNameMode = TProto2JsonConfig::FieldNameUpperCase;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
-
- // Camelcase
- {
- TString modelStr(R"_({"string":"value"})_");
-
- TFlatOptional proto;
- proto.SetString("value");
- TStringStream jsonStr;
- TProto2JsonConfig config;
- config.FieldNameMode = TProto2JsonConfig::FieldNameCamelCase;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
- {
- TString modelStr(R"_({"oneString":"value"})_");
-
- TFlatOptional proto;
- proto.SetOneString("value");
- TStringStream jsonStr;
- TProto2JsonConfig config;
- config.FieldNameMode = TProto2JsonConfig::FieldNameCamelCase;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
- {
- TString modelStr(R"_({"oneTwoString":"value"})_");
-
- TFlatOptional proto;
- proto.SetOneTwoString("value");
- TStringStream jsonStr;
- TProto2JsonConfig config;
- config.FieldNameMode = TProto2JsonConfig::FieldNameCamelCase;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
+ // Original case 1
+ {
+ TString modelStr(R"_({"String":"value"})_");
+
+ TFlatOptional proto;
+ proto.SetString("value");
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+
+ // Original case 2
+ {
+ TString modelStr(R"_({"String":"value"})_");
+
+ TFlatOptional proto;
+ proto.SetString("value");
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+ config.FieldNameMode = TProto2JsonConfig::FieldNameOriginalCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+
+ // Lowercase
+ {
+ TString modelStr(R"_({"string":"value"})_");
+
+ TFlatOptional proto;
+ proto.SetString("value");
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+ config.FieldNameMode = TProto2JsonConfig::FieldNameLowerCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+
+ // Uppercase
+ {
+ TString modelStr(R"_({"STRING":"value"})_");
+
+ TFlatOptional proto;
+ proto.SetString("value");
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+ config.FieldNameMode = TProto2JsonConfig::FieldNameUpperCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+
+ // Camelcase
+ {
+ TString modelStr(R"_({"string":"value"})_");
+
+ TFlatOptional proto;
+ proto.SetString("value");
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+ config.FieldNameMode = TProto2JsonConfig::FieldNameCamelCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+ {
+ TString modelStr(R"_({"oneString":"value"})_");
+
+ TFlatOptional proto;
+ proto.SetOneString("value");
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+ config.FieldNameMode = TProto2JsonConfig::FieldNameCamelCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+ {
+ TString modelStr(R"_({"oneTwoString":"value"})_");
+
+ TFlatOptional proto;
+ proto.SetOneTwoString("value");
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+ config.FieldNameMode = TProto2JsonConfig::FieldNameCamelCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
// snake_case
{
@@ -822,189 +822,189 @@ Y_UNIT_TEST(TestFieldNameMode) {
UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
}
- // Original case, repeated
- {
- TString modelStr(R"_({"I32":[1,2]})_");
-
- TFlatRepeated proto;
- proto.AddI32(1);
- proto.AddI32(2);
- TStringStream jsonStr;
- TProto2JsonConfig config;
- config.FieldNameMode = TProto2JsonConfig::FieldNameOriginalCase;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
-
- // Lower case, repeated
- {
- TString modelStr(R"_({"i32":[1,2]})_");
-
- TFlatRepeated proto;
- proto.AddI32(1);
- proto.AddI32(2);
- TStringStream jsonStr;
- TProto2JsonConfig config;
- config.FieldNameMode = TProto2JsonConfig::FieldNameLowerCase;
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
-
- // UseJsonName
- {
- // FIXME(CONTRIB-139): see the comment about UseJsonName in json2proto_ut.cpp:
- // Def_upper json name should be "DefUpper".
- TString modelStr(R"_({"My-Upper":1,"my-lower":2,"defUpper":3,"defLower":4})_");
-
- TWithJsonName proto;
- proto.Setmy_upper(1);
- proto.SetMy_lower(2);
- proto.SetDef_upper(3);
- proto.Setdef_lower(4);
- TStringStream jsonStr;
- TProto2JsonConfig config;
- config.SetUseJsonName(true);
-
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_STRINGS_EQUAL(jsonStr.Str(), modelStr);
- }
-
- // FieldNameMode with UseJsonName
- {
- TProto2JsonConfig config;
- config.SetFieldNameMode(TProto2JsonConfig::FieldNameLowerCase);
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- config.SetUseJsonName(true), yexception, "mutually exclusive");
- }
- {
- TProto2JsonConfig config;
- config.SetUseJsonName(true);
- UNIT_ASSERT_EXCEPTION_CONTAINS(
- config.SetFieldNameMode(TProto2JsonConfig::FieldNameLowerCase), yexception, "mutually exclusive");
- }
-
- /// TODO: test missing keys
-} // TestFieldNameMode
+ // Original case, repeated
+ {
+ TString modelStr(R"_({"I32":[1,2]})_");
+
+ TFlatRepeated proto;
+ proto.AddI32(1);
+ proto.AddI32(2);
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+ config.FieldNameMode = TProto2JsonConfig::FieldNameOriginalCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+
+ // Lower case, repeated
+ {
+ TString modelStr(R"_({"i32":[1,2]})_");
+
+ TFlatRepeated proto;
+ proto.AddI32(1);
+ proto.AddI32(2);
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+ config.FieldNameMode = TProto2JsonConfig::FieldNameLowerCase;
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+
+ // UseJsonName
+ {
+ // FIXME(CONTRIB-139): see the comment about UseJsonName in json2proto_ut.cpp:
+ // Def_upper json name should be "DefUpper".
+ TString modelStr(R"_({"My-Upper":1,"my-lower":2,"defUpper":3,"defLower":4})_");
+
+ TWithJsonName proto;
+ proto.Setmy_upper(1);
+ proto.SetMy_lower(2);
+ proto.SetDef_upper(3);
+ proto.Setdef_lower(4);
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+ config.SetUseJsonName(true);
+
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ UNIT_ASSERT_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+ }
+
+ // FieldNameMode with UseJsonName
+ {
+ TProto2JsonConfig config;
+ config.SetFieldNameMode(TProto2JsonConfig::FieldNameLowerCase);
+ UNIT_ASSERT_EXCEPTION_CONTAINS(
+ config.SetUseJsonName(true), yexception, "mutually exclusive");
+ }
+ {
+ TProto2JsonConfig config;
+ config.SetUseJsonName(true);
+ UNIT_ASSERT_EXCEPTION_CONTAINS(
+ config.SetFieldNameMode(TProto2JsonConfig::FieldNameLowerCase), yexception, "mutually exclusive");
+ }
+
+ /// TODO: test missing keys
+} // TestFieldNameMode
Y_UNIT_TEST(TestNan) {
- TFlatOptional proto;
- proto.SetDouble(std::numeric_limits<double>::quiet_NaN());
+ TFlatOptional proto;
+ proto.SetDouble(std::numeric_limits<double>::quiet_NaN());
- UNIT_ASSERT_EXCEPTION(Proto2Json(proto, TProto2JsonConfig()), yexception);
-} // TestNan
+ UNIT_ASSERT_EXCEPTION(Proto2Json(proto, TProto2JsonConfig()), yexception);
+} // TestNan
Y_UNIT_TEST(TestInf) {
- TFlatOptional proto;
- proto.SetFloat(std::numeric_limits<float>::infinity());
+ TFlatOptional proto;
+ proto.SetFloat(std::numeric_limits<float>::infinity());
- UNIT_ASSERT_EXCEPTION(Proto2Json(proto, TProto2JsonConfig()), yexception);
-} // TestInf
+ UNIT_ASSERT_EXCEPTION(Proto2Json(proto, TProto2JsonConfig()), yexception);
+} // TestInf
Y_UNIT_TEST(TestMap) {
- TMapType proto;
-
- auto& items = *proto.MutableItems();
- items["key1"] = "value1";
- items["key2"] = "value2";
- items["key3"] = "value3";
-
- TString modelStr(R"_({"Items":[{"key":"key3","value":"value3"},{"key":"key2","value":"value2"},{"key":"key1","value":"value1"}]})_");
-
- TStringStream jsonStr;
- TProto2JsonConfig config;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
-
- NJson::TJsonValue jsonValue, modelValue;
- NJson::TJsonValue::TArray jsonItems, modelItems;
- UNIT_ASSERT(NJson::ReadJsonTree(jsonStr.Str(), &jsonValue));
- UNIT_ASSERT(NJson::ReadJsonTree(modelStr, &modelValue));
- UNIT_ASSERT(jsonValue.Has("Items"));
- jsonValue["Items"].GetArray(&jsonItems);
- modelValue["Items"].GetArray(&modelItems);
- auto itemKey = [](const NJson::TJsonValue& v) {
- return v["key"].GetString();
- };
- SortBy(jsonItems, itemKey);
- SortBy(modelItems, itemKey);
- UNIT_ASSERT_EQUAL(jsonItems, modelItems);
-} // TestMap
+ TMapType proto;
+
+ auto& items = *proto.MutableItems();
+ items["key1"] = "value1";
+ items["key2"] = "value2";
+ items["key3"] = "value3";
+
+ TString modelStr(R"_({"Items":[{"key":"key3","value":"value3"},{"key":"key2","value":"value2"},{"key":"key1","value":"value1"}]})_");
+
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+
+ NJson::TJsonValue jsonValue, modelValue;
+ NJson::TJsonValue::TArray jsonItems, modelItems;
+ UNIT_ASSERT(NJson::ReadJsonTree(jsonStr.Str(), &jsonValue));
+ UNIT_ASSERT(NJson::ReadJsonTree(modelStr, &modelValue));
+ UNIT_ASSERT(jsonValue.Has("Items"));
+ jsonValue["Items"].GetArray(&jsonItems);
+ modelValue["Items"].GetArray(&modelItems);
+ auto itemKey = [](const NJson::TJsonValue& v) {
+ return v["key"].GetString();
+ };
+ SortBy(jsonItems, itemKey);
+ SortBy(modelItems, itemKey);
+ UNIT_ASSERT_EQUAL(jsonItems, modelItems);
+} // TestMap
Y_UNIT_TEST(TestMapAsObject) {
- TMapType proto;
+ TMapType proto;
- auto& items = *proto.MutableItems();
- items["key1"] = "value1";
- items["key2"] = "value2";
- items["key3"] = "value3";
+ auto& items = *proto.MutableItems();
+ items["key1"] = "value1";
+ items["key2"] = "value2";
+ items["key3"] = "value3";
- TString modelStr(R"_({"Items":{"key3":"value3","key2":"value2","key1":"value1"}})_");
+ TString modelStr(R"_({"Items":{"key3":"value3","key2":"value2","key1":"value1"}})_");
- TStringStream jsonStr;
- TProto2JsonConfig config;
- config.MapAsObject = true;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
+ TStringStream jsonStr;
+ TProto2JsonConfig config;
+ config.MapAsObject = true;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
-} // TestMapAsObject
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+} // TestMapAsObject
Y_UNIT_TEST(TestMapWTF) {
- TMapType proto;
+ TMapType proto;
- auto& items = *proto.MutableItems();
- items["key1"] = "value1";
- items["key2"] = "value2";
- items["key3"] = "value3";
+ auto& items = *proto.MutableItems();
+ items["key1"] = "value1";
+ items["key2"] = "value2";
+ items["key3"] = "value3";
- TString modelStr(R"_({"Items":{"key3":"value3","key2":"value2","key1":"value1"}})_");
+ TString modelStr(R"_({"Items":{"key3":"value3","key2":"value2","key1":"value1"}})_");
- TStringStream jsonStr;
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr));
+ TStringStream jsonStr;
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr));
- UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
-} // TestMapWTF
+ UNIT_ASSERT_JSON_STRINGS_EQUAL(jsonStr.Str(), modelStr);
+} // TestMapWTF
Y_UNIT_TEST(TestStringifyLongNumbers) {
-#define TEST_SINGLE(flag, value, expectString) \
- do { \
- TFlatOptional proto; \
- proto.SetSI64(value); \
- \
- TStringStream jsonStr; \
- TProto2JsonConfig config; \
- config.SetStringifyLongNumbers(flag); \
- UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config)); \
- if (expectString) { \
- UNIT_ASSERT_EQUAL(jsonStr.Str(), "{\"SI64\":\"" #value "\"}"); \
- } else { \
- UNIT_ASSERT_EQUAL(jsonStr.Str(), "{\"SI64\":" #value "}"); \
- } \
- } while (false)
-
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, 1, false);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, 1000000000, false);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, 10000000000000000, false);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, -1, false);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, -1000000000, false);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, -10000000000000000, false);
-
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, 1, false);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, 1000000000, false);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, 10000000000000000, true);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, -1, false);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, -1000000000, false);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, -10000000000000000, true);
-
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, 1, false);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, 1000000000, true);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, 10000000000000000, true);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, -1, false);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, -1000000000, true);
- TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, -10000000000000000, true);
+#define TEST_SINGLE(flag, value, expectString) \
+ do { \
+ TFlatOptional proto; \
+ proto.SetSI64(value); \
+ \
+ TStringStream jsonStr; \
+ TProto2JsonConfig config; \
+ config.SetStringifyLongNumbers(flag); \
+ UNIT_ASSERT_NO_EXCEPTION(Proto2Json(proto, jsonStr, config)); \
+ if (expectString) { \
+ UNIT_ASSERT_EQUAL(jsonStr.Str(), "{\"SI64\":\"" #value "\"}"); \
+ } else { \
+ UNIT_ASSERT_EQUAL(jsonStr.Str(), "{\"SI64\":" #value "}"); \
+ } \
+ } while (false)
+
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, 1, false);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, 1000000000, false);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, 10000000000000000, false);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, -1, false);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, -1000000000, false);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersNever, -10000000000000000, false);
+
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, 1, false);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, 1000000000, false);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, 10000000000000000, true);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, -1, false);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, -1000000000, false);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForDouble, -10000000000000000, true);
+
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, 1, false);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, 1000000000, true);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, 10000000000000000, true);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, -1, false);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, -1000000000, true);
+ TEST_SINGLE(TProto2JsonConfig::StringifyLongNumbersForFloat, -10000000000000000, true);
#undef TEST_SINGLE
-} // TestStringifyLongNumbers
+} // TestStringifyLongNumbers
Y_UNIT_TEST(TestExtension) {
TExtensionField proto;
diff --git a/library/cpp/protobuf/json/ut/string_transform_ut.cpp b/library/cpp/protobuf/json/ut/string_transform_ut.cpp
index a31dabcb0f..90debecd66 100644
--- a/library/cpp/protobuf/json/ut/string_transform_ut.cpp
+++ b/library/cpp/protobuf/json/ut/string_transform_ut.cpp
@@ -40,7 +40,7 @@ Y_UNIT_TEST_SUITE(TDoubleEscapeTransform) {
Y_UNIT_TEST_SUITE(TDoubleUnescapeTransform) {
Y_UNIT_TEST(TestEmptyString) {
- const NProtobufJson::IStringTransform& transform = NProtobufJson::TDoubleUnescapeTransform();
+ const NProtobufJson::IStringTransform& transform = NProtobufJson::TDoubleUnescapeTransform();
TString s;
s = "";
transform.Transform(s);
@@ -48,7 +48,7 @@ Y_UNIT_TEST_SUITE(TDoubleUnescapeTransform) {
}
Y_UNIT_TEST(TestAlphabeticString) {
- const NProtobufJson::IStringTransform& transform = NProtobufJson::TDoubleUnescapeTransform();
+ const NProtobufJson::IStringTransform& transform = NProtobufJson::TDoubleUnescapeTransform();
TString s;
s = "abacaba";
transform.Transform(s);
@@ -57,7 +57,7 @@ Y_UNIT_TEST_SUITE(TDoubleUnescapeTransform) {
}
Y_UNIT_TEST(TestRussianSymbols) {
- const NProtobufJson::IStringTransform& transform = NProtobufJson::TDoubleUnescapeTransform();
+ const NProtobufJson::IStringTransform& transform = NProtobufJson::TDoubleUnescapeTransform();
TString s;
s = "\\\\321\\\\202\\\\320\\\\265\\\\321\\\\201\\\\321\\\\202";
transform.Transform(s);
@@ -65,7 +65,7 @@ Y_UNIT_TEST_SUITE(TDoubleUnescapeTransform) {
}
Y_UNIT_TEST(TestEscapeSpecialSymbols) {
- const NProtobufJson::IStringTransform& transform = NProtobufJson::TDoubleUnescapeTransform();
+ const NProtobufJson::IStringTransform& transform = NProtobufJson::TDoubleUnescapeTransform();
TString s;
s = "aba\\\\\\\\ca\\\\\\\"ba";
transform.Transform(s);
@@ -73,7 +73,7 @@ Y_UNIT_TEST_SUITE(TDoubleUnescapeTransform) {
}
Y_UNIT_TEST(TestEscapeSpecialSymbolsDifficultCases) {
- const NProtobufJson::IStringTransform& transform = NProtobufJson::TDoubleUnescapeTransform();
+ const NProtobufJson::IStringTransform& transform = NProtobufJson::TDoubleUnescapeTransform();
TString s;
s = "\\\\\\\\\\\\\\\\";
transform.Transform(s);