1// Protocol Buffers - Google's data interchange format 2// Copyright 2008 Google Inc. All rights reserved. 3// https://developers.google.com/protocol-buffers/ 4// 5// Redistribution and use in source and binary forms, with or without 6// modification, are permitted provided that the following conditions are 7// met: 8// 9// * Redistributions of source code must retain the above copyright 10// notice, this list of conditions and the following disclaimer. 11// * Redistributions in binary form must reproduce the above 12// copyright notice, this list of conditions and the following disclaimer 13// in the documentation and/or other materials provided with the 14// distribution. 15// * Neither the name of Google Inc. nor the names of its 16// contributors may be used to endorse or promote products derived from 17// this software without specific prior written permission. 18// 19// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31#import "GPBTestUtilities.h" 32 33#import "google/protobuf/MapUnittest.pbobjc.h" 34#import "google/protobuf/Unittest.pbobjc.h" 35#import "google/protobuf/UnittestImport.pbobjc.h" 36 37const uint32_t kGPBDefaultRepeatCount = 2; 38 39// Small category to easily turn a CString into an NSData. 40@interface NSData (GPBTestCase) 41+ (NSData *)gpbtu_dataWithCString:(char *)buffer; 42+ (instancetype)gpbtu_dataWithEmbeddedNulls; 43@end 44 45@implementation NSData (GPBTestCase) 46+ (NSData *)gpbtu_dataWithCString:(char *)buffer { 47 return [NSData dataWithBytes:buffer length:strlen(buffer)]; 48} 49 50+ (instancetype)gpbtu_dataWithUint32:(uint32_t)value { 51 return [[[self alloc] initWithUint32_gpbtu:value] autorelease]; 52} 53 54- (instancetype)initWithUint32_gpbtu:(uint32_t)value { 55 value = CFSwapInt32HostToLittle(value); 56 return [self initWithBytes:&value length:sizeof(value)]; 57} 58 59+ (instancetype)gpbtu_dataWithEmbeddedNulls { 60 char bytes[6] = "\1\0\2\3\0\5"; 61 return [self dataWithBytes:bytes length:sizeof(bytes)]; 62} 63@end 64 65@implementation GPBTestCase 66 67// Return data for name. Optionally (based on #if setting) write out dataToWrite 68// to replace that data. Useful for setting golden masters. 69- (NSData *)getDataFileNamed:(NSString *)name 70 dataToWrite:(NSData *)dataToWrite { 71 NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 72 NSString *path = [bundle pathForResource:[name stringByDeletingPathExtension] 73 ofType:[name pathExtension]]; 74 XCTAssertNotNil(path, @"Unable to find %@", name); 75 NSData *data = [NSData dataWithContentsOfFile:path]; 76 XCTAssertNotNil(data, @"Unable to load from %@", path); 77#if 0 78 // Enable to write out golden master files. 79 if (!path) { 80 path = [[bundle resourcePath] stringByAppendingPathComponent:name]; 81 } 82 NSError *error = nil; 83 BOOL wrote = [dataToWrite writeToFile:path options:NSDataWritingAtomic error:&error]; 84 XCTAssertTrue(wrote, @"Unable to write %@ (%@)", path, error); 85 NSLog(@"Wrote data file to %@", path); 86#else 87 // Kill off the unused variable warning. 88 dataToWrite = dataToWrite; 89#endif 90 return data; 91} 92 93// ------------------------------------------------------------------- 94 95- (void)modifyRepeatedExtensions:(TestAllExtensions *)message { 96 [message setExtension:[UnittestRoot repeatedInt32Extension] 97 index:1 98 value:@501]; 99 [message setExtension:[UnittestRoot repeatedInt64Extension] 100 index:1 101 value:@502]; 102 [message setExtension:[UnittestRoot repeatedUint32Extension] 103 index:1 104 value:@503]; 105 [message setExtension:[UnittestRoot repeatedUint64Extension] 106 index:1 107 value:@504]; 108 [message setExtension:[UnittestRoot repeatedSint32Extension] 109 index:1 110 value:@505]; 111 [message setExtension:[UnittestRoot repeatedSint64Extension] 112 index:1 113 value:@506]; 114 [message setExtension:[UnittestRoot repeatedFixed32Extension] 115 index:1 116 value:@507]; 117 [message setExtension:[UnittestRoot repeatedFixed64Extension] 118 index:1 119 value:@508]; 120 [message setExtension:[UnittestRoot repeatedSfixed32Extension] 121 index:1 122 value:@509]; 123 [message setExtension:[UnittestRoot repeatedSfixed64Extension] 124 index:1 125 value:@510]; 126 [message setExtension:[UnittestRoot repeatedFloatExtension] 127 index:1 128 value:@511.0f]; 129 [message setExtension:[UnittestRoot repeatedDoubleExtension] 130 index:1 131 value:@512.0]; 132 [message setExtension:[UnittestRoot repeatedBoolExtension] 133 index:1 134 value:@YES]; 135 [message setExtension:[UnittestRoot repeatedStringExtension] 136 index:1 137 value:@"515"]; 138 [message setExtension:[UnittestRoot repeatedBytesExtension] 139 index:1 140 value:[NSData gpbtu_dataWithUint32:516]]; 141 142 RepeatedGroup_extension *repeatedGroup = [RepeatedGroup_extension message]; 143 [repeatedGroup setA:517]; 144 [message setExtension:[UnittestRoot repeatedGroupExtension] 145 index:1 146 value:repeatedGroup]; 147 TestAllTypes_NestedMessage *nestedMessage = 148 [TestAllTypes_NestedMessage message]; 149 [nestedMessage setBb:518]; 150 [message setExtension:[UnittestRoot repeatedNestedMessageExtension] 151 index:1 152 value:nestedMessage]; 153 ForeignMessage *foreignMessage = [ForeignMessage message]; 154 [foreignMessage setC:519]; 155 [message setExtension:[UnittestRoot repeatedForeignMessageExtension] 156 index:1 157 value:foreignMessage]; 158 ImportMessage *importMessage = [ImportMessage message]; 159 [importMessage setD:520]; 160 [message setExtension:[UnittestRoot repeatedImportMessageExtension] 161 index:1 162 value:importMessage]; 163 164 [message setExtension:[UnittestRoot repeatedNestedEnumExtension] 165 index:1 166 value:@(TestAllTypes_NestedEnum_Foo)]; 167 [message setExtension:[UnittestRoot repeatedForeignEnumExtension] 168 index:1 169 value:@(ForeignEnum_ForeignFoo)]; 170 [message setExtension:[UnittestRoot repeatedImportEnumExtension] 171 index:1 172 value:@(ImportEnum_ImportFoo)]; 173 174 [message setExtension:[UnittestRoot repeatedStringPieceExtension] 175 index:1 176 value:@"524"]; 177 [message setExtension:[UnittestRoot repeatedCordExtension] 178 index:1 179 value:@"525"]; 180} 181 182- (void)assertAllExtensionsSet:(TestAllExtensions *)message 183 repeatedCount:(uint32_t)count { 184 XCTAssertTrue([message hasExtension:[UnittestRoot optionalInt32Extension]]); 185 XCTAssertTrue([message hasExtension:[UnittestRoot optionalInt64Extension]]); 186 XCTAssertTrue([message hasExtension:[UnittestRoot optionalUint32Extension]]); 187 XCTAssertTrue([message hasExtension:[UnittestRoot optionalUint64Extension]]); 188 XCTAssertTrue([message hasExtension:[UnittestRoot optionalSint32Extension]]); 189 XCTAssertTrue([message hasExtension:[UnittestRoot optionalSint64Extension]]); 190 XCTAssertTrue([message hasExtension:[UnittestRoot optionalFixed32Extension]]); 191 XCTAssertTrue([message hasExtension:[UnittestRoot optionalFixed64Extension]]); 192 XCTAssertTrue([message hasExtension:[UnittestRoot optionalSfixed32Extension]]); 193 XCTAssertTrue([message hasExtension:[UnittestRoot optionalSfixed64Extension]]); 194 XCTAssertTrue([message hasExtension:[UnittestRoot optionalFloatExtension]]); 195 XCTAssertTrue([message hasExtension:[UnittestRoot optionalDoubleExtension]]); 196 XCTAssertTrue([message hasExtension:[UnittestRoot optionalBoolExtension]]); 197 XCTAssertTrue([message hasExtension:[UnittestRoot optionalStringExtension]]); 198 XCTAssertTrue([message hasExtension:[UnittestRoot optionalBytesExtension]]); 199 200 XCTAssertTrue([message hasExtension:[UnittestRoot optionalGroupExtension]]); 201 XCTAssertTrue([message hasExtension:[UnittestRoot optionalNestedMessageExtension]]); 202 XCTAssertTrue([message hasExtension:[UnittestRoot optionalForeignMessageExtension]]); 203 XCTAssertTrue([message hasExtension:[UnittestRoot optionalImportMessageExtension]]); 204 205 XCTAssertTrue([[message getExtension:[UnittestRoot optionalGroupExtension]] hasA]); 206 XCTAssertTrue([[message getExtension:[UnittestRoot optionalNestedMessageExtension]] hasBb]); 207 XCTAssertTrue([[message getExtension:[UnittestRoot optionalForeignMessageExtension]] hasC]); 208 XCTAssertTrue([[message getExtension:[UnittestRoot optionalImportMessageExtension]] hasD]); 209 210 XCTAssertTrue([message hasExtension:[UnittestRoot optionalNestedEnumExtension]]); 211 XCTAssertTrue([message hasExtension:[UnittestRoot optionalForeignEnumExtension]]); 212 XCTAssertTrue([message hasExtension:[UnittestRoot optionalImportEnumExtension]]); 213 214 XCTAssertTrue([message hasExtension:[UnittestRoot optionalStringPieceExtension]]); 215 XCTAssertTrue([message hasExtension:[UnittestRoot optionalCordExtension]]); 216 217 XCTAssertTrue([message hasExtension:[UnittestRoot defaultInt32Extension]]); 218 XCTAssertTrue([message hasExtension:[UnittestRoot defaultInt64Extension]]); 219 XCTAssertTrue([message hasExtension:[UnittestRoot defaultUint32Extension]]); 220 XCTAssertTrue([message hasExtension:[UnittestRoot defaultUint64Extension]]); 221 XCTAssertTrue([message hasExtension:[UnittestRoot defaultSint32Extension]]); 222 XCTAssertTrue([message hasExtension:[UnittestRoot defaultSint64Extension]]); 223 XCTAssertTrue([message hasExtension:[UnittestRoot defaultFixed32Extension]]); 224 XCTAssertTrue([message hasExtension:[UnittestRoot defaultFixed64Extension]]); 225 XCTAssertTrue([message hasExtension:[UnittestRoot defaultSfixed32Extension]]); 226 XCTAssertTrue([message hasExtension:[UnittestRoot defaultSfixed64Extension]]); 227 XCTAssertTrue([message hasExtension:[UnittestRoot defaultFloatExtension]]); 228 XCTAssertTrue([message hasExtension:[UnittestRoot defaultDoubleExtension]]); 229 XCTAssertTrue([message hasExtension:[UnittestRoot defaultBoolExtension]]); 230 XCTAssertTrue([message hasExtension:[UnittestRoot defaultStringExtension]]); 231 XCTAssertTrue([message hasExtension:[UnittestRoot defaultBytesExtension]]); 232 233 XCTAssertTrue([message hasExtension:[UnittestRoot defaultNestedEnumExtension]]); 234 XCTAssertTrue([message hasExtension:[UnittestRoot defaultForeignEnumExtension]]); 235 XCTAssertTrue([message hasExtension:[UnittestRoot defaultImportEnumExtension]]); 236 237 XCTAssertTrue([message hasExtension:[UnittestRoot defaultStringPieceExtension]]); 238 XCTAssertTrue([message hasExtension:[UnittestRoot defaultCordExtension]]); 239 240 XCTAssertEqual(101, [[message getExtension:[UnittestRoot optionalInt32Extension]] intValue]); 241 XCTAssertEqual(102LL, [[message getExtension:[UnittestRoot optionalInt64Extension]] longLongValue]); 242 XCTAssertEqual(103U, [[message getExtension:[UnittestRoot optionalUint32Extension]] unsignedIntValue]); 243 XCTAssertEqual(104ULL, [[message getExtension:[UnittestRoot optionalUint64Extension]] unsignedLongLongValue]); 244 XCTAssertEqual(105, [[message getExtension:[UnittestRoot optionalSint32Extension]] intValue]); 245 XCTAssertEqual(106LL, [[message getExtension:[UnittestRoot optionalSint64Extension]] longLongValue]); 246 XCTAssertEqual(107U, [[message getExtension:[UnittestRoot optionalFixed32Extension]] unsignedIntValue]); 247 XCTAssertEqual(108ULL, [[message getExtension:[UnittestRoot optionalFixed64Extension]] unsignedLongLongValue]); 248 XCTAssertEqual(109, [[message getExtension:[UnittestRoot optionalSfixed32Extension]] intValue]); 249 XCTAssertEqual(110LL, [[message getExtension:[UnittestRoot optionalSfixed64Extension]] longLongValue]); 250 XCTAssertEqualWithAccuracy(111.0f, [[message getExtension:[UnittestRoot optionalFloatExtension]] floatValue], 0.01); 251 XCTAssertEqualWithAccuracy(112.0, [[message getExtension:[UnittestRoot optionalDoubleExtension]] doubleValue], 0.01); 252 XCTAssertTrue([[message getExtension:[UnittestRoot optionalBoolExtension]] boolValue]); 253 XCTAssertEqualObjects(@"115", [message getExtension:[UnittestRoot optionalStringExtension]]); 254 XCTAssertEqualObjects([NSData gpbtu_dataWithEmbeddedNulls], [message getExtension:[UnittestRoot optionalBytesExtension]]); 255 256 XCTAssertEqual(117, [(TestAllTypes_OptionalGroup*)[message getExtension:[UnittestRoot optionalGroupExtension]] a]); 257 XCTAssertEqual(118, [(TestAllTypes_NestedMessage*)[message getExtension:[UnittestRoot optionalNestedMessageExtension]] bb]); 258 XCTAssertEqual(119, [[message getExtension:[UnittestRoot optionalForeignMessageExtension]] c]); 259 XCTAssertEqual(120, [[message getExtension:[UnittestRoot optionalImportMessageExtension]] d]); 260 261 XCTAssertEqual(TestAllTypes_NestedEnum_Baz, [[message getExtension:[UnittestRoot optionalNestedEnumExtension]] intValue]); 262 XCTAssertEqual(ForeignEnum_ForeignBaz, [[message getExtension:[UnittestRoot optionalForeignEnumExtension]] intValue]); 263 XCTAssertEqual(ImportEnum_ImportBaz, [[message getExtension:[UnittestRoot optionalImportEnumExtension]] intValue]); 264 265 XCTAssertEqualObjects(@"124", [message getExtension:[UnittestRoot optionalStringPieceExtension]]); 266 XCTAssertEqualObjects(@"125", [message getExtension:[UnittestRoot optionalCordExtension]]); 267 268 // ----------------------------------------------------------------- 269 270 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedInt32Extension]] count]); 271 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedInt64Extension]] count]); 272 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedUint32Extension]] count]); 273 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedUint64Extension]] count]); 274 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedSint32Extension]] count]); 275 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedSint64Extension]] count]); 276 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedFixed32Extension]] count]); 277 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedFixed64Extension]] count]); 278 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedSfixed32Extension]] count]); 279 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedSfixed64Extension]] count]); 280 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedFloatExtension]] count]); 281 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedDoubleExtension]] count]); 282 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedBoolExtension]] count]); 283 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedStringExtension]] count]); 284 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedBytesExtension]] count]); 285 286 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedGroupExtension]] count]); 287 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedNestedMessageExtension]] count]); 288 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedForeignMessageExtension]] count]); 289 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedImportMessageExtension]] count]); 290 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedNestedEnumExtension]] count]); 291 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedForeignEnumExtension]] count]); 292 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedImportEnumExtension]] count]); 293 294 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedStringPieceExtension]] count]); 295 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedCordExtension]] count]); 296 297 for (uint32_t i = 0; i < count; ++i) { 298 id extension = [message getExtension:[UnittestRoot repeatedInt32Extension]]; 299 XCTAssertEqual((int)(201 + i * 100), [extension[i] intValue]); 300 extension = [message getExtension:[UnittestRoot repeatedInt64Extension]]; 301 XCTAssertEqual(202 + i * 100, [extension[i] longLongValue]); 302 extension = [message getExtension:[UnittestRoot repeatedUint32Extension]]; 303 XCTAssertEqual(203 + i * 100, [extension[i] unsignedIntValue]); 304 extension = [message getExtension:[UnittestRoot repeatedUint64Extension]]; 305 XCTAssertEqual(204 + i * 100, [extension[i] unsignedLongLongValue]); 306 extension = [message getExtension:[UnittestRoot repeatedSint32Extension]]; 307 XCTAssertEqual((int)(205 + i * 100), [extension[i] intValue]); 308 extension = [message getExtension:[UnittestRoot repeatedSint64Extension]]; 309 XCTAssertEqual(206 + i * 100, [extension[i] longLongValue]); 310 extension = [message getExtension:[UnittestRoot repeatedFixed32Extension]]; 311 XCTAssertEqual(207 + i * 100, [extension[i] unsignedIntValue]); 312 extension = [message getExtension:[UnittestRoot repeatedFixed64Extension]]; 313 XCTAssertEqual(208 + i * 100, [extension[i] unsignedLongLongValue]); 314 extension = [message getExtension:[UnittestRoot repeatedSfixed32Extension]]; 315 XCTAssertEqual((int)(209 + i * 100), [extension[i] intValue]); 316 extension = [message getExtension:[UnittestRoot repeatedSfixed64Extension]]; 317 XCTAssertEqual(210 + i * 100, [extension[i] longLongValue]); 318 extension = [message getExtension:[UnittestRoot repeatedFloatExtension]]; 319 XCTAssertEqualWithAccuracy(211 + i * 100, [extension[i] floatValue], 0.01); 320 extension = [message getExtension:[UnittestRoot repeatedDoubleExtension]]; 321 XCTAssertEqualWithAccuracy(212 + i * 100, [extension[i] doubleValue], 0.01); 322 extension = [message getExtension:[UnittestRoot repeatedBoolExtension]]; 323 XCTAssertEqual((i % 2) ? YES : NO, [extension[i] boolValue]); 324 325 NSString *string = [[NSString alloc] initWithFormat:@"%d", 215 + i * 100]; 326 extension = [message getExtension:[UnittestRoot repeatedStringExtension]]; 327 XCTAssertEqualObjects(string, extension[i]); 328 [string release]; 329 330 NSData *data = [[NSData alloc] initWithUint32_gpbtu:216 + i * 100]; 331 extension = [message getExtension:[UnittestRoot repeatedBytesExtension]]; 332 XCTAssertEqualObjects(data, extension[i]); 333 [data release]; 334 335 extension = [message getExtension:[UnittestRoot repeatedGroupExtension]]; 336 XCTAssertEqual((int)(217 + i * 100), [(TestAllTypes_OptionalGroup*)extension[i] a]); 337 extension = [message getExtension:[UnittestRoot repeatedNestedMessageExtension]]; 338 XCTAssertEqual((int)(218 + i * 100), [(TestAllTypes_NestedMessage*)extension[i] bb]); 339 extension = [message getExtension:[UnittestRoot repeatedForeignMessageExtension]]; 340 XCTAssertEqual((int)(219 + i * 100), [extension[i] c]); 341 extension = [message getExtension:[UnittestRoot repeatedImportMessageExtension]]; 342 XCTAssertEqual((int)(220 + i * 100), [extension[i] d]); 343 344 extension = [message getExtension:[UnittestRoot repeatedNestedEnumExtension]]; 345 XCTAssertEqual((i % 2) ? TestAllTypes_NestedEnum_Bar : TestAllTypes_NestedEnum_Baz, [extension[i] intValue]); 346 extension = [message getExtension:[UnittestRoot repeatedForeignEnumExtension]]; 347 XCTAssertEqual((i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz, [extension[i] intValue]); 348 extension = [message getExtension:[UnittestRoot repeatedImportEnumExtension]]; 349 XCTAssertEqual((i % 2) ? ImportEnum_ImportBar : ImportEnum_ImportBaz, [extension[i] intValue]); 350 351 string = [[NSString alloc] initWithFormat:@"%d", 224 + i * 100]; 352 extension = [message getExtension:[UnittestRoot repeatedStringPieceExtension]]; 353 XCTAssertEqualObjects(string, extension[i]); 354 [string release]; 355 356 string = [[NSString alloc] initWithFormat:@"%d", 225 + i * 100]; 357 extension = [message getExtension:[UnittestRoot repeatedCordExtension]]; 358 XCTAssertEqualObjects(string, extension[i]); 359 [string release]; 360 } 361 362 // ----------------------------------------------------------------- 363 364 XCTAssertTrue([message hasExtension:[UnittestRoot defaultInt32Extension]]); 365 XCTAssertTrue([message hasExtension:[UnittestRoot defaultInt64Extension]]); 366 XCTAssertTrue([message hasExtension:[UnittestRoot defaultUint32Extension]]); 367 XCTAssertTrue([message hasExtension:[UnittestRoot defaultUint64Extension]]); 368 XCTAssertTrue([message hasExtension:[UnittestRoot defaultSint32Extension]]); 369 XCTAssertTrue([message hasExtension:[UnittestRoot defaultSint64Extension]]); 370 XCTAssertTrue([message hasExtension:[UnittestRoot defaultFixed32Extension]]); 371 XCTAssertTrue([message hasExtension:[UnittestRoot defaultFixed64Extension]]); 372 XCTAssertTrue([message hasExtension:[UnittestRoot defaultSfixed32Extension]]); 373 XCTAssertTrue([message hasExtension:[UnittestRoot defaultSfixed64Extension]]); 374 XCTAssertTrue([message hasExtension:[UnittestRoot defaultFloatExtension]]); 375 XCTAssertTrue([message hasExtension:[UnittestRoot defaultDoubleExtension]]); 376 XCTAssertTrue([message hasExtension:[UnittestRoot defaultBoolExtension]]); 377 XCTAssertTrue([message hasExtension:[UnittestRoot defaultStringExtension]]); 378 XCTAssertTrue([message hasExtension:[UnittestRoot defaultBytesExtension]]); 379 380 XCTAssertTrue([message hasExtension:[UnittestRoot defaultNestedEnumExtension]]); 381 XCTAssertTrue([message hasExtension:[UnittestRoot defaultForeignEnumExtension]]); 382 XCTAssertTrue([message hasExtension:[UnittestRoot defaultImportEnumExtension]]); 383 384 XCTAssertTrue([message hasExtension:[UnittestRoot defaultStringPieceExtension]]); 385 XCTAssertTrue([message hasExtension:[UnittestRoot defaultCordExtension]]); 386 387 XCTAssertEqual(401, [[message getExtension:[UnittestRoot defaultInt32Extension]] intValue]); 388 XCTAssertEqual(402LL, [[message getExtension:[UnittestRoot defaultInt64Extension]] longLongValue]); 389 XCTAssertEqual(403U, [[message getExtension:[UnittestRoot defaultUint32Extension]] unsignedIntValue]); 390 XCTAssertEqual(404ULL, [[message getExtension:[UnittestRoot defaultUint64Extension]] unsignedLongLongValue]); 391 XCTAssertEqual(405, [[message getExtension:[UnittestRoot defaultSint32Extension]] intValue]); 392 XCTAssertEqual(406LL, [[message getExtension:[UnittestRoot defaultSint64Extension]] longLongValue]); 393 XCTAssertEqual(407U, [[message getExtension:[UnittestRoot defaultFixed32Extension]] unsignedIntValue]); 394 XCTAssertEqual(408ULL, [[message getExtension:[UnittestRoot defaultFixed64Extension]] unsignedLongLongValue]); 395 XCTAssertEqual(409, [[message getExtension:[UnittestRoot defaultSfixed32Extension]] intValue]); 396 XCTAssertEqual(410LL,[[message getExtension:[UnittestRoot defaultSfixed64Extension]] longLongValue]); 397 XCTAssertEqualWithAccuracy(411.0f, [[message getExtension:[UnittestRoot defaultFloatExtension]] floatValue], 0.01); 398 XCTAssertEqualWithAccuracy(412.0, [[message getExtension:[UnittestRoot defaultDoubleExtension]] doubleValue], 0.01); 399 XCTAssertFalse([[message getExtension:[UnittestRoot defaultBoolExtension]] boolValue]); 400 XCTAssertEqualObjects(@"415", [message getExtension:[UnittestRoot defaultStringExtension]]); 401 XCTAssertEqualObjects([NSData gpbtu_dataWithUint32:416], [message getExtension:[UnittestRoot defaultBytesExtension]]); 402 403 XCTAssertEqual(TestAllTypes_NestedEnum_Foo, [[message getExtension:[UnittestRoot defaultNestedEnumExtension]] intValue]); 404 XCTAssertEqual(ForeignEnum_ForeignFoo, [[message getExtension:[UnittestRoot defaultForeignEnumExtension]] intValue]); 405 XCTAssertEqual(ImportEnum_ImportFoo, [[message getExtension:[UnittestRoot defaultImportEnumExtension]] intValue]); 406 407 XCTAssertEqualObjects(@"424", [message getExtension:[UnittestRoot defaultStringPieceExtension]]); 408 XCTAssertEqualObjects(@"425", [message getExtension:[UnittestRoot defaultCordExtension]]); 409} 410 411- (void)assertRepeatedExtensionsModified:(TestAllExtensions *)message 412 repeatedCount:(uint32_t)count { 413 // ModifyRepeatedFields only sets the second repeated element of each 414 // field. In addition to verifying this, we also verify that the first 415 // element and size were *not* modified. 416 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedInt32Extension]] count]); 417 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedInt64Extension]] count]); 418 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedUint32Extension]] count]); 419 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedUint64Extension]] count]); 420 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedSint32Extension]] count]); 421 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedSint64Extension]] count]); 422 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedFixed32Extension]] count]); 423 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedFixed64Extension]] count]); 424 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedSfixed32Extension]] count]); 425 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedSfixed64Extension]] count]); 426 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedFloatExtension]] count]); 427 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedDoubleExtension]] count]); 428 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedBoolExtension]] count]); 429 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedStringExtension]] count]); 430 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedBytesExtension]] count]); 431 432 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedGroupExtension]] count]); 433 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedNestedMessageExtension]] count]); 434 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedForeignMessageExtension]] count]); 435 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedImportMessageExtension]] count]); 436 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedNestedEnumExtension]] count]); 437 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedForeignEnumExtension]] count]); 438 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedImportEnumExtension]] count]); 439 440 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedStringPieceExtension]] count]); 441 XCTAssertEqual(count, [[message getExtension:[UnittestRoot repeatedCordExtension]] count]); 442 443 XCTAssertEqual(201,[[message getExtension:[UnittestRoot repeatedInt32Extension]][0] intValue]); 444 XCTAssertEqual(202LL, [[message getExtension:[UnittestRoot repeatedInt64Extension]][0] longLongValue]); 445 XCTAssertEqual(203U, [[message getExtension:[UnittestRoot repeatedUint32Extension]][0] unsignedIntValue]); 446 XCTAssertEqual(204ULL, [[message getExtension:[UnittestRoot repeatedUint64Extension]][0] unsignedLongLongValue]); 447 XCTAssertEqual(205, [[message getExtension:[UnittestRoot repeatedSint32Extension]][0] intValue]); 448 XCTAssertEqual(206LL, [[message getExtension:[UnittestRoot repeatedSint64Extension]][0] longLongValue]); 449 XCTAssertEqual(207U, [[message getExtension:[UnittestRoot repeatedFixed32Extension]][0] unsignedIntValue]); 450 XCTAssertEqual(208ULL, [[message getExtension:[UnittestRoot repeatedFixed64Extension]][0] unsignedLongLongValue]); 451 XCTAssertEqual(209, [[message getExtension:[UnittestRoot repeatedSfixed32Extension]][0] intValue]); 452 XCTAssertEqual(210LL, [[message getExtension:[UnittestRoot repeatedSfixed64Extension]][0] longLongValue]); 453 XCTAssertEqualWithAccuracy(211.0f, [[message getExtension:[UnittestRoot repeatedFloatExtension]][0] floatValue], 0.01); 454 XCTAssertEqualWithAccuracy(212.0, [[message getExtension:[UnittestRoot repeatedDoubleExtension]][0] doubleValue], 0.01); 455 XCTAssertFalse([[message getExtension:[UnittestRoot repeatedBoolExtension]][0] boolValue]); 456 XCTAssertEqualObjects(@"215", [message getExtension:[UnittestRoot repeatedStringExtension]][0]); 457 XCTAssertEqualObjects([NSData gpbtu_dataWithUint32:216], [message getExtension:[UnittestRoot repeatedBytesExtension]][0]); 458 459 XCTAssertEqual(217, [(TestAllTypes_OptionalGroup*)[message getExtension:[UnittestRoot repeatedGroupExtension]][0] a]); 460 XCTAssertEqual(218, [(TestAllTypes_NestedMessage*)[message getExtension:[UnittestRoot repeatedNestedMessageExtension]][0] bb]); 461 XCTAssertEqual(219, [[message getExtension:[UnittestRoot repeatedForeignMessageExtension]][0] c]); 462 XCTAssertEqual(220, [[message getExtension:[UnittestRoot repeatedImportMessageExtension]][0] d]); 463 464 XCTAssertEqual(TestAllTypes_NestedEnum_Baz, 465 [[message getExtension:[UnittestRoot repeatedNestedEnumExtension]][0] intValue]); 466 XCTAssertEqual(ForeignEnum_ForeignBaz, 467 [[message getExtension:[UnittestRoot repeatedForeignEnumExtension]][0] intValue]); 468 XCTAssertEqual(ImportEnum_ImportBaz, 469 [[message getExtension:[UnittestRoot repeatedImportEnumExtension]][0] intValue]); 470 471 XCTAssertEqualObjects(@"224", [message getExtension:[UnittestRoot repeatedStringPieceExtension]][0]); 472 XCTAssertEqualObjects(@"225", [message getExtension:[UnittestRoot repeatedCordExtension]][0]); 473 474 // Actually verify the second (modified) elements now. 475 XCTAssertEqual(501, [[message getExtension:[UnittestRoot repeatedInt32Extension]][1] intValue]); 476 XCTAssertEqual(502LL, [[message getExtension:[UnittestRoot repeatedInt64Extension]][1] longLongValue]); 477 XCTAssertEqual(503U, [[message getExtension:[UnittestRoot repeatedUint32Extension]][1] unsignedIntValue]); 478 XCTAssertEqual(504ULL, [[message getExtension:[UnittestRoot repeatedUint64Extension]][1] unsignedLongLongValue]); 479 XCTAssertEqual(505, [[message getExtension:[UnittestRoot repeatedSint32Extension]][1] intValue]); 480 XCTAssertEqual(506LL, [[message getExtension:[UnittestRoot repeatedSint64Extension]][1] longLongValue]); 481 XCTAssertEqual(507U, [[message getExtension:[UnittestRoot repeatedFixed32Extension]][1] unsignedIntValue]); 482 XCTAssertEqual(508ULL, [[message getExtension:[UnittestRoot repeatedFixed64Extension]][1] unsignedLongLongValue]); 483 XCTAssertEqual(509, [[message getExtension:[UnittestRoot repeatedSfixed32Extension]][1] intValue]); 484 XCTAssertEqual(510LL, [[message getExtension:[UnittestRoot repeatedSfixed64Extension]][1] longLongValue]); 485 XCTAssertEqualWithAccuracy(511.0f, [[message getExtension:[UnittestRoot repeatedFloatExtension]][1] floatValue], 0.01); 486 XCTAssertEqualWithAccuracy(512.0, [[message getExtension:[UnittestRoot repeatedDoubleExtension]][1] doubleValue], 0.01); 487 XCTAssertTrue([[message getExtension:[UnittestRoot repeatedBoolExtension]][1] boolValue]); 488 XCTAssertEqualObjects(@"515", [message getExtension:[UnittestRoot repeatedStringExtension]][1]); 489 XCTAssertEqualObjects([NSData gpbtu_dataWithUint32:516], [message getExtension:[UnittestRoot repeatedBytesExtension]][1]); 490 491 XCTAssertEqual(517, [(TestAllTypes_OptionalGroup*)[message getExtension:[UnittestRoot repeatedGroupExtension]][1] a]); 492 XCTAssertEqual(518, [(TestAllTypes_NestedMessage*)[message getExtension:[UnittestRoot repeatedNestedMessageExtension]][1] bb]); 493 XCTAssertEqual(519, [[message getExtension:[UnittestRoot repeatedForeignMessageExtension]][1] c]); 494 XCTAssertEqual(520, [[message getExtension:[UnittestRoot repeatedImportMessageExtension]][1] d]); 495 496 XCTAssertEqual(TestAllTypes_NestedEnum_Foo, 497 [[message getExtension:[UnittestRoot repeatedNestedEnumExtension]][1] intValue]); 498 XCTAssertEqual(ForeignEnum_ForeignFoo, 499 [[message getExtension:[UnittestRoot repeatedForeignEnumExtension]][1] intValue]); 500 XCTAssertEqual(ImportEnum_ImportFoo, 501 [[message getExtension:[UnittestRoot repeatedImportEnumExtension]][1] intValue]); 502 503 XCTAssertEqualObjects(@"524", [message getExtension:[UnittestRoot repeatedStringPieceExtension]][1]); 504 XCTAssertEqualObjects(@"525", [message getExtension:[UnittestRoot repeatedCordExtension]][1]); 505} 506 507// ------------------------------------------------------------------- 508 509- (void)assertAllFieldsSet:(TestAllTypes *)message 510 repeatedCount:(uint32_t)count { 511 XCTAssertTrue(message.hasOptionalInt32); 512 XCTAssertTrue(message.hasOptionalInt64); 513 XCTAssertTrue(message.hasOptionalUint32); 514 XCTAssertTrue(message.hasOptionalUint64); 515 XCTAssertTrue(message.hasOptionalSint32); 516 XCTAssertTrue(message.hasOptionalSint64); 517 XCTAssertTrue(message.hasOptionalFixed32); 518 XCTAssertTrue(message.hasOptionalFixed64); 519 XCTAssertTrue(message.hasOptionalSfixed32); 520 XCTAssertTrue(message.hasOptionalSfixed64); 521 XCTAssertTrue(message.hasOptionalFloat); 522 XCTAssertTrue(message.hasOptionalDouble); 523 XCTAssertTrue(message.hasOptionalBool); 524 XCTAssertTrue(message.hasOptionalString); 525 XCTAssertTrue(message.hasOptionalBytes); 526 527 XCTAssertTrue(message.hasOptionalGroup); 528 XCTAssertTrue(message.hasOptionalNestedMessage); 529 XCTAssertTrue(message.hasOptionalForeignMessage); 530 XCTAssertTrue(message.hasOptionalImportMessage); 531 532 XCTAssertTrue(message.optionalGroup.hasA); 533 XCTAssertTrue(message.optionalNestedMessage.hasBb); 534 XCTAssertTrue(message.optionalForeignMessage.hasC); 535 XCTAssertTrue(message.optionalImportMessage.hasD); 536 537 XCTAssertTrue(message.hasOptionalNestedEnum); 538 XCTAssertTrue(message.hasOptionalForeignEnum); 539 XCTAssertTrue(message.hasOptionalImportEnum); 540 541 XCTAssertTrue(message.hasOptionalStringPiece); 542 XCTAssertTrue(message.hasOptionalCord); 543 544 XCTAssertEqual(101, message.optionalInt32); 545 XCTAssertEqual(102LL, message.optionalInt64); 546 XCTAssertEqual(103U, message.optionalUint32); 547 XCTAssertEqual(104ULL, message.optionalUint64); 548 XCTAssertEqual(105, message.optionalSint32); 549 XCTAssertEqual(106LL, message.optionalSint64); 550 XCTAssertEqual(107U, message.optionalFixed32); 551 XCTAssertEqual(108ULL, message.optionalFixed64); 552 XCTAssertEqual(109, message.optionalSfixed32); 553 XCTAssertEqual(110LL, message.optionalSfixed64); 554 XCTAssertEqualWithAccuracy(111.0f, message.optionalFloat, 0.1); 555 XCTAssertEqualWithAccuracy(112.0, message.optionalDouble, 0.1); 556 XCTAssertTrue(message.optionalBool); 557 XCTAssertEqualObjects(@"115", message.optionalString); 558 XCTAssertEqualObjects([NSData gpbtu_dataWithEmbeddedNulls], 559 message.optionalBytes); 560 561 XCTAssertEqual(117, message.optionalGroup.a); 562 XCTAssertEqual(118, message.optionalNestedMessage.bb); 563 XCTAssertEqual(119, message.optionalForeignMessage.c); 564 XCTAssertEqual(120, message.optionalImportMessage.d); 565 566 XCTAssertEqual(TestAllTypes_NestedEnum_Baz, message.optionalNestedEnum); 567 XCTAssertEqual(ForeignEnum_ForeignBaz, message.optionalForeignEnum); 568 XCTAssertEqual(ImportEnum_ImportBaz, message.optionalImportEnum); 569 570 XCTAssertEqualObjects(@"124", message.optionalStringPiece); 571 XCTAssertEqualObjects(@"125", message.optionalCord); 572 573 // ----------------------------------------------------------------- 574 575 XCTAssertEqual(count, message.repeatedInt32Array.count); 576 XCTAssertEqual(count, message.repeatedInt64Array.count); 577 XCTAssertEqual(count, message.repeatedUint32Array.count); 578 XCTAssertEqual(count, message.repeatedUint64Array.count); 579 XCTAssertEqual(count, message.repeatedSint32Array.count); 580 XCTAssertEqual(count, message.repeatedSint64Array.count); 581 XCTAssertEqual(count, message.repeatedFixed32Array.count); 582 XCTAssertEqual(count, message.repeatedFixed64Array.count); 583 XCTAssertEqual(count, message.repeatedSfixed32Array.count); 584 XCTAssertEqual(count, message.repeatedSfixed64Array.count); 585 XCTAssertEqual(count, message.repeatedFloatArray.count); 586 XCTAssertEqual(count, message.repeatedDoubleArray.count); 587 XCTAssertEqual(count, message.repeatedBoolArray.count); 588 XCTAssertEqual(count, message.repeatedStringArray.count); 589 XCTAssertEqual(count, message.repeatedBytesArray.count); 590 591 XCTAssertEqual(count, message.repeatedGroupArray.count); 592 XCTAssertEqual(count, message.repeatedNestedMessageArray.count); 593 XCTAssertEqual(count, message.repeatedForeignMessageArray.count); 594 XCTAssertEqual(count, message.repeatedImportMessageArray.count); 595 XCTAssertEqual(count, message.repeatedNestedEnumArray.count); 596 XCTAssertEqual(count, message.repeatedForeignEnumArray.count); 597 XCTAssertEqual(count, message.repeatedImportEnumArray.count); 598 599 XCTAssertEqual(count, message.repeatedStringPieceArray.count); 600 XCTAssertEqual(count, message.repeatedCordArray.count); 601 602 XCTAssertEqual(count, message.repeatedInt32Array_Count); 603 XCTAssertEqual(count, message.repeatedInt64Array_Count); 604 XCTAssertEqual(count, message.repeatedUint32Array_Count); 605 XCTAssertEqual(count, message.repeatedUint64Array_Count); 606 XCTAssertEqual(count, message.repeatedSint32Array_Count); 607 XCTAssertEqual(count, message.repeatedSint64Array_Count); 608 XCTAssertEqual(count, message.repeatedFixed32Array_Count); 609 XCTAssertEqual(count, message.repeatedFixed64Array_Count); 610 XCTAssertEqual(count, message.repeatedSfixed32Array_Count); 611 XCTAssertEqual(count, message.repeatedSfixed64Array_Count); 612 XCTAssertEqual(count, message.repeatedFloatArray_Count); 613 XCTAssertEqual(count, message.repeatedDoubleArray_Count); 614 XCTAssertEqual(count, message.repeatedBoolArray_Count); 615 XCTAssertEqual(count, message.repeatedStringArray_Count); 616 XCTAssertEqual(count, message.repeatedBytesArray_Count); 617 618 XCTAssertEqual(count, message.repeatedGroupArray_Count); 619 XCTAssertEqual(count, message.repeatedNestedMessageArray_Count); 620 XCTAssertEqual(count, message.repeatedForeignMessageArray_Count); 621 XCTAssertEqual(count, message.repeatedImportMessageArray_Count); 622 XCTAssertEqual(count, message.repeatedNestedEnumArray_Count); 623 XCTAssertEqual(count, message.repeatedForeignEnumArray_Count); 624 XCTAssertEqual(count, message.repeatedImportEnumArray_Count); 625 626 XCTAssertEqual(count, message.repeatedStringPieceArray_Count); 627 XCTAssertEqual(count, message.repeatedCordArray_Count); 628 629 for (uint32_t i = 0; i < count; ++i) { 630 XCTAssertEqual((int)(201 + i * 100), 631 [message.repeatedInt32Array valueAtIndex:i]); 632 XCTAssertEqual(202 + i * 100, [message.repeatedInt64Array valueAtIndex:i]); 633 XCTAssertEqual(203 + i * 100, [message.repeatedUint32Array valueAtIndex:i]); 634 XCTAssertEqual(204 + i * 100, [message.repeatedUint64Array valueAtIndex:i]); 635 XCTAssertEqual((int)(205 + i * 100), 636 [message.repeatedSint32Array valueAtIndex:i]); 637 XCTAssertEqual(206 + i * 100, [message.repeatedSint64Array valueAtIndex:i]); 638 XCTAssertEqual(207 + i * 100, 639 [message.repeatedFixed32Array valueAtIndex:i]); 640 XCTAssertEqual(208 + i * 100, 641 [message.repeatedFixed64Array valueAtIndex:i]); 642 XCTAssertEqual((int)(209 + i * 100), 643 [message.repeatedSfixed32Array valueAtIndex:i]); 644 XCTAssertEqual(210 + i * 100, 645 [message.repeatedSfixed64Array valueAtIndex:i]); 646 XCTAssertEqualWithAccuracy( 647 211 + i * 100, [message.repeatedFloatArray valueAtIndex:i], 0.1); 648 XCTAssertEqualWithAccuracy( 649 212 + i * 100, [message.repeatedDoubleArray valueAtIndex:i], 0.1); 650 XCTAssertEqual((i % 2) ? YES : NO, 651 [message.repeatedBoolArray valueAtIndex:i]); 652 653 NSString *string = [[NSString alloc] initWithFormat:@"%d", 215 + i * 100]; 654 XCTAssertEqualObjects(string, message.repeatedStringArray[i]); 655 [string release]; 656 657 NSData *data = [[NSData alloc] initWithUint32_gpbtu:216 + i * 100]; 658 XCTAssertEqualObjects(data, message.repeatedBytesArray[i]); 659 [data release]; 660 661 XCTAssertEqual((int)(217 + i * 100), ((TestAllTypes_RepeatedGroup*)message.repeatedGroupArray[i]).a); 662 XCTAssertEqual((int)(218 + i * 100), ((TestAllTypes_NestedMessage*)message.repeatedNestedMessageArray[i]).bb); 663 XCTAssertEqual((int)(219 + i * 100), ((ForeignMessage*)message.repeatedForeignMessageArray[i]).c); 664 XCTAssertEqual((int)(220 + i * 100), ((ImportMessage*)message.repeatedImportMessageArray[i]).d); 665 666 XCTAssertEqual((i % 2) ? TestAllTypes_NestedEnum_Bar : TestAllTypes_NestedEnum_Baz, [message.repeatedNestedEnumArray valueAtIndex:i]); 667 XCTAssertEqual((i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz, [message.repeatedForeignEnumArray valueAtIndex:i]); 668 XCTAssertEqual((i % 2) ? ImportEnum_ImportBar : ImportEnum_ImportBaz, [message.repeatedImportEnumArray valueAtIndex:i]); 669 670 string = [[NSString alloc] initWithFormat:@"%d", 224 + i * 100]; 671 XCTAssertEqualObjects(string, message.repeatedStringPieceArray[i]); 672 [string release]; 673 674 string = [[NSString alloc] initWithFormat:@"%d", 225 + i * 100]; 675 XCTAssertEqualObjects(string, message.repeatedCordArray[i]); 676 [string release]; 677 } 678 679 // ----------------------------------------------------------------- 680 681 XCTAssertTrue(message.hasDefaultInt32); 682 XCTAssertTrue(message.hasDefaultInt64); 683 XCTAssertTrue(message.hasDefaultUint32); 684 XCTAssertTrue(message.hasDefaultUint64); 685 XCTAssertTrue(message.hasDefaultSint32); 686 XCTAssertTrue(message.hasDefaultSint64); 687 XCTAssertTrue(message.hasDefaultFixed32); 688 XCTAssertTrue(message.hasDefaultFixed64); 689 XCTAssertTrue(message.hasDefaultSfixed32); 690 XCTAssertTrue(message.hasDefaultSfixed64); 691 XCTAssertTrue(message.hasDefaultFloat); 692 XCTAssertTrue(message.hasDefaultDouble); 693 XCTAssertTrue(message.hasDefaultBool); 694 XCTAssertTrue(message.hasDefaultString); 695 XCTAssertTrue(message.hasDefaultBytes); 696 697 XCTAssertTrue(message.hasDefaultNestedEnum); 698 XCTAssertTrue(message.hasDefaultForeignEnum); 699 XCTAssertTrue(message.hasDefaultImportEnum); 700 701 XCTAssertTrue(message.hasDefaultStringPiece); 702 XCTAssertTrue(message.hasDefaultCord); 703 704 XCTAssertEqual(401, message.defaultInt32); 705 XCTAssertEqual(402LL, message.defaultInt64); 706 XCTAssertEqual(403U, message.defaultUint32); 707 XCTAssertEqual(404ULL, message.defaultUint64); 708 XCTAssertEqual(405, message.defaultSint32); 709 XCTAssertEqual(406LL, message.defaultSint64); 710 XCTAssertEqual(407U, message.defaultFixed32); 711 XCTAssertEqual(408ULL, message.defaultFixed64); 712 XCTAssertEqual(409, message.defaultSfixed32); 713 XCTAssertEqual(410LL, message.defaultSfixed64); 714 XCTAssertEqualWithAccuracy(411.0f, message.defaultFloat, 0.1); 715 XCTAssertEqualWithAccuracy(412.0, message.defaultDouble, 0.1); 716 XCTAssertFalse(message.defaultBool); 717 XCTAssertEqualObjects(@"415", message.defaultString); 718 XCTAssertEqualObjects([NSData gpbtu_dataWithUint32:416], 719 message.defaultBytes); 720 721 XCTAssertEqual(TestAllTypes_NestedEnum_Foo, message.defaultNestedEnum); 722 XCTAssertEqual(ForeignEnum_ForeignFoo, message.defaultForeignEnum); 723 XCTAssertEqual(ImportEnum_ImportFoo, message.defaultImportEnum); 724 725 XCTAssertEqualObjects(@"424", message.defaultStringPiece); 726 XCTAssertEqualObjects(@"425", message.defaultCord); 727} 728 729- (void)setAllFields:(TestAllTypes *)message repeatedCount:(uint32_t)count { 730 [message setOptionalInt32:101]; 731 [message setOptionalInt64:102]; 732 [message setOptionalUint32:103]; 733 [message setOptionalUint64:104]; 734 [message setOptionalSint32:105]; 735 [message setOptionalSint64:106]; 736 [message setOptionalFixed32:107]; 737 [message setOptionalFixed64:108]; 738 [message setOptionalSfixed32:109]; 739 [message setOptionalSfixed64:110]; 740 [message setOptionalFloat:111]; 741 [message setOptionalDouble:112]; 742 [message setOptionalBool:YES]; 743 [message setOptionalString:@"115"]; 744 [message setOptionalBytes:[NSData gpbtu_dataWithEmbeddedNulls]]; 745 746 TestAllTypes_OptionalGroup *allTypes = [TestAllTypes_OptionalGroup message]; 747 [allTypes setA:117]; 748 [message setOptionalGroup:allTypes]; 749 TestAllTypes_NestedMessage *nestedMessage = 750 [TestAllTypes_NestedMessage message]; 751 [nestedMessage setBb:118]; 752 [message setOptionalNestedMessage:nestedMessage]; 753 ForeignMessage *foreignMessage = [ForeignMessage message]; 754 [foreignMessage setC:119]; 755 [message setOptionalForeignMessage:foreignMessage]; 756 ImportMessage *importMessage = [ImportMessage message]; 757 [importMessage setD:120]; 758 [message setOptionalImportMessage:importMessage]; 759 760 [message setOptionalNestedEnum:TestAllTypes_NestedEnum_Baz]; 761 [message setOptionalForeignEnum:ForeignEnum_ForeignBaz]; 762 [message setOptionalImportEnum:ImportEnum_ImportBaz]; 763 764 [message setOptionalStringPiece:@"124"]; 765 [message setOptionalCord:@"125"]; 766 767 // ----------------------------------------------------------------- 768 769 for (uint32_t i = 0; i < count; i++) { 770 [message.repeatedInt32Array addValue:201 + i * 100]; 771 [message.repeatedInt64Array addValue:202 + i * 100]; 772 [message.repeatedUint32Array addValue:203 + i * 100]; 773 [message.repeatedUint64Array addValue:204 + i * 100]; 774 [message.repeatedSint32Array addValue:205 + i * 100]; 775 [message.repeatedSint64Array addValue:206 + i * 100]; 776 [message.repeatedFixed32Array addValue:207 + i * 100]; 777 [message.repeatedFixed64Array addValue:208 + i * 100]; 778 [message.repeatedSfixed32Array addValue:209 + i * 100]; 779 [message.repeatedSfixed64Array addValue:210 + i * 100]; 780 [message.repeatedFloatArray addValue:211 + i * 100]; 781 [message.repeatedDoubleArray addValue:212 + i * 100]; 782 [message.repeatedBoolArray addValue:(i % 2)]; 783 NSString *string = [[NSString alloc] initWithFormat:@"%d", 215 + i * 100]; 784 [message.repeatedStringArray addObject:string]; 785 [string release]; 786 787 NSData *data = [[NSData alloc] initWithUint32_gpbtu:216 + i * 100]; 788 [message.repeatedBytesArray addObject:data]; 789 [data release]; 790 791 TestAllTypes_RepeatedGroup *testAll = 792 [[TestAllTypes_RepeatedGroup alloc] init]; 793 [testAll setA:217 + i * 100]; 794 [message.repeatedGroupArray addObject:testAll]; 795 [testAll release]; 796 797 nestedMessage = [[TestAllTypes_NestedMessage alloc] init]; 798 [nestedMessage setBb:218 + i * 100]; 799 [message.repeatedNestedMessageArray addObject:nestedMessage]; 800 [nestedMessage release]; 801 802 foreignMessage = [[ForeignMessage alloc] init]; 803 [foreignMessage setC:219 + i * 100]; 804 [message.repeatedForeignMessageArray addObject:foreignMessage]; 805 [foreignMessage release]; 806 807 importMessage = [[ImportMessage alloc] init]; 808 [importMessage setD:220 + i * 100]; 809 [message.repeatedImportMessageArray addObject:importMessage]; 810 [importMessage release]; 811 812 [message.repeatedNestedEnumArray addValue:(i % 2) ? TestAllTypes_NestedEnum_Bar : TestAllTypes_NestedEnum_Baz]; 813 814 [message.repeatedForeignEnumArray addValue:(i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz]; 815 [message.repeatedImportEnumArray addValue:(i % 2) ? ImportEnum_ImportBar : ImportEnum_ImportBaz]; 816 817 string = [[NSString alloc] initWithFormat:@"%d", 224 + i * 100]; 818 [message.repeatedStringPieceArray addObject:string]; 819 [string release]; 820 821 string = [[NSString alloc] initWithFormat:@"%d", 225 + i * 100]; 822 [message.repeatedCordArray addObject:string]; 823 [string release]; 824 } 825 // ----------------------------------------------------------------- 826 827 message.defaultInt32 = 401; 828 message.defaultInt64 = 402; 829 message.defaultUint32 = 403; 830 message.defaultUint64 = 404; 831 message.defaultSint32 = 405; 832 message.defaultSint64 = 406; 833 message.defaultFixed32 = 407; 834 message.defaultFixed64 = 408; 835 message.defaultSfixed32 = 409; 836 message.defaultSfixed64 = 410; 837 message.defaultFloat = 411; 838 message.defaultDouble = 412; 839 message.defaultBool = NO; 840 message.defaultString = @"415"; 841 message.defaultBytes = [NSData gpbtu_dataWithUint32:416]; 842 843 message.defaultNestedEnum = TestAllTypes_NestedEnum_Foo; 844 message.defaultForeignEnum = ForeignEnum_ForeignFoo; 845 message.defaultImportEnum = ImportEnum_ImportFoo; 846 847 message.defaultStringPiece = @"424"; 848 message.defaultCord = @"425"; 849} 850 851- (void)clearAllFields:(TestAllTypes *)message { 852 message.hasOptionalInt32 = NO; 853 message.hasOptionalInt64 = NO; 854 message.hasOptionalUint32 = NO; 855 message.hasOptionalUint64 = NO; 856 message.hasOptionalSint32 = NO; 857 message.hasOptionalSint64 = NO; 858 message.hasOptionalFixed32 = NO; 859 message.hasOptionalFixed64 = NO; 860 message.hasOptionalSfixed32 = NO; 861 message.hasOptionalSfixed64 = NO; 862 message.hasOptionalFloat = NO; 863 message.hasOptionalDouble = NO; 864 message.hasOptionalBool = NO; 865 message.hasOptionalString = NO; 866 message.hasOptionalBytes = NO; 867 868 message.hasOptionalGroup = NO; 869 message.hasOptionalNestedMessage = NO; 870 message.hasOptionalForeignMessage = NO; 871 message.hasOptionalImportMessage = NO; 872 873 message.hasOptionalNestedEnum = NO; 874 message.hasOptionalForeignEnum = NO; 875 message.hasOptionalImportEnum = NO; 876 877 message.hasOptionalStringPiece = NO; 878 message.hasOptionalCord = NO; 879 880 // ----------------------------------------------------------------- 881 882 [message.repeatedInt32Array removeAll]; 883 [message.repeatedInt64Array removeAll]; 884 [message.repeatedUint32Array removeAll]; 885 [message.repeatedUint64Array removeAll]; 886 [message.repeatedSint32Array removeAll]; 887 [message.repeatedSint64Array removeAll]; 888 [message.repeatedFixed32Array removeAll]; 889 [message.repeatedFixed64Array removeAll]; 890 [message.repeatedSfixed32Array removeAll]; 891 [message.repeatedSfixed64Array removeAll]; 892 [message.repeatedFloatArray removeAll]; 893 [message.repeatedDoubleArray removeAll]; 894 [message.repeatedBoolArray removeAll]; 895 [message.repeatedStringArray removeAllObjects]; 896 [message.repeatedBytesArray removeAllObjects]; 897 898 [message.repeatedGroupArray removeAllObjects]; 899 [message.repeatedNestedMessageArray removeAllObjects]; 900 [message.repeatedForeignMessageArray removeAllObjects]; 901 [message.repeatedImportMessageArray removeAllObjects]; 902 903 [message.repeatedNestedEnumArray removeAll]; 904 [message.repeatedForeignEnumArray removeAll]; 905 [message.repeatedImportEnumArray removeAll]; 906 907 [message.repeatedStringPieceArray removeAllObjects]; 908 [message.repeatedCordArray removeAllObjects]; 909 910 // ----------------------------------------------------------------- 911 912 message.hasDefaultInt32 = NO; 913 message.hasDefaultInt64 = NO; 914 message.hasDefaultUint32 = NO; 915 message.hasDefaultUint64 = NO; 916 message.hasDefaultSint32 = NO; 917 message.hasDefaultSint64 = NO; 918 message.hasDefaultFixed32 = NO; 919 message.hasDefaultFixed64 = NO; 920 message.hasDefaultSfixed32 = NO; 921 message.hasDefaultSfixed64 = NO; 922 message.hasDefaultFloat = NO; 923 message.hasDefaultDouble = NO; 924 message.hasDefaultBool = NO; 925 message.hasDefaultString = NO; 926 message.hasDefaultBytes = NO; 927 928 message.hasDefaultNestedEnum = NO; 929 message.hasDefaultForeignEnum = NO; 930 message.hasDefaultImportEnum = NO; 931 932 message.hasDefaultStringPiece = NO; 933 message.hasDefaultCord = NO; 934} 935 936- (void)setAllExtensions:(TestAllExtensions *)message 937 repeatedCount:(uint32_t)count { 938 [message setExtension:[UnittestRoot optionalInt32Extension] value:@101]; 939 [message setExtension:[UnittestRoot optionalInt64Extension] value:@102L]; 940 [message setExtension:[UnittestRoot optionalUint32Extension] value:@103]; 941 [message setExtension:[UnittestRoot optionalUint64Extension] value:@104L]; 942 [message setExtension:[UnittestRoot optionalSint32Extension] value:@105]; 943 [message setExtension:[UnittestRoot optionalSint64Extension] value:@106L]; 944 [message setExtension:[UnittestRoot optionalFixed32Extension] value:@107]; 945 [message setExtension:[UnittestRoot optionalFixed64Extension] value:@108L]; 946 [message setExtension:[UnittestRoot optionalSfixed32Extension] value:@109]; 947 [message setExtension:[UnittestRoot optionalSfixed64Extension] value:@110L]; 948 [message setExtension:[UnittestRoot optionalFloatExtension] value:@111.0f]; 949 [message setExtension:[UnittestRoot optionalDoubleExtension] value:@112.0]; 950 [message setExtension:[UnittestRoot optionalBoolExtension] value:@YES]; 951 [message setExtension:[UnittestRoot optionalStringExtension] value:@"115"]; 952 [message setExtension:[UnittestRoot optionalBytesExtension] 953 value:[NSData gpbtu_dataWithEmbeddedNulls]]; 954 955 OptionalGroup_extension *optionalGroup = [OptionalGroup_extension message]; 956 [optionalGroup setA:117]; 957 [message setExtension:[UnittestRoot optionalGroupExtension] 958 value:optionalGroup]; 959 TestAllTypes_NestedMessage *nestedMessage = 960 [TestAllTypes_NestedMessage message]; 961 [nestedMessage setBb:118]; 962 [message setExtension:[UnittestRoot optionalNestedMessageExtension] 963 value:nestedMessage]; 964 ForeignMessage *foreignMessage = [ForeignMessage message]; 965 [foreignMessage setC:119]; 966 [message setExtension:[UnittestRoot optionalForeignMessageExtension] 967 value:foreignMessage]; 968 ImportMessage *importMessage = [ImportMessage message]; 969 [importMessage setD:120]; 970 [message setExtension:[UnittestRoot optionalImportMessageExtension] 971 value:importMessage]; 972 973 [message setExtension:[UnittestRoot optionalNestedEnumExtension] 974 value:@(TestAllTypes_NestedEnum_Baz)]; 975 [message setExtension:[UnittestRoot optionalForeignEnumExtension] 976 value:@(ForeignEnum_ForeignBaz)]; 977 [message setExtension:[UnittestRoot optionalImportEnumExtension] 978 value:@(ImportEnum_ImportBaz)]; 979 980 [message setExtension:[UnittestRoot optionalStringPieceExtension] 981 value:@"124"]; 982 [message setExtension:[UnittestRoot optionalCordExtension] value:@"125"]; 983 984 for (uint32_t i = 0; i < count; ++i) { 985 [message addExtension:[UnittestRoot repeatedInt32Extension] 986 value:@(201 + i * 100)]; 987 [message addExtension:[UnittestRoot repeatedInt64Extension] 988 value:@(202 + i * 100)]; 989 [message addExtension:[UnittestRoot repeatedUint32Extension] 990 value:@(203 + i * 100)]; 991 [message addExtension:[UnittestRoot repeatedUint64Extension] 992 value:@(204 + i * 100)]; 993 [message addExtension:[UnittestRoot repeatedSint32Extension] 994 value:@(205 + i * 100)]; 995 [message addExtension:[UnittestRoot repeatedSint64Extension] 996 value:@(206 + i * 100)]; 997 [message addExtension:[UnittestRoot repeatedFixed32Extension] 998 value:@(207 + i * 100)]; 999 [message addExtension:[UnittestRoot repeatedFixed64Extension] 1000 value:@(208 + i * 100)]; 1001 [message addExtension:[UnittestRoot repeatedSfixed32Extension] 1002 value:@(209 + i * 100)]; 1003 [message addExtension:[UnittestRoot repeatedSfixed64Extension] 1004 value:@(210 + i * 100)]; 1005 [message addExtension:[UnittestRoot repeatedFloatExtension] 1006 value:@(211 + i * 100)]; 1007 [message addExtension:[UnittestRoot repeatedDoubleExtension] 1008 value:@(212 + i * 100)]; 1009 [message addExtension:[UnittestRoot repeatedBoolExtension] 1010 value:@((i % 2) ? YES : NO)]; 1011 NSString *string = [[NSString alloc] initWithFormat:@"%d", 215 + i * 100]; 1012 [message addExtension:[UnittestRoot repeatedStringExtension] value:string]; 1013 [string release]; 1014 NSData *data = [[NSData alloc] initWithUint32_gpbtu:216 + i * 100]; 1015 [message addExtension:[UnittestRoot repeatedBytesExtension] value:data]; 1016 [data release]; 1017 1018 RepeatedGroup_extension *repeatedGroup = 1019 [[RepeatedGroup_extension alloc] init]; 1020 [repeatedGroup setA:217 + i * 100]; 1021 [message addExtension:[UnittestRoot repeatedGroupExtension] 1022 value:repeatedGroup]; 1023 [repeatedGroup release]; 1024 nestedMessage = [[TestAllTypes_NestedMessage alloc] init]; 1025 [nestedMessage setBb:218 + i * 100]; 1026 [message addExtension:[UnittestRoot repeatedNestedMessageExtension] 1027 value:nestedMessage]; 1028 [nestedMessage release]; 1029 foreignMessage = [[ForeignMessage alloc] init]; 1030 [foreignMessage setC:219 + i * 100]; 1031 [message addExtension:[UnittestRoot repeatedForeignMessageExtension] 1032 value:foreignMessage]; 1033 [foreignMessage release]; 1034 importMessage = [[ImportMessage alloc] init]; 1035 [importMessage setD:220 + i * 100]; 1036 [message addExtension:[UnittestRoot repeatedImportMessageExtension] 1037 value:importMessage]; 1038 [importMessage release]; 1039 [message addExtension:[UnittestRoot repeatedNestedEnumExtension] 1040 value:@((i % 2) ? TestAllTypes_NestedEnum_Bar 1041 : TestAllTypes_NestedEnum_Baz)]; 1042 [message addExtension:[UnittestRoot repeatedForeignEnumExtension] 1043 value:@((i % 2) ? ForeignEnum_ForeignBar 1044 : ForeignEnum_ForeignBaz)]; 1045 [message 1046 addExtension:[UnittestRoot repeatedImportEnumExtension] 1047 value:@((i % 2) ? ImportEnum_ImportBar : ImportEnum_ImportBaz)]; 1048 1049 string = [[NSString alloc] initWithFormat:@"%d", 224 + i * 100]; 1050 [message addExtension:[UnittestRoot repeatedStringPieceExtension] 1051 value:string]; 1052 [string release]; 1053 1054 string = [[NSString alloc] initWithFormat:@"%d", 225 + i * 100]; 1055 [message addExtension:[UnittestRoot repeatedCordExtension] value:string]; 1056 [string release]; 1057 } 1058 1059 // ----------------------------------------------------------------- 1060 1061 [message setExtension:[UnittestRoot defaultInt32Extension] value:@401]; 1062 [message setExtension:[UnittestRoot defaultInt64Extension] value:@402L]; 1063 [message setExtension:[UnittestRoot defaultUint32Extension] value:@403]; 1064 [message setExtension:[UnittestRoot defaultUint64Extension] value:@404L]; 1065 [message setExtension:[UnittestRoot defaultSint32Extension] value:@405]; 1066 [message setExtension:[UnittestRoot defaultSint64Extension] value:@406L]; 1067 [message setExtension:[UnittestRoot defaultFixed32Extension] value:@407]; 1068 [message setExtension:[UnittestRoot defaultFixed64Extension] value:@408L]; 1069 [message setExtension:[UnittestRoot defaultSfixed32Extension] value:@409]; 1070 [message setExtension:[UnittestRoot defaultSfixed64Extension] value:@410L]; 1071 [message setExtension:[UnittestRoot defaultFloatExtension] value:@411.0f]; 1072 [message setExtension:[UnittestRoot defaultDoubleExtension] value:@412.0]; 1073 [message setExtension:[UnittestRoot defaultBoolExtension] value:@NO]; 1074 [message setExtension:[UnittestRoot defaultStringExtension] value:@"415"]; 1075 [message setExtension:[UnittestRoot defaultBytesExtension] 1076 value:[NSData gpbtu_dataWithUint32:416]]; 1077 1078 [message setExtension:[UnittestRoot defaultNestedEnumExtension] 1079 value:@(TestAllTypes_NestedEnum_Foo)]; 1080 [message setExtension:[UnittestRoot defaultForeignEnumExtension] 1081 value:@(ForeignEnum_ForeignFoo)]; 1082 [message setExtension:[UnittestRoot defaultImportEnumExtension] 1083 value:@(ImportEnum_ImportFoo)]; 1084 1085 [message setExtension:[UnittestRoot defaultStringPieceExtension] 1086 value:@"424"]; 1087 [message setExtension:[UnittestRoot defaultCordExtension] value:@"425"]; 1088} 1089 1090- (void)setAllMapFields:(TestMap *)message numEntries:(uint32_t)count { 1091 for (uint32_t i = 0; i < count; i++) { 1092 [message.mapInt32Int32 setValue:(i + 1) forKey:100 + i * 100]; 1093 [message.mapInt64Int64 setValue:(i + 1) forKey:101 + i * 100]; 1094 [message.mapUint32Uint32 setValue:(i + 1) forKey:102 + i * 100]; 1095 [message.mapUint64Uint64 setValue:(i + 1) forKey:103 + i * 100]; 1096 [message.mapSint32Sint32 setValue:(i + 1) forKey:104 + i * 100]; 1097 [message.mapSint64Sint64 setValue:(i + 1) forKey:105 + i * 100]; 1098 [message.mapFixed32Fixed32 setValue:(i + 1) forKey:106 + i * 100]; 1099 [message.mapFixed64Fixed64 setValue:(i + 1) forKey:107 + i * 100]; 1100 [message.mapSfixed32Sfixed32 setValue:(i + 1) forKey:108 + i * 100]; 1101 [message.mapSfixed64Sfixed64 setValue:(i + 1) forKey:109 + i * 100]; 1102 [message.mapInt32Float setValue:(i + 1) forKey:110 + i * 100]; 1103 [message.mapInt32Double setValue:(i + 1) forKey:111 + i * 100]; 1104 [message.mapBoolBool setValue:((i % 2) == 1) forKey:((i % 2) == 0)]; 1105 1106 NSString *keyStr = [[NSString alloc] initWithFormat:@"%d", 112 + i * 100]; 1107 NSString *dataStr = [[NSString alloc] initWithFormat:@"%d", i + 1]; 1108 [message.mapStringString setObject:dataStr forKey:keyStr]; 1109 [keyStr release]; 1110 [dataStr release]; 1111 1112 NSData *data = [[NSData alloc] initWithUint32_gpbtu:i + 1]; 1113 [message.mapInt32Bytes setObject:data forKey:113 + i * 100]; 1114 [data release]; 1115 1116 [message.mapInt32Enum 1117 setValue:(i % 2) ? MapEnum_MapEnumBar : MapEnum_MapEnumBaz 1118 forKey:114 + i * 100]; 1119 1120 ForeignMessage *subMsg = [[ForeignMessage alloc] init]; 1121 subMsg.c = i + 1; 1122 [message.mapInt32ForeignMessage setObject:subMsg forKey:115 + i * 100]; 1123 [subMsg release]; 1124 } 1125} 1126 1127- (void)setAllTestPackedFields:(TestPackedTypes *)message { 1128 // Must match -setAllTestUnpackedFields: 1129 [message.packedInt32Array addValue:101]; 1130 [message.packedInt64Array addValue:102]; 1131 [message.packedUint32Array addValue:103]; 1132 [message.packedUint64Array addValue:104]; 1133 [message.packedSint32Array addValue:105]; 1134 [message.packedSint64Array addValue:106]; 1135 [message.packedFixed32Array addValue:107]; 1136 [message.packedFixed64Array addValue:108]; 1137 [message.packedSfixed32Array addValue:109]; 1138 [message.packedSfixed64Array addValue:110]; 1139 [message.packedFloatArray addValue:111.f]; 1140 [message.packedDoubleArray addValue:112.]; 1141 [message.packedBoolArray addValue:YES]; 1142 [message.packedEnumArray addValue:ForeignEnum_ForeignBar]; 1143 1144 [message.packedInt32Array addValue:201]; 1145 [message.packedInt64Array addValue:302]; 1146 [message.packedUint32Array addValue:203]; 1147 [message.packedUint64Array addValue:204]; 1148 [message.packedSint32Array addValue:205]; 1149 [message.packedSint64Array addValue:206]; 1150 [message.packedFixed32Array addValue:207]; 1151 [message.packedFixed64Array addValue:208]; 1152 [message.packedSfixed32Array addValue:209]; 1153 [message.packedSfixed64Array addValue:210]; 1154 [message.packedFloatArray addValue:211.f]; 1155 [message.packedDoubleArray addValue:212.]; 1156 [message.packedBoolArray addValue:NO]; 1157 [message.packedEnumArray addValue:ForeignEnum_ForeignBaz]; 1158} 1159 1160- (void)setAllTestUnpackedFields:(TestUnpackedTypes *)message { 1161 // Must match -setAllTestPackedFields: 1162 [message.unpackedInt32Array addValue:101]; 1163 [message.unpackedInt64Array addValue:102]; 1164 [message.unpackedUint32Array addValue:103]; 1165 [message.unpackedUint64Array addValue:104]; 1166 [message.unpackedSint32Array addValue:105]; 1167 [message.unpackedSint64Array addValue:106]; 1168 [message.unpackedFixed32Array addValue:107]; 1169 [message.unpackedFixed64Array addValue:108]; 1170 [message.unpackedSfixed32Array addValue:109]; 1171 [message.unpackedSfixed64Array addValue:110]; 1172 [message.unpackedFloatArray addValue:111.f]; 1173 [message.unpackedDoubleArray addValue:112.]; 1174 [message.unpackedBoolArray addValue:YES]; 1175 [message.unpackedEnumArray addValue:ForeignEnum_ForeignBar]; 1176 1177 [message.unpackedInt32Array addValue:201]; 1178 [message.unpackedInt64Array addValue:302]; 1179 [message.unpackedUint32Array addValue:203]; 1180 [message.unpackedUint64Array addValue:204]; 1181 [message.unpackedSint32Array addValue:205]; 1182 [message.unpackedSint64Array addValue:206]; 1183 [message.unpackedFixed32Array addValue:207]; 1184 [message.unpackedFixed64Array addValue:208]; 1185 [message.unpackedSfixed32Array addValue:209]; 1186 [message.unpackedSfixed64Array addValue:210]; 1187 [message.unpackedFloatArray addValue:211.f]; 1188 [message.unpackedDoubleArray addValue:212.]; 1189 [message.unpackedBoolArray addValue:NO]; 1190 [message.unpackedEnumArray addValue:ForeignEnum_ForeignBaz]; 1191} 1192 1193- (GPBExtensionRegistry *)extensionRegistry { 1194 return [UnittestRoot extensionRegistry]; 1195} 1196 1197- (TestAllTypes *)allSetRepeatedCount:(uint32_t)count { 1198 TestAllTypes *message = [TestAllTypes message]; 1199 [self setAllFields:message repeatedCount:count]; 1200 return message; 1201} 1202 1203- (TestAllExtensions *)allExtensionsSetRepeatedCount:(uint32_t)count { 1204 TestAllExtensions *message = [TestAllExtensions message]; 1205 [self setAllExtensions:message repeatedCount:count]; 1206 return message; 1207} 1208 1209- (TestPackedTypes *)packedSetRepeatedCount:(uint32_t)count { 1210 TestPackedTypes *message = [TestPackedTypes message]; 1211 [self setPackedFields:message repeatedCount:count]; 1212 return message; 1213} 1214 1215- (TestPackedExtensions *)packedExtensionsSetRepeatedCount:(uint32_t)count { 1216 TestPackedExtensions *message = [TestPackedExtensions message]; 1217 [self setPackedExtensions:message repeatedCount:count]; 1218 return message; 1219} 1220 1221// ------------------------------------------------------------------- 1222 1223- (void)assertClear:(TestAllTypes *)message { 1224 // hasBlah() should initially be NO for all optional fields. 1225 XCTAssertFalse(message.hasOptionalInt32); 1226 XCTAssertFalse(message.hasOptionalInt64); 1227 XCTAssertFalse(message.hasOptionalUint32); 1228 XCTAssertFalse(message.hasOptionalUint64); 1229 XCTAssertFalse(message.hasOptionalSint32); 1230 XCTAssertFalse(message.hasOptionalSint64); 1231 XCTAssertFalse(message.hasOptionalFixed32); 1232 XCTAssertFalse(message.hasOptionalFixed64); 1233 XCTAssertFalse(message.hasOptionalSfixed32); 1234 XCTAssertFalse(message.hasOptionalSfixed64); 1235 XCTAssertFalse(message.hasOptionalFloat); 1236 XCTAssertFalse(message.hasOptionalDouble); 1237 XCTAssertFalse(message.hasOptionalBool); 1238 XCTAssertFalse(message.hasOptionalString); 1239 XCTAssertFalse(message.hasOptionalBytes); 1240 1241 XCTAssertFalse(message.hasOptionalGroup); 1242 XCTAssertFalse(message.hasOptionalNestedMessage); 1243 XCTAssertFalse(message.hasOptionalForeignMessage); 1244 XCTAssertFalse(message.hasOptionalImportMessage); 1245 1246 XCTAssertFalse(message.hasOptionalNestedEnum); 1247 XCTAssertFalse(message.hasOptionalForeignEnum); 1248 XCTAssertFalse(message.hasOptionalImportEnum); 1249 1250 XCTAssertFalse(message.hasOptionalStringPiece); 1251 XCTAssertFalse(message.hasOptionalCord); 1252 1253 // Optional fields without defaults are set to zero or something like it. 1254 XCTAssertEqual(0, message.optionalInt32); 1255 XCTAssertEqual(0LL, message.optionalInt64); 1256 XCTAssertEqual(0U, message.optionalUint32); 1257 XCTAssertEqual(0ULL, message.optionalUint64); 1258 XCTAssertEqual(0, message.optionalSint32); 1259 XCTAssertEqual(0LL, message.optionalSint64); 1260 XCTAssertEqual(0U, message.optionalFixed32); 1261 XCTAssertEqual(0ULL, message.optionalFixed64); 1262 XCTAssertEqual(0, message.optionalSfixed32); 1263 XCTAssertEqual(0LL, message.optionalSfixed64); 1264 XCTAssertEqual(0.0f, message.optionalFloat); 1265 XCTAssertEqual(0.0, message.optionalDouble); 1266 XCTAssertFalse(message.optionalBool); 1267 XCTAssertEqualObjects(message.optionalString, @""); 1268 XCTAssertEqualObjects(message.optionalBytes, GPBEmptyNSData()); 1269 1270 // Embedded messages should also be clear. 1271 XCTAssertFalse(message.hasOptionalGroup); 1272 XCTAssertFalse(message.hasOptionalNestedMessage); 1273 XCTAssertFalse(message.hasOptionalForeignMessage); 1274 XCTAssertFalse(message.hasOptionalImportMessage); 1275 1276 // Enums without defaults are set to the first value in the enum. 1277 XCTAssertEqual(TestAllTypes_NestedEnum_Foo, message.optionalNestedEnum); 1278 XCTAssertEqual(ForeignEnum_ForeignFoo, message.optionalForeignEnum); 1279 XCTAssertEqual(ImportEnum_ImportFoo, message.optionalImportEnum); 1280 1281 XCTAssertEqualObjects(message.optionalStringPiece, @""); 1282 XCTAssertEqualObjects(message.optionalCord, @""); 1283 1284 // Repeated fields are empty. 1285 1286 XCTAssertEqual(0U, message.repeatedInt32Array.count); 1287 XCTAssertEqual(0U, message.repeatedInt64Array.count); 1288 XCTAssertEqual(0U, message.repeatedUint32Array.count); 1289 XCTAssertEqual(0U, message.repeatedUint64Array.count); 1290 XCTAssertEqual(0U, message.repeatedSint32Array.count); 1291 XCTAssertEqual(0U, message.repeatedSint64Array.count); 1292 XCTAssertEqual(0U, message.repeatedFixed32Array.count); 1293 XCTAssertEqual(0U, message.repeatedFixed64Array.count); 1294 XCTAssertEqual(0U, message.repeatedSfixed32Array.count); 1295 XCTAssertEqual(0U, message.repeatedSfixed64Array.count); 1296 XCTAssertEqual(0U, message.repeatedFloatArray.count); 1297 XCTAssertEqual(0U, message.repeatedDoubleArray.count); 1298 XCTAssertEqual(0U, message.repeatedBoolArray.count); 1299 XCTAssertEqual(0U, message.repeatedStringArray.count); 1300 XCTAssertEqual(0U, message.repeatedBytesArray.count); 1301 1302 XCTAssertEqual(0U, message.repeatedGroupArray.count); 1303 XCTAssertEqual(0U, message.repeatedNestedMessageArray.count); 1304 XCTAssertEqual(0U, message.repeatedForeignMessageArray.count); 1305 XCTAssertEqual(0U, message.repeatedImportMessageArray.count); 1306 XCTAssertEqual(0U, message.repeatedNestedEnumArray.count); 1307 XCTAssertEqual(0U, message.repeatedForeignEnumArray.count); 1308 XCTAssertEqual(0U, message.repeatedImportEnumArray.count); 1309 1310 XCTAssertEqual(0U, message.repeatedStringPieceArray.count); 1311 XCTAssertEqual(0U, message.repeatedCordArray.count); 1312 1313 XCTAssertEqual(0U, message.repeatedInt32Array_Count); 1314 XCTAssertEqual(0U, message.repeatedInt64Array_Count); 1315 XCTAssertEqual(0U, message.repeatedUint32Array_Count); 1316 XCTAssertEqual(0U, message.repeatedUint64Array_Count); 1317 XCTAssertEqual(0U, message.repeatedSint32Array_Count); 1318 XCTAssertEqual(0U, message.repeatedSint64Array_Count); 1319 XCTAssertEqual(0U, message.repeatedFixed32Array_Count); 1320 XCTAssertEqual(0U, message.repeatedFixed64Array_Count); 1321 XCTAssertEqual(0U, message.repeatedSfixed32Array_Count); 1322 XCTAssertEqual(0U, message.repeatedSfixed64Array_Count); 1323 XCTAssertEqual(0U, message.repeatedFloatArray_Count); 1324 XCTAssertEqual(0U, message.repeatedDoubleArray_Count); 1325 XCTAssertEqual(0U, message.repeatedBoolArray_Count); 1326 XCTAssertEqual(0U, message.repeatedStringArray_Count); 1327 XCTAssertEqual(0U, message.repeatedBytesArray_Count); 1328 1329 XCTAssertEqual(0U, message.repeatedGroupArray_Count); 1330 XCTAssertEqual(0U, message.repeatedNestedMessageArray_Count); 1331 XCTAssertEqual(0U, message.repeatedForeignMessageArray_Count); 1332 XCTAssertEqual(0U, message.repeatedImportMessageArray_Count); 1333 XCTAssertEqual(0U, message.repeatedNestedEnumArray_Count); 1334 XCTAssertEqual(0U, message.repeatedForeignEnumArray_Count); 1335 XCTAssertEqual(0U, message.repeatedImportEnumArray_Count); 1336 1337 XCTAssertEqual(0U, message.repeatedStringPieceArray_Count); 1338 XCTAssertEqual(0U, message.repeatedCordArray_Count); 1339 1340 // hasBlah() should also be NO for all default fields. 1341 XCTAssertFalse(message.hasDefaultInt32); 1342 XCTAssertFalse(message.hasDefaultInt64); 1343 XCTAssertFalse(message.hasDefaultUint32); 1344 XCTAssertFalse(message.hasDefaultUint64); 1345 XCTAssertFalse(message.hasDefaultSint32); 1346 XCTAssertFalse(message.hasDefaultSint64); 1347 XCTAssertFalse(message.hasDefaultFixed32); 1348 XCTAssertFalse(message.hasDefaultFixed64); 1349 XCTAssertFalse(message.hasDefaultSfixed32); 1350 XCTAssertFalse(message.hasDefaultSfixed64); 1351 XCTAssertFalse(message.hasDefaultFloat); 1352 XCTAssertFalse(message.hasDefaultDouble); 1353 XCTAssertFalse(message.hasDefaultBool); 1354 XCTAssertFalse(message.hasDefaultString); 1355 XCTAssertFalse(message.hasDefaultBytes); 1356 1357 XCTAssertFalse(message.hasDefaultNestedEnum); 1358 XCTAssertFalse(message.hasDefaultForeignEnum); 1359 XCTAssertFalse(message.hasDefaultImportEnum); 1360 1361 XCTAssertFalse(message.hasDefaultStringPiece); 1362 XCTAssertFalse(message.hasDefaultCord); 1363 1364 // Fields with defaults have their default values (duh). 1365 XCTAssertEqual(41, message.defaultInt32); 1366 XCTAssertEqual(42LL, message.defaultInt64); 1367 XCTAssertEqual(43U, message.defaultUint32); 1368 XCTAssertEqual(44ULL, message.defaultUint64); 1369 XCTAssertEqual(-45, message.defaultSint32); 1370 XCTAssertEqual(46LL, message.defaultSint64); 1371 XCTAssertEqual(47U, message.defaultFixed32); 1372 XCTAssertEqual(48ULL, message.defaultFixed64); 1373 XCTAssertEqual(49, message.defaultSfixed32); 1374 XCTAssertEqual(-50LL, message.defaultSfixed64); 1375 XCTAssertEqualWithAccuracy(51.5f, message.defaultFloat, 0.1); 1376 XCTAssertEqualWithAccuracy(52e3, message.defaultDouble, 0.1); 1377 XCTAssertTrue(message.defaultBool); 1378 XCTAssertEqualObjects(@"hello", message.defaultString); 1379 XCTAssertEqualObjects([NSData gpbtu_dataWithCString:"world"], 1380 message.defaultBytes); 1381 1382 XCTAssertEqual(TestAllTypes_NestedEnum_Bar, message.defaultNestedEnum); 1383 XCTAssertEqual(ForeignEnum_ForeignBar, message.defaultForeignEnum); 1384 XCTAssertEqual(ImportEnum_ImportBar, message.defaultImportEnum); 1385 1386 XCTAssertEqualObjects(@"abc", message.defaultStringPiece); 1387 XCTAssertEqualObjects(@"123", message.defaultCord); 1388} 1389 1390- (void)assertExtensionsClear:(TestAllExtensions *)message { 1391 // hasBlah() should initially be NO for all optional fields. 1392 XCTAssertFalse([message hasExtension:[UnittestRoot optionalInt32Extension]]); 1393 XCTAssertFalse([message hasExtension:[UnittestRoot optionalInt64Extension]]); 1394 XCTAssertFalse([message hasExtension:[UnittestRoot optionalUint32Extension]]); 1395 XCTAssertFalse([message hasExtension:[UnittestRoot optionalUint64Extension]]); 1396 XCTAssertFalse([message hasExtension:[UnittestRoot optionalSint32Extension]]); 1397 XCTAssertFalse([message hasExtension:[UnittestRoot optionalSint64Extension]]); 1398 XCTAssertFalse([message hasExtension:[UnittestRoot optionalFixed32Extension]]); 1399 XCTAssertFalse([message hasExtension:[UnittestRoot optionalFixed64Extension]]); 1400 XCTAssertFalse([message hasExtension:[UnittestRoot optionalSfixed32Extension]]); 1401 XCTAssertFalse([message hasExtension:[UnittestRoot optionalSfixed64Extension]]); 1402 XCTAssertFalse([message hasExtension:[UnittestRoot optionalFloatExtension]]); 1403 XCTAssertFalse([message hasExtension:[UnittestRoot optionalDoubleExtension]]); 1404 XCTAssertFalse([message hasExtension:[UnittestRoot optionalBoolExtension]]); 1405 XCTAssertFalse([message hasExtension:[UnittestRoot optionalStringExtension]]); 1406 XCTAssertFalse([message hasExtension:[UnittestRoot optionalBytesExtension]]); 1407 1408 XCTAssertFalse([message hasExtension:[UnittestRoot optionalGroupExtension]]); 1409 XCTAssertFalse([message hasExtension:[UnittestRoot optionalNestedMessageExtension]]); 1410 XCTAssertFalse([message hasExtension:[UnittestRoot optionalForeignMessageExtension]]); 1411 XCTAssertFalse([message hasExtension:[UnittestRoot optionalImportMessageExtension]]); 1412 1413 XCTAssertFalse([message hasExtension:[UnittestRoot optionalNestedEnumExtension]]); 1414 XCTAssertFalse([message hasExtension:[UnittestRoot optionalForeignEnumExtension]]); 1415 XCTAssertFalse([message hasExtension:[UnittestRoot optionalImportEnumExtension]]); 1416 1417 XCTAssertFalse([message hasExtension:[UnittestRoot optionalStringPieceExtension]]); 1418 XCTAssertFalse([message hasExtension:[UnittestRoot optionalCordExtension]]); 1419 1420 // Optional fields without defaults are set to zero or something like it. 1421 XCTAssertEqual(0, [[message getExtension:[UnittestRoot optionalInt32Extension]] intValue]); 1422 XCTAssertEqual(0LL,[[message getExtension:[UnittestRoot optionalInt64Extension]] longLongValue]); 1423 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot optionalUint32Extension]] unsignedIntValue]); 1424 XCTAssertEqual(0ULL, [[message getExtension:[UnittestRoot optionalUint64Extension]] unsignedLongLongValue]); 1425 XCTAssertEqual(0, [[message getExtension:[UnittestRoot optionalSint32Extension]] intValue]); 1426 XCTAssertEqual(0LL, [[message getExtension:[UnittestRoot optionalSint64Extension]] longLongValue]); 1427 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot optionalFixed32Extension]] unsignedIntValue]); 1428 XCTAssertEqual(0ULL, [[message getExtension:[UnittestRoot optionalFixed64Extension]] unsignedLongLongValue]); 1429 XCTAssertEqual(0, [[message getExtension:[UnittestRoot optionalSfixed32Extension]] intValue]); 1430 XCTAssertEqual(0LL, [[message getExtension:[UnittestRoot optionalSfixed64Extension]] longLongValue]); 1431 XCTAssertEqualWithAccuracy(0.0f, [[message getExtension:[UnittestRoot optionalFloatExtension]] floatValue], 0.01); 1432 XCTAssertEqualWithAccuracy(0.0, [[message getExtension:[UnittestRoot optionalDoubleExtension]] doubleValue], 0.01); 1433 XCTAssertFalse([[message getExtension:[UnittestRoot optionalBoolExtension]] boolValue]); 1434 XCTAssertEqualObjects(@"", [message getExtension:[UnittestRoot optionalStringExtension]]); 1435 XCTAssertEqualObjects(GPBEmptyNSData(), [message getExtension:[UnittestRoot optionalBytesExtension]]); 1436 1437 // Embedded messages should also be clear. 1438 1439 XCTAssertFalse([[message getExtension:[UnittestRoot optionalGroupExtension]] hasA]); 1440 XCTAssertFalse([[message getExtension:[UnittestRoot optionalNestedMessageExtension]] hasBb]); 1441 XCTAssertFalse([[message getExtension:[UnittestRoot optionalForeignMessageExtension]] hasC]); 1442 XCTAssertFalse([[message getExtension:[UnittestRoot optionalImportMessageExtension]] hasD]); 1443 1444 XCTAssertEqual(0, [(TestAllTypes_OptionalGroup*)[message getExtension:[UnittestRoot optionalGroupExtension]] a]); 1445 XCTAssertEqual(0, [(TestAllTypes_NestedMessage*)[message getExtension:[UnittestRoot optionalNestedMessageExtension]] bb]); 1446 XCTAssertEqual(0, [[message getExtension:[UnittestRoot optionalForeignMessageExtension]] c]); 1447 XCTAssertEqual(0, [[message getExtension:[UnittestRoot optionalImportMessageExtension]] d]); 1448 1449 // Enums without defaults are set to the first value in the enum. 1450 XCTAssertEqual(TestAllTypes_NestedEnum_Foo, 1451 [[message getExtension:[UnittestRoot optionalNestedEnumExtension]] intValue]); 1452 XCTAssertEqual(ForeignEnum_ForeignFoo, 1453 [[message getExtension:[UnittestRoot optionalForeignEnumExtension]] intValue]); 1454 XCTAssertEqual(ImportEnum_ImportFoo, 1455 [[message getExtension:[UnittestRoot optionalImportEnumExtension]] intValue]); 1456 1457 XCTAssertEqualObjects(@"", [message getExtension:[UnittestRoot optionalStringPieceExtension]]); 1458 XCTAssertEqualObjects(@"", [message getExtension:[UnittestRoot optionalCordExtension]]); 1459 1460 // Repeated fields are empty. 1461 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedInt32Extension]] count]); 1462 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedInt64Extension]] count]); 1463 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedUint32Extension]] count]); 1464 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedUint64Extension]] count]); 1465 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedSint32Extension]] count]); 1466 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedSint64Extension]] count]); 1467 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedFixed32Extension]] count]); 1468 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedFixed64Extension]] count]); 1469 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedSfixed32Extension]] count]); 1470 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedSfixed64Extension]] count]); 1471 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedFloatExtension]] count]); 1472 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedDoubleExtension]] count]); 1473 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedBoolExtension]] count]); 1474 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedStringExtension]] count]); 1475 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedBytesExtension]] count]); 1476 1477 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedGroupExtension]] count]); 1478 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedNestedMessageExtension]] count]); 1479 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedForeignMessageExtension]] count]); 1480 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedImportMessageExtension]] count]); 1481 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedNestedEnumExtension]] count]); 1482 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedForeignEnumExtension]] count]); 1483 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedImportEnumExtension]] count]); 1484 1485 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedStringPieceExtension]] count]); 1486 XCTAssertEqual(0U, [[message getExtension:[UnittestRoot repeatedCordExtension]] count]); 1487 1488 // hasBlah() should also be NO for all default fields. 1489 XCTAssertFalse([message hasExtension:[UnittestRoot defaultInt32Extension]]); 1490 XCTAssertFalse([message hasExtension:[UnittestRoot defaultInt64Extension]]); 1491 XCTAssertFalse([message hasExtension:[UnittestRoot defaultUint32Extension]]); 1492 XCTAssertFalse([message hasExtension:[UnittestRoot defaultUint64Extension]]); 1493 XCTAssertFalse([message hasExtension:[UnittestRoot defaultSint32Extension]]); 1494 XCTAssertFalse([message hasExtension:[UnittestRoot defaultSint64Extension]]); 1495 XCTAssertFalse([message hasExtension:[UnittestRoot defaultFixed32Extension]]); 1496 XCTAssertFalse([message hasExtension:[UnittestRoot defaultFixed64Extension]]); 1497 XCTAssertFalse([message hasExtension:[UnittestRoot defaultSfixed32Extension]]); 1498 XCTAssertFalse([message hasExtension:[UnittestRoot defaultSfixed64Extension]]); 1499 XCTAssertFalse([message hasExtension:[UnittestRoot defaultFloatExtension]]); 1500 XCTAssertFalse([message hasExtension:[UnittestRoot defaultDoubleExtension]]); 1501 XCTAssertFalse([message hasExtension:[UnittestRoot defaultBoolExtension]]); 1502 XCTAssertFalse([message hasExtension:[UnittestRoot defaultStringExtension]]); 1503 XCTAssertFalse([message hasExtension:[UnittestRoot defaultBytesExtension]]); 1504 1505 XCTAssertFalse([message hasExtension:[UnittestRoot defaultNestedEnumExtension]]); 1506 XCTAssertFalse([message hasExtension:[UnittestRoot defaultForeignEnumExtension]]); 1507 XCTAssertFalse([message hasExtension:[UnittestRoot defaultImportEnumExtension]]); 1508 1509 XCTAssertFalse([message hasExtension:[UnittestRoot defaultStringPieceExtension]]); 1510 XCTAssertFalse([message hasExtension:[UnittestRoot defaultCordExtension]]); 1511 1512 // Fields with defaults have their default values (duh). 1513 XCTAssertEqual( 41, [[message getExtension:[UnittestRoot defaultInt32Extension]] intValue]); 1514 XCTAssertEqual( 42LL, [[message getExtension:[UnittestRoot defaultInt64Extension]] longLongValue]); 1515 XCTAssertEqual( 43U, [[message getExtension:[UnittestRoot defaultUint32Extension]] unsignedIntValue]); 1516 XCTAssertEqual( 44ULL, [[message getExtension:[UnittestRoot defaultUint64Extension]] unsignedLongLongValue]); 1517 XCTAssertEqual(-45, [[message getExtension:[UnittestRoot defaultSint32Extension]] intValue]); 1518 XCTAssertEqual( 46LL, [[message getExtension:[UnittestRoot defaultSint64Extension]] longLongValue]); 1519 XCTAssertEqual( 47, [[message getExtension:[UnittestRoot defaultFixed32Extension]] intValue]); 1520 XCTAssertEqual( 48ULL, [[message getExtension:[UnittestRoot defaultFixed64Extension]] unsignedLongLongValue]); 1521 XCTAssertEqual( 49, [[message getExtension:[UnittestRoot defaultSfixed32Extension]] intValue]); 1522 XCTAssertEqual(-50LL, [[message getExtension:[UnittestRoot defaultSfixed64Extension]] longLongValue]); 1523 XCTAssertEqualWithAccuracy( 51.5f, [[message getExtension:[UnittestRoot defaultFloatExtension]] floatValue], 0.01); 1524 XCTAssertEqualWithAccuracy( 52e3, [[message getExtension:[UnittestRoot defaultDoubleExtension]] doubleValue], 0.01); 1525 XCTAssertTrue([[message getExtension:[UnittestRoot defaultBoolExtension]] boolValue]); 1526 XCTAssertEqualObjects(@"hello", [message getExtension:[UnittestRoot defaultStringExtension]]); 1527 XCTAssertEqualObjects([NSData gpbtu_dataWithCString:"world"], [message getExtension:[UnittestRoot defaultBytesExtension]]); 1528 1529 XCTAssertEqual(TestAllTypes_NestedEnum_Bar, 1530 [[message getExtension:[UnittestRoot defaultNestedEnumExtension]] intValue]); 1531 XCTAssertEqual(ForeignEnum_ForeignBar, 1532 [[message getExtension:[UnittestRoot defaultForeignEnumExtension]] intValue]); 1533 XCTAssertEqual(ImportEnum_ImportBar, 1534 [[message getExtension:[UnittestRoot defaultImportEnumExtension]] intValue]); 1535 1536 XCTAssertEqualObjects(@"abc", [message getExtension:[UnittestRoot defaultStringPieceExtension]]); 1537 XCTAssertEqualObjects(@"123", [message getExtension:[UnittestRoot defaultCordExtension]]); 1538} 1539 1540- (void)modifyRepeatedFields:(TestAllTypes *)message { 1541 [message.repeatedInt32Array replaceValueAtIndex:1 withValue:501]; 1542 [message.repeatedInt64Array replaceValueAtIndex:1 withValue:502]; 1543 [message.repeatedUint32Array replaceValueAtIndex:1 withValue:503]; 1544 [message.repeatedUint64Array replaceValueAtIndex:1 withValue:504]; 1545 [message.repeatedSint32Array replaceValueAtIndex:1 withValue:505]; 1546 [message.repeatedSint64Array replaceValueAtIndex:1 withValue:506]; 1547 [message.repeatedFixed32Array replaceValueAtIndex:1 withValue:507]; 1548 [message.repeatedFixed64Array replaceValueAtIndex:1 withValue:508]; 1549 [message.repeatedSfixed32Array replaceValueAtIndex:1 withValue:509]; 1550 [message.repeatedSfixed64Array replaceValueAtIndex:1 withValue:510]; 1551 [message.repeatedFloatArray replaceValueAtIndex:1 withValue:511]; 1552 [message.repeatedDoubleArray replaceValueAtIndex:1 withValue:512]; 1553 [message.repeatedBoolArray replaceValueAtIndex:1 withValue:YES]; 1554 [message.repeatedStringArray replaceObjectAtIndex:1 withObject:@"515"]; 1555 1556 NSData *data = [[NSData alloc] initWithUint32_gpbtu:516]; 1557 [message.repeatedBytesArray replaceObjectAtIndex:1 withObject:data]; 1558 [data release]; 1559 1560 TestAllTypes_RepeatedGroup *testAll = 1561 [[TestAllTypes_RepeatedGroup alloc] init]; 1562 [testAll setA:517]; 1563 [message.repeatedGroupArray replaceObjectAtIndex:1 withObject:testAll]; 1564 [testAll release]; 1565 1566 TestAllTypes_NestedMessage *nestedMessage = 1567 [[TestAllTypes_NestedMessage alloc] init]; 1568 [nestedMessage setBb:518]; 1569 [message.repeatedNestedMessageArray replaceObjectAtIndex:1 1570 withObject:nestedMessage]; 1571 [nestedMessage release]; 1572 1573 ForeignMessage *foreignMessage = [[ForeignMessage alloc] init]; 1574 [foreignMessage setC:519]; 1575 [message.repeatedForeignMessageArray replaceObjectAtIndex:1 1576 withObject:foreignMessage]; 1577 [foreignMessage release]; 1578 1579 ImportMessage *importMessage = [[ImportMessage alloc] init]; 1580 [importMessage setD:520]; 1581 [message.repeatedImportMessageArray replaceObjectAtIndex:1 1582 withObject:importMessage]; 1583 [importMessage release]; 1584 1585 [message.repeatedNestedEnumArray replaceValueAtIndex:1 withValue:TestAllTypes_NestedEnum_Foo]; 1586 [message.repeatedForeignEnumArray replaceValueAtIndex:1 withValue:ForeignEnum_ForeignFoo]; 1587 [message.repeatedImportEnumArray replaceValueAtIndex:1 withValue:ImportEnum_ImportFoo]; 1588 1589 [message.repeatedStringPieceArray replaceObjectAtIndex:1 withObject:@"524"]; 1590 [message.repeatedCordArray replaceObjectAtIndex:1 withObject:@"525"]; 1591} 1592 1593- (void)assertRepeatedFieldsModified:(TestAllTypes *)message 1594 repeatedCount:(uint32_t)count { 1595 // ModifyRepeatedFields only sets the second repeated element of each 1596 // field. In addition to verifying this, we also verify that the first 1597 // element and size were *not* modified. 1598 1599 XCTAssertEqual(count, message.repeatedInt32Array.count); 1600 XCTAssertEqual(count, message.repeatedInt64Array.count); 1601 XCTAssertEqual(count, message.repeatedUint32Array.count); 1602 XCTAssertEqual(count, message.repeatedUint64Array.count); 1603 XCTAssertEqual(count, message.repeatedSint32Array.count); 1604 XCTAssertEqual(count, message.repeatedSint64Array.count); 1605 XCTAssertEqual(count, message.repeatedFixed32Array.count); 1606 XCTAssertEqual(count, message.repeatedFixed64Array.count); 1607 XCTAssertEqual(count, message.repeatedSfixed32Array.count); 1608 XCTAssertEqual(count, message.repeatedSfixed64Array.count); 1609 XCTAssertEqual(count, message.repeatedFloatArray.count); 1610 XCTAssertEqual(count, message.repeatedDoubleArray.count); 1611 XCTAssertEqual(count, message.repeatedBoolArray.count); 1612 XCTAssertEqual(count, message.repeatedStringArray.count); 1613 XCTAssertEqual(count, message.repeatedBytesArray.count); 1614 1615 XCTAssertEqual(count, message.repeatedGroupArray.count); 1616 XCTAssertEqual(count, message.repeatedNestedMessageArray.count); 1617 XCTAssertEqual(count, message.repeatedForeignMessageArray.count); 1618 XCTAssertEqual(count, message.repeatedImportMessageArray.count); 1619 XCTAssertEqual(count, message.repeatedNestedEnumArray.count); 1620 XCTAssertEqual(count, message.repeatedForeignEnumArray.count); 1621 XCTAssertEqual(count, message.repeatedImportEnumArray.count); 1622 1623 XCTAssertEqual(count, message.repeatedStringPieceArray.count); 1624 XCTAssertEqual(count, message.repeatedCordArray.count); 1625 1626 XCTAssertEqual(count, message.repeatedInt32Array_Count); 1627 XCTAssertEqual(count, message.repeatedInt64Array_Count); 1628 XCTAssertEqual(count, message.repeatedUint32Array_Count); 1629 XCTAssertEqual(count, message.repeatedUint64Array_Count); 1630 XCTAssertEqual(count, message.repeatedSint32Array_Count); 1631 XCTAssertEqual(count, message.repeatedSint64Array_Count); 1632 XCTAssertEqual(count, message.repeatedFixed32Array_Count); 1633 XCTAssertEqual(count, message.repeatedFixed64Array_Count); 1634 XCTAssertEqual(count, message.repeatedSfixed32Array_Count); 1635 XCTAssertEqual(count, message.repeatedSfixed64Array_Count); 1636 XCTAssertEqual(count, message.repeatedFloatArray_Count); 1637 XCTAssertEqual(count, message.repeatedDoubleArray_Count); 1638 XCTAssertEqual(count, message.repeatedBoolArray_Count); 1639 XCTAssertEqual(count, message.repeatedStringArray_Count); 1640 XCTAssertEqual(count, message.repeatedBytesArray_Count); 1641 1642 XCTAssertEqual(count, message.repeatedGroupArray_Count); 1643 XCTAssertEqual(count, message.repeatedNestedMessageArray_Count); 1644 XCTAssertEqual(count, message.repeatedForeignMessageArray_Count); 1645 XCTAssertEqual(count, message.repeatedImportMessageArray_Count); 1646 XCTAssertEqual(count, message.repeatedNestedEnumArray_Count); 1647 XCTAssertEqual(count, message.repeatedForeignEnumArray_Count); 1648 XCTAssertEqual(count, message.repeatedImportEnumArray_Count); 1649 1650 XCTAssertEqual(count, message.repeatedStringPieceArray_Count); 1651 XCTAssertEqual(count, message.repeatedCordArray_Count); 1652 1653 XCTAssertEqual(201, [message.repeatedInt32Array valueAtIndex:0]); 1654 XCTAssertEqual(202LL, [message.repeatedInt64Array valueAtIndex:0]); 1655 XCTAssertEqual(203U, [message.repeatedUint32Array valueAtIndex:0]); 1656 XCTAssertEqual(204ULL, [message.repeatedUint64Array valueAtIndex:0]); 1657 XCTAssertEqual(205, [message.repeatedSint32Array valueAtIndex:0]); 1658 XCTAssertEqual(206LL, [message.repeatedSint64Array valueAtIndex:0]); 1659 XCTAssertEqual(207U, [message.repeatedFixed32Array valueAtIndex:0]); 1660 XCTAssertEqual(208ULL, [message.repeatedFixed64Array valueAtIndex:0]); 1661 XCTAssertEqual(209, [message.repeatedSfixed32Array valueAtIndex:0]); 1662 XCTAssertEqual(210LL, [message.repeatedSfixed64Array valueAtIndex:0]); 1663 XCTAssertEqualWithAccuracy(211.0f, [message.repeatedFloatArray valueAtIndex:0], 0.01); 1664 XCTAssertEqualWithAccuracy(212.0, [message.repeatedDoubleArray valueAtIndex:0], 0.01); 1665 XCTAssertFalse([message.repeatedBoolArray valueAtIndex:0]); 1666 XCTAssertEqualObjects(@"215", message.repeatedStringArray[0]); 1667 XCTAssertEqualObjects([NSData gpbtu_dataWithUint32:216], 1668 message.repeatedBytesArray[0]); 1669 1670 XCTAssertEqual(217, ((TestAllTypes_RepeatedGroup*)message.repeatedGroupArray[0]).a); 1671 XCTAssertEqual(218, ((TestAllTypes_NestedMessage*)message.repeatedNestedMessageArray[0]).bb); 1672 XCTAssertEqual(219, ((ForeignMessage*)message.repeatedForeignMessageArray[0]).c); 1673 XCTAssertEqual(220, ((ImportMessage*)message.repeatedImportMessageArray[0]).d); 1674 1675 XCTAssertEqual(TestAllTypes_NestedEnum_Baz, [message.repeatedNestedEnumArray valueAtIndex:0]); 1676 XCTAssertEqual(ForeignEnum_ForeignBaz, [message.repeatedForeignEnumArray valueAtIndex:0]); 1677 XCTAssertEqual(ImportEnum_ImportBaz, [message.repeatedImportEnumArray valueAtIndex:0]); 1678 1679 XCTAssertEqualObjects(@"224", message.repeatedStringPieceArray[0]); 1680 XCTAssertEqualObjects(@"225", message.repeatedCordArray[0]); 1681 1682 // Actually verify the second (modified) elements now. 1683 XCTAssertEqual(501, [message.repeatedInt32Array valueAtIndex:1]); 1684 XCTAssertEqual(502LL, [message.repeatedInt64Array valueAtIndex:1]); 1685 XCTAssertEqual(503U, [message.repeatedUint32Array valueAtIndex:1]); 1686 XCTAssertEqual(504ULL, [message.repeatedUint64Array valueAtIndex:1]); 1687 XCTAssertEqual(505, [message.repeatedSint32Array valueAtIndex:1]); 1688 XCTAssertEqual(506LL, [message.repeatedSint64Array valueAtIndex:1]); 1689 XCTAssertEqual(507U, [message.repeatedFixed32Array valueAtIndex:1]); 1690 XCTAssertEqual(508ULL, [message.repeatedFixed64Array valueAtIndex:1]); 1691 XCTAssertEqual(509, [message.repeatedSfixed32Array valueAtIndex:1]); 1692 XCTAssertEqual(510LL, [message.repeatedSfixed64Array valueAtIndex:1]); 1693 XCTAssertEqualWithAccuracy(511.0f, [message.repeatedFloatArray valueAtIndex:1], 0.01); 1694 XCTAssertEqualWithAccuracy(512.0, [message.repeatedDoubleArray valueAtIndex:1], 0.01); 1695 XCTAssertTrue([message.repeatedBoolArray valueAtIndex:1]); 1696 XCTAssertEqualObjects(@"515", message.repeatedStringArray[1]); 1697 XCTAssertEqualObjects([NSData gpbtu_dataWithUint32:516], 1698 message.repeatedBytesArray[1]); 1699 1700 XCTAssertEqual(517, ((TestAllTypes_RepeatedGroup*)message.repeatedGroupArray[1]).a); 1701 XCTAssertEqual(518, ((TestAllTypes_NestedMessage*)message.repeatedNestedMessageArray[1]).bb); 1702 XCTAssertEqual(519, ((ForeignMessage*)message.repeatedForeignMessageArray[1]).c); 1703 XCTAssertEqual(520, ((ImportMessage*)message.repeatedImportMessageArray[1]).d); 1704 1705 XCTAssertEqual(TestAllTypes_NestedEnum_Foo, [message.repeatedNestedEnumArray valueAtIndex:1]); 1706 XCTAssertEqual(ForeignEnum_ForeignFoo, [message.repeatedForeignEnumArray valueAtIndex:1]); 1707 XCTAssertEqual(ImportEnum_ImportFoo, [message.repeatedImportEnumArray valueAtIndex:1]); 1708 1709 XCTAssertEqualObjects(@"524", message.repeatedStringPieceArray[1]); 1710 XCTAssertEqualObjects(@"525", message.repeatedCordArray[1]); 1711} 1712 1713- (void)setPackedFields:(TestPackedTypes *)message 1714 repeatedCount:(uint32_t)count { 1715 // Must match -setUnpackedFields:repeatedCount: 1716 // Must match -setPackedExtensions:repeatedCount: 1717 // Must match -setUnpackedExtensions:repeatedCount: 1718 for (uint32_t i = 0; i < count; ++i) { 1719 [message.packedInt32Array addValue:601 + i * 100]; 1720 } 1721 for (uint32_t i = 0; i < count; ++i) { 1722 [message.packedInt64Array addValue:602 + i * 100]; 1723 } 1724 for (uint32_t i = 0; i < count; ++i) { 1725 [message.packedUint32Array addValue:603 + i * 100]; 1726 } 1727 for (uint32_t i = 0; i < count; ++i) { 1728 [message.packedUint64Array addValue:604 + i * 100]; 1729 } 1730 for (uint32_t i = 0; i < count; ++i) { 1731 [message.packedSint32Array addValue:605 + i * 100]; 1732 } 1733 for (uint32_t i = 0; i < count; ++i) { 1734 [message.packedSint64Array addValue:606 + i * 100]; 1735 } 1736 for (uint32_t i = 0; i < count; ++i) { 1737 [message.packedFixed32Array addValue:607 + i * 100]; 1738 } 1739 for (uint32_t i = 0; i < count; ++i) { 1740 [message.packedFixed64Array addValue:608 + i * 100]; 1741 } 1742 for (uint32_t i = 0; i < count; ++i) { 1743 [message.packedSfixed32Array addValue:609 + i * 100]; 1744 } 1745 for (uint32_t i = 0; i < count; ++i) { 1746 [message.packedSfixed64Array addValue:610 + i * 100]; 1747 } 1748 for (uint32_t i = 0; i < count; ++i) { 1749 [message.packedFloatArray addValue:611 + i * 100]; 1750 } 1751 for (uint32_t i = 0; i < count; ++i) { 1752 [message.packedDoubleArray addValue:612 + i * 100]; 1753 } 1754 for (uint32_t i = 0; i < count; ++i) { 1755 [message.packedBoolArray addValue:(i % 2) ? YES : NO]; 1756 } 1757 for (uint32_t i = 0; i < count; ++i) { 1758 [message.packedEnumArray 1759 addValue:(i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz]; 1760 } 1761} 1762 1763- (void)setUnpackedFields:(TestUnpackedTypes *)message 1764 repeatedCount:(uint32_t)count { 1765 // Must match -setPackedFields:repeatedCount: 1766 // Must match -setPackedExtensions:repeatedCount: 1767 // Must match -setUnpackedExtensions:repeatedCount: 1768 for (uint32_t i = 0; i < count; ++i) { 1769 [message.unpackedInt32Array addValue:601 + i * 100]; 1770 } 1771 for (uint32_t i = 0; i < count; ++i) { 1772 [message.unpackedInt64Array addValue:602 + i * 100]; 1773 } 1774 for (uint32_t i = 0; i < count; ++i) { 1775 [message.unpackedUint32Array addValue:603 + i * 100]; 1776 } 1777 for (uint32_t i = 0; i < count; ++i) { 1778 [message.unpackedUint64Array addValue:604 + i * 100]; 1779 } 1780 for (uint32_t i = 0; i < count; ++i) { 1781 [message.unpackedSint32Array addValue:605 + i * 100]; 1782 } 1783 for (uint32_t i = 0; i < count; ++i) { 1784 [message.unpackedSint64Array addValue:606 + i * 100]; 1785 } 1786 for (uint32_t i = 0; i < count; ++i) { 1787 [message.unpackedFixed32Array addValue:607 + i * 100]; 1788 } 1789 for (uint32_t i = 0; i < count; ++i) { 1790 [message.unpackedFixed64Array addValue:608 + i * 100]; 1791 } 1792 for (uint32_t i = 0; i < count; ++i) { 1793 [message.unpackedSfixed32Array addValue:609 + i * 100]; 1794 } 1795 for (uint32_t i = 0; i < count; ++i) { 1796 [message.unpackedSfixed64Array addValue:610 + i * 100]; 1797 } 1798 for (uint32_t i = 0; i < count; ++i) { 1799 [message.unpackedFloatArray addValue:611 + i * 100]; 1800 } 1801 for (uint32_t i = 0; i < count; ++i) { 1802 [message.unpackedDoubleArray addValue:612 + i * 100]; 1803 } 1804 for (uint32_t i = 0; i < count; ++i) { 1805 [message.unpackedBoolArray addValue:(i % 2) ? YES : NO]; 1806 } 1807 for (uint32_t i = 0; i < count; ++i) { 1808 [message.unpackedEnumArray 1809 addValue:(i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz]; 1810 } 1811} 1812 1813- (void)assertPackedFieldsSet:(TestPackedTypes *)message 1814 repeatedCount:(uint32_t)count { 1815 XCTAssertEqual(count, message.packedInt32Array.count); 1816 XCTAssertEqual(count, message.packedInt64Array.count); 1817 XCTAssertEqual(count, message.packedUint32Array.count); 1818 XCTAssertEqual(count, message.packedUint64Array.count); 1819 XCTAssertEqual(count, message.packedSint32Array.count); 1820 XCTAssertEqual(count, message.packedSint64Array.count); 1821 XCTAssertEqual(count, message.packedFixed32Array.count); 1822 XCTAssertEqual(count, message.packedFixed64Array.count); 1823 XCTAssertEqual(count, message.packedSfixed32Array.count); 1824 XCTAssertEqual(count, message.packedSfixed64Array.count); 1825 XCTAssertEqual(count, message.packedFloatArray.count); 1826 XCTAssertEqual(count, message.packedDoubleArray.count); 1827 XCTAssertEqual(count, message.packedBoolArray.count); 1828 XCTAssertEqual(count, message.packedEnumArray.count); 1829 for (uint32_t i = 0; i < count; ++i) { 1830 XCTAssertEqual((int)(601 + i * 100), 1831 [message.packedInt32Array valueAtIndex:i]); 1832 XCTAssertEqual(602 + i * 100, [message.packedInt64Array valueAtIndex:i]); 1833 XCTAssertEqual(603 + i * 100, [message.packedUint32Array valueAtIndex:i]); 1834 XCTAssertEqual(604 + i * 100, [message.packedUint64Array valueAtIndex:i]); 1835 XCTAssertEqual((int)(605 + i * 100), 1836 [message.packedSint32Array valueAtIndex:i]); 1837 XCTAssertEqual(606 + i * 100, [message.packedSint64Array valueAtIndex:i]); 1838 XCTAssertEqual(607 + i * 100, [message.packedFixed32Array valueAtIndex:i]); 1839 XCTAssertEqual(608 + i * 100, [message.packedFixed64Array valueAtIndex:i]); 1840 XCTAssertEqual((int)(609 + i * 100), 1841 [message.packedSfixed32Array valueAtIndex:i]); 1842 XCTAssertEqual(610 + i * 100, [message.packedSfixed64Array valueAtIndex:i]); 1843 XCTAssertEqualWithAccuracy(611 + i * 100, 1844 [message.packedFloatArray valueAtIndex:i], 0.01); 1845 XCTAssertEqualWithAccuracy( 1846 612 + i * 100, [message.packedDoubleArray valueAtIndex:i], 0.01); 1847 XCTAssertEqual((i % 2) ? YES : NO, 1848 [message.packedBoolArray valueAtIndex:i]); 1849 XCTAssertEqual((i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz, 1850 [message.packedEnumArray valueAtIndex:i]); 1851 } 1852} 1853 1854- (void)setPackedExtensions:(TestPackedExtensions *)message 1855 repeatedCount:(uint32_t)count { 1856 // Must match -setPackedFields:repeatedCount: 1857 // Must match -setUnpackedFields:repeatedCount: 1858 // Must match -setUnpackedExtensions:repeatedCount: 1859 for (uint32_t i = 0; i < count; i++) { 1860 [message addExtension:[UnittestRoot packedInt32Extension] 1861 value:@(601 + i * 100)]; 1862 [message addExtension:[UnittestRoot packedInt64Extension] 1863 value:@(602 + i * 100)]; 1864 [message addExtension:[UnittestRoot packedUint32Extension] 1865 value:@(603 + i * 100)]; 1866 [message addExtension:[UnittestRoot packedUint64Extension] 1867 value:@(604 + i * 100)]; 1868 [message addExtension:[UnittestRoot packedSint32Extension] 1869 value:@(605 + i * 100)]; 1870 [message addExtension:[UnittestRoot packedSint64Extension] 1871 value:@(606 + i * 100)]; 1872 [message addExtension:[UnittestRoot packedFixed32Extension] 1873 value:@(607 + i * 100)]; 1874 [message addExtension:[UnittestRoot packedFixed64Extension] 1875 value:@(608 + i * 100)]; 1876 [message addExtension:[UnittestRoot packedSfixed32Extension] 1877 value:@(609 + i * 100)]; 1878 [message addExtension:[UnittestRoot packedSfixed64Extension] 1879 value:@(610 + i * 100)]; 1880 [message addExtension:[UnittestRoot packedFloatExtension] 1881 value:@(611 + i * 100)]; 1882 [message addExtension:[UnittestRoot packedDoubleExtension] 1883 value:@(612 + i * 100)]; 1884 [message addExtension:[UnittestRoot packedBoolExtension] 1885 value:@((i % 2) ? YES : NO)]; 1886 [message addExtension:[UnittestRoot packedEnumExtension] 1887 value:@((i % 2) ? ForeignEnum_ForeignBar 1888 : ForeignEnum_ForeignBaz)]; 1889 } 1890} 1891 1892- (void)setUnpackedExtensions:(TestUnpackedExtensions *)message 1893 repeatedCount:(uint32_t)count { 1894 // Must match -setPackedFields:repeatedCount: 1895 // Must match -setUnpackedFields:repeatedCount: 1896 // Must match -setPackedExtensions:repeatedCount: 1897 for (uint32_t i = 0; i < count; i++) { 1898 [message addExtension:[UnittestRoot unpackedInt32Extension] 1899 value:@(601 + i * 100)]; 1900 [message addExtension:[UnittestRoot unpackedInt64Extension] 1901 value:@(602 + i * 100)]; 1902 [message addExtension:[UnittestRoot unpackedUint32Extension] 1903 value:@(603 + i * 100)]; 1904 [message addExtension:[UnittestRoot unpackedUint64Extension] 1905 value:@(604 + i * 100)]; 1906 [message addExtension:[UnittestRoot unpackedSint32Extension] 1907 value:@(605 + i * 100)]; 1908 [message addExtension:[UnittestRoot unpackedSint64Extension] 1909 value:@(606 + i * 100)]; 1910 [message addExtension:[UnittestRoot unpackedFixed32Extension] 1911 value:@(607 + i * 100)]; 1912 [message addExtension:[UnittestRoot unpackedFixed64Extension] 1913 value:@(608 + i * 100)]; 1914 [message addExtension:[UnittestRoot unpackedSfixed32Extension] 1915 value:@(609 + i * 100)]; 1916 [message addExtension:[UnittestRoot unpackedSfixed64Extension] 1917 value:@(610 + i * 100)]; 1918 [message addExtension:[UnittestRoot unpackedFloatExtension] 1919 value:@(611 + i * 100)]; 1920 [message addExtension:[UnittestRoot unpackedDoubleExtension] 1921 value:@(612 + i * 100)]; 1922 [message addExtension:[UnittestRoot unpackedBoolExtension] 1923 value:@((i % 2) ? YES : NO)]; 1924 [message addExtension:[UnittestRoot unpackedEnumExtension] 1925 value:@((i % 2) ? ForeignEnum_ForeignBar 1926 : ForeignEnum_ForeignBaz)]; 1927 } 1928} 1929 1930- (void)assertPackedExtensionsSet:(TestPackedExtensions *)message 1931 repeatedCount:(uint32_t)count{ 1932 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedInt32Extension]] count]); 1933 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedInt64Extension]] count]); 1934 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedUint32Extension]] count]); 1935 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedUint64Extension]] count]); 1936 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedSint32Extension]] count]); 1937 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedSint64Extension]] count]); 1938 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedFixed32Extension]] count]); 1939 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedFixed64Extension]] count]); 1940 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedSfixed32Extension]] count]); 1941 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedSfixed64Extension]] count]); 1942 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedFloatExtension]] count]); 1943 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedDoubleExtension]] count]); 1944 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedBoolExtension]] count]); 1945 XCTAssertEqual(count, [[message getExtension:[UnittestRoot packedEnumExtension]] count]); 1946 1947 for (uint32_t i = 0; i < count; ++i) { 1948 id extension = [message getExtension:[UnittestRoot packedInt32Extension]]; 1949 XCTAssertEqual((int)(601 + i * 100), [extension[i] intValue]); 1950 extension = [message getExtension:[UnittestRoot packedInt64Extension]]; 1951 XCTAssertEqual(602 + i * 100, [extension[i] longLongValue]); 1952 extension = [message getExtension:[UnittestRoot packedUint32Extension]]; 1953 XCTAssertEqual(603 + i * 100, [extension[i] unsignedIntValue]); 1954 extension = [message getExtension:[UnittestRoot packedUint64Extension]]; 1955 XCTAssertEqual(604 + i * 100, [extension[i] unsignedLongLongValue]); 1956 extension = [message getExtension:[UnittestRoot packedSint32Extension]]; 1957 XCTAssertEqual((int)(605 + i * 100), [extension[i] intValue]); 1958 extension = [message getExtension:[UnittestRoot packedSint64Extension]]; 1959 XCTAssertEqual(606 + i * 100, [extension[i] longLongValue]); 1960 extension = [message getExtension:[UnittestRoot packedFixed32Extension]]; 1961 XCTAssertEqual(607 + i * 100, [extension[i] unsignedIntValue]); 1962 extension = [message getExtension:[UnittestRoot packedFixed64Extension]]; 1963 XCTAssertEqual(608 + i * 100, [extension[i] unsignedLongLongValue]); 1964 extension = [message getExtension:[UnittestRoot packedSfixed32Extension]]; 1965 XCTAssertEqual((int)(609 + i * 100), [extension[i] intValue]); 1966 extension = [message getExtension:[UnittestRoot packedSfixed64Extension]]; 1967 XCTAssertEqual(610 + i * 100, [extension[i] longLongValue]); 1968 extension = [message getExtension:[UnittestRoot packedFloatExtension]]; 1969 XCTAssertEqualWithAccuracy(611 + i * 100, [extension[i] floatValue], 0.01); 1970 extension = [message getExtension:[UnittestRoot packedDoubleExtension]]; 1971 XCTAssertEqualWithAccuracy(612 + i * 100, [extension[i] doubleValue], 0.01); 1972 extension = [message getExtension:[UnittestRoot packedBoolExtension]]; 1973 XCTAssertEqual((i % 2) ? YES : NO, [extension[i] boolValue]); 1974 extension = [message getExtension:[UnittestRoot packedEnumExtension]]; 1975 XCTAssertEqual((i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz, 1976 [extension[i] intValue]); 1977 } 1978} 1979 1980- (void)assertAllFieldsKVCMatch:(TestAllTypes *)message { 1981 XCTAssertEqualObjects([message valueForKey:@"hasOptionalInt32"], @YES); 1982 XCTAssertEqualObjects(@(message.optionalInt32), [message valueForKey:@"optionalInt32"]); 1983 XCTAssertEqualObjects([message valueForKey:@"hasOptionalInt64"], @YES); 1984 XCTAssertEqualObjects(@(message.optionalInt64), [message valueForKey:@"optionalInt64"]); 1985 XCTAssertEqualObjects([message valueForKey:@"hasOptionalUint32"], @YES); 1986 XCTAssertEqualObjects(@(message.optionalUint32), [message valueForKey:@"optionalUint32"]); 1987 XCTAssertEqualObjects([message valueForKey:@"hasOptionalUint64"], @YES); 1988 XCTAssertEqualObjects(@(message.optionalUint64), [message valueForKey:@"optionalUint64"]); 1989 XCTAssertEqualObjects([message valueForKey:@"hasOptionalSint32"], @YES); 1990 XCTAssertEqualObjects(@(message.optionalSint32), [message valueForKey:@"optionalSint32"]); 1991 XCTAssertEqualObjects([message valueForKey:@"hasOptionalSint64"], @YES); 1992 XCTAssertEqualObjects(@(message.optionalSint64), [message valueForKey:@"optionalSint64"]); 1993 XCTAssertEqualObjects([message valueForKey:@"hasOptionalFixed32"], @YES); 1994 XCTAssertEqualObjects(@(message.optionalFixed32), [message valueForKey:@"optionalFixed32"]); 1995 XCTAssertEqualObjects([message valueForKey:@"hasOptionalFixed64"], @YES); 1996 XCTAssertEqualObjects(@(message.optionalFixed64), [message valueForKey:@"optionalFixed64"]); 1997 XCTAssertEqualObjects([message valueForKey:@"hasOptionalSfixed32"], @YES); 1998 XCTAssertEqualObjects(@(message.optionalSfixed32), [message valueForKey:@"optionalSfixed32"]); 1999 XCTAssertEqualObjects([message valueForKey:@"hasOptionalSfixed64"], @YES); 2000 XCTAssertEqualObjects(@(message.optionalSfixed64), [message valueForKey:@"optionalSfixed64"]); 2001 XCTAssertEqualObjects([message valueForKey:@"hasOptionalFloat"], @YES); 2002 XCTAssertEqualObjects(@(message.optionalFloat), [message valueForKey:@"optionalFloat"]); 2003 XCTAssertEqualObjects([message valueForKey:@"hasOptionalDouble"], @YES); 2004 XCTAssertEqualObjects(@(message.optionalDouble), [message valueForKey:@"optionalDouble"]); 2005 XCTAssertEqualObjects([message valueForKey:@"hasOptionalBool"], @YES); 2006 XCTAssertEqualObjects(@(message.optionalBool), [message valueForKey:@"optionalBool"]); 2007 XCTAssertEqualObjects([message valueForKey:@"hasOptionalString"], @YES); 2008 XCTAssertEqualObjects(message.optionalString, [message valueForKey:@"optionalString"]); 2009 XCTAssertEqualObjects([message valueForKey:@"hasOptionalBytes"], @YES); 2010 XCTAssertEqualObjects(message.optionalBytes, [message valueForKey:@"optionalBytes"]); 2011 2012 XCTAssertEqualObjects([message valueForKey:@"hasOptionalGroup"], @YES); 2013 XCTAssertNotNil(message.optionalGroup); 2014 XCTAssertEqualObjects([message valueForKeyPath:@"optionalGroup.hasA"], @YES); 2015 XCTAssertEqualObjects(@(message.optionalGroup.a), [message valueForKeyPath:@"optionalGroup.a"]); 2016 XCTAssertEqualObjects([message valueForKey:@"hasOptionalNestedMessage"], @YES); 2017 XCTAssertNotNil(message.optionalNestedMessage); 2018 XCTAssertEqualObjects([message valueForKeyPath:@"optionalNestedMessage.hasBb"], @YES); 2019 XCTAssertEqualObjects(@(message.optionalNestedMessage.bb), [message valueForKeyPath:@"optionalNestedMessage.bb"]); 2020 XCTAssertEqualObjects([message valueForKey:@"hasOptionalForeignMessage"], @YES); 2021 XCTAssertNotNil(message.optionalForeignMessage); 2022 XCTAssertEqualObjects([message valueForKeyPath:@"optionalForeignMessage.hasC"], @YES); 2023 XCTAssertEqualObjects(@(message.optionalForeignMessage.c), [message valueForKeyPath:@"optionalForeignMessage.c"]); 2024 XCTAssertEqualObjects([message valueForKey:@"hasOptionalImportMessage"], @YES); 2025 XCTAssertNotNil(message.optionalForeignMessage); 2026 XCTAssertEqualObjects([message valueForKeyPath:@"optionalImportMessage.hasD"], @YES); 2027 XCTAssertEqualObjects(@(message.optionalImportMessage.d), [message valueForKeyPath:@"optionalImportMessage.d"]); 2028 2029 XCTAssertEqualObjects([message valueForKey:@"hasOptionalNestedEnum"], @YES); 2030 XCTAssertEqualObjects(@(message.optionalNestedEnum), [message valueForKey:@"optionalNestedEnum"]); 2031 XCTAssertEqualObjects([message valueForKey:@"hasOptionalForeignEnum"], @YES); 2032 XCTAssertEqualObjects(@(message.optionalForeignEnum), [message valueForKey:@"optionalForeignEnum"]); 2033 XCTAssertEqualObjects([message valueForKey:@"hasOptionalImportEnum"], @YES); 2034 XCTAssertEqualObjects(@(message.optionalImportEnum), [message valueForKey:@"optionalImportEnum"]); 2035 2036 XCTAssertEqualObjects([message valueForKey:@"hasOptionalStringPiece"], @YES); 2037 XCTAssertEqualObjects(message.optionalStringPiece, [message valueForKey:@"optionalStringPiece"]); 2038 XCTAssertEqualObjects([message valueForKey:@"hasOptionalCord"], @YES); 2039 XCTAssertEqualObjects(message.optionalCord, [message valueForKey:@"optionalCord"]); 2040 2041 // ----------------------------------------------------------------- 2042 2043 // GPBArray interface for repeated 2044 2045 XCTAssertEqualObjects(message.repeatedInt32Array, [message valueForKey:@"repeatedInt32Array"]); 2046 XCTAssertEqualObjects(message.repeatedInt64Array, [message valueForKey:@"repeatedInt64Array"]); 2047 XCTAssertEqualObjects(message.repeatedUint32Array, [message valueForKey:@"repeatedUint32Array"]); 2048 XCTAssertEqualObjects(message.repeatedUint64Array, [message valueForKey:@"repeatedUint64Array"]); 2049 XCTAssertEqualObjects(message.repeatedSint32Array, [message valueForKey:@"repeatedSint32Array"]); 2050 XCTAssertEqualObjects(message.repeatedSint64Array, [message valueForKey:@"repeatedSint64Array"]); 2051 XCTAssertEqualObjects(message.repeatedFixed32Array, [message valueForKey:@"repeatedFixed32Array"]); 2052 XCTAssertEqualObjects(message.repeatedFixed64Array, [message valueForKey:@"repeatedFixed64Array"]); 2053 XCTAssertEqualObjects(message.repeatedSfixed32Array, [message valueForKey:@"repeatedSfixed32Array"]); 2054 XCTAssertEqualObjects(message.repeatedSfixed64Array, [message valueForKey:@"repeatedSfixed64Array"]); 2055 XCTAssertEqualObjects(message.repeatedFloatArray, [message valueForKey:@"repeatedFloatArray"]); 2056 XCTAssertEqualObjects(message.repeatedDoubleArray, [message valueForKey:@"repeatedDoubleArray"]); 2057 XCTAssertEqualObjects(message.repeatedBoolArray, [message valueForKey:@"repeatedBoolArray"]); 2058 XCTAssertEqualObjects(message.repeatedStringArray, [message valueForKey:@"repeatedStringArray"]); 2059 XCTAssertEqualObjects(message.repeatedBytesArray, [message valueForKey:@"repeatedBytesArray"]); 2060 2061 XCTAssertEqualObjects(message.repeatedGroupArray, [message valueForKey:@"repeatedGroupArray"]); 2062 XCTAssertEqualObjects(message.repeatedNestedMessageArray, [message valueForKey:@"repeatedNestedMessageArray"]); 2063 XCTAssertEqualObjects(message.repeatedForeignMessageArray, [message valueForKey:@"repeatedForeignMessageArray"]); 2064 XCTAssertEqualObjects(message.repeatedImportMessageArray, [message valueForKey:@"repeatedImportMessageArray"]); 2065 2066 XCTAssertEqualObjects(message.repeatedNestedEnumArray, [message valueForKey:@"repeatedNestedEnumArray"]); 2067 XCTAssertEqualObjects(message.repeatedForeignEnumArray, [message valueForKey:@"repeatedForeignEnumArray"]); 2068 XCTAssertEqualObjects(message.repeatedImportEnumArray, [message valueForKey:@"repeatedImportEnumArray"]); 2069 2070 XCTAssertEqualObjects(message.repeatedStringPieceArray, [message valueForKey:@"repeatedStringPieceArray"]); 2071 XCTAssertEqualObjects(message.repeatedCordArray, [message valueForKey:@"repeatedCordArray"]); 2072 2073 XCTAssertEqualObjects(@(message.repeatedInt32Array_Count), [message valueForKey:@"repeatedInt32Array_Count"]); 2074 XCTAssertEqualObjects(@(message.repeatedInt64Array_Count), [message valueForKey:@"repeatedInt64Array_Count"]); 2075 XCTAssertEqualObjects(@(message.repeatedUint32Array_Count), [message valueForKey:@"repeatedUint32Array_Count"]); 2076 XCTAssertEqualObjects(@(message.repeatedUint64Array_Count), [message valueForKey:@"repeatedUint64Array_Count"]); 2077 XCTAssertEqualObjects(@(message.repeatedSint32Array_Count), [message valueForKey:@"repeatedSint32Array_Count"]); 2078 XCTAssertEqualObjects(@(message.repeatedSint64Array_Count), [message valueForKey:@"repeatedSint64Array_Count"]); 2079 XCTAssertEqualObjects(@(message.repeatedFixed32Array_Count), [message valueForKey:@"repeatedFixed32Array_Count"]); 2080 XCTAssertEqualObjects(@(message.repeatedFixed64Array_Count), [message valueForKey:@"repeatedFixed64Array_Count"]); 2081 XCTAssertEqualObjects(@(message.repeatedSfixed32Array_Count), [message valueForKey:@"repeatedSfixed32Array_Count"]); 2082 XCTAssertEqualObjects(@(message.repeatedSfixed64Array_Count), [message valueForKey:@"repeatedSfixed64Array_Count"]); 2083 XCTAssertEqualObjects(@(message.repeatedFloatArray_Count), [message valueForKey:@"repeatedFloatArray_Count"]); 2084 XCTAssertEqualObjects(@(message.repeatedDoubleArray_Count), [message valueForKey:@"repeatedDoubleArray_Count"]); 2085 XCTAssertEqualObjects(@(message.repeatedBoolArray_Count), [message valueForKey:@"repeatedBoolArray_Count"]); 2086 XCTAssertEqualObjects(@(message.repeatedStringArray_Count), [message valueForKey:@"repeatedStringArray_Count"]); 2087 XCTAssertEqualObjects(@(message.repeatedBytesArray_Count), [message valueForKey:@"repeatedBytesArray_Count"]); 2088 2089 XCTAssertEqualObjects(@(message.repeatedGroupArray_Count), [message valueForKey:@"repeatedGroupArray_Count"]); 2090 XCTAssertEqualObjects(@(message.repeatedNestedMessageArray_Count), [message valueForKey:@"repeatedNestedMessageArray_Count"]); 2091 XCTAssertEqualObjects(@(message.repeatedForeignMessageArray_Count), [message valueForKey:@"repeatedForeignMessageArray_Count"]); 2092 XCTAssertEqualObjects(@(message.repeatedImportMessageArray_Count), [message valueForKey:@"repeatedImportMessageArray_Count"]); 2093 2094 XCTAssertEqualObjects(@(message.repeatedNestedEnumArray_Count), [message valueForKey:@"repeatedNestedEnumArray_Count"]); 2095 XCTAssertEqualObjects(@(message.repeatedForeignEnumArray_Count), [message valueForKey:@"repeatedForeignEnumArray_Count"]); 2096 XCTAssertEqualObjects(@(message.repeatedImportEnumArray_Count), [message valueForKey:@"repeatedImportEnumArray_Count"]); 2097 2098 XCTAssertEqualObjects(@(message.repeatedStringPieceArray_Count), [message valueForKey:@"repeatedStringPieceArray_Count"]); 2099 XCTAssertEqualObjects(@(message.repeatedCordArray_Count), [message valueForKey:@"repeatedCordArray_Count"]); 2100 2101 // ----------------------------------------------------------------- 2102 2103 XCTAssertEqualObjects([message valueForKey:@"hasDefaultInt32"], @YES); 2104 XCTAssertEqualObjects(@(message.defaultInt32), [message valueForKey:@"defaultInt32"]); 2105 XCTAssertEqualObjects([message valueForKey:@"hasDefaultInt64"], @YES); 2106 XCTAssertEqualObjects(@(message.defaultInt64), [message valueForKey:@"defaultInt64"]); 2107 XCTAssertEqualObjects([message valueForKey:@"hasDefaultUint32"], @YES); 2108 XCTAssertEqualObjects(@(message.defaultUint32), [message valueForKey:@"defaultUint32"]); 2109 XCTAssertEqualObjects([message valueForKey:@"hasDefaultUint64"], @YES); 2110 XCTAssertEqualObjects(@(message.defaultUint64), [message valueForKey:@"defaultUint64"]); 2111 XCTAssertEqualObjects([message valueForKey:@"hasDefaultSint32"], @YES); 2112 XCTAssertEqualObjects(@(message.defaultSint32), [message valueForKey:@"defaultSint32"]); 2113 XCTAssertEqualObjects([message valueForKey:@"hasDefaultSint64"], @YES); 2114 XCTAssertEqualObjects(@(message.defaultSint64), [message valueForKey:@"defaultSint64"]); 2115 XCTAssertEqualObjects([message valueForKey:@"hasDefaultFixed32"], @YES); 2116 XCTAssertEqualObjects(@(message.defaultFixed32), [message valueForKey:@"defaultFixed32"]); 2117 XCTAssertEqualObjects([message valueForKey:@"hasDefaultFixed64"], @YES); 2118 XCTAssertEqualObjects(@(message.defaultFixed64), [message valueForKey:@"defaultFixed64"]); 2119 XCTAssertEqualObjects([message valueForKey:@"hasDefaultSfixed32"], @YES); 2120 XCTAssertEqualObjects(@(message.defaultSfixed32), [message valueForKey:@"defaultSfixed32"]); 2121 XCTAssertEqualObjects([message valueForKey:@"hasDefaultSfixed64"], @YES); 2122 XCTAssertEqualObjects(@(message.defaultSfixed64), [message valueForKey:@"defaultSfixed64"]); 2123 XCTAssertEqualObjects([message valueForKey:@"hasDefaultFloat"], @YES); 2124 XCTAssertEqualObjects(@(message.defaultFloat), [message valueForKey:@"defaultFloat"]); 2125 XCTAssertEqualObjects([message valueForKey:@"hasDefaultDouble"], @YES); 2126 XCTAssertEqualObjects(@(message.defaultDouble), [message valueForKey:@"defaultDouble"]); 2127 XCTAssertEqualObjects([message valueForKey:@"hasDefaultBool"], @YES); 2128 XCTAssertEqualObjects(@(message.defaultBool), [message valueForKey:@"defaultBool"]); 2129 XCTAssertEqualObjects([message valueForKey:@"hasDefaultString"], @YES); 2130 XCTAssertEqualObjects(message.defaultString, [message valueForKey:@"defaultString"]); 2131 XCTAssertEqualObjects([message valueForKey:@"hasDefaultBytes"], @YES); 2132 XCTAssertEqualObjects(message.defaultBytes, [message valueForKey:@"defaultBytes"]); 2133 2134 XCTAssertEqualObjects([message valueForKey:@"hasDefaultNestedEnum"], @YES); 2135 XCTAssertEqualObjects(@(message.defaultNestedEnum), [message valueForKey:@"defaultNestedEnum"]); 2136 XCTAssertEqualObjects([message valueForKey:@"hasDefaultForeignEnum"], @YES); 2137 XCTAssertEqualObjects(@(message.defaultForeignEnum), [message valueForKey:@"defaultForeignEnum"]); 2138 XCTAssertEqualObjects([message valueForKey:@"hasDefaultImportEnum"], @YES); 2139 XCTAssertEqualObjects(@(message.defaultImportEnum), [message valueForKey:@"defaultImportEnum"]); 2140 2141 XCTAssertEqualObjects([message valueForKey:@"hasDefaultStringPiece"], @YES); 2142 XCTAssertEqualObjects(message.defaultStringPiece, [message valueForKey:@"defaultStringPiece"]); 2143 XCTAssertEqualObjects([message valueForKey:@"hasDefaultCord"], @YES); 2144 XCTAssertEqualObjects(message.defaultCord, [message valueForKey:@"defaultCord"]); 2145} 2146 2147- (void)setAllFieldsViaKVC:(TestAllTypes *)message 2148 repeatedCount:(uint32_t)count { 2149 [message setValue:@101 forKey:@"optionalInt32"]; 2150 [message setValue:@102 forKey:@"optionalInt64"]; 2151 [message setValue:@103 forKey:@"optionalUint32"]; 2152 [message setValue:@104 forKey:@"optionalUint64"]; 2153 [message setValue:@105 forKey:@"optionalSint32"]; 2154 [message setValue:@106 forKey:@"optionalSint64"]; 2155 [message setValue:@107 forKey:@"optionalFixed32"]; 2156 [message setValue:@108 forKey:@"optionalFixed64"]; 2157 [message setValue:@109 forKey:@"optionalSfixed32"]; 2158 [message setValue:@110 forKey:@"optionalSfixed64"]; 2159 [message setValue:@111 forKey:@"optionalFloat"]; 2160 [message setValue:@112 forKey:@"optionalDouble"]; 2161 [message setValue:@YES forKey:@"optionalBool"]; 2162 [message setValue:@"115" forKey:@"optionalString"]; 2163 [message setValue:[NSData gpbtu_dataWithEmbeddedNulls] 2164 forKey:@"optionalBytes"]; 2165 2166 TestAllTypes_OptionalGroup *allTypes = [TestAllTypes_OptionalGroup message]; 2167 [allTypes setValue:@117 forKey:@"a"]; 2168 [message setValue:allTypes forKey:@"optionalGroup"]; 2169 TestAllTypes_NestedMessage *nestedMessage = 2170 [TestAllTypes_NestedMessage message]; 2171 [nestedMessage setValue:@118 forKey:@"bb"]; 2172 [message setValue:nestedMessage forKey:@"optionalNestedMessage"]; 2173 ForeignMessage *foreignMessage = [ForeignMessage message]; 2174 [foreignMessage setValue:@119 forKey:@"c"]; 2175 [message setValue:foreignMessage forKey:@"optionalForeignMessage"]; 2176 ImportMessage *importMessage = [ImportMessage message]; 2177 [importMessage setValue:@120 forKey:@"d"]; 2178 [message setValue:importMessage forKey:@"optionalImportMessage"]; 2179 2180 [message setValue:@(TestAllTypes_NestedEnum_Baz) 2181 forKey:@"optionalNestedEnum"]; 2182 [message setValue:@(ForeignEnum_ForeignBaz) forKey:@"optionalForeignEnum"]; 2183 [message setValue:@(ImportEnum_ImportBaz) forKey:@"optionalImportEnum"]; 2184 2185 [message setValue:@"124" forKey:@"optionalStringPiece"]; 2186 [message setValue:@"125" forKey:@"optionalCord"]; 2187 2188 // ----------------------------------------------------------------- 2189 2190 { 2191 GPBInt32Array *scratch = [GPBInt32Array array]; 2192 for (uint32_t i = 0; i < count; ++i) { 2193 [scratch addValue:201 + i * 100]; 2194 } 2195 [message setValue:scratch forKey:@"repeatedInt32Array"]; 2196 } 2197 { 2198 GPBInt64Array *scratch = [GPBInt64Array array]; 2199 for (uint32_t i = 0; i < count; ++i) { 2200 [scratch addValue:202 + i * 100]; 2201 } 2202 [message setValue:scratch forKey:@"repeatedInt64Array"]; 2203 } 2204 { 2205 GPBUInt32Array *scratch = [GPBUInt32Array array]; 2206 for (uint32_t i = 0; i < count; ++i) { 2207 [scratch addValue:203 + i * 100]; 2208 } 2209 [message setValue:scratch forKey:@"repeatedUint32Array"]; 2210 } 2211 { 2212 GPBUInt64Array *scratch = [GPBUInt64Array array]; 2213 for (uint32_t i = 0; i < count; ++i) { 2214 [scratch addValue:204 + i * 100]; 2215 } 2216 [message setValue:scratch forKey:@"repeatedUint64Array"]; 2217 } 2218 { 2219 GPBInt32Array *scratch = [GPBInt32Array array]; 2220 for (uint32_t i = 0; i < count; ++i) { 2221 [scratch addValue:205 + i * 100]; 2222 } 2223 [message setValue:scratch forKey:@"repeatedSint32Array"]; 2224 } 2225 { 2226 GPBInt64Array *scratch = [GPBInt64Array array]; 2227 for (uint32_t i = 0; i < count; ++i) { 2228 [scratch addValue:206 + i * 100]; 2229 } 2230 [message setValue:scratch forKey:@"repeatedSint64Array"]; 2231 } 2232 { 2233 GPBUInt32Array *scratch = [GPBUInt32Array array]; 2234 for (uint32_t i = 0; i < count; ++i) { 2235 [scratch addValue:207 + i * 100]; 2236 } 2237 [message setValue:scratch forKey:@"repeatedFixed32Array"]; 2238 } 2239 { 2240 GPBUInt64Array *scratch = [GPBUInt64Array array]; 2241 for (uint32_t i = 0; i < count; ++i) { 2242 [scratch addValue:208 + i * 100]; 2243 } 2244 [message setValue:scratch forKey:@"repeatedFixed64Array"]; 2245 } 2246 { 2247 GPBInt32Array *scratch = [GPBInt32Array array]; 2248 for (uint32_t i = 0; i < count; ++i) { 2249 [scratch addValue:209 + i * 100]; 2250 } 2251 [message setValue:scratch forKey:@"repeatedSfixed32Array"]; 2252 } 2253 { 2254 GPBInt64Array *scratch = [GPBInt64Array array]; 2255 for (uint32_t i = 0; i < count; ++i) { 2256 [scratch addValue:210 + i * 100]; 2257 } 2258 [message setValue:scratch forKey:@"repeatedSfixed64Array"]; 2259 } 2260 { 2261 GPBFloatArray *scratch = [GPBFloatArray array]; 2262 for (uint32_t i = 0; i < count; ++i) { 2263 [scratch addValue:211 + i * 100]; 2264 } 2265 [message setValue:scratch forKey:@"repeatedFloatArray"]; 2266 } 2267 { 2268 GPBDoubleArray *scratch = [GPBDoubleArray array]; 2269 for (uint32_t i = 0; i < count; ++i) { 2270 [scratch addValue:212 + i * 100]; 2271 } 2272 [message setValue:scratch forKey:@"repeatedDoubleArray"]; 2273 } 2274 { 2275 GPBBoolArray *scratch = [GPBBoolArray array]; 2276 for (uint32_t i = 0; i < count; ++i) { 2277 [scratch addValue:(i % 2) ? YES : NO]; 2278 } 2279 [message setValue:scratch forKey:@"repeatedBoolArray"]; 2280 } 2281 2282 NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:count]; 2283 for (uint32_t i = 0; i < count; ++i) { 2284 NSString *string = [[NSString alloc] initWithFormat:@"%d", 215 + i * 100]; 2285 [array addObject:string]; 2286 [string release]; 2287 } 2288 [message setValue:array forKey:@"repeatedStringArray"]; 2289 [array release]; 2290 2291 array = [[NSMutableArray alloc] initWithCapacity:count]; 2292 for (uint32_t i = 0; i < count; ++i) { 2293 NSData *data = [[NSData alloc] initWithUint32_gpbtu:216 + i * 100]; 2294 [array addObject:data]; 2295 [data release]; 2296 } 2297 [message setValue:array forKey:@"repeatedBytesArray"]; 2298 [array release]; 2299 2300 array = [[NSMutableArray alloc] initWithCapacity:count]; 2301 for (uint32_t i = 0; i < count; ++i) { 2302 TestAllTypes_RepeatedGroup *testAll = 2303 [[TestAllTypes_RepeatedGroup alloc] init]; 2304 [testAll setA:217 + i * 100]; 2305 [array addObject:testAll]; 2306 [testAll release]; 2307 } 2308 [message setValue:array forKey:@"repeatedGroupArray"]; 2309 [array release]; 2310 2311 array = [[NSMutableArray alloc] initWithCapacity:count]; 2312 for (uint32_t i = 0; i < count; ++i) { 2313 nestedMessage = [[TestAllTypes_NestedMessage alloc] init]; 2314 [nestedMessage setBb:218 + i * 100]; 2315 [array addObject:nestedMessage]; 2316 [nestedMessage release]; 2317 } 2318 [message setValue:array forKey:@"repeatedNestedMessageArray"]; 2319 [array release]; 2320 2321 array = [[NSMutableArray alloc] initWithCapacity:count]; 2322 for (uint32_t i = 0; i < count; ++i) { 2323 foreignMessage = [[ForeignMessage alloc] init]; 2324 [foreignMessage setC:219 + i * 100]; 2325 [array addObject:foreignMessage]; 2326 [foreignMessage release]; 2327 } 2328 [message setValue:array forKey:@"repeatedForeignMessageArray"]; 2329 [array release]; 2330 2331 array = [[NSMutableArray alloc] initWithCapacity:count]; 2332 for (uint32_t i = 0; i < count; ++i) { 2333 importMessage = [[ImportMessage alloc] init]; 2334 [importMessage setD:220 + i * 100]; 2335 [array addObject:importMessage]; 2336 [importMessage release]; 2337 } 2338 [message setValue:array forKey:@"repeatedImportMessageArray"]; 2339 [array release]; 2340 2341 { 2342 GPBEnumArray *scratch = [GPBEnumArray 2343 arrayWithValidationFunction:TestAllTypes_NestedEnum_IsValidValue]; 2344 for (uint32_t i = 0; i < count; ++i) { 2345 [scratch addValue:(i % 2) ? TestAllTypes_NestedEnum_Bar 2346 : TestAllTypes_NestedEnum_Baz]; 2347 } 2348 [message setValue:scratch forKey:@"repeatedNestedEnumArray"]; 2349 } 2350 { 2351 GPBEnumArray *scratch = 2352 [GPBEnumArray arrayWithValidationFunction:ForeignEnum_IsValidValue]; 2353 for (uint32_t i = 0; i < count; ++i) { 2354 [scratch 2355 addValue:(i % 2) ? ForeignEnum_ForeignBar : ForeignEnum_ForeignBaz]; 2356 } 2357 [message setValue:scratch forKey:@"repeatedForeignEnumArray"]; 2358 } 2359 { 2360 GPBEnumArray *scratch = 2361 [GPBEnumArray arrayWithValidationFunction:ImportEnum_IsValidValue]; 2362 for (uint32_t i = 0; i < count; ++i) { 2363 [scratch addValue:(i % 2) ? ImportEnum_ImportBar : ImportEnum_ImportBaz]; 2364 } 2365 [message setValue:scratch forKey:@"repeatedImportEnumArray"]; 2366 } 2367 2368 array = [[NSMutableArray alloc] initWithCapacity:count]; 2369 for (uint32_t i = 0; i < count; ++i) { 2370 NSString *string = [[NSString alloc] initWithFormat:@"%d", 224 + i * 100]; 2371 [array addObject:string]; 2372 [string release]; 2373 } 2374 [message setValue:array forKey:@"repeatedStringPieceArray"]; 2375 [array release]; 2376 2377 array = [[NSMutableArray alloc] initWithCapacity:count]; 2378 for (uint32_t i = 0; i < count; ++i) { 2379 NSString *string = [[NSString alloc] initWithFormat:@"%d", 225 + i * 100]; 2380 [array addObject:string]; 2381 [string release]; 2382 } 2383 [message setValue:array forKey:@"repeatedCordArray"]; 2384 [array release]; 2385 2386 // ----------------------------------------------------------------- 2387 2388 [message setValue:@401 forKey:@"defaultInt32"]; 2389 [message setValue:@402 forKey:@"defaultInt64"]; 2390 [message setValue:@403 forKey:@"defaultUint32"]; 2391 [message setValue:@404 forKey:@"defaultUint64"]; 2392 [message setValue:@405 forKey:@"defaultSint32"]; 2393 [message setValue:@406 forKey:@"defaultSint64"]; 2394 [message setValue:@407 forKey:@"defaultFixed32"]; 2395 [message setValue:@408 forKey:@"defaultFixed64"]; 2396 [message setValue:@409 forKey:@"defaultSfixed32"]; 2397 [message setValue:@410 forKey:@"defaultSfixed64"]; 2398 [message setValue:@411 forKey:@"defaultFloat"]; 2399 [message setValue:@412 forKey:@"defaultDouble"]; 2400 [message setValue:@NO forKey:@"defaultBool"]; 2401 [message setValue:@"415" forKey:@"defaultString"]; 2402 [message setValue:[NSData gpbtu_dataWithUint32:416] forKey:@"defaultBytes"]; 2403 2404 [message setValue:@(TestAllTypes_NestedEnum_Foo) forKey:@"defaultNestedEnum"]; 2405 [message setValue:@(ForeignEnum_ForeignFoo) forKey:@"defaultForeignEnum"]; 2406 [message setValue:@(ImportEnum_ImportFoo) forKey:@"defaultImportEnum"]; 2407 2408 [message setValue:@"424" forKey:@"defaultStringPiece"]; 2409 [message setValue:@"425" forKey:@"defaultCord"]; 2410} 2411 2412- (void)assertClearKVC:(TestAllTypes *)message { 2413 XCTAssertEqualObjects([message valueForKey:@"hasOptionalInt32"], @NO); 2414 XCTAssertEqualObjects([message valueForKey:@"hasOptionalInt64"], @NO); 2415 XCTAssertEqualObjects([message valueForKey:@"hasOptionalUint32"], @NO); 2416 XCTAssertEqualObjects([message valueForKey:@"hasOptionalUint64"], @NO); 2417 XCTAssertEqualObjects([message valueForKey:@"hasOptionalSint32"], @NO); 2418 XCTAssertEqualObjects([message valueForKey:@"hasOptionalSint64"], @NO); 2419 XCTAssertEqualObjects([message valueForKey:@"hasOptionalFixed32"], @NO); 2420 XCTAssertEqualObjects([message valueForKey:@"hasOptionalFixed64"], @NO); 2421 XCTAssertEqualObjects([message valueForKey:@"hasOptionalSfixed32"], @NO); 2422 XCTAssertEqualObjects([message valueForKey:@"hasOptionalSfixed64"], @NO); 2423 XCTAssertEqualObjects([message valueForKey:@"hasOptionalFloat"], @NO); 2424 XCTAssertEqualObjects([message valueForKey:@"hasOptionalDouble"], @NO); 2425 XCTAssertEqualObjects([message valueForKey:@"hasOptionalBool"], @NO); 2426 XCTAssertEqualObjects([message valueForKey:@"hasOptionalString"], @NO); 2427 XCTAssertEqualObjects([message valueForKey:@"hasOptionalBytes"], @NO); 2428 2429 XCTAssertEqualObjects([message valueForKey:@"hasOptionalGroup"], @NO); 2430 XCTAssertEqualObjects([message valueForKey:@"hasOptionalNestedMessage"], @NO); 2431 XCTAssertEqualObjects([message valueForKey:@"hasOptionalForeignMessage"], 2432 @NO); 2433 XCTAssertEqualObjects([message valueForKey:@"hasOptionalImportMessage"], @NO); 2434 2435 XCTAssertEqualObjects([message valueForKey:@"hasOptionalNestedEnum"], @NO); 2436 XCTAssertEqualObjects([message valueForKey:@"hasOptionalForeignEnum"], @NO); 2437 XCTAssertEqualObjects([message valueForKey:@"hasOptionalImportEnum"], @NO); 2438 2439 XCTAssertEqualObjects([message valueForKey:@"hasOptionalStringPiece"], @NO); 2440 XCTAssertEqualObjects([message valueForKey:@"hasOptionalCord"], @NO); 2441 2442 // Optional fields without defaults are set to zero or something like it. 2443 XCTAssertEqualObjects([message valueForKey:@"optionalInt32"], @0); 2444 XCTAssertEqualObjects([message valueForKey:@"optionalInt64"], @0); 2445 XCTAssertEqualObjects([message valueForKey:@"optionalUint32"], @0); 2446 XCTAssertEqualObjects([message valueForKey:@"optionalUint64"], @0); 2447 XCTAssertEqualObjects([message valueForKey:@"optionalSint32"], @0); 2448 XCTAssertEqualObjects([message valueForKey:@"optionalSint64"], @0); 2449 XCTAssertEqualObjects([message valueForKey:@"optionalFixed32"], @0); 2450 XCTAssertEqualObjects([message valueForKey:@"optionalFixed64"], @0); 2451 XCTAssertEqualObjects([message valueForKey:@"optionalSfixed32"], @0); 2452 XCTAssertEqualObjects([message valueForKey:@"optionalSfixed64"], @0); 2453 XCTAssertEqualObjects([message valueForKey:@"optionalFloat"], @0); 2454 XCTAssertEqualObjects([message valueForKey:@"optionalDouble"], @0); 2455 XCTAssertEqualObjects([message valueForKey:@"optionalBool"], @NO); 2456 XCTAssertEqualObjects([message valueForKey:@"optionalString"], @""); 2457 XCTAssertEqualObjects([message valueForKey:@"optionalBytes"], 2458 GPBEmptyNSData()); 2459 2460 // Embedded messages should also be exist, but be clear. 2461 XCTAssertNotNil([message valueForKeyPath:@"optionalGroup"]); 2462 XCTAssertNotNil([message valueForKeyPath:@"optionalNestedMessage"]); 2463 XCTAssertNotNil([message valueForKeyPath:@"optionalForeignMessage"]); 2464 XCTAssertNotNil([message valueForKeyPath:@"optionalImportMessage"]); 2465 XCTAssertEqualObjects([message valueForKeyPath:@"optionalGroup.hasA"], @NO); 2466 XCTAssertEqualObjects( 2467 [message valueForKeyPath:@"optionalNestedMessage.hasBb"], @NO); 2468 XCTAssertEqualObjects( 2469 [message valueForKeyPath:@"optionalForeignMessage.hasC"], @NO); 2470 XCTAssertEqualObjects([message valueForKeyPath:@"optionalImportMessage.hasD"], 2471 @NO); 2472 2473 XCTAssertEqualObjects([message valueForKeyPath:@"optionalGroup.a"], @0); 2474 XCTAssertEqualObjects([message valueForKeyPath:@"optionalNestedMessage.bb"], 2475 @0); 2476 XCTAssertEqualObjects([message valueForKeyPath:@"optionalForeignMessage.c"], 2477 @0); 2478 XCTAssertEqualObjects([message valueForKeyPath:@"optionalImportMessage.d"], 2479 @0); 2480 2481 // Enums without defaults are set to the first value in the enum. 2482 XCTAssertEqualObjects([message valueForKey:@"optionalNestedEnum"], 2483 @(TestAllTypes_NestedEnum_Foo)); 2484 XCTAssertEqualObjects([message valueForKey:@"optionalForeignEnum"], 2485 @(ForeignEnum_ForeignFoo)); 2486 XCTAssertEqualObjects([message valueForKey:@"optionalImportEnum"], 2487 @(ImportEnum_ImportFoo)); 2488 2489 XCTAssertEqualObjects([message valueForKey:@"optionalStringPiece"], @""); 2490 XCTAssertEqualObjects([message valueForKey:@"optionalCord"], @""); 2491 2492 // NSArray interface for repeated doesn't have has*, nil means no value. 2493 2494 XCTAssertEqualObjects([message valueForKey:@"hasDefaultInt32"], @NO); 2495 XCTAssertEqualObjects([message valueForKey:@"hasDefaultInt64"], @NO); 2496 XCTAssertEqualObjects([message valueForKey:@"hasDefaultUint32"], @NO); 2497 XCTAssertEqualObjects([message valueForKey:@"hasDefaultUint64"], @NO); 2498 XCTAssertEqualObjects([message valueForKey:@"hasDefaultSint32"], @NO); 2499 XCTAssertEqualObjects([message valueForKey:@"hasDefaultSint64"], @NO); 2500 XCTAssertEqualObjects([message valueForKey:@"hasDefaultFixed32"], @NO); 2501 XCTAssertEqualObjects([message valueForKey:@"hasDefaultFixed64"], @NO); 2502 XCTAssertEqualObjects([message valueForKey:@"hasDefaultSfixed32"], @NO); 2503 XCTAssertEqualObjects([message valueForKey:@"hasDefaultSfixed64"], @NO); 2504 XCTAssertEqualObjects([message valueForKey:@"hasDefaultFloat"], @NO); 2505 XCTAssertEqualObjects([message valueForKey:@"hasDefaultDouble"], @NO); 2506 XCTAssertEqualObjects([message valueForKey:@"hasDefaultBool"], @NO); 2507 XCTAssertEqualObjects([message valueForKey:@"hasDefaultString"], @NO); 2508 XCTAssertEqualObjects([message valueForKey:@"hasDefaultBytes"], @NO); 2509 2510 XCTAssertEqualObjects([message valueForKey:@"hasDefaultNestedEnum"], @NO); 2511 XCTAssertEqualObjects([message valueForKey:@"hasDefaultForeignEnum"], @NO); 2512 XCTAssertEqualObjects([message valueForKey:@"hasDefaultImportEnum"], @NO); 2513 2514 XCTAssertEqualObjects([message valueForKey:@"hasDefaultStringPiece"], @NO); 2515 XCTAssertEqualObjects([message valueForKey:@"hasDefaultCord"], @NO); 2516 2517 // Fields with defaults have their default values (duh). 2518 XCTAssertEqualObjects([message valueForKey:@"defaultInt32"], @41); 2519 XCTAssertEqualObjects([message valueForKey:@"defaultInt64"], @42); 2520 XCTAssertEqualObjects([message valueForKey:@"defaultUint32"], @43); 2521 XCTAssertEqualObjects([message valueForKey:@"defaultUint64"], @44); 2522 XCTAssertEqualObjects([message valueForKey:@"defaultSint32"], @-45); 2523 XCTAssertEqualObjects([message valueForKey:@"defaultSint64"], @46); 2524 XCTAssertEqualObjects([message valueForKey:@"defaultFixed32"], @47); 2525 XCTAssertEqualObjects([message valueForKey:@"defaultFixed64"], @48); 2526 XCTAssertEqualObjects([message valueForKey:@"defaultSfixed32"], @49); 2527 XCTAssertEqualObjects([message valueForKey:@"defaultSfixed64"], @-50); 2528 XCTAssertEqualObjects([message valueForKey:@"defaultFloat"], @51.5); 2529 XCTAssertEqualObjects([message valueForKey:@"defaultDouble"], @52e3); 2530 XCTAssertEqualObjects([message valueForKey:@"defaultBool"], @YES); 2531 XCTAssertEqualObjects([message valueForKey:@"defaultString"], @"hello"); 2532 XCTAssertEqualObjects([message valueForKey:@"defaultBytes"], 2533 [NSData gpbtu_dataWithCString:"world"]); 2534 2535 XCTAssertEqualObjects([message valueForKey:@"defaultNestedEnum"], 2536 @(TestAllTypes_NestedEnum_Bar)); 2537 XCTAssertEqualObjects([message valueForKey:@"defaultForeignEnum"], 2538 @(ForeignEnum_ForeignBar)); 2539 XCTAssertEqualObjects([message valueForKey:@"defaultImportEnum"], 2540 @(ImportEnum_ImportBar)); 2541 2542 XCTAssertEqualObjects([message valueForKey:@"defaultStringPiece"], @"abc"); 2543 XCTAssertEqualObjects([message valueForKey:@"defaultCord"], @"123"); 2544} 2545 2546@end 2547