| 
					
				 | 
			
			
				@@ -1972,6 +1972,254 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   [msg release]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- (void)testProto2OneofSetToDefault { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // proto3 doesn't normally write out zero (default) fields, but if they are 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // in a oneof it does.  proto2 doesn't have this special behavior, but we 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // still confirm setting to the explicit default does set the case to be 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // sure the runtime is working correctly. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NSString *oneofStringDefault = @"string"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NSData *oneofBytesDefault = [@"data" dataUsingEncoding:NSUTF8StringEncoding]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Message2 *msg = [[Message2 alloc] init]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  uint32_t values[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofInt32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofInt64, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofUint32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofUint64, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofSint32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofSint64, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofFixed32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofFixed64, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofSfixed32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofSfixed64, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofFloat, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofDouble, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofBool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofString, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofBytes, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Skip group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Skip message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message2_O_OneOfCase_OneofEnum, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    switch (values[i]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofInt32: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofInt32 = 100; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofInt64: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofInt64 = 101; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofUint32: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofUint32 = 102; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofUint64: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofUint64 = 103; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofSint32: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofSint32 = 104; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofSint64: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofSint64 = 105; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofFixed32: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofFixed32 = 106; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofFixed64: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofFixed64 = 107; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofSfixed32: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofSfixed32 = 108; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofSfixed64: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofSfixed64 = 109; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofFloat: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofFloat = 110.0f; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofDouble: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofDouble = 111.0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofBool: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofBool = YES; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofString: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofString = oneofStringDefault; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofBytes: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofBytes = oneofBytesDefault; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofEnum: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofEnum = Message3_Enum_Baz; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        XCTFail(@"shouldn't happen, loop: %zd, value: %d", i, values[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Should be set to the correct case. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Confirm everything is back as the defaults. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofInt32, 100, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofInt64, 101, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofUint32, 102U, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofUint64, 103U, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofSint32, 104, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofSint64, 105, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofFixed32, 106U, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofFixed64, 107U, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofSfixed32, 108, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofSfixed64, 109, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofFloat, 110.0f, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofDouble, 111.0, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofBool, YES, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertNotNil(msg.oneofGroup, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Skip group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Skip message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // We special case nil on string, data, message, ensure they work as expected. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // i.e. - it clears the case. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  msg.oneofString = nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  msg.oneofBytes = nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  msg.oneofMessage = nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  [msg release]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- (void)testProto3OneofSetToZero { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Normally setting a proto3 field to the zero value should result in it being 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // reset/cleared.  But in a oneof, it still gets recored so it can go out 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // over the wire and the other side can see what was set in the oneof. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NSString *oneofStringDefault = @""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  NSData *oneofBytesDefault = [NSData data]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Message3 *msg = [[Message3 alloc] init]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  uint32_t values[] = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofInt32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofInt64, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofUint32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofUint64, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofSint32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofSint64, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofFixed32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofFixed64, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofSfixed32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofSfixed64, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofFloat, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofDouble, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofBool, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofString, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofBytes, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofMessage, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    Message3_O_OneOfCase_OneofEnum, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    switch (values[i]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofInt32: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofInt32 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofInt64: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofInt64 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofUint32: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofUint32 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofUint64: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofUint64 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofSint32: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofSint32 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofSint64: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofSint64 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofFixed32: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofFixed32 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofFixed64: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofFixed64 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofSfixed32: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofSfixed32 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofSfixed64: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofSfixed64 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofFloat: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofFloat = 0.0f; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofDouble: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofDouble = 0.0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofBool: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofBool = NO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofString: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofString = oneofStringDefault; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofBytes: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofBytes = oneofBytesDefault; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofMessage: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofMessage.optionalInt32 = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      case Message3_O_OneOfCase_OneofEnum: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        msg.oneofEnum = Message3_Enum_Foo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        XCTFail(@"shouldn't happen, loop: %zd, value: %d", i, values[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Should be set to the correct case. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Confirm everything is still zeros. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofInt32, 0, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofInt64, 0, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofUint32, 0U, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofUint64, 0U, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofSint32, 0, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofSint64, 0, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofFixed32, 0U, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofFixed64, 0U, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofSfixed32, 0, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofSfixed64, 0, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofFloat, 0.0f, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofDouble, 0.0, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofBool, NO, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertNotNil(msg.oneofMessage, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo, "Loop: %zd", i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // We special case nil on string, data, message, ensure they work as expected. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  msg.oneofString = nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  msg.oneofBytes = nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  msg.oneofMessage = nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  [msg release]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 - (void)testCopyingMakesUniqueObjects { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const int repeatCount = 5; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   TestAllTypes *msg1 = [TestAllTypes message]; 
			 |