Skip to content

Commit

Permalink
Merge pull request #57 from sofacoder/bugfix/mergeFromFiled-creates-i…
Browse files Browse the repository at this point in the history
…mmutable-copies-for-mutable-types

[FIX] changed "copy" to "mutableCopy" for NSMutableArray types
  • Loading branch information
alexeyxo committed Sep 9, 2015
2 parents 71fa48d + c293c4f commit bad9643
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/runtime/Classes/MutableField.m
Original file line number Diff line number Diff line change
Expand Up @@ -65,15 +65,15 @@ - (PBMutableField *)mergeFromField:(PBField *)other {

if (other.lengthDelimitedArray.count > 0) {
if (_lengthDelimitedArray == nil) {
_lengthDelimitedArray = [other.lengthDelimitedArray copy];
_lengthDelimitedArray = [other.lengthDelimitedArray mutableCopy];
} else {
[_lengthDelimitedArray addObjectsFromArray:other.lengthDelimitedArray];
}
}

if (other.groupArray.count > 0) {
if (_groupArray == nil) {
_groupArray = [other.groupArray copy];
_groupArray = [other.groupArray mutableCopy];
} else {
[_groupArray addObjectsFromArray:other.groupArray];
}
Expand Down
32 changes: 32 additions & 0 deletions src/runtime/Tests/UnknownFieldSetTest.m
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,38 @@ - (void) testMergeFrom {
XCTAssertEqualObjects(destination1.data, destination2.data, @"");
}

- (void) testMergeFrom_LengthDelimited {
PBUnknownFieldSet* set1 =
[[[[PBUnknownFieldSet builder]
addField:[[PBMutableField field] addLengthDelimited:[@"2" dataUsingEncoding:NSUTF8StringEncoding]] forNumber:2]
addField:[[PBMutableField field] addLengthDelimited:[@"4" dataUsingEncoding:NSUTF8StringEncoding]] forNumber:3] build];

PBUnknownFieldSet* set2 =
[[[[PBUnknownFieldSet builder]
addField:[[PBMutableField field] addLengthDelimited:[@"1" dataUsingEncoding:NSUTF8StringEncoding]] forNumber:1]
addField:[[PBMutableField field] addLengthDelimited:[@"3" dataUsingEncoding:NSUTF8StringEncoding]] forNumber:3] build];

PBUnknownFieldSet* set3 =
[[[[PBUnknownFieldSet builder]
addField:[[PBMutableField field] addLengthDelimited:[@"1" dataUsingEncoding:NSUTF8StringEncoding]] forNumber:1]
addField:[[PBMutableField field] addLengthDelimited:[@"4" dataUsingEncoding:NSUTF8StringEncoding]] forNumber:3] build];

PBUnknownFieldSet* set4 =
[[[[PBUnknownFieldSet builder]
addField:[[PBMutableField field] addLengthDelimited:[@"2" dataUsingEncoding:NSUTF8StringEncoding]] forNumber:2]
addField:[[PBMutableField field] addLengthDelimited:[@"3" dataUsingEncoding:NSUTF8StringEncoding]] forNumber:3] build];

TestEmptyMessage* source1 = (id)[[[TestEmptyMessage builder] setUnknownFields:set1] build];
TestEmptyMessage* source2 = (id)[[[TestEmptyMessage builder] setUnknownFields:set2] build];
TestEmptyMessage* source3 = (id)[[[TestEmptyMessage builder] setUnknownFields:set3] build];
TestEmptyMessage* source4 = (id)[[[TestEmptyMessage builder] setUnknownFields:set4] build];

TestEmptyMessage* destination1 = (id)[[[[TestEmptyMessage builder] mergeFrom:source1] mergeFrom:source2] build];
TestEmptyMessage* destination2 = (id)[[[[TestEmptyMessage builder] mergeFrom:source3] mergeFrom:source4] build];

XCTAssertEqualObjects(destination1.data, destination2.data, @"");
}


- (void) testClear {
PBUnknownFieldSet* fields =
Expand Down

0 comments on commit bad9643

Please sign in to comment.