1*1b3f573fSAndroid Build Coastguard Worker// Protocol Buffers - Google's data interchange format 2*1b3f573fSAndroid Build Coastguard Worker// Copyright 2015 Google Inc. All rights reserved. 3*1b3f573fSAndroid Build Coastguard Worker// https://developers.google.com/protocol-buffers/ 4*1b3f573fSAndroid Build Coastguard Worker// 5*1b3f573fSAndroid Build Coastguard Worker// Redistribution and use in source and binary forms, with or without 6*1b3f573fSAndroid Build Coastguard Worker// modification, are permitted provided that the following conditions are 7*1b3f573fSAndroid Build Coastguard Worker// met: 8*1b3f573fSAndroid Build Coastguard Worker// 9*1b3f573fSAndroid Build Coastguard Worker// * Redistributions of source code must retain the above copyright 10*1b3f573fSAndroid Build Coastguard Worker// notice, this list of conditions and the following disclaimer. 11*1b3f573fSAndroid Build Coastguard Worker// * Redistributions in binary form must reproduce the above 12*1b3f573fSAndroid Build Coastguard Worker// copyright notice, this list of conditions and the following disclaimer 13*1b3f573fSAndroid Build Coastguard Worker// in the documentation and/or other materials provided with the 14*1b3f573fSAndroid Build Coastguard Worker// distribution. 15*1b3f573fSAndroid Build Coastguard Worker// * Neither the name of Google Inc. nor the names of its 16*1b3f573fSAndroid Build Coastguard Worker// contributors may be used to endorse or promote products derived from 17*1b3f573fSAndroid Build Coastguard Worker// this software without specific prior written permission. 18*1b3f573fSAndroid Build Coastguard Worker// 19*1b3f573fSAndroid Build Coastguard Worker// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20*1b3f573fSAndroid Build Coastguard Worker// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21*1b3f573fSAndroid Build Coastguard Worker// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22*1b3f573fSAndroid Build Coastguard Worker// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23*1b3f573fSAndroid Build Coastguard Worker// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24*1b3f573fSAndroid Build Coastguard Worker// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25*1b3f573fSAndroid Build Coastguard Worker// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26*1b3f573fSAndroid Build Coastguard Worker// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27*1b3f573fSAndroid Build Coastguard Worker// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28*1b3f573fSAndroid Build Coastguard Worker// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29*1b3f573fSAndroid Build Coastguard Worker// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*1b3f573fSAndroid Build Coastguard Worker 31*1b3f573fSAndroid Build Coastguard Worker#import "GPBTestUtilities.h" 32*1b3f573fSAndroid Build Coastguard Worker 33*1b3f573fSAndroid Build Coastguard Worker#import <objc/runtime.h> 34*1b3f573fSAndroid Build Coastguard Worker 35*1b3f573fSAndroid Build Coastguard Worker#import "GPBMessage.h" 36*1b3f573fSAndroid Build Coastguard Worker 37*1b3f573fSAndroid Build Coastguard Worker#import "google/protobuf/MapUnittest.pbobjc.h" 38*1b3f573fSAndroid Build Coastguard Worker#import "google/protobuf/Unittest.pbobjc.h" 39*1b3f573fSAndroid Build Coastguard Worker#import "google/protobuf/UnittestPreserveUnknownEnum.pbobjc.h" 40*1b3f573fSAndroid Build Coastguard Worker#import "google/protobuf/UnittestRuntimeProto2.pbobjc.h" 41*1b3f573fSAndroid Build Coastguard Worker#import "google/protobuf/UnittestRuntimeProto3.pbobjc.h" 42*1b3f573fSAndroid Build Coastguard Worker 43*1b3f573fSAndroid Build Coastguard Worker@interface MessageMergeTests : GPBTestCase 44*1b3f573fSAndroid Build Coastguard Worker@end 45*1b3f573fSAndroid Build Coastguard Worker 46*1b3f573fSAndroid Build Coastguard Worker@implementation MessageMergeTests 47*1b3f573fSAndroid Build Coastguard Worker 48*1b3f573fSAndroid Build Coastguard Worker// TODO(thomasvl): Pull tests over from GPBMessageTests that are merge specific. 49*1b3f573fSAndroid Build Coastguard Worker 50*1b3f573fSAndroid Build Coastguard Worker- (void)testProto3MergingAndZeroValues { 51*1b3f573fSAndroid Build Coastguard Worker // Proto2 covered in other tests. 52*1b3f573fSAndroid Build Coastguard Worker 53*1b3f573fSAndroid Build Coastguard Worker Message3 *src = [[Message3 alloc] init]; 54*1b3f573fSAndroid Build Coastguard Worker Message3 *dst = [[Message3 alloc] init]; 55*1b3f573fSAndroid Build Coastguard Worker NSData *testData1 = [@"abc" dataUsingEncoding:NSUTF8StringEncoding]; 56*1b3f573fSAndroid Build Coastguard Worker NSData *testData2 = [@"def" dataUsingEncoding:NSUTF8StringEncoding]; 57*1b3f573fSAndroid Build Coastguard Worker 58*1b3f573fSAndroid Build Coastguard Worker dst.optionalInt32 = 1; 59*1b3f573fSAndroid Build Coastguard Worker dst.optionalInt64 = 1; 60*1b3f573fSAndroid Build Coastguard Worker dst.optionalUint32 = 1; 61*1b3f573fSAndroid Build Coastguard Worker dst.optionalUint64 = 1; 62*1b3f573fSAndroid Build Coastguard Worker dst.optionalSint32 = 1; 63*1b3f573fSAndroid Build Coastguard Worker dst.optionalSint64 = 1; 64*1b3f573fSAndroid Build Coastguard Worker dst.optionalFixed32 = 1; 65*1b3f573fSAndroid Build Coastguard Worker dst.optionalFixed64 = 1; 66*1b3f573fSAndroid Build Coastguard Worker dst.optionalSfixed32 = 1; 67*1b3f573fSAndroid Build Coastguard Worker dst.optionalSfixed64 = 1; 68*1b3f573fSAndroid Build Coastguard Worker dst.optionalFloat = 1.0f; 69*1b3f573fSAndroid Build Coastguard Worker dst.optionalDouble = 1.0; 70*1b3f573fSAndroid Build Coastguard Worker dst.optionalBool = YES; 71*1b3f573fSAndroid Build Coastguard Worker dst.optionalString = @"bar"; 72*1b3f573fSAndroid Build Coastguard Worker dst.optionalBytes = testData1; 73*1b3f573fSAndroid Build Coastguard Worker dst.optionalEnum = Message3_Enum_Bar; 74*1b3f573fSAndroid Build Coastguard Worker 75*1b3f573fSAndroid Build Coastguard Worker // All zeros, nothing should overright. 76*1b3f573fSAndroid Build Coastguard Worker 77*1b3f573fSAndroid Build Coastguard Worker src.optionalInt32 = 0; 78*1b3f573fSAndroid Build Coastguard Worker src.optionalInt64 = 0; 79*1b3f573fSAndroid Build Coastguard Worker src.optionalUint32 = 0; 80*1b3f573fSAndroid Build Coastguard Worker src.optionalUint64 = 0; 81*1b3f573fSAndroid Build Coastguard Worker src.optionalSint32 = 0; 82*1b3f573fSAndroid Build Coastguard Worker src.optionalSint64 = 0; 83*1b3f573fSAndroid Build Coastguard Worker src.optionalFixed32 = 0; 84*1b3f573fSAndroid Build Coastguard Worker src.optionalFixed64 = 0; 85*1b3f573fSAndroid Build Coastguard Worker src.optionalSfixed32 = 0; 86*1b3f573fSAndroid Build Coastguard Worker src.optionalSfixed64 = 0; 87*1b3f573fSAndroid Build Coastguard Worker src.optionalFloat = 0.0f; 88*1b3f573fSAndroid Build Coastguard Worker src.optionalDouble = 0.0; 89*1b3f573fSAndroid Build Coastguard Worker src.optionalBool = NO; 90*1b3f573fSAndroid Build Coastguard Worker src.optionalString = @""; 91*1b3f573fSAndroid Build Coastguard Worker src.optionalBytes = [NSData data]; 92*1b3f573fSAndroid Build Coastguard Worker src.optionalEnum = Message3_Enum_Foo; // first value 93*1b3f573fSAndroid Build Coastguard Worker 94*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 95*1b3f573fSAndroid Build Coastguard Worker 96*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalInt32, 1); 97*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalInt64, 1); 98*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalUint32, 1U); 99*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalUint64, 1U); 100*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSint32, 1); 101*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSint64, 1); 102*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalFixed32, 1U); 103*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalFixed64, 1U); 104*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSfixed32, 1); 105*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSfixed64, 1); 106*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalFloat, 1.0f); 107*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalDouble, 1.0); 108*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalBool, YES); 109*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.optionalString, @"bar"); 110*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.optionalBytes, testData1); 111*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalEnum, Message3_Enum_Bar); 112*1b3f573fSAndroid Build Coastguard Worker 113*1b3f573fSAndroid Build Coastguard Worker // Half the values that will replace. 114*1b3f573fSAndroid Build Coastguard Worker 115*1b3f573fSAndroid Build Coastguard Worker src.optionalInt32 = 0; 116*1b3f573fSAndroid Build Coastguard Worker src.optionalInt64 = 2; 117*1b3f573fSAndroid Build Coastguard Worker src.optionalUint32 = 0; 118*1b3f573fSAndroid Build Coastguard Worker src.optionalUint64 = 2; 119*1b3f573fSAndroid Build Coastguard Worker src.optionalSint32 = 0; 120*1b3f573fSAndroid Build Coastguard Worker src.optionalSint64 = 2; 121*1b3f573fSAndroid Build Coastguard Worker src.optionalFixed32 = 0; 122*1b3f573fSAndroid Build Coastguard Worker src.optionalFixed64 = 2; 123*1b3f573fSAndroid Build Coastguard Worker src.optionalSfixed32 = 0; 124*1b3f573fSAndroid Build Coastguard Worker src.optionalSfixed64 = 2; 125*1b3f573fSAndroid Build Coastguard Worker src.optionalFloat = 0.0f; 126*1b3f573fSAndroid Build Coastguard Worker src.optionalDouble = 2.0; 127*1b3f573fSAndroid Build Coastguard Worker src.optionalBool = YES; // No other value to use. :( 128*1b3f573fSAndroid Build Coastguard Worker src.optionalString = @"baz"; 129*1b3f573fSAndroid Build Coastguard Worker src.optionalBytes = nil; 130*1b3f573fSAndroid Build Coastguard Worker src.optionalEnum = Message3_Enum_Baz; 131*1b3f573fSAndroid Build Coastguard Worker 132*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 133*1b3f573fSAndroid Build Coastguard Worker 134*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalInt32, 1); 135*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalInt64, 2); 136*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalUint32, 1U); 137*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalUint64, 2U); 138*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSint32, 1); 139*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSint64, 2); 140*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalFixed32, 1U); 141*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalFixed64, 2U); 142*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSfixed32, 1); 143*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSfixed64, 2); 144*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalFloat, 1.0f); 145*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalDouble, 2.0); 146*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalBool, YES); 147*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.optionalString, @"baz"); 148*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.optionalBytes, testData1); 149*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalEnum, Message3_Enum_Baz); 150*1b3f573fSAndroid Build Coastguard Worker 151*1b3f573fSAndroid Build Coastguard Worker // Other half the values that will replace. 152*1b3f573fSAndroid Build Coastguard Worker 153*1b3f573fSAndroid Build Coastguard Worker src.optionalInt32 = 3; 154*1b3f573fSAndroid Build Coastguard Worker src.optionalInt64 = 0; 155*1b3f573fSAndroid Build Coastguard Worker src.optionalUint32 = 3; 156*1b3f573fSAndroid Build Coastguard Worker src.optionalUint64 = 0; 157*1b3f573fSAndroid Build Coastguard Worker src.optionalSint32 = 3; 158*1b3f573fSAndroid Build Coastguard Worker src.optionalSint64 = 0; 159*1b3f573fSAndroid Build Coastguard Worker src.optionalFixed32 = 3; 160*1b3f573fSAndroid Build Coastguard Worker src.optionalFixed64 = 0; 161*1b3f573fSAndroid Build Coastguard Worker src.optionalSfixed32 = 3; 162*1b3f573fSAndroid Build Coastguard Worker src.optionalSfixed64 = 0; 163*1b3f573fSAndroid Build Coastguard Worker src.optionalFloat = 3.0f; 164*1b3f573fSAndroid Build Coastguard Worker src.optionalDouble = 0.0; 165*1b3f573fSAndroid Build Coastguard Worker src.optionalBool = YES; // No other value to use. :( 166*1b3f573fSAndroid Build Coastguard Worker src.optionalString = nil; 167*1b3f573fSAndroid Build Coastguard Worker src.optionalBytes = testData2; 168*1b3f573fSAndroid Build Coastguard Worker src.optionalEnum = Message3_Enum_Foo; 169*1b3f573fSAndroid Build Coastguard Worker 170*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 171*1b3f573fSAndroid Build Coastguard Worker 172*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalInt32, 3); 173*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalInt64, 2); 174*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalUint32, 3U); 175*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalUint64, 2U); 176*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSint32, 3); 177*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSint64, 2); 178*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalFixed32, 3U); 179*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalFixed64, 2U); 180*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSfixed32, 3); 181*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalSfixed64, 2); 182*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalFloat, 3.0f); 183*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalDouble, 2.0); 184*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalBool, YES); 185*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.optionalString, @"baz"); 186*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.optionalBytes, testData2); 187*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.optionalEnum, Message3_Enum_Baz); 188*1b3f573fSAndroid Build Coastguard Worker 189*1b3f573fSAndroid Build Coastguard Worker [src release]; 190*1b3f573fSAndroid Build Coastguard Worker [dst release]; 191*1b3f573fSAndroid Build Coastguard Worker} 192*1b3f573fSAndroid Build Coastguard Worker 193*1b3f573fSAndroid Build Coastguard Worker- (void)testProto3MergingEnums { 194*1b3f573fSAndroid Build Coastguard Worker UnknownEnumsMyMessage *src = [UnknownEnumsMyMessage message]; 195*1b3f573fSAndroid Build Coastguard Worker UnknownEnumsMyMessage *dst = [UnknownEnumsMyMessage message]; 196*1b3f573fSAndroid Build Coastguard Worker 197*1b3f573fSAndroid Build Coastguard Worker // Known value. 198*1b3f573fSAndroid Build Coastguard Worker 199*1b3f573fSAndroid Build Coastguard Worker src.e = UnknownEnumsMyEnum_Bar; 200*1b3f573fSAndroid Build Coastguard Worker src.repeatedEArray = 201*1b3f573fSAndroid Build Coastguard Worker [GPBEnumArray arrayWithValidationFunction:UnknownEnumsMyEnum_IsValidValue 202*1b3f573fSAndroid Build Coastguard Worker rawValue:UnknownEnumsMyEnum_Bar]; 203*1b3f573fSAndroid Build Coastguard Worker src.repeatedPackedEArray = 204*1b3f573fSAndroid Build Coastguard Worker [GPBEnumArray arrayWithValidationFunction:UnknownEnumsMyEnum_IsValidValue 205*1b3f573fSAndroid Build Coastguard Worker rawValue:UnknownEnumsMyEnum_Bar]; 206*1b3f573fSAndroid Build Coastguard Worker src.oneofE1 = UnknownEnumsMyEnum_Bar; 207*1b3f573fSAndroid Build Coastguard Worker 208*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 209*1b3f573fSAndroid Build Coastguard Worker 210*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.e, UnknownEnumsMyEnum_Bar); 211*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.repeatedEArray.count, 1U); 212*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual([dst.repeatedEArray valueAtIndex:0], UnknownEnumsMyEnum_Bar); 213*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.repeatedPackedEArray.count, 1U); 214*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual([dst.repeatedPackedEArray valueAtIndex:0], 215*1b3f573fSAndroid Build Coastguard Worker UnknownEnumsMyEnum_Bar); 216*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofE1, UnknownEnumsMyEnum_Bar); 217*1b3f573fSAndroid Build Coastguard Worker 218*1b3f573fSAndroid Build Coastguard Worker // Unknown value. 219*1b3f573fSAndroid Build Coastguard Worker 220*1b3f573fSAndroid Build Coastguard Worker const int32_t kUnknownValue = 666; 221*1b3f573fSAndroid Build Coastguard Worker 222*1b3f573fSAndroid Build Coastguard Worker SetUnknownEnumsMyMessage_E_RawValue(src, kUnknownValue); 223*1b3f573fSAndroid Build Coastguard Worker src.repeatedEArray = 224*1b3f573fSAndroid Build Coastguard Worker [GPBEnumArray arrayWithValidationFunction:UnknownEnumsMyEnum_IsValidValue 225*1b3f573fSAndroid Build Coastguard Worker rawValue:kUnknownValue]; 226*1b3f573fSAndroid Build Coastguard Worker src.repeatedPackedEArray = 227*1b3f573fSAndroid Build Coastguard Worker [GPBEnumArray arrayWithValidationFunction:UnknownEnumsMyEnum_IsValidValue 228*1b3f573fSAndroid Build Coastguard Worker rawValue:kUnknownValue]; 229*1b3f573fSAndroid Build Coastguard Worker SetUnknownEnumsMyMessage_OneofE1_RawValue(src, kUnknownValue); 230*1b3f573fSAndroid Build Coastguard Worker 231*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 232*1b3f573fSAndroid Build Coastguard Worker 233*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.e, UnknownEnumsMyEnum_GPBUnrecognizedEnumeratorValue); 234*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(UnknownEnumsMyMessage_E_RawValue(dst), kUnknownValue); 235*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.repeatedEArray.count, 2U); 236*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual([dst.repeatedEArray valueAtIndex:0], UnknownEnumsMyEnum_Bar); 237*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual([dst.repeatedEArray valueAtIndex:1], 238*1b3f573fSAndroid Build Coastguard Worker UnknownEnumsMyEnum_GPBUnrecognizedEnumeratorValue); 239*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual([dst.repeatedEArray rawValueAtIndex:1], kUnknownValue); 240*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.repeatedPackedEArray.count, 2U); 241*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual([dst.repeatedPackedEArray valueAtIndex:0], 242*1b3f573fSAndroid Build Coastguard Worker UnknownEnumsMyEnum_Bar); 243*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual([dst.repeatedPackedEArray valueAtIndex:1], 244*1b3f573fSAndroid Build Coastguard Worker UnknownEnumsMyEnum_GPBUnrecognizedEnumeratorValue); 245*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual([dst.repeatedPackedEArray rawValueAtIndex:1], kUnknownValue); 246*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofE1, 247*1b3f573fSAndroid Build Coastguard Worker UnknownEnumsMyEnum_GPBUnrecognizedEnumeratorValue); 248*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(UnknownEnumsMyMessage_OneofE1_RawValue(dst), kUnknownValue); 249*1b3f573fSAndroid Build Coastguard Worker} 250*1b3f573fSAndroid Build Coastguard Worker 251*1b3f573fSAndroid Build Coastguard Worker- (void)testProto2MergeOneof { 252*1b3f573fSAndroid Build Coastguard Worker Message2 *src = [Message2 message]; 253*1b3f573fSAndroid Build Coastguard Worker Message2 *dst = [Message2 message]; 254*1b3f573fSAndroid Build Coastguard Worker 255*1b3f573fSAndroid Build Coastguard Worker // 256*1b3f573fSAndroid Build Coastguard Worker // Make sure whatever is in dst gets cleared out be merging in something else. 257*1b3f573fSAndroid Build Coastguard Worker // 258*1b3f573fSAndroid Build Coastguard Worker 259*1b3f573fSAndroid Build Coastguard Worker dst.oneofEnum = Message2_Enum_Bar; 260*1b3f573fSAndroid Build Coastguard Worker 261*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE MERGE2_TEST(SET_NAME, SET_VALUE, CLEARED_NAME, CLEARED_DEFAULT) 262*1b3f573fSAndroid Build Coastguard Worker//% src.oneof##SET_NAME = SET_VALUE; 263*1b3f573fSAndroid Build Coastguard Worker//% [dst mergeFrom:src]; 264*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_Oneof##SET_NAME); 265*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertEqual(dst.oneof##SET_NAME, SET_VALUE); 266*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertEqual(dst.oneof##CLEARED_NAME, CLEARED_DEFAULT); 267*1b3f573fSAndroid Build Coastguard Worker//% 268*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Int32, 10, Enum, Message2_Enum_Baz) 269*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 270*1b3f573fSAndroid Build Coastguard Worker// clang-format off 271*1b3f573fSAndroid Build Coastguard Worker 272*1b3f573fSAndroid Build Coastguard Worker src.oneofInt32 = 10; 273*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 274*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofInt32); 275*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofInt32, 10); 276*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofEnum, Message2_Enum_Baz); 277*1b3f573fSAndroid Build Coastguard Worker 278*1b3f573fSAndroid Build Coastguard Worker// clang-format on 279*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Int64, 11, Int32, 100) 280*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 281*1b3f573fSAndroid Build Coastguard Worker// clang-format off 282*1b3f573fSAndroid Build Coastguard Worker 283*1b3f573fSAndroid Build Coastguard Worker src.oneofInt64 = 11; 284*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 285*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofInt64); 286*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofInt64, 11); 287*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofInt32, 100); 288*1b3f573fSAndroid Build Coastguard Worker 289*1b3f573fSAndroid Build Coastguard Worker// clang-format on 290*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Uint32, 12U, Int64, 101) 291*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 292*1b3f573fSAndroid Build Coastguard Worker// clang-format off 293*1b3f573fSAndroid Build Coastguard Worker 294*1b3f573fSAndroid Build Coastguard Worker src.oneofUint32 = 12U; 295*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 296*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofUint32); 297*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofUint32, 12U); 298*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofInt64, 101); 299*1b3f573fSAndroid Build Coastguard Worker 300*1b3f573fSAndroid Build Coastguard Worker// clang-format on 301*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Uint64, 13U, Uint32, 102U) 302*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 303*1b3f573fSAndroid Build Coastguard Worker// clang-format off 304*1b3f573fSAndroid Build Coastguard Worker 305*1b3f573fSAndroid Build Coastguard Worker src.oneofUint64 = 13U; 306*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 307*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofUint64); 308*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofUint64, 13U); 309*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofUint32, 102U); 310*1b3f573fSAndroid Build Coastguard Worker 311*1b3f573fSAndroid Build Coastguard Worker// clang-format on 312*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Sint32, 14, Uint64, 103U) 313*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 314*1b3f573fSAndroid Build Coastguard Worker// clang-format off 315*1b3f573fSAndroid Build Coastguard Worker 316*1b3f573fSAndroid Build Coastguard Worker src.oneofSint32 = 14; 317*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 318*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofSint32); 319*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSint32, 14); 320*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofUint64, 103U); 321*1b3f573fSAndroid Build Coastguard Worker 322*1b3f573fSAndroid Build Coastguard Worker// clang-format on 323*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Sint64, 15, Sint32, 104) 324*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 325*1b3f573fSAndroid Build Coastguard Worker// clang-format off 326*1b3f573fSAndroid Build Coastguard Worker 327*1b3f573fSAndroid Build Coastguard Worker src.oneofSint64 = 15; 328*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 329*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofSint64); 330*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSint64, 15); 331*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSint32, 104); 332*1b3f573fSAndroid Build Coastguard Worker 333*1b3f573fSAndroid Build Coastguard Worker// clang-format on 334*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Fixed32, 16U, Sint64, 105) 335*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 336*1b3f573fSAndroid Build Coastguard Worker// clang-format off 337*1b3f573fSAndroid Build Coastguard Worker 338*1b3f573fSAndroid Build Coastguard Worker src.oneofFixed32 = 16U; 339*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 340*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofFixed32); 341*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFixed32, 16U); 342*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSint64, 105); 343*1b3f573fSAndroid Build Coastguard Worker 344*1b3f573fSAndroid Build Coastguard Worker// clang-format on 345*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Fixed64, 17U, Fixed32, 106U) 346*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 347*1b3f573fSAndroid Build Coastguard Worker// clang-format off 348*1b3f573fSAndroid Build Coastguard Worker 349*1b3f573fSAndroid Build Coastguard Worker src.oneofFixed64 = 17U; 350*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 351*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofFixed64); 352*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFixed64, 17U); 353*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFixed32, 106U); 354*1b3f573fSAndroid Build Coastguard Worker 355*1b3f573fSAndroid Build Coastguard Worker// clang-format on 356*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Sfixed32, 18, Fixed64, 107U) 357*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 358*1b3f573fSAndroid Build Coastguard Worker// clang-format off 359*1b3f573fSAndroid Build Coastguard Worker 360*1b3f573fSAndroid Build Coastguard Worker src.oneofSfixed32 = 18; 361*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 362*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofSfixed32); 363*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSfixed32, 18); 364*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFixed64, 107U); 365*1b3f573fSAndroid Build Coastguard Worker 366*1b3f573fSAndroid Build Coastguard Worker// clang-format on 367*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Sfixed64, 19, Sfixed32, 108) 368*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 369*1b3f573fSAndroid Build Coastguard Worker// clang-format off 370*1b3f573fSAndroid Build Coastguard Worker 371*1b3f573fSAndroid Build Coastguard Worker src.oneofSfixed64 = 19; 372*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 373*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofSfixed64); 374*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSfixed64, 19); 375*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSfixed32, 108); 376*1b3f573fSAndroid Build Coastguard Worker 377*1b3f573fSAndroid Build Coastguard Worker// clang-format on 378*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Float, 20.0f, Sfixed64, 109) 379*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 380*1b3f573fSAndroid Build Coastguard Worker// clang-format off 381*1b3f573fSAndroid Build Coastguard Worker 382*1b3f573fSAndroid Build Coastguard Worker src.oneofFloat = 20.0f; 383*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 384*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofFloat); 385*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFloat, 20.0f); 386*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSfixed64, 109); 387*1b3f573fSAndroid Build Coastguard Worker 388*1b3f573fSAndroid Build Coastguard Worker// clang-format on 389*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Double, 21.0, Float, 110.0f) 390*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 391*1b3f573fSAndroid Build Coastguard Worker// clang-format off 392*1b3f573fSAndroid Build Coastguard Worker 393*1b3f573fSAndroid Build Coastguard Worker src.oneofDouble = 21.0; 394*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 395*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofDouble); 396*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofDouble, 21.0); 397*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFloat, 110.0f); 398*1b3f573fSAndroid Build Coastguard Worker 399*1b3f573fSAndroid Build Coastguard Worker// clang-format on 400*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Bool, NO, Double, 111.0) 401*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 402*1b3f573fSAndroid Build Coastguard Worker// clang-format off 403*1b3f573fSAndroid Build Coastguard Worker 404*1b3f573fSAndroid Build Coastguard Worker src.oneofBool = NO; 405*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 406*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofBool); 407*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofBool, NO); 408*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofDouble, 111.0); 409*1b3f573fSAndroid Build Coastguard Worker 410*1b3f573fSAndroid Build Coastguard Worker// clang-format on 411*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE2_TEST(Enum, Message2_Enum_Bar, Bool, YES) 412*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 413*1b3f573fSAndroid Build Coastguard Worker// clang-format off 414*1b3f573fSAndroid Build Coastguard Worker 415*1b3f573fSAndroid Build Coastguard Worker src.oneofEnum = Message2_Enum_Bar; 416*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 417*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofEnum); 418*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofEnum, Message2_Enum_Bar); 419*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofBool, YES); 420*1b3f573fSAndroid Build Coastguard Worker 421*1b3f573fSAndroid Build Coastguard Worker// clang-format on 422*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND-END (14 expansions) 423*1b3f573fSAndroid Build Coastguard Worker 424*1b3f573fSAndroid Build Coastguard Worker NSString *oneofStringDefault = @"string"; 425*1b3f573fSAndroid Build Coastguard Worker NSData *oneofBytesDefault = [@"data" dataUsingEncoding:NSUTF8StringEncoding]; 426*1b3f573fSAndroid Build Coastguard Worker 427*1b3f573fSAndroid Build Coastguard Worker src.oneofString = @"foo"; 428*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 429*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofString); 430*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.oneofString, @"foo"); 431*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofEnum, Message2_Enum_Baz); 432*1b3f573fSAndroid Build Coastguard Worker 433*1b3f573fSAndroid Build Coastguard Worker src.oneofBytes = [@"bar" dataUsingEncoding:NSUTF8StringEncoding]; 434*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 435*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofBytes); 436*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.oneofBytes, 437*1b3f573fSAndroid Build Coastguard Worker [@"bar" dataUsingEncoding:NSUTF8StringEncoding]); 438*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.oneofString, oneofStringDefault); 439*1b3f573fSAndroid Build Coastguard Worker 440*1b3f573fSAndroid Build Coastguard Worker Message2_OneofGroup *group = [Message2_OneofGroup message]; 441*1b3f573fSAndroid Build Coastguard Worker group.a = 666; 442*1b3f573fSAndroid Build Coastguard Worker src.oneofGroup = group; 443*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 444*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofGroup); 445*1b3f573fSAndroid Build Coastguard Worker Message2_OneofGroup *mergedGroup = [[dst.oneofGroup retain] autorelease]; 446*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(mergedGroup); 447*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(mergedGroup, group); // Pointer comparison. 448*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(mergedGroup, group); 449*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.oneofBytes, oneofBytesDefault); 450*1b3f573fSAndroid Build Coastguard Worker 451*1b3f573fSAndroid Build Coastguard Worker Message2 *subMessage = [Message2 message]; 452*1b3f573fSAndroid Build Coastguard Worker subMessage.optionalInt32 = 777; 453*1b3f573fSAndroid Build Coastguard Worker src.oneofMessage = subMessage; 454*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 455*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofMessage); 456*1b3f573fSAndroid Build Coastguard Worker Message2 *mergedSubMessage = [[dst.oneofMessage retain] autorelease]; 457*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(mergedSubMessage); 458*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(mergedSubMessage, subMessage); // Pointer comparison. 459*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(mergedSubMessage, subMessage); 460*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(dst.oneofGroup); 461*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(dst.oneofGroup, mergedGroup); // Pointer comparison. 462*1b3f573fSAndroid Build Coastguard Worker 463*1b3f573fSAndroid Build Coastguard Worker // Back to something else to make sure message clears out ok. 464*1b3f573fSAndroid Build Coastguard Worker 465*1b3f573fSAndroid Build Coastguard Worker src.oneofInt32 = 10; 466*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 467*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofInt32); 468*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(dst.oneofMessage); 469*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(dst.oneofMessage, 470*1b3f573fSAndroid Build Coastguard Worker mergedSubMessage); // Pointer comparison. 471*1b3f573fSAndroid Build Coastguard Worker 472*1b3f573fSAndroid Build Coastguard Worker // 473*1b3f573fSAndroid Build Coastguard Worker // Test merging in to message/group when they already had something. 474*1b3f573fSAndroid Build Coastguard Worker // 475*1b3f573fSAndroid Build Coastguard Worker 476*1b3f573fSAndroid Build Coastguard Worker src.oneofGroup = group; 477*1b3f573fSAndroid Build Coastguard Worker mergedGroup = [Message2_OneofGroup message]; 478*1b3f573fSAndroid Build Coastguard Worker mergedGroup.b = 888; 479*1b3f573fSAndroid Build Coastguard Worker dst.oneofGroup = mergedGroup; 480*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 481*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofGroup); 482*1b3f573fSAndroid Build Coastguard Worker // Shouldn't have been a new object. 483*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofGroup, mergedGroup); // Pointer comparison. 484*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofGroup.a, 666); // Pointer comparison. 485*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofGroup.b, 888); // Pointer comparison. 486*1b3f573fSAndroid Build Coastguard Worker 487*1b3f573fSAndroid Build Coastguard Worker src.oneofMessage = subMessage; 488*1b3f573fSAndroid Build Coastguard Worker mergedSubMessage = [Message2 message]; 489*1b3f573fSAndroid Build Coastguard Worker mergedSubMessage.optionalInt64 = 999; 490*1b3f573fSAndroid Build Coastguard Worker dst.oneofMessage = mergedSubMessage; 491*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 492*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message2_O_OneOfCase_OneofMessage); 493*1b3f573fSAndroid Build Coastguard Worker // Shouldn't have been a new object. 494*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofMessage, mergedSubMessage); // Pointer comparison. 495*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofMessage.optionalInt32, 777); // Pointer comparison. 496*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofMessage.optionalInt64, 999); // Pointer comparison. 497*1b3f573fSAndroid Build Coastguard Worker} 498*1b3f573fSAndroid Build Coastguard Worker 499*1b3f573fSAndroid Build Coastguard Worker- (void)testProto3MergeOneof { 500*1b3f573fSAndroid Build Coastguard Worker Message3 *src = [Message3 message]; 501*1b3f573fSAndroid Build Coastguard Worker Message3 *dst = [Message3 message]; 502*1b3f573fSAndroid Build Coastguard Worker 503*1b3f573fSAndroid Build Coastguard Worker // 504*1b3f573fSAndroid Build Coastguard Worker // Make sure whatever is in dst gets cleared out be merging in something else. 505*1b3f573fSAndroid Build Coastguard Worker // 506*1b3f573fSAndroid Build Coastguard Worker 507*1b3f573fSAndroid Build Coastguard Worker dst.oneofEnum = Message3_Enum_Bar; 508*1b3f573fSAndroid Build Coastguard Worker 509*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE MERGE3_TEST(SET_NAME, SET_VALUE, CLEARED_NAME, CLEARED_DEFAULT) 510*1b3f573fSAndroid Build Coastguard Worker//% src.oneof##SET_NAME = SET_VALUE; 511*1b3f573fSAndroid Build Coastguard Worker//% [dst mergeFrom:src]; 512*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_Oneof##SET_NAME); 513*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertEqual(dst.oneof##SET_NAME, SET_VALUE); 514*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertEqual(dst.oneof##CLEARED_NAME, CLEARED_DEFAULT); 515*1b3f573fSAndroid Build Coastguard Worker//% 516*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Int32, 10, Enum, Message3_Enum_Foo) 517*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 518*1b3f573fSAndroid Build Coastguard Worker// clang-format off 519*1b3f573fSAndroid Build Coastguard Worker 520*1b3f573fSAndroid Build Coastguard Worker src.oneofInt32 = 10; 521*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 522*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofInt32); 523*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofInt32, 10); 524*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofEnum, Message3_Enum_Foo); 525*1b3f573fSAndroid Build Coastguard Worker 526*1b3f573fSAndroid Build Coastguard Worker// clang-format on 527*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Int64, 11, Int32, 0) 528*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 529*1b3f573fSAndroid Build Coastguard Worker// clang-format off 530*1b3f573fSAndroid Build Coastguard Worker 531*1b3f573fSAndroid Build Coastguard Worker src.oneofInt64 = 11; 532*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 533*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofInt64); 534*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofInt64, 11); 535*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofInt32, 0); 536*1b3f573fSAndroid Build Coastguard Worker 537*1b3f573fSAndroid Build Coastguard Worker// clang-format on 538*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Uint32, 12U, Int64, 0) 539*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 540*1b3f573fSAndroid Build Coastguard Worker// clang-format off 541*1b3f573fSAndroid Build Coastguard Worker 542*1b3f573fSAndroid Build Coastguard Worker src.oneofUint32 = 12U; 543*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 544*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofUint32); 545*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofUint32, 12U); 546*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofInt64, 0); 547*1b3f573fSAndroid Build Coastguard Worker 548*1b3f573fSAndroid Build Coastguard Worker// clang-format on 549*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Uint64, 13U, Uint32, 0U) 550*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 551*1b3f573fSAndroid Build Coastguard Worker// clang-format off 552*1b3f573fSAndroid Build Coastguard Worker 553*1b3f573fSAndroid Build Coastguard Worker src.oneofUint64 = 13U; 554*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 555*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofUint64); 556*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofUint64, 13U); 557*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofUint32, 0U); 558*1b3f573fSAndroid Build Coastguard Worker 559*1b3f573fSAndroid Build Coastguard Worker// clang-format on 560*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Sint32, 14, Uint64, 0U) 561*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 562*1b3f573fSAndroid Build Coastguard Worker// clang-format off 563*1b3f573fSAndroid Build Coastguard Worker 564*1b3f573fSAndroid Build Coastguard Worker src.oneofSint32 = 14; 565*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 566*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofSint32); 567*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSint32, 14); 568*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofUint64, 0U); 569*1b3f573fSAndroid Build Coastguard Worker 570*1b3f573fSAndroid Build Coastguard Worker// clang-format on 571*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Sint64, 15, Sint32, 0) 572*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 573*1b3f573fSAndroid Build Coastguard Worker// clang-format off 574*1b3f573fSAndroid Build Coastguard Worker 575*1b3f573fSAndroid Build Coastguard Worker src.oneofSint64 = 15; 576*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 577*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofSint64); 578*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSint64, 15); 579*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSint32, 0); 580*1b3f573fSAndroid Build Coastguard Worker 581*1b3f573fSAndroid Build Coastguard Worker// clang-format on 582*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Fixed32, 16U, Sint64, 0) 583*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 584*1b3f573fSAndroid Build Coastguard Worker// clang-format off 585*1b3f573fSAndroid Build Coastguard Worker 586*1b3f573fSAndroid Build Coastguard Worker src.oneofFixed32 = 16U; 587*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 588*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofFixed32); 589*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFixed32, 16U); 590*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSint64, 0); 591*1b3f573fSAndroid Build Coastguard Worker 592*1b3f573fSAndroid Build Coastguard Worker// clang-format on 593*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Fixed64, 17U, Fixed32, 0U) 594*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 595*1b3f573fSAndroid Build Coastguard Worker// clang-format off 596*1b3f573fSAndroid Build Coastguard Worker 597*1b3f573fSAndroid Build Coastguard Worker src.oneofFixed64 = 17U; 598*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 599*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofFixed64); 600*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFixed64, 17U); 601*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFixed32, 0U); 602*1b3f573fSAndroid Build Coastguard Worker 603*1b3f573fSAndroid Build Coastguard Worker// clang-format on 604*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Sfixed32, 18, Fixed64, 0U) 605*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 606*1b3f573fSAndroid Build Coastguard Worker// clang-format off 607*1b3f573fSAndroid Build Coastguard Worker 608*1b3f573fSAndroid Build Coastguard Worker src.oneofSfixed32 = 18; 609*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 610*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofSfixed32); 611*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSfixed32, 18); 612*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFixed64, 0U); 613*1b3f573fSAndroid Build Coastguard Worker 614*1b3f573fSAndroid Build Coastguard Worker// clang-format on 615*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Sfixed64, 19, Sfixed32, 0) 616*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 617*1b3f573fSAndroid Build Coastguard Worker// clang-format off 618*1b3f573fSAndroid Build Coastguard Worker 619*1b3f573fSAndroid Build Coastguard Worker src.oneofSfixed64 = 19; 620*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 621*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofSfixed64); 622*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSfixed64, 19); 623*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSfixed32, 0); 624*1b3f573fSAndroid Build Coastguard Worker 625*1b3f573fSAndroid Build Coastguard Worker// clang-format on 626*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Float, 20.0f, Sfixed64, 0) 627*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 628*1b3f573fSAndroid Build Coastguard Worker// clang-format off 629*1b3f573fSAndroid Build Coastguard Worker 630*1b3f573fSAndroid Build Coastguard Worker src.oneofFloat = 20.0f; 631*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 632*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofFloat); 633*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFloat, 20.0f); 634*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofSfixed64, 0); 635*1b3f573fSAndroid Build Coastguard Worker 636*1b3f573fSAndroid Build Coastguard Worker// clang-format on 637*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Double, 21.0, Float, 0.0f) 638*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 639*1b3f573fSAndroid Build Coastguard Worker// clang-format off 640*1b3f573fSAndroid Build Coastguard Worker 641*1b3f573fSAndroid Build Coastguard Worker src.oneofDouble = 21.0; 642*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 643*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofDouble); 644*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofDouble, 21.0); 645*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofFloat, 0.0f); 646*1b3f573fSAndroid Build Coastguard Worker 647*1b3f573fSAndroid Build Coastguard Worker// clang-format on 648*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Bool, YES, Double, 0.0) 649*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 650*1b3f573fSAndroid Build Coastguard Worker// clang-format off 651*1b3f573fSAndroid Build Coastguard Worker 652*1b3f573fSAndroid Build Coastguard Worker src.oneofBool = YES; 653*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 654*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofBool); 655*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofBool, YES); 656*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofDouble, 0.0); 657*1b3f573fSAndroid Build Coastguard Worker 658*1b3f573fSAndroid Build Coastguard Worker// clang-format on 659*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND MERGE3_TEST(Enum, Message3_Enum_Bar, Bool, NO) 660*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 661*1b3f573fSAndroid Build Coastguard Worker// clang-format off 662*1b3f573fSAndroid Build Coastguard Worker 663*1b3f573fSAndroid Build Coastguard Worker src.oneofEnum = Message3_Enum_Bar; 664*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 665*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofEnum); 666*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofEnum, Message3_Enum_Bar); 667*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofBool, NO); 668*1b3f573fSAndroid Build Coastguard Worker 669*1b3f573fSAndroid Build Coastguard Worker// clang-format on 670*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND-END (14 expansions) 671*1b3f573fSAndroid Build Coastguard Worker 672*1b3f573fSAndroid Build Coastguard Worker NSString *oneofStringDefault = @""; 673*1b3f573fSAndroid Build Coastguard Worker NSData *oneofBytesDefault = [NSData data]; 674*1b3f573fSAndroid Build Coastguard Worker 675*1b3f573fSAndroid Build Coastguard Worker src.oneofString = @"foo"; 676*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 677*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofString); 678*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.oneofString, @"foo"); 679*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofEnum, Message3_Enum_Foo); 680*1b3f573fSAndroid Build Coastguard Worker 681*1b3f573fSAndroid Build Coastguard Worker src.oneofBytes = [@"bar" dataUsingEncoding:NSUTF8StringEncoding]; 682*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 683*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofBytes); 684*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.oneofBytes, 685*1b3f573fSAndroid Build Coastguard Worker [@"bar" dataUsingEncoding:NSUTF8StringEncoding]); 686*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.oneofString, oneofStringDefault); 687*1b3f573fSAndroid Build Coastguard Worker 688*1b3f573fSAndroid Build Coastguard Worker 689*1b3f573fSAndroid Build Coastguard Worker Message3 *subMessage = [Message3 message]; 690*1b3f573fSAndroid Build Coastguard Worker subMessage.optionalInt32 = 777; 691*1b3f573fSAndroid Build Coastguard Worker src.oneofMessage = subMessage; 692*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 693*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofMessage); 694*1b3f573fSAndroid Build Coastguard Worker Message3 *mergedSubMessage = [[dst.oneofMessage retain] autorelease]; 695*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(mergedSubMessage); 696*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(mergedSubMessage, subMessage); // Pointer comparison. 697*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(mergedSubMessage, subMessage); 698*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(dst.oneofBytes, oneofBytesDefault); 699*1b3f573fSAndroid Build Coastguard Worker 700*1b3f573fSAndroid Build Coastguard Worker // Back to something else to make sure message clears out ok. 701*1b3f573fSAndroid Build Coastguard Worker 702*1b3f573fSAndroid Build Coastguard Worker src.oneofInt32 = 10; 703*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 704*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofInt32); 705*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(dst.oneofMessage); 706*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(dst.oneofMessage, 707*1b3f573fSAndroid Build Coastguard Worker mergedSubMessage); // Pointer comparison. 708*1b3f573fSAndroid Build Coastguard Worker 709*1b3f573fSAndroid Build Coastguard Worker // 710*1b3f573fSAndroid Build Coastguard Worker // Test merging in to message when they already had something. 711*1b3f573fSAndroid Build Coastguard Worker // 712*1b3f573fSAndroid Build Coastguard Worker 713*1b3f573fSAndroid Build Coastguard Worker src.oneofMessage = subMessage; 714*1b3f573fSAndroid Build Coastguard Worker mergedSubMessage = [Message3 message]; 715*1b3f573fSAndroid Build Coastguard Worker mergedSubMessage.optionalInt64 = 999; 716*1b3f573fSAndroid Build Coastguard Worker dst.oneofMessage = mergedSubMessage; 717*1b3f573fSAndroid Build Coastguard Worker [dst mergeFrom:src]; 718*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oOneOfCase, Message3_O_OneOfCase_OneofMessage); 719*1b3f573fSAndroid Build Coastguard Worker // Shouldn't have been a new object. 720*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofMessage, mergedSubMessage); // Pointer comparison. 721*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofMessage.optionalInt32, 777); // Pointer comparison. 722*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(dst.oneofMessage.optionalInt64, 999); // Pointer comparison. 723*1b3f573fSAndroid Build Coastguard Worker} 724*1b3f573fSAndroid Build Coastguard Worker 725*1b3f573fSAndroid Build Coastguard Worker#pragma mark - Subset from from map_tests.cc 726*1b3f573fSAndroid Build Coastguard Worker 727*1b3f573fSAndroid Build Coastguard Worker// TEST(GeneratedMapFieldTest, CopyFromMessageMap) 728*1b3f573fSAndroid Build Coastguard Worker- (void)testMap_CopyFromMessageMap { 729*1b3f573fSAndroid Build Coastguard Worker TestMessageMap *msg1 = [[TestMessageMap alloc] init]; 730*1b3f573fSAndroid Build Coastguard Worker TestMessageMap *msg2 = [[TestMessageMap alloc] init]; 731*1b3f573fSAndroid Build Coastguard Worker 732*1b3f573fSAndroid Build Coastguard Worker TestAllTypes *subMsg = [TestAllTypes message]; 733*1b3f573fSAndroid Build Coastguard Worker subMsg.repeatedInt32Array = [GPBInt32Array arrayWithValue:100]; 734*1b3f573fSAndroid Build Coastguard Worker [msg1.mapInt32Message setObject:subMsg forKey:0]; 735*1b3f573fSAndroid Build Coastguard Worker subMsg = nil; 736*1b3f573fSAndroid Build Coastguard Worker 737*1b3f573fSAndroid Build Coastguard Worker subMsg = [TestAllTypes message]; 738*1b3f573fSAndroid Build Coastguard Worker subMsg.repeatedInt32Array = [GPBInt32Array arrayWithValue:101]; 739*1b3f573fSAndroid Build Coastguard Worker 740*1b3f573fSAndroid Build Coastguard Worker [msg2.mapInt32Message setObject:subMsg forKey:0]; 741*1b3f573fSAndroid Build Coastguard Worker subMsg = nil; 742*1b3f573fSAndroid Build Coastguard Worker 743*1b3f573fSAndroid Build Coastguard Worker [msg1 mergeFrom:msg2]; 744*1b3f573fSAndroid Build Coastguard Worker 745*1b3f573fSAndroid Build Coastguard Worker // Checks repeated field is overwritten. 746*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg1.mapInt32Message.count, 1U); 747*1b3f573fSAndroid Build Coastguard Worker subMsg = [msg1.mapInt32Message objectForKey:0]; 748*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(subMsg); 749*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(subMsg.repeatedInt32Array.count, 1U); 750*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual([subMsg.repeatedInt32Array valueAtIndex:0], 101); 751*1b3f573fSAndroid Build Coastguard Worker 752*1b3f573fSAndroid Build Coastguard Worker [msg2 release]; 753*1b3f573fSAndroid Build Coastguard Worker [msg1 release]; 754*1b3f573fSAndroid Build Coastguard Worker} 755*1b3f573fSAndroid Build Coastguard Worker 756*1b3f573fSAndroid Build Coastguard Worker@end 757