@@ -683,25 +683,30 @@ - (void)testCopy {
683
683
[ufs addFieldNumber: 3 fixed64: 3 ];
684
684
[ufs addFieldNumber: 4 lengthDelimited: DataFromCStr (" foo" )];
685
685
GPBUnknownFields* group = [ufs addGroupWithFieldNumber: 5 ];
686
+ [group addFieldNumber: 10 varint: 10 ];
687
+ GPBUnknownFields* subGroup = [group addGroupWithFieldNumber: 100 ];
688
+ [subGroup addFieldNumber: 20 varint: 20 ];
686
689
687
690
GPBUnknownFields* ufs2 = [[ufs copy ] autorelease ];
688
691
XCTAssertTrue (ufs != ufs2); // Different objects
689
692
XCTAssertEqualObjects (ufs, ufs2); // Equal contents
690
- // All the actual field objects should be the same since they are immutable.
693
+ // All field objects but the group should be the same since they are immutable.
691
694
XCTAssertTrue ([[ufs fields: 1 ] firstObject ] == [[ufs2 fields: 1 ] firstObject ]); // Same object
692
695
XCTAssertTrue ([[ufs fields: 2 ] firstObject ] == [[ufs2 fields: 2 ] firstObject ]); // Same object
693
696
XCTAssertTrue ([[ufs fields: 3 ] firstObject ] == [[ufs2 fields: 3 ] firstObject ]); // Same object
694
697
XCTAssertTrue ([[ufs fields: 4 ] firstObject ] == [[ufs2 fields: 4 ] firstObject ]); // Same object
695
698
XCTAssertTrue ([[ufs fields: 4 ] firstObject ].lengthDelimited ==
696
- [[ufs2 fields: 4 ] firstObject ].lengthDelimited ); // Same object
697
- XCTAssertTrue ([[ufs fields: 5 ] firstObject ] == [[ufs2 fields: 5 ] firstObject ]); // Same object
698
- XCTAssertTrue (group == [[ufs2 fields: 5 ] firstObject ].group ); // Same object
699
-
700
- // Now force copies on the fields to confirm that is not making new objects either.
701
- for (GPBUnknownField* field in ufs) {
702
- GPBUnknownField* field2 = [[field copy ] autorelease ];
703
- XCTAssertTrue (field == field2); // Same object (since they aren't mutable).
704
- }
699
+ [[ufs2 fields: 4 ] firstObject ].lengthDelimited ); // Same object
700
+ // Since the group holds another `GPBUnknownFields` object (which is mutable), it will be a
701
+ // different object.
702
+ XCTAssertTrue ([[ufs fields: 5 ] firstObject ] != [[ufs2 fields: 5 ] firstObject ]);
703
+ XCTAssertTrue (group != [[ufs2 fields: 5 ] firstObject ].group );
704
+ XCTAssertEqualObjects (group, [[ufs2 fields: 5 ] firstObject ].group );
705
+ // And confirm that copy went deep so the nested group also is a different object.
706
+ GPBUnknownFields* groupCopied = [[ufs2 fields: 5 ] firstObject ].group ;
707
+ XCTAssertTrue ([[group fields: 100 ] firstObject ] != [[groupCopied fields: 100 ] firstObject ]);
708
+ XCTAssertTrue (subGroup != [[groupCopied fields: 100 ] firstObject ].group );
709
+ XCTAssertEqualObjects (subGroup, [[groupCopied fields: 100 ] firstObject ].group );
705
710
}
706
711
707
712
- (void )testInvalidFieldNumbers {
0 commit comments