diff options
author | bbiff <bbiff@yandex-team.com> | 2022-09-11 00:15:54 +0300 |
---|---|---|
committer | bbiff <bbiff@yandex-team.com> | 2022-09-11 00:15:54 +0300 |
commit | 67576a8962c2506b8ee10da48dffba311acb0042 (patch) | |
tree | 51a695bbddbb9be4e5a0cc5c7ec558ca233c2be5 /library/cpp/protobuf/json/ut | |
parent | a8945929eb162f6910b228697c3d2db3b7cb2ca9 (diff) | |
download | ydb-67576a8962c2506b8ee10da48dffba311acb0042.tar.gz |
support duration and timestamp as string in json2proto
Diffstat (limited to 'library/cpp/protobuf/json/ut')
-rw-r--r-- | library/cpp/protobuf/json/ut/json2proto_ut.cpp | 26 | ||||
-rw-r--r-- | library/cpp/protobuf/json/ut/proto2json_ut.cpp | 18 | ||||
-rw-r--r-- | library/cpp/protobuf/json/ut/test.proto | 11 |
3 files changed, 55 insertions, 0 deletions
diff --git a/library/cpp/protobuf/json/ut/json2proto_ut.cpp b/library/cpp/protobuf/json/ut/json2proto_ut.cpp index 0dfe57bc7a2..d213c9e9134 100644 --- a/library/cpp/protobuf/json/ut/json2proto_ut.cpp +++ b/library/cpp/protobuf/json/ut/json2proto_ut.cpp @@ -8,6 +8,7 @@ #include <library/cpp/json/json_reader.h> #include <library/cpp/json/json_writer.h> +#include <library/cpp/protobuf/interop/cast.h> #include <library/cpp/protobuf/json/json2proto.h> #include <library/cpp/testing/unittest/registar.h> @@ -1144,4 +1145,29 @@ Y_UNIT_TEST(TestAllowComments) { UNIT_ASSERT_VALUES_EQUAL(proto.GetI64(), 3423); } // TestAllowComments +Y_UNIT_TEST(TestSimplifiedDuration) { + NJson::TJsonValue json; + TSingleDuration simpleDuration; + json["Duration"] = "10.1s"; + NProtobufJson::Json2Proto(json, simpleDuration, NProtobufJson::TJson2ProtoConfig().SetAllowString2TimeConversion(true)); + UNIT_ASSERT_EQUAL(NProtoInterop::CastFromProto(simpleDuration.GetDuration()), TDuration::MilliSeconds(10100)); +} // TestSimplifiedDuration + +Y_UNIT_TEST(TestUnwrappedDuration) { + NJson::TJsonValue json; + TSingleDuration duration; + json["Duration"]["seconds"] = 2; + NProtobufJson::Json2Proto(json, duration, NProtobufJson::TJson2ProtoConfig()); + UNIT_ASSERT_EQUAL(NProtoInterop::CastFromProto(duration.GetDuration()), TDuration::MilliSeconds(2000)); +} // TestUnwrappedDuration + +Y_UNIT_TEST(TestSimplifiedTimestamp) { + NJson::TJsonValue json; + TSingleTimestamp simpleTimestamp; + json["Timestamp"] = "2014-08-26T15:52:15Z"; + NProtobufJson::Json2Proto(json, simpleTimestamp, NProtobufJson::TJson2ProtoConfig().SetAllowString2TimeConversion(true)); + UNIT_ASSERT_EQUAL(NProtoInterop::CastFromProto(simpleTimestamp.GetTimestamp()), TInstant::ParseIso8601("2014-08-26T15:52:15Z")); + +} // TestSimplifiedTimestamp + } // TJson2ProtoTest diff --git a/library/cpp/protobuf/json/ut/proto2json_ut.cpp b/library/cpp/protobuf/json/ut/proto2json_ut.cpp index 07e52d7f2f5..d4d6d374e96 100644 --- a/library/cpp/protobuf/json/ut/proto2json_ut.cpp +++ b/library/cpp/protobuf/json/ut/proto2json_ut.cpp @@ -1019,4 +1019,22 @@ Y_UNIT_TEST(TestExtension) { UNIT_ASSERT_EQUAL(Proto2Json(proto, cfg), "{\"bar\":1}"); } // TestExtension +Y_UNIT_TEST(TestSimplifiedDuration) { + TString json; + TSingleDuration simpleDuration; + simpleDuration.mutable_duration()->set_seconds(10); + simpleDuration.mutable_duration()->set_nanos(101); + Proto2Json(simpleDuration, json, TProto2JsonConfig().SetConvertTimeAsString(true)); + UNIT_ASSERT_EQUAL_C(json, "{\"Duration\":\"10.000000101s\"}", "real value is " << json); +} // TestSimplifiedDuration + +Y_UNIT_TEST(TestSimplifiedTimestamp) { + TString json; + TSingleTimestamp simpleTimestamp; + simpleTimestamp.mutable_timestamp()->set_seconds(10000000); + simpleTimestamp.mutable_timestamp()->set_nanos(504); + Proto2Json(simpleTimestamp, json, TProto2JsonConfig().SetConvertTimeAsString(true)); + UNIT_ASSERT_EQUAL_C(json, "{\"Timestamp\":\"1970-04-26T17:46:40.000000504Z\"}", "real value is " << json); +} // TestSimplifiedTimestamp + } // TProto2JsonTest diff --git a/library/cpp/protobuf/json/ut/test.proto b/library/cpp/protobuf/json/ut/test.proto index 0fa996fd413..6bc19843737 100644 --- a/library/cpp/protobuf/json/ut/test.proto +++ b/library/cpp/protobuf/json/ut/test.proto @@ -1,5 +1,8 @@ package NProtobufJsonTest; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; + enum EEnum { E_0 = 0; E_1 = 1; @@ -194,6 +197,14 @@ message TSingleRepeatedInt { repeated int32 RepeatedInt = 1; } +message TSingleDuration { + required google.protobuf.Duration Duration = 1; +} + +message TSingleTimestamp { + required google.protobuf.Timestamp Timestamp = 1; +} + message TExtensionField { extensions 100 to 199; } |