Sync from Piper @368866736
PROTOBUF_SYNC_PIPER
This commit is contained in:
parent
ce560630bf
commit
ba3836703b
1
BUILD
1
BUILD
@ -369,6 +369,7 @@ cc_library(
|
||||
"src/google/protobuf/compiler/cpp/cpp_message.cc",
|
||||
"src/google/protobuf/compiler/cpp/cpp_message_field.cc",
|
||||
"src/google/protobuf/compiler/cpp/cpp_padding_optimizer.cc",
|
||||
"src/google/protobuf/compiler/cpp/cpp_parse_function_generator.cc",
|
||||
"src/google/protobuf/compiler/cpp/cpp_primitive_field.cc",
|
||||
"src/google/protobuf/compiler/cpp/cpp_service.cc",
|
||||
"src/google/protobuf/compiler/cpp/cpp_string_field.cc",
|
||||
|
11
CHANGES.txt
11
CHANGES.txt
@ -1,5 +1,16 @@
|
||||
|
||||
Unreleased Changes (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript)
|
||||
|
||||
C++
|
||||
* Fix bug where `Descriptor::DebugString()` printed proto3 synthetic oneofs.
|
||||
* Provide stable versions of `SortAndUnique()`.
|
||||
* Make sure to cache proto3 optional message fields when they are cleared.
|
||||
|
||||
Kotlin
|
||||
* Restrict extension setter and getter operators to non-nullable T.
|
||||
|
||||
3.16.0 (C++/Java/Python/PHP/Objective-C/C#/Ruby/JavaScript)
|
||||
|
||||
C++
|
||||
* The ::pb namespace is no longer exposed due to conflicts.
|
||||
* Allow MessageDifferencer::TreatAsSet() (and friends) to override previous
|
||||
|
@ -2329,6 +2329,12 @@ void BinaryAndJsonConformanceSuite::RunJsonTestsForNonRepeatedTypes() {
|
||||
ExpectParseFailureForJson(
|
||||
"OneofFieldDuplicate", REQUIRED,
|
||||
R"({"oneofUint32": 1, "oneofString": "test"})");
|
||||
RunValidJsonTest("OneofFieldNullFirst", REQUIRED,
|
||||
R"({"oneofUint32": null, "oneofString": "test"})",
|
||||
"oneof_string: \"test\"");
|
||||
RunValidJsonTest("OneofFieldNullSecond", REQUIRED,
|
||||
R"({"oneofString": "test", "oneofUint32": null})",
|
||||
"oneof_string: \"test\"");
|
||||
// Ensure zero values for oneof make it out/backs.
|
||||
TestAllTypesProto3 messageProto3;
|
||||
TestAllTypesProto2 messageProto2;
|
||||
|
@ -531,8 +531,9 @@ class _Parser(object):
|
||||
'"{1}" fields.'.format(
|
||||
message.DESCRIPTOR.full_name, name))
|
||||
names.append(name)
|
||||
value = js[name]
|
||||
# Check no other oneof field is parsed.
|
||||
if field.containing_oneof is not None:
|
||||
if field.containing_oneof is not None and value is not None:
|
||||
oneof_name = field.containing_oneof.name
|
||||
if oneof_name in names:
|
||||
raise ParseError('Message type "{0}" should not have multiple '
|
||||
@ -540,7 +541,6 @@ class _Parser(object):
|
||||
message.DESCRIPTOR.full_name, oneof_name))
|
||||
names.append(oneof_name)
|
||||
|
||||
value = js[name]
|
||||
if value is None:
|
||||
if (field.cpp_type == descriptor.FieldDescriptor.CPPTYPE_MESSAGE
|
||||
and field.message_type.full_name == 'google.protobuf.Value'):
|
||||
|
@ -699,6 +699,61 @@ TEST_P(ProtoStreamObjectWriterTest, ImplicitMessageList) {
|
||||
CheckOutput(expected);
|
||||
}
|
||||
|
||||
TEST_P(ProtoStreamObjectWriterTest, DisableImplicitMessageList) {
|
||||
options_.disable_implicit_message_list = true;
|
||||
options_.suppress_implicit_message_list_error = true;
|
||||
ResetProtoWriter();
|
||||
|
||||
Book expected;
|
||||
// The repeated friend field of the author is empty.
|
||||
expected.mutable_author();
|
||||
|
||||
EXPECT_CALL(listener_, InvalidValue(_, _, _)).Times(0);
|
||||
|
||||
ow_->StartObject("")
|
||||
->StartObject("author")
|
||||
->StartObject("friend")
|
||||
->RenderString("name", "first")
|
||||
->EndObject()
|
||||
->StartObject("friend")
|
||||
->RenderString("name", "second")
|
||||
->EndObject()
|
||||
->EndObject()
|
||||
->EndObject();
|
||||
CheckOutput(expected);
|
||||
}
|
||||
|
||||
TEST_P(ProtoStreamObjectWriterTest,
|
||||
DisableImplicitMessageListWithoutErrorSuppressed) {
|
||||
options_.disable_implicit_message_list = true;
|
||||
ResetProtoWriter();
|
||||
|
||||
Book expected;
|
||||
// The repeated friend field of the author is empty.
|
||||
expected.mutable_author();
|
||||
EXPECT_CALL(
|
||||
listener_,
|
||||
InvalidValue(
|
||||
_, StringPiece("friend"),
|
||||
StringPiece(
|
||||
"Starting an object in a repeated field but the parent object "
|
||||
"is not a list")))
|
||||
.With(Args<0>(HasObjectLocation("author")))
|
||||
.Times(2);
|
||||
|
||||
ow_->StartObject("")
|
||||
->StartObject("author")
|
||||
->StartObject("friend")
|
||||
->RenderString("name", "first")
|
||||
->EndObject()
|
||||
->StartObject("friend")
|
||||
->RenderString("name", "second")
|
||||
->EndObject()
|
||||
->EndObject()
|
||||
->EndObject();
|
||||
CheckOutput(expected);
|
||||
}
|
||||
|
||||
TEST_P(ProtoStreamObjectWriterTest,
|
||||
LastWriteWinsOnNonRepeatedMessageFieldWithDuplicates) {
|
||||
Book expected;
|
||||
|
Loading…
Reference in New Issue
Block a user