Merge pull request #3189 from thomasvl/objc_proto3_unknown_fields

ObjC: Preserve unknown fields in proto3 syntax files.
pull/2746/merge
Thomas Van Lenten 8 years ago committed by GitHub
commit d555775836
  1. 4
      objectivec/GPBDescriptor_PackagePrivate.h
  2. 6
      objectivec/GPBMessage.m
  3. 29
      objectivec/Tests/GPBMessageTests+Serialization.m

@ -286,10 +286,6 @@ uint32_t GPBFieldTag(GPBFieldDescriptor *self);
// would be the wire type for packed. // would be the wire type for packed.
uint32_t GPBFieldAlternateTag(GPBFieldDescriptor *self); uint32_t GPBFieldAlternateTag(GPBFieldDescriptor *self);
GPB_INLINE BOOL GPBPreserveUnknownFields(GPBFileSyntax syntax) {
return syntax != GPBFileSyntaxProto3;
}
GPB_INLINE BOOL GPBHasPreservingUnknownEnumSemantics(GPBFileSyntax syntax) { GPB_INLINE BOOL GPBHasPreservingUnknownEnumSemantics(GPBFileSyntax syntax) {
return syntax == GPBFileSyntaxProto3; return syntax == GPBFileSyntaxProto3;
} }

@ -2372,18 +2372,12 @@ static void MergeRepeatedNotPackedFieldFromCodedInputStream(
// zero signals EOF / limit reached // zero signals EOF / limit reached
return; return;
} else { } else {
if (GPBPreserveUnknownFields(syntax)) {
if (![self parseUnknownField:input if (![self parseUnknownField:input
extensionRegistry:extensionRegistry extensionRegistry:extensionRegistry
tag:tag]) { tag:tag]) {
// it's an endgroup tag // it's an endgroup tag
return; return;
} }
} else {
if (![input skipField:tag]) {
return;
}
}
} }
} // if(!merged) } // if(!merged)

@ -113,35 +113,6 @@ static NSData *DataFromCStr(const char *str) {
[msg release]; [msg release];
} }
- (void)testProto3DroppingUnknownFields {
DropUnknownsFooWithExtraFields *fooWithExtras =
[[DropUnknownsFooWithExtraFields alloc] init];
fooWithExtras.int32Value = 1;
fooWithExtras.enumValue = DropUnknownsFooWithExtraFields_NestedEnum_Baz;
fooWithExtras.extraInt32Value = 2;
NSData *data = [fooWithExtras data];
XCTAssertNotNil(data);
DropUnknownsFoo *foo = [DropUnknownsFoo parseFromData:data error:NULL];
XCTAssertEqual(foo.int32Value, 1);
XCTAssertEqual(foo.enumValue, DropUnknownsFoo_NestedEnum_Baz);
// Nothing should end up in the unknowns.
XCTAssertEqual([foo.unknownFields countOfFields], 0U);
[fooWithExtras release];
data = [foo data];
fooWithExtras =
[DropUnknownsFooWithExtraFields parseFromData:data error:NULL];
XCTAssertEqual(fooWithExtras.int32Value, 1);
XCTAssertEqual(fooWithExtras.enumValue,
DropUnknownsFooWithExtraFields_NestedEnum_Baz);
// And the extra value is gone (back to the default).
XCTAssertEqual(fooWithExtras.extraInt32Value, 0);
XCTAssertEqual([foo.unknownFields countOfFields], 0U);
}
- (void)testProto2UnknownEnumToUnknownField { - (void)testProto2UnknownEnumToUnknownField {
Message3 *orig = [[Message3 alloc] init]; Message3 *orig = [[Message3 alloc] init];

Loading…
Cancel
Save