Commit 3f2dcaeb authored by Thomas Van Lenten's avatar Thomas Van Lenten

ObjC: Fix merging of length delimited unknown fields.

- Add a test to cover this and tweak the test to not use two merge
  paths to be sure things are as expected.
parent 210be267
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
result->mutableFixed32List_ = [mutableFixed32List_ copyWithZone:zone]; result->mutableFixed32List_ = [mutableFixed32List_ copyWithZone:zone];
result->mutableFixed64List_ = [mutableFixed64List_ copyWithZone:zone]; result->mutableFixed64List_ = [mutableFixed64List_ copyWithZone:zone];
result->mutableLengthDelimitedList_ = result->mutableLengthDelimitedList_ =
[mutableLengthDelimitedList_ copyWithZone:zone]; [mutableLengthDelimitedList_ mutableCopyWithZone:zone];
result->mutableVarintList_ = [mutableVarintList_ copyWithZone:zone]; result->mutableVarintList_ = [mutableVarintList_ copyWithZone:zone];
if (mutableGroupList_.count) { if (mutableGroupList_.count) {
result->mutableGroupList_ = [[NSMutableArray allocWithZone:zone] result->mutableGroupList_ = [[NSMutableArray allocWithZone:zone]
......
...@@ -34,6 +34,10 @@ ...@@ -34,6 +34,10 @@
#import "GPBUnknownFieldSet_PackagePrivate.h" #import "GPBUnknownFieldSet_PackagePrivate.h"
#import "google/protobuf/Unittest.pbobjc.h" #import "google/protobuf/Unittest.pbobjc.h"
static NSData *DataFromCStr(const char *str) {
return [NSData dataWithBytes:str length:strlen(str)];
}
@interface GPBUnknownFieldSet (GPBUnknownFieldSetTest) @interface GPBUnknownFieldSet (GPBUnknownFieldSetTest)
- (void)getTags:(int32_t*)tags; - (void)getTags:(int32_t*)tags;
@end @end
...@@ -112,6 +116,9 @@ ...@@ -112,6 +116,9 @@
field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease]; field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
[field addVarint:4]; [field addVarint:4];
[set1 addField:field]; [set1 addField:field];
field = [[[GPBUnknownField alloc] initWithNumber:10] autorelease];
[field addLengthDelimited:DataFromCStr("data1")];
[set1 addField:field];
GPBUnknownFieldSet* set2 = [[[GPBUnknownFieldSet alloc] init] autorelease]; GPBUnknownFieldSet* set2 = [[[GPBUnknownFieldSet alloc] init] autorelease];
field = [[[GPBUnknownField alloc] initWithNumber:1] autorelease]; field = [[[GPBUnknownField alloc] initWithNumber:1] autorelease];
...@@ -120,22 +127,26 @@ ...@@ -120,22 +127,26 @@
field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease]; field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
[field addVarint:3]; [field addVarint:3];
[set2 addField:field]; [set2 addField:field];
field = [[[GPBUnknownField alloc] initWithNumber:10] autorelease];
[field addLengthDelimited:DataFromCStr("data2")];
[set2 addField:field];
GPBUnknownFieldSet* set3 = [[[GPBUnknownFieldSet alloc] init] autorelease]; GPBUnknownFieldSet* set3 = [[[GPBUnknownFieldSet alloc] init] autorelease];
field = [[[GPBUnknownField alloc] initWithNumber:1] autorelease]; field = [[[GPBUnknownField alloc] initWithNumber:1] autorelease];
[field addVarint:1]; [field addVarint:1];
[set3 addField:field]; [set3 addField:field];
field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
[field addVarint:4];
[set3 addField:field];
GPBUnknownFieldSet* set4 = [[[GPBUnknownFieldSet alloc] init] autorelease];
field = [[[GPBUnknownField alloc] initWithNumber:2] autorelease]; field = [[[GPBUnknownField alloc] initWithNumber:2] autorelease];
[field addVarint:2]; [field addVarint:2];
[set4 addField:field]; [set3 addField:field];
field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease]; field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
[field addVarint:4];
[set3 addField:field];
[field addVarint:3]; [field addVarint:3];
[set4 addField:field]; [set3 addField:field];
field = [[[GPBUnknownField alloc] initWithNumber:10] autorelease];
[field addLengthDelimited:DataFromCStr("data1")];
[field addLengthDelimited:DataFromCStr("data2")];
[set3 addField:field];
TestEmptyMessage* source1 = [TestEmptyMessage message]; TestEmptyMessage* source1 = [TestEmptyMessage message];
[source1 setUnknownFields:set1]; [source1 setUnknownFields:set1];
...@@ -143,8 +154,6 @@ ...@@ -143,8 +154,6 @@
[source2 setUnknownFields:set2]; [source2 setUnknownFields:set2];
TestEmptyMessage* source3 = [TestEmptyMessage message]; TestEmptyMessage* source3 = [TestEmptyMessage message];
[source3 setUnknownFields:set3]; [source3 setUnknownFields:set3];
TestEmptyMessage* source4 = [TestEmptyMessage message];
[source4 setUnknownFields:set4];
TestEmptyMessage* destination1 = [TestEmptyMessage message]; TestEmptyMessage* destination1 = [TestEmptyMessage message];
[destination1 mergeFrom:source1]; [destination1 mergeFrom:source1];
...@@ -152,9 +161,10 @@ ...@@ -152,9 +161,10 @@
TestEmptyMessage* destination2 = [TestEmptyMessage message]; TestEmptyMessage* destination2 = [TestEmptyMessage message];
[destination2 mergeFrom:source3]; [destination2 mergeFrom:source3];
[destination2 mergeFrom:source4];
XCTAssertEqualObjects(destination1.data, destination2.data); XCTAssertEqualObjects(destination1.data, destination2.data);
XCTAssertEqualObjects(destination1.data, source3.data);
XCTAssertEqualObjects(destination2.data, source3.data);
} }
- (void)testClearMessage { - (void)testClearMessage {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment