DefaultValueObjectWriter should populate oneof message field

This commit is contained in:
Jie Luo 2017-03-10 16:55:35 -08:00
parent ae220cda61
commit d59592af61
2 changed files with 19 additions and 2 deletions

View File

@ -363,8 +363,9 @@ void DefaultValueObjectWriter::Node::PopulateChildren(
}
// If oneof_index() != 0, the child field is part of a "oneof", which means
// the child field is optional and we shouldn't populate its default value.
if (field.oneof_index() != 0) continue;
// the child field is optional and we shouldn't populate its default
// primitive value.
if (field.oneof_index() != 0 && kind == PRIMITIVE) continue;
// If the child field is of primitive type, sets its data to the default
// value of its type.

View File

@ -51,6 +51,7 @@ using proto3::FOO;
using proto3::BAR;
using proto3::TestMessage;
using proto3::TestMap;
using proto3::TestOneof;
using testing::MapIn;
static const char kTypeUrlPrefix[] = "type.googleapis.com";
@ -232,6 +233,21 @@ TEST_F(JsonUtilTest, ParsePrimitiveMapIn) {
EXPECT_EQ(message.DebugString(), other.DebugString());
}
TEST_F(JsonUtilTest, PrintPrimitiveOneof) {
TestOneof message;
JsonPrintOptions options;
options.always_print_primitive_fields = true;
message.mutable_oneof_message_value();
EXPECT_EQ(
"{\"oneofMessageValue\":{\"value\":0}}",
ToJson(message, options));
message.set_oneof_int32_value(1);
EXPECT_EQ(
"{\"oneofInt32Value\":1}",
ToJson(message, options));
}
TEST_F(JsonUtilTest, TestParseIgnoreUnknownFields) {
TestMessage m;
JsonParseOptions options;