13
13
#import "GPBDictionary_PackagePrivate.h"
14
14
#import "GPBMessage_PackagePrivate.h"
15
15
#import "GPBTestUtilities.h"
16
+ #import "GPBUnknownField.h"
16
17
#import "GPBUnknownFieldSet_PackagePrivate.h"
17
18
#import "GPBUnknownField_PackagePrivate.h"
19
+ #import "GPBUnknownFields.h"
18
20
#import "objectivec/Tests/Unittest.pbobjc.h"
19
21
#import "objectivec/Tests/UnittestImport.pbobjc.h"
20
22
#import "objectivec/Tests/UnittestObjc.pbobjc.h"
@@ -501,6 +503,11 @@ - (void)testDescription {
501
503
502
504
[message setUnknownFields:unknownFields];
503
505
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
+
504
511
NSString *description = [message description];
505
512
XCTAssertGreaterThan([description length], 0U);
506
513
@@ -985,6 +992,19 @@ - (void)testAutocreatedUnknownFields {
985
992
XCTAssertFalse([message hasOptionalNestedMessage]);
986
993
[message.optionalNestedMessage setUnknownFields:unknownFields];
987
994
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]);
988
1008
}
989
1009
990
1010
- (void)testSetAutocreatedSubmessageToSelf {
@@ -1481,6 +1501,19 @@ - (void)testClosedEnumsInExtensions {
1481
1501
XCTAssertFalse([msg hasExtension:[UnittestRoot repeatedNestedEnumExtension]]);
1482
1502
XCTAssertFalse([msg hasExtension:[UnittestRoot repeatedForeignEnumExtension]]);
1483
1503
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
+
1484
1517
GPBUnknownFieldSet *unknownFields = msg.unknownFields;
1485
1518
GPBUnknownField *field =
1486
1519
[unknownFields getField:[UnittestRoot optionalNestedEnumExtension].fieldNumber];
@@ -1523,6 +1556,18 @@ - (void)testClosedEnumsInExtensions {
1523
1556
expected = @[ @4, @6 ];
1524
1557
XCTAssertEqualObjects([msg getExtension:[UnittestRoot repeatedForeignEnumExtension]], expected);
1525
1558
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
+
1526
1571
unknownFields = msg.unknownFields;
1527
1572
field = [unknownFields getField:[UnittestRoot optionalNestedEnumExtension].fieldNumber];
1528
1573
XCTAssertNotNil(field);
@@ -1840,6 +1885,9 @@ - (void)testGenerateAndParseUnknownMessage {
1840
1885
[unknowns mergeVarintField:123 value:456];
1841
1886
GPBMessage *message = [GPBMessage message];
1842
1887
[message setUnknownFields:unknowns];
1888
+ GPBUnknownFields *ufs = [[[GPBUnknownFields alloc] init] autorelease];
1889
+ [ufs addFieldNumber:1234 varint:5678];
1890
+ [message mergeUnknownFields:ufs extensionRegistry:nil];
1843
1891
NSData *data = [message data];
1844
1892
GPBMessage *message2 = [GPBMessage parseFromData:data extensionRegistry:nil error:NULL];
1845
1893
XCTAssertEqualObjects(message, message2);
@@ -1850,12 +1898,19 @@ - (void)testDelimitedWriteAndParseMultipleMessages {
1850
1898
[unknowns1 mergeVarintField:123 value:456];
1851
1899
GPBMessage *message1 = [GPBMessage message];
1852
1900
[message1 setUnknownFields:unknowns1];
1901
+ GPBUnknownFields *ufs1 = [[[GPBUnknownFields alloc] init] autorelease];
1902
+ [ufs1 addFieldNumber:1234 varint:5678];
1903
+ [message1 mergeUnknownFields:ufs1 extensionRegistry:nil];
1853
1904
1854
1905
GPBUnknownFieldSet *unknowns2 = [[[GPBUnknownFieldSet alloc] init] autorelease];
1855
1906
[unknowns2 mergeVarintField:789 value:987];
1856
1907
[unknowns2 mergeVarintField:654 value:321];
1857
1908
GPBMessage *message2 = [GPBMessage message];
1858
1909
[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];
1859
1914
1860
1915
NSMutableData *delimitedData = [NSMutableData data];
1861
1916
[delimitedData appendData:[message1 delimitedData]];
0 commit comments