1313#import " GPBDictionary_PackagePrivate.h"
1414#import " GPBMessage_PackagePrivate.h"
1515#import " GPBTestUtilities.h"
16+ #import " GPBUnknownField.h"
1617#import " GPBUnknownFieldSet_PackagePrivate.h"
1718#import " GPBUnknownField_PackagePrivate.h"
19+ #import " GPBUnknownFields.h"
1820#import " objectivec/Tests/Unittest.pbobjc.h"
1921#import " objectivec/Tests/UnittestImport.pbobjc.h"
2022#import " objectivec/Tests/UnittestObjc.pbobjc.h"
@@ -501,6 +503,11 @@ - (void)testDescription {
501503
502504 [message setUnknownFields: unknownFields];
503505
506+ GPBUnknownFields *ufs = [[[GPBUnknownFields alloc ] init ] autorelease ];
507+ [ufs addFieldNumber: 1234 fixed32: 1234 ];
508+ [ufs addFieldNumber: 2345 varint: 54321 ];
509+ [message mergeUnknownFields: ufs extensionRegistry: nil ];
510+
504511 NSString *description = [message description ];
505512 XCTAssertGreaterThan ([description length ], 0U );
506513
@@ -985,6 +992,19 @@ - (void)testAutocreatedUnknownFields {
985992 XCTAssertFalse ([message hasOptionalNestedMessage ]);
986993 [message.optionalNestedMessage setUnknownFields: unknownFields];
987994 XCTAssertTrue ([message hasOptionalNestedMessage ]);
995+
996+ message.optionalNestedMessage = nil ;
997+ XCTAssertFalse ([message hasOptionalNestedMessage ]);
998+ GPBUnknownFields *ufs = [[[GPBUnknownFields alloc ] init ] autorelease ];
999+ [ufs addFieldNumber: 1 varint: 1 ];
1000+ [message.optionalNestedMessage mergeUnknownFields: ufs extensionRegistry: nil ];
1001+ XCTAssertTrue ([message hasOptionalNestedMessage ]);
1002+
1003+ message.optionalNestedMessage = nil ;
1004+ XCTAssertFalse ([message hasOptionalNestedMessage ]);
1005+ [ufs clear ]; // Also make sure merging zero length forces it to become visible.
1006+ [message.optionalNestedMessage mergeUnknownFields: ufs extensionRegistry: nil ];
1007+ XCTAssertTrue ([message hasOptionalNestedMessage ]);
9881008}
9891009
9901010- (void )testSetAutocreatedSubmessageToSelf {
@@ -1481,6 +1501,19 @@ - (void)testClosedEnumsInExtensions {
14811501 XCTAssertFalse ([msg hasExtension: [UnittestRoot repeatedNestedEnumExtension ]]);
14821502 XCTAssertFalse ([msg hasExtension: [UnittestRoot repeatedForeignEnumExtension ]]);
14831503
1504+ GPBUnknownFields *ufs = [[[GPBUnknownFields alloc ] initFromMessage: msg] autorelease ];
1505+ XCTAssertEqual (ufs.count , 3 );
1506+ uint64_t varint;
1507+ XCTAssertTrue ([ufs getFirst: [UnittestRoot optionalNestedEnumExtension ].fieldNumber
1508+ varint: &varint]);
1509+ XCTAssertEqual (varint, 10 );
1510+ XCTAssertTrue ([ufs getFirst: [UnittestRoot repeatedNestedEnumExtension ].fieldNumber
1511+ varint: &varint]);
1512+ XCTAssertEqual (varint, 11 );
1513+ XCTAssertTrue ([ufs getFirst: [UnittestRoot repeatedForeignEnumExtension ].fieldNumber
1514+ varint: &varint]);
1515+ XCTAssertEqual (varint, 12 );
1516+
14841517 GPBUnknownFieldSet *unknownFields = msg.unknownFields ;
14851518 GPBUnknownField *field =
14861519 [unknownFields getField: [UnittestRoot optionalNestedEnumExtension ].fieldNumber];
@@ -1523,6 +1556,18 @@ - (void)testClosedEnumsInExtensions {
15231556 expected = @[ @4 , @6 ];
15241557 XCTAssertEqualObjects ([msg getExtension: [UnittestRoot repeatedForeignEnumExtension ]], expected);
15251558
1559+ ufs = [[[GPBUnknownFields alloc ] initFromMessage: msg] autorelease ];
1560+ XCTAssertEqual (ufs.count , 3 );
1561+ XCTAssertTrue ([ufs getFirst: [UnittestRoot optionalNestedEnumExtension ].fieldNumber
1562+ varint: &varint]);
1563+ XCTAssertEqual (varint, 10 );
1564+ XCTAssertTrue ([ufs getFirst: [UnittestRoot repeatedNestedEnumExtension ].fieldNumber
1565+ varint: &varint]);
1566+ XCTAssertEqual (varint, 11 );
1567+ XCTAssertTrue ([ufs getFirst: [UnittestRoot repeatedForeignEnumExtension ].fieldNumber
1568+ varint: &varint]);
1569+ XCTAssertEqual (varint, 12 );
1570+
15261571 unknownFields = msg.unknownFields ;
15271572 field = [unknownFields getField: [UnittestRoot optionalNestedEnumExtension ].fieldNumber];
15281573 XCTAssertNotNil (field);
@@ -1840,6 +1885,9 @@ - (void)testGenerateAndParseUnknownMessage {
18401885 [unknowns mergeVarintField: 123 value: 456 ];
18411886 GPBMessage *message = [GPBMessage message ];
18421887 [message setUnknownFields: unknowns];
1888+ GPBUnknownFields *ufs = [[[GPBUnknownFields alloc ] init ] autorelease ];
1889+ [ufs addFieldNumber: 1234 varint: 5678 ];
1890+ [message mergeUnknownFields: ufs extensionRegistry: nil ];
18431891 NSData *data = [message data ];
18441892 GPBMessage *message2 = [GPBMessage parseFromData: data extensionRegistry: nil error: NULL ];
18451893 XCTAssertEqualObjects (message, message2);
@@ -1850,12 +1898,19 @@ - (void)testDelimitedWriteAndParseMultipleMessages {
18501898 [unknowns1 mergeVarintField: 123 value: 456 ];
18511899 GPBMessage *message1 = [GPBMessage message ];
18521900 [message1 setUnknownFields: unknowns1];
1901+ GPBUnknownFields *ufs1 = [[[GPBUnknownFields alloc ] init ] autorelease ];
1902+ [ufs1 addFieldNumber: 1234 varint: 5678 ];
1903+ [message1 mergeUnknownFields: ufs1 extensionRegistry: nil ];
18531904
18541905 GPBUnknownFieldSet *unknowns2 = [[[GPBUnknownFieldSet alloc ] init ] autorelease ];
18551906 [unknowns2 mergeVarintField: 789 value: 987 ];
18561907 [unknowns2 mergeVarintField: 654 value: 321 ];
18571908 GPBMessage *message2 = [GPBMessage message ];
18581909 [message2 setUnknownFields: unknowns2];
1910+ GPBUnknownFields *ufs2 = [[[GPBUnknownFields alloc ] init ] autorelease ];
1911+ [ufs2 addFieldNumber: 2345 fixed32: 6789 ];
1912+ [ufs2 addFieldNumber: 3456 fixed32: 7890 ];
1913+ [message2 mergeUnknownFields: ufs2 extensionRegistry: nil ];
18591914
18601915 NSMutableData *delimitedData = [NSMutableData data ];
18611916 [delimitedData appendData: [message1 delimitedData ]];
0 commit comments