aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFeng Xiao <xiaofeng@google.com>2015-08-26 13:18:04 -0700
committerFeng Xiao <xiaofeng@google.com>2015-08-26 13:18:04 -0700
commitb00595a3a9411cd54ab303a7ecbde0369d59cac1 (patch)
tree98532d0eb7f1eaee754f84a47c2c6a9790183921
parentf6b05f78a44501ef6a71f842788536f726144120 (diff)
parentbd11198f694a2cb1544992bb7868198b1e9dfe6c (diff)
downloadprotobuf-b00595a3a9411cd54ab303a7ecbde0369d59cac1.tar.gz
protobuf-b00595a3a9411cd54ab303a7ecbde0369d59cac1.tar.bz2
protobuf-b00595a3a9411cd54ab303a7ecbde0369d59cac1.zip
Merge pull request #709 from xfxyjwf/map_bug
Fix JSON map fields parsing.
-rw-r--r--src/google/protobuf/util/internal/protostream_objectwriter.cc4
-rw-r--r--src/google/protobuf/util/json_util_test.cc11
2 files changed, 14 insertions, 1 deletions
diff --git a/src/google/protobuf/util/internal/protostream_objectwriter.cc b/src/google/protobuf/util/internal/protostream_objectwriter.cc
index f9ddbf32..7f6f3c35 100644
--- a/src/google/protobuf/util/internal/protostream_objectwriter.cc
+++ b/src/google/protobuf/util/internal/protostream_objectwriter.cc
@@ -1541,8 +1541,10 @@ bool ProtoStreamObjectWriter::IsMap(const google::protobuf::Field& field) {
const google::protobuf::Type* field_type =
typeinfo_->GetType(field.type_url());
+ // TODO(xiaofeng): Unify option names.
return GetBoolOptionOrDefault(field_type->options(),
- "google.protobuf.MessageOptions.map_entry", false);
+ "google.protobuf.MessageOptions.map_entry", false) ||
+ GetBoolOptionOrDefault(field_type->options(), "map_entry", false);
}
void ProtoStreamObjectWriter::WriteTag(const google::protobuf::Field& field) {
diff --git a/src/google/protobuf/util/json_util_test.cc b/src/google/protobuf/util/json_util_test.cc
index 8399b408..6686416c 100644
--- a/src/google/protobuf/util/json_util_test.cc
+++ b/src/google/protobuf/util/json_util_test.cc
@@ -47,6 +47,7 @@ namespace {
using proto3::FOO;
using proto3::BAR;
using proto3::TestMessage;
+using proto3::TestMap;
static const char kTypeUrlPrefix[] = "type.googleapis.com";
@@ -146,6 +147,16 @@ TEST_F(JsonUtilTest, ParseMessage) {
EXPECT_EQ(96, m.repeated_message_value(1).value());
}
+TEST_F(JsonUtilTest, ParseMap) {
+ TestMap message;
+ (*message.mutable_string_map())["hello"] = 1234;
+ JsonOptions options;
+ EXPECT_EQ("{\"stringMap\":{\"hello\":1234}}", ToJson(message, options));
+ TestMap other;
+ ASSERT_TRUE(FromJson(ToJson(message, options), &other));
+ EXPECT_EQ(message.DebugString(), other.DebugString());
+}
+
typedef pair<char*, int> Segment;
// A ZeroCopyOutputStream that writes to multiple buffers.
class SegmentedZeroCopyOutputStream : public io::ZeroCopyOutputStream {