1111#import " GPBUnknownField.h"
1212#import " GPBUnknownField_PackagePrivate.h"
1313#import " GPBUnknownFields.h"
14+ #import " GPBWireFormat.h"
1415#import " objectivec/Tests/Unittest.pbobjc.h"
1516#import " objectivec/Tests/UnittestMset.pbobjc.h"
1617
@@ -111,32 +112,43 @@ - (void)testParsePackedExtensions {
111112}
112113
113114const int kUnknownTypeId = 1550055 ;
115+ const int kUnknownTypeId2 = 1550056 ;
114116
115117- (void )testSerializeMessageSet {
116118 // Set up a MSetMessage with two known messages and an unknown one.
117119 MSetMessage* message_set = [MSetMessage message ];
118120 [[message_set getExtension: [MSetMessageExtension1 messageSetExtension ]] setI: 123 ];
119121 [[message_set getExtension: [MSetMessageExtension2 messageSetExtension ]] setStr: @" foo" ];
122+
120123 GPBUnknownField* unknownField =
121124 [[[GPBUnknownField alloc ] initWithNumber: kUnknownTypeId ] autorelease ];
122- [unknownField addLengthDelimited: [ NSData dataWithBytes: " bar" length: 3 ] ];
125+ [unknownField addLengthDelimited: DataFromCStr ( " bar" ) ];
123126 GPBUnknownFieldSet* unknownFieldSet = [[[GPBUnknownFieldSet alloc ] init ] autorelease ];
124127 [unknownFieldSet addField: unknownField];
125128 [message_set setUnknownFields: unknownFieldSet];
126129
130+ GPBUnknownFields* ufs = [[[GPBUnknownFields alloc ] init ] autorelease ];
131+ GPBUnknownFields* group = [ufs addGroupWithFieldNumber: GPBWireFormatMessageSetItem];
132+ [group addFieldNumber: GPBWireFormatMessageSetTypeId varint: kUnknownTypeId2 ];
133+ [group addFieldNumber: GPBWireFormatMessageSetMessage lengthDelimited: DataFromCStr (" baz" )];
134+ [message_set mergeUnknownFields: ufs extensionRegistry: [MSetUnittestMsetRoot extensionRegistry ]];
135+
127136 NSData * data = [message_set data ];
128137
129138 // Parse back using MSetRawMessageSet and check the contents.
130139 MSetRawMessageSet* raw = [MSetRawMessageSet parseFromData: data error: NULL ];
131140
141+ GPBUnknownFields* ufs2 = [[[GPBUnknownFields alloc ] initFromMessage: raw] autorelease ];
142+ XCTAssertTrue (ufs2.empty );
132143 XCTAssertEqual ([raw.unknownFields countOfFields ], (NSUInteger )0 );
133144
134- XCTAssertEqual (raw.itemArray .count , (NSUInteger )3 );
145+ XCTAssertEqual (raw.itemArray .count , (NSUInteger )4 );
135146 XCTAssertEqual ((uint32_t )[raw.itemArray[0 ] typeId ],
136147 [MSetMessageExtension1 messageSetExtension ].fieldNumber );
137148 XCTAssertEqual ((uint32_t )[raw.itemArray[1 ] typeId ],
138149 [MSetMessageExtension2 messageSetExtension ].fieldNumber );
139150 XCTAssertEqual ([raw.itemArray[2 ] typeId ], kUnknownTypeId );
151+ XCTAssertEqual ([raw.itemArray[3 ] typeId ], kUnknownTypeId2 );
140152
141153 MSetMessageExtension1* message1 =
142154 [MSetMessageExtension1 parseFromData: [((MSetRawMessageSet_Item*)raw.itemArray[0 ]) message ]
@@ -148,7 +160,8 @@ - (void)testSerializeMessageSet {
148160 error: NULL ];
149161 XCTAssertEqualObjects (message2.str , @" foo" );
150162
151- XCTAssertEqualObjects ([raw.itemArray[2 ] message ], [NSData dataWithBytes: " bar" length: 3 ]);
163+ XCTAssertEqualObjects ([raw.itemArray[2 ] message ], DataFromCStr (" bar" ));
164+ XCTAssertEqualObjects ([raw.itemArray[3 ] message ], DataFromCStr (" baz" ));
152165}
153166
154167- (void )testParseMessageSet {
@@ -176,7 +189,7 @@ - (void)testParseMessageSet {
176189 {
177190 MSetRawMessageSet_Item* item = [MSetRawMessageSet_Item message ];
178191 item.typeId = kUnknownTypeId ;
179- item.message = [ NSData dataWithBytes: " bar" length: 3 ] ;
192+ item.message = DataFromCStr ( " bar" ) ;
180193 [raw.itemArray addObject: item];
181194 }
182195
@@ -191,11 +204,22 @@ - (void)testParseMessageSet {
191204 XCTAssertEqualObjects ([[messageSet getExtension: [MSetMessageExtension2 messageSetExtension ]] str ],
192205 @" foo" );
193206
207+ GPBUnknownFields* ufs = [[[GPBUnknownFields alloc ] initFromMessage: messageSet] autorelease ];
208+ XCTAssertEqual (ufs.count , (NSUInteger )1 );
209+ GPBUnknownFields* group = [ufs firstGroup: GPBWireFormatMessageSetItem];
210+ XCTAssertNotNil (group);
211+ XCTAssertEqual (group.count , (NSUInteger )2 );
212+ uint64_t varint = 0 ;
213+ XCTAssertTrue ([group getFirst: GPBWireFormatMessageSetTypeId varint: &varint]);
214+ XCTAssertEqual (varint, kUnknownTypeId );
215+ XCTAssertEqualObjects ([group firstLengthDelimited: GPBWireFormatMessageSetMessage],
216+ DataFromCStr (" bar" ));
217+
194218 XCTAssertEqual ([messageSet.unknownFields countOfFields ], (NSUInteger )1 );
195219 GPBUnknownField* unknownField = [messageSet.unknownFields getField: kUnknownTypeId ];
196220 XCTAssertNotNil (unknownField);
197221 XCTAssertEqual (unknownField.lengthDelimitedList .count , (NSUInteger )1 );
198- XCTAssertEqualObjects (unknownField.lengthDelimitedList [0 ], [ NSData dataWithBytes: " bar" length: 3 ] );
222+ XCTAssertEqualObjects (unknownField.lengthDelimitedList [0 ], DataFromCStr ( " bar" ) );
199223}
200224
201225- (void )testParseMessageSet_FirstValueSticks {
0 commit comments