| Index: third_party/protobuf/src/google/protobuf/util/json_util_test.cc
|
| diff --git a/third_party/protobuf/src/google/protobuf/util/json_util_test.cc b/third_party/protobuf/src/google/protobuf/util/json_util_test.cc
|
| index 3ce779c922fd065c50774842101572425af6b703..a4d3cc983fe1102a98b7de5b34442eba56fa4036 100644
|
| --- a/third_party/protobuf/src/google/protobuf/util/json_util_test.cc
|
| +++ b/third_party/protobuf/src/google/protobuf/util/json_util_test.cc
|
| @@ -34,8 +34,6 @@
|
| #include <string>
|
|
|
| #include <google/protobuf/io/zero_copy_stream.h>
|
| -#include <google/protobuf/descriptor_database.h>
|
| -#include <google/protobuf/dynamic_message.h>
|
| #include <google/protobuf/util/json_format_proto3.pb.h>
|
| #include <google/protobuf/util/type_resolver.h>
|
| #include <google/protobuf/util/type_resolver_util.h>
|
| @@ -65,21 +63,26 @@ static string GetTypeUrl(const Descriptor* message) {
|
| class JsonUtilTest : public testing::Test {
|
| protected:
|
| JsonUtilTest() {
|
| + resolver_.reset(NewTypeResolverForDescriptorPool(
|
| + kTypeUrlPrefix, DescriptorPool::generated_pool()));
|
| }
|
|
|
| - string ToJson(const Message& message, const JsonPrintOptions& options) {
|
| + string ToJson(const Message& message, const JsonOptions& options) {
|
| string result;
|
| - GOOGLE_CHECK_OK(MessageToJsonString(message, &result, options));
|
| + GOOGLE_CHECK_OK(BinaryToJsonString(resolver_.get(),
|
| + GetTypeUrl(message.GetDescriptor()),
|
| + message.SerializeAsString(), &result, options));
|
| return result;
|
| }
|
|
|
| - bool FromJson(const string& json, Message* message,
|
| - const JsonParseOptions& options) {
|
| - return JsonStringToMessage(json, message, options).ok();
|
| - }
|
| -
|
| bool FromJson(const string& json, Message* message) {
|
| - return FromJson(json, message, JsonParseOptions());
|
| + string binary;
|
| + if (!JsonToBinaryString(resolver_.get(),
|
| + GetTypeUrl(message->GetDescriptor()), json, &binary)
|
| + .ok()) {
|
| + return false;
|
| + }
|
| + return message->ParseFromString(binary);
|
| }
|
|
|
| google::protobuf::scoped_ptr<TypeResolver> resolver_;
|
| @@ -89,7 +92,7 @@ TEST_F(JsonUtilTest, TestWhitespaces) {
|
| TestMessage m;
|
| m.mutable_message_value();
|
|
|
| - JsonPrintOptions options;
|
| + JsonOptions options;
|
| EXPECT_EQ("{\"messageValue\":{}}", ToJson(m, options));
|
| options.add_whitespace = true;
|
| EXPECT_EQ(
|
| @@ -101,7 +104,7 @@ TEST_F(JsonUtilTest, TestWhitespaces) {
|
|
|
| TEST_F(JsonUtilTest, TestDefaultValues) {
|
| TestMessage m;
|
| - JsonPrintOptions options;
|
| + JsonOptions options;
|
| EXPECT_EQ("{}", ToJson(m, options));
|
| options.always_print_primitive_fields = true;
|
| EXPECT_EQ(
|
| @@ -128,34 +131,6 @@ TEST_F(JsonUtilTest, TestDefaultValues) {
|
| "\"repeatedMessageValue\":[]"
|
| "}",
|
| ToJson(m, options));
|
| -
|
| - options.always_print_primitive_fields = true;
|
| - m.set_string_value("i am a test string value");
|
| - m.set_bytes_value("i am a test bytes value");
|
| - EXPECT_EQ(
|
| - "{\"boolValue\":false,"
|
| - "\"int32Value\":0,"
|
| - "\"int64Value\":\"0\","
|
| - "\"uint32Value\":0,"
|
| - "\"uint64Value\":\"0\","
|
| - "\"floatValue\":0,"
|
| - "\"doubleValue\":0,"
|
| - "\"stringValue\":\"i am a test string value\","
|
| - "\"bytesValue\":\"aSBhbSBhIHRlc3QgYnl0ZXMgdmFsdWU=\","
|
| - "\"enumValue\":\"FOO\","
|
| - "\"repeatedBoolValue\":[],"
|
| - "\"repeatedInt32Value\":[],"
|
| - "\"repeatedInt64Value\":[],"
|
| - "\"repeatedUint32Value\":[],"
|
| - "\"repeatedUint64Value\":[],"
|
| - "\"repeatedFloatValue\":[],"
|
| - "\"repeatedDoubleValue\":[],"
|
| - "\"repeatedStringValue\":[],"
|
| - "\"repeatedBytesValue\":[],"
|
| - "\"repeatedEnumValue\":[],"
|
| - "\"repeatedMessageValue\":[]"
|
| - "}",
|
| - ToJson(m, options));
|
| }
|
|
|
| TEST_F(JsonUtilTest, ParseMessage) {
|
| @@ -172,9 +147,8 @@ TEST_F(JsonUtilTest, ParseMessage) {
|
| " {\"value\": 40}, {\"value\": 96}\n"
|
| " ]\n"
|
| "}\n";
|
| - JsonParseOptions options;
|
| TestMessage m;
|
| - ASSERT_TRUE(FromJson(input, &m, options));
|
| + ASSERT_TRUE(FromJson(input, &m));
|
| EXPECT_EQ(1024, m.int32_value());
|
| ASSERT_EQ(2, m.repeated_int32_value_size());
|
| EXPECT_EQ(1, m.repeated_int32_value(0));
|
| @@ -188,74 +162,27 @@ TEST_F(JsonUtilTest, ParseMessage) {
|
| TEST_F(JsonUtilTest, ParseMap) {
|
| TestMap message;
|
| (*message.mutable_string_map())["hello"] = 1234;
|
| - JsonPrintOptions print_options;
|
| - JsonParseOptions parse_options;
|
| - EXPECT_EQ("{\"stringMap\":{\"hello\":1234}}", ToJson(message, print_options));
|
| + JsonOptions options;
|
| + EXPECT_EQ("{\"stringMap\":{\"hello\":1234}}", ToJson(message, options));
|
| TestMap other;
|
| - ASSERT_TRUE(FromJson(ToJson(message, print_options), &other, parse_options));
|
| + ASSERT_TRUE(FromJson(ToJson(message, options), &other));
|
| EXPECT_EQ(message.DebugString(), other.DebugString());
|
| }
|
|
|
| -TEST_F(JsonUtilTest, TestParseIgnoreUnknownFields) {
|
| - TestMessage m;
|
| - JsonParseOptions options;
|
| - options.ignore_unknown_fields = true;
|
| - EXPECT_TRUE(FromJson("{\"unknownName\":0}", &m, options));
|
| -}
|
| -
|
| TEST_F(JsonUtilTest, TestParseErrors) {
|
| TestMessage m;
|
| - JsonParseOptions options;
|
| + JsonOptions options;
|
| // Parsing should fail if the field name can not be recognized.
|
| - EXPECT_FALSE(FromJson("{\"unknownName\":0}", &m, options));
|
| + EXPECT_FALSE(FromJson("{\"unknownName\":0}", &m));
|
| // Parsing should fail if the value is invalid.
|
| - EXPECT_FALSE(FromJson("{\"int32Value\":2147483648}", &m, options));
|
| -}
|
| -
|
| -TEST_F(JsonUtilTest, TestDynamicMessage) {
|
| - // Some random message but good enough to test the wrapper functions.
|
| - string input =
|
| - "{\n"
|
| - " \"int32Value\": 1024,\n"
|
| - " \"repeatedInt32Value\": [1, 2],\n"
|
| - " \"messageValue\": {\n"
|
| - " \"value\": 2048\n"
|
| - " },\n"
|
| - " \"repeatedMessageValue\": [\n"
|
| - " {\"value\": 40}, {\"value\": 96}\n"
|
| - " ]\n"
|
| - "}\n";
|
| -
|
| - // Create a new DescriptorPool with the same protos as the generated one.
|
| - DescriptorPoolDatabase database(*DescriptorPool::generated_pool());
|
| - DescriptorPool pool(&database);
|
| - // A dynamic version of the test proto.
|
| - DynamicMessageFactory factory;
|
| - google::protobuf::scoped_ptr<Message> message(factory.GetPrototype(
|
| - pool.FindMessageTypeByName("proto3.TestMessage"))->New());
|
| - EXPECT_TRUE(FromJson(input, message.get()));
|
| -
|
| - // Convert to generated message for easy inspection.
|
| - TestMessage generated;
|
| - EXPECT_TRUE(generated.ParseFromString(message->SerializeAsString()));
|
| - EXPECT_EQ(1024, generated.int32_value());
|
| - ASSERT_EQ(2, generated.repeated_int32_value_size());
|
| - EXPECT_EQ(1, generated.repeated_int32_value(0));
|
| - EXPECT_EQ(2, generated.repeated_int32_value(1));
|
| - EXPECT_EQ(2048, generated.message_value().value());
|
| - ASSERT_EQ(2, generated.repeated_message_value_size());
|
| - EXPECT_EQ(40, generated.repeated_message_value(0).value());
|
| - EXPECT_EQ(96, generated.repeated_message_value(1).value());
|
| -
|
| - JsonOptions options;
|
| - EXPECT_EQ(ToJson(generated, options), ToJson(*message, options));
|
| + EXPECT_FALSE(FromJson("{\"int32Value\":2147483648}", &m));
|
| }
|
|
|
| -typedef std::pair<char*, int> Segment;
|
| +typedef pair<char*, int> Segment;
|
| // A ZeroCopyOutputStream that writes to multiple buffers.
|
| class SegmentedZeroCopyOutputStream : public io::ZeroCopyOutputStream {
|
| public:
|
| - explicit SegmentedZeroCopyOutputStream(std::list<Segment> segments)
|
| + explicit SegmentedZeroCopyOutputStream(list<Segment> segments)
|
| : segments_(segments), last_segment_(static_cast<char*>(NULL), 0), byte_count_(0) {}
|
|
|
| virtual bool Next(void** buffer, int* length) {
|
| @@ -281,7 +208,7 @@ class SegmentedZeroCopyOutputStream : public io::ZeroCopyOutputStream {
|
| virtual int64 ByteCount() const { return byte_count_; }
|
|
|
| private:
|
| - std::list<Segment> segments_;
|
| + list<Segment> segments_;
|
| Segment last_segment_;
|
| int64 byte_count_;
|
| };
|
| @@ -299,7 +226,7 @@ TEST(ZeroCopyStreamByteSinkTest, TestAllInputOutputPatterns) {
|
| for (int split_pattern = 0; split_pattern < (1 << (kOutputBufferLength - 1));
|
| split_pattern += kSkippedPatternCount) {
|
| // Split the buffer into small segments according to the split_pattern.
|
| - std::list<Segment> segments;
|
| + list<Segment> segments;
|
| int segment_start = 0;
|
| for (int i = 0; i < kOutputBufferLength - 1; ++i) {
|
| if (split_pattern & (1 << i)) {
|
|
|