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/UnittestCycle.pbobjc.h" 40*1b3f573fSAndroid Build Coastguard Worker#import "google/protobuf/UnittestObjcStartup.pbobjc.h" 41*1b3f573fSAndroid Build Coastguard Worker#import "google/protobuf/UnittestRuntimeProto2.pbobjc.h" 42*1b3f573fSAndroid Build Coastguard Worker#import "google/protobuf/UnittestRuntimeProto3.pbobjc.h" 43*1b3f573fSAndroid Build Coastguard Worker 44*1b3f573fSAndroid Build Coastguard Worker@interface MessageRuntimeTests : GPBTestCase 45*1b3f573fSAndroid Build Coastguard Worker@end 46*1b3f573fSAndroid Build Coastguard Worker 47*1b3f573fSAndroid Build Coastguard Worker@implementation MessageRuntimeTests 48*1b3f573fSAndroid Build Coastguard Worker 49*1b3f573fSAndroid Build Coastguard Worker// TODO(thomasvl): Pull tests over from GPBMessageTests that are runtime 50*1b3f573fSAndroid Build Coastguard Worker// specific. 51*1b3f573fSAndroid Build Coastguard Worker 52*1b3f573fSAndroid Build Coastguard Worker- (void)testStartupOrdering { 53*1b3f573fSAndroid Build Coastguard Worker // Message class/Root class initialization is a little tricky, so these just 54*1b3f573fSAndroid Build Coastguard Worker // create some possible patterns that can be a problem. The messages don't 55*1b3f573fSAndroid Build Coastguard Worker // have to be exercised, just creating them is enough to test. If there 56*1b3f573fSAndroid Build Coastguard Worker // is a problem, the runtime should assert or hang. 57*1b3f573fSAndroid Build Coastguard Worker // 58*1b3f573fSAndroid Build Coastguard Worker // Note: the messages from these proto files should not be used in any other 59*1b3f573fSAndroid Build Coastguard Worker // tests, that way when they are referenced here it will be the first use and 60*1b3f573fSAndroid Build Coastguard Worker // initialization will take place now. 61*1b3f573fSAndroid Build Coastguard Worker 62*1b3f573fSAndroid Build Coastguard Worker TestObjCStartupMessage *message = [TestObjCStartupMessage message]; 63*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(message); 64*1b3f573fSAndroid Build Coastguard Worker 65*1b3f573fSAndroid Build Coastguard Worker CycleBaz *baz = [CycleBaz message]; 66*1b3f573fSAndroid Build Coastguard Worker CycleBar *bar = [CycleBar message]; 67*1b3f573fSAndroid Build Coastguard Worker CycleFoo *foo = [CycleFoo message]; 68*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(baz); 69*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(bar); 70*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(foo); 71*1b3f573fSAndroid Build Coastguard Worker} 72*1b3f573fSAndroid Build Coastguard Worker 73*1b3f573fSAndroid Build Coastguard Worker- (void)testProto2HasMethodSupport { 74*1b3f573fSAndroid Build Coastguard Worker NSArray *names = @[ 75*1b3f573fSAndroid Build Coastguard Worker @"Int32", 76*1b3f573fSAndroid Build Coastguard Worker @"Int64", 77*1b3f573fSAndroid Build Coastguard Worker @"Uint32", 78*1b3f573fSAndroid Build Coastguard Worker @"Uint64", 79*1b3f573fSAndroid Build Coastguard Worker @"Sint32", 80*1b3f573fSAndroid Build Coastguard Worker @"Sint64", 81*1b3f573fSAndroid Build Coastguard Worker @"Fixed32", 82*1b3f573fSAndroid Build Coastguard Worker @"Fixed64", 83*1b3f573fSAndroid Build Coastguard Worker @"Sfixed32", 84*1b3f573fSAndroid Build Coastguard Worker @"Sfixed64", 85*1b3f573fSAndroid Build Coastguard Worker @"Float", 86*1b3f573fSAndroid Build Coastguard Worker @"Double", 87*1b3f573fSAndroid Build Coastguard Worker @"Bool", 88*1b3f573fSAndroid Build Coastguard Worker @"String", 89*1b3f573fSAndroid Build Coastguard Worker @"Bytes", 90*1b3f573fSAndroid Build Coastguard Worker @"Group", 91*1b3f573fSAndroid Build Coastguard Worker @"Message", 92*1b3f573fSAndroid Build Coastguard Worker @"Enum", 93*1b3f573fSAndroid Build Coastguard Worker ]; 94*1b3f573fSAndroid Build Coastguard Worker 95*1b3f573fSAndroid Build Coastguard Worker // Proto2 gets: 96*1b3f573fSAndroid Build Coastguard Worker 97*1b3f573fSAndroid Build Coastguard Worker // Single fields - has*/setHas* is valid. 98*1b3f573fSAndroid Build Coastguard Worker 99*1b3f573fSAndroid Build Coastguard Worker for (NSString *name in names) { 100*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - hasOptionalInt32/setHasOptionalInt32: 101*1b3f573fSAndroid Build Coastguard Worker SEL hasSel = NSSelectorFromString( 102*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"hasOptional%@", name]); 103*1b3f573fSAndroid Build Coastguard Worker SEL setHasSel = NSSelectorFromString( 104*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"setHasOptional%@:", name]); 105*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue([Message2 instancesRespondToSelector:hasSel], @"field: %@", 106*1b3f573fSAndroid Build Coastguard Worker name); 107*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue([Message2 instancesRespondToSelector:setHasSel], @"field: %@", 108*1b3f573fSAndroid Build Coastguard Worker name); 109*1b3f573fSAndroid Build Coastguard Worker } 110*1b3f573fSAndroid Build Coastguard Worker 111*1b3f573fSAndroid Build Coastguard Worker // Repeated fields 112*1b3f573fSAndroid Build Coastguard Worker // - no has*/setHas* 113*1b3f573fSAndroid Build Coastguard Worker // - *Count 114*1b3f573fSAndroid Build Coastguard Worker 115*1b3f573fSAndroid Build Coastguard Worker for (NSString *name in names) { 116*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - hasRepeatedInt32Array/setHasRepeatedInt32Array: 117*1b3f573fSAndroid Build Coastguard Worker SEL hasSel = NSSelectorFromString( 118*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"hasRepeated%@Array", name]); 119*1b3f573fSAndroid Build Coastguard Worker SEL setHasSel = NSSelectorFromString( 120*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"setHasRepeated%@Array:", name]); 121*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@", 122*1b3f573fSAndroid Build Coastguard Worker name); 123*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel], 124*1b3f573fSAndroid Build Coastguard Worker @"field: %@", name); 125*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - repeatedInt32Array_Count 126*1b3f573fSAndroid Build Coastguard Worker SEL countSel = NSSelectorFromString( 127*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"repeated%@Array_Count", name]); 128*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@", 129*1b3f573fSAndroid Build Coastguard Worker name); 130*1b3f573fSAndroid Build Coastguard Worker } 131*1b3f573fSAndroid Build Coastguard Worker 132*1b3f573fSAndroid Build Coastguard Worker // OneOf fields - no has*/setHas* 133*1b3f573fSAndroid Build Coastguard Worker 134*1b3f573fSAndroid Build Coastguard Worker for (NSString *name in names) { 135*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - hasOneofInt32/setHasOneofInt32: 136*1b3f573fSAndroid Build Coastguard Worker SEL hasSel = 137*1b3f573fSAndroid Build Coastguard Worker NSSelectorFromString([NSString stringWithFormat:@"hasOneof%@", name]); 138*1b3f573fSAndroid Build Coastguard Worker SEL setHasSel = NSSelectorFromString( 139*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"setHasOneof%@:", name]); 140*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@", 141*1b3f573fSAndroid Build Coastguard Worker name); 142*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel], 143*1b3f573fSAndroid Build Coastguard Worker @"field: %@", name); 144*1b3f573fSAndroid Build Coastguard Worker } 145*1b3f573fSAndroid Build Coastguard Worker 146*1b3f573fSAndroid Build Coastguard Worker // map<> fields 147*1b3f573fSAndroid Build Coastguard Worker // - no has*/setHas* 148*1b3f573fSAndroid Build Coastguard Worker // - *Count 149*1b3f573fSAndroid Build Coastguard Worker 150*1b3f573fSAndroid Build Coastguard Worker NSArray *mapNames = @[ 151*1b3f573fSAndroid Build Coastguard Worker @"Int32Int32", 152*1b3f573fSAndroid Build Coastguard Worker @"Int64Int64", 153*1b3f573fSAndroid Build Coastguard Worker @"Uint32Uint32", 154*1b3f573fSAndroid Build Coastguard Worker @"Uint64Uint64", 155*1b3f573fSAndroid Build Coastguard Worker @"Sint32Sint32", 156*1b3f573fSAndroid Build Coastguard Worker @"Sint64Sint64", 157*1b3f573fSAndroid Build Coastguard Worker @"Fixed32Fixed32", 158*1b3f573fSAndroid Build Coastguard Worker @"Fixed64Fixed64", 159*1b3f573fSAndroid Build Coastguard Worker @"Sfixed32Sfixed32", 160*1b3f573fSAndroid Build Coastguard Worker @"Sfixed64Sfixed64", 161*1b3f573fSAndroid Build Coastguard Worker @"Int32Float", 162*1b3f573fSAndroid Build Coastguard Worker @"Int32Double", 163*1b3f573fSAndroid Build Coastguard Worker @"BoolBool", 164*1b3f573fSAndroid Build Coastguard Worker @"StringString", 165*1b3f573fSAndroid Build Coastguard Worker @"StringBytes", 166*1b3f573fSAndroid Build Coastguard Worker @"StringMessage", 167*1b3f573fSAndroid Build Coastguard Worker @"Int32Bytes", 168*1b3f573fSAndroid Build Coastguard Worker @"Int32Enum", 169*1b3f573fSAndroid Build Coastguard Worker @"Int32Message", 170*1b3f573fSAndroid Build Coastguard Worker ]; 171*1b3f573fSAndroid Build Coastguard Worker 172*1b3f573fSAndroid Build Coastguard Worker for (NSString *name in mapNames) { 173*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - hasMapInt32Int32/setHasMapInt32Int32: 174*1b3f573fSAndroid Build Coastguard Worker SEL hasSel = NSSelectorFromString( 175*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"hasMap%@", name]); 176*1b3f573fSAndroid Build Coastguard Worker SEL setHasSel = NSSelectorFromString( 177*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"setHasMap%@:", name]); 178*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message2 instancesRespondToSelector:hasSel], @"field: %@", 179*1b3f573fSAndroid Build Coastguard Worker name); 180*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message2 instancesRespondToSelector:setHasSel], 181*1b3f573fSAndroid Build Coastguard Worker @"field: %@", name); 182*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - mapInt32Int32Count 183*1b3f573fSAndroid Build Coastguard Worker SEL countSel = NSSelectorFromString( 184*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"map%@_Count", name]); 185*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue([Message2 instancesRespondToSelector:countSel], @"field: %@", 186*1b3f573fSAndroid Build Coastguard Worker name); 187*1b3f573fSAndroid Build Coastguard Worker } 188*1b3f573fSAndroid Build Coastguard Worker 189*1b3f573fSAndroid Build Coastguard Worker} 190*1b3f573fSAndroid Build Coastguard Worker 191*1b3f573fSAndroid Build Coastguard Worker- (void)testProto3HasMethodSupport { 192*1b3f573fSAndroid Build Coastguard Worker NSArray *names = @[ 193*1b3f573fSAndroid Build Coastguard Worker @"Int32", 194*1b3f573fSAndroid Build Coastguard Worker @"Int64", 195*1b3f573fSAndroid Build Coastguard Worker @"Uint32", 196*1b3f573fSAndroid Build Coastguard Worker @"Uint64", 197*1b3f573fSAndroid Build Coastguard Worker @"Sint32", 198*1b3f573fSAndroid Build Coastguard Worker @"Sint64", 199*1b3f573fSAndroid Build Coastguard Worker @"Fixed32", 200*1b3f573fSAndroid Build Coastguard Worker @"Fixed64", 201*1b3f573fSAndroid Build Coastguard Worker @"Sfixed32", 202*1b3f573fSAndroid Build Coastguard Worker @"Sfixed64", 203*1b3f573fSAndroid Build Coastguard Worker @"Float", 204*1b3f573fSAndroid Build Coastguard Worker @"Double", 205*1b3f573fSAndroid Build Coastguard Worker @"Bool", 206*1b3f573fSAndroid Build Coastguard Worker @"String", 207*1b3f573fSAndroid Build Coastguard Worker @"Bytes", 208*1b3f573fSAndroid Build Coastguard Worker @"Message", 209*1b3f573fSAndroid Build Coastguard Worker @"Enum", 210*1b3f573fSAndroid Build Coastguard Worker ]; 211*1b3f573fSAndroid Build Coastguard Worker 212*1b3f573fSAndroid Build Coastguard Worker // Proto3 gets: 213*1b3f573fSAndroid Build Coastguard Worker 214*1b3f573fSAndroid Build Coastguard Worker // Single fields 215*1b3f573fSAndroid Build Coastguard Worker // - has*/setHas* invalid for primitive types. 216*1b3f573fSAndroid Build Coastguard Worker // - has*/setHas* valid for Message. 217*1b3f573fSAndroid Build Coastguard Worker 218*1b3f573fSAndroid Build Coastguard Worker for (NSString *name in names) { 219*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - hasOptionalInt32/setHasOptionalInt32: 220*1b3f573fSAndroid Build Coastguard Worker SEL hasSel = NSSelectorFromString( 221*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"hasOptional%@", name]); 222*1b3f573fSAndroid Build Coastguard Worker SEL setHasSel = NSSelectorFromString( 223*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"setHasOptional%@:", name]); 224*1b3f573fSAndroid Build Coastguard Worker if ([name isEqual:@"Message"]) { 225*1b3f573fSAndroid Build Coastguard Worker // Sub messages/groups are the exception. 226*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue([Message3 instancesRespondToSelector:hasSel], @"field: %@", 227*1b3f573fSAndroid Build Coastguard Worker name); 228*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue([Message3 instancesRespondToSelector:setHasSel], 229*1b3f573fSAndroid Build Coastguard Worker @"field: %@", name); 230*1b3f573fSAndroid Build Coastguard Worker } else { 231*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message3 instancesRespondToSelector:hasSel], @"field: %@", 232*1b3f573fSAndroid Build Coastguard Worker name); 233*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message3 instancesRespondToSelector:setHasSel], 234*1b3f573fSAndroid Build Coastguard Worker @"field: %@", name); 235*1b3f573fSAndroid Build Coastguard Worker } 236*1b3f573fSAndroid Build Coastguard Worker } 237*1b3f573fSAndroid Build Coastguard Worker 238*1b3f573fSAndroid Build Coastguard Worker // Repeated fields 239*1b3f573fSAndroid Build Coastguard Worker // - no has*/setHas* 240*1b3f573fSAndroid Build Coastguard Worker // - *Count 241*1b3f573fSAndroid Build Coastguard Worker 242*1b3f573fSAndroid Build Coastguard Worker for (NSString *name in names) { 243*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - hasRepeatedInt32Array/setHasRepeatedInt32Array: 244*1b3f573fSAndroid Build Coastguard Worker SEL hasSel = NSSelectorFromString( 245*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"hasRepeated%@Array", name]); 246*1b3f573fSAndroid Build Coastguard Worker SEL setHasSel = NSSelectorFromString( 247*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"setHasRepeated%@Array:", name]); 248*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message3 instancesRespondToSelector:hasSel], @"field: %@", 249*1b3f573fSAndroid Build Coastguard Worker name); 250*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message3 instancesRespondToSelector:setHasSel], 251*1b3f573fSAndroid Build Coastguard Worker @"field: %@", name); 252*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - repeatedInt32Array_Count 253*1b3f573fSAndroid Build Coastguard Worker SEL countSel = NSSelectorFromString( 254*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"repeated%@Array_Count", name]); 255*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue([Message3 instancesRespondToSelector:countSel], @"field: %@", 256*1b3f573fSAndroid Build Coastguard Worker name); 257*1b3f573fSAndroid Build Coastguard Worker } 258*1b3f573fSAndroid Build Coastguard Worker 259*1b3f573fSAndroid Build Coastguard Worker // OneOf fields - no has*/setHas* 260*1b3f573fSAndroid Build Coastguard Worker 261*1b3f573fSAndroid Build Coastguard Worker for (NSString *name in names) { 262*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - hasOneofInt32/setHasOneofInt32: 263*1b3f573fSAndroid Build Coastguard Worker SEL hasSel = 264*1b3f573fSAndroid Build Coastguard Worker NSSelectorFromString([NSString stringWithFormat:@"hasOneof%@", name]); 265*1b3f573fSAndroid Build Coastguard Worker SEL setHasSel = NSSelectorFromString( 266*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"setHasOneof%@:", name]); 267*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message3 instancesRespondToSelector:hasSel], @"field: %@", 268*1b3f573fSAndroid Build Coastguard Worker name); 269*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message3 instancesRespondToSelector:setHasSel], 270*1b3f573fSAndroid Build Coastguard Worker @"field: %@", name); 271*1b3f573fSAndroid Build Coastguard Worker } 272*1b3f573fSAndroid Build Coastguard Worker 273*1b3f573fSAndroid Build Coastguard Worker // Single Optional fields 274*1b3f573fSAndroid Build Coastguard Worker // - has*/setHas* thanks to the optional keyword in proto3, they exist 275*1b3f573fSAndroid Build Coastguard Worker // for primitive types. 276*1b3f573fSAndroid Build Coastguard Worker // - has*/setHas* valid for Message. 277*1b3f573fSAndroid Build Coastguard Worker 278*1b3f573fSAndroid Build Coastguard Worker for (NSString *name in names) { 279*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - hasOptionalInt32/setHasOptionalInt32: 280*1b3f573fSAndroid Build Coastguard Worker SEL hasSel = NSSelectorFromString( 281*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"hasOptional%@", name]); 282*1b3f573fSAndroid Build Coastguard Worker SEL setHasSel = NSSelectorFromString( 283*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"setHasOptional%@:", name]); 284*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue([Message3Optional instancesRespondToSelector:hasSel], @"field: %@", 285*1b3f573fSAndroid Build Coastguard Worker name); 286*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue([Message3Optional instancesRespondToSelector:setHasSel], 287*1b3f573fSAndroid Build Coastguard Worker @"field: %@", name); 288*1b3f573fSAndroid Build Coastguard Worker } 289*1b3f573fSAndroid Build Coastguard Worker 290*1b3f573fSAndroid Build Coastguard Worker // map<> fields 291*1b3f573fSAndroid Build Coastguard Worker // - no has*/setHas* 292*1b3f573fSAndroid Build Coastguard Worker // - *Count 293*1b3f573fSAndroid Build Coastguard Worker 294*1b3f573fSAndroid Build Coastguard Worker NSArray *mapNames = @[ 295*1b3f573fSAndroid Build Coastguard Worker @"Int32Int32", 296*1b3f573fSAndroid Build Coastguard Worker @"Int64Int64", 297*1b3f573fSAndroid Build Coastguard Worker @"Uint32Uint32", 298*1b3f573fSAndroid Build Coastguard Worker @"Uint64Uint64", 299*1b3f573fSAndroid Build Coastguard Worker @"Sint32Sint32", 300*1b3f573fSAndroid Build Coastguard Worker @"Sint64Sint64", 301*1b3f573fSAndroid Build Coastguard Worker @"Fixed32Fixed32", 302*1b3f573fSAndroid Build Coastguard Worker @"Fixed64Fixed64", 303*1b3f573fSAndroid Build Coastguard Worker @"Sfixed32Sfixed32", 304*1b3f573fSAndroid Build Coastguard Worker @"Sfixed64Sfixed64", 305*1b3f573fSAndroid Build Coastguard Worker @"Int32Float", 306*1b3f573fSAndroid Build Coastguard Worker @"Int32Double", 307*1b3f573fSAndroid Build Coastguard Worker @"BoolBool", 308*1b3f573fSAndroid Build Coastguard Worker @"StringString", 309*1b3f573fSAndroid Build Coastguard Worker @"StringBytes", 310*1b3f573fSAndroid Build Coastguard Worker @"StringMessage", 311*1b3f573fSAndroid Build Coastguard Worker @"Int32Bytes", 312*1b3f573fSAndroid Build Coastguard Worker @"Int32Enum", 313*1b3f573fSAndroid Build Coastguard Worker @"Int32Message", 314*1b3f573fSAndroid Build Coastguard Worker ]; 315*1b3f573fSAndroid Build Coastguard Worker 316*1b3f573fSAndroid Build Coastguard Worker for (NSString *name in mapNames) { 317*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - hasMapInt32Int32/setHasMapInt32Int32: 318*1b3f573fSAndroid Build Coastguard Worker SEL hasSel = NSSelectorFromString( 319*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"hasMap%@", name]); 320*1b3f573fSAndroid Build Coastguard Worker SEL setHasSel = NSSelectorFromString( 321*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"setHasMap%@:", name]); 322*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message3 instancesRespondToSelector:hasSel], @"field: %@", 323*1b3f573fSAndroid Build Coastguard Worker name); 324*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse([Message3 instancesRespondToSelector:setHasSel], 325*1b3f573fSAndroid Build Coastguard Worker @"field: %@", name); 326*1b3f573fSAndroid Build Coastguard Worker // build the selector, i.e. - mapInt32Int32Count 327*1b3f573fSAndroid Build Coastguard Worker SEL countSel = NSSelectorFromString( 328*1b3f573fSAndroid Build Coastguard Worker [NSString stringWithFormat:@"map%@_Count", name]); 329*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue([Message3 instancesRespondToSelector:countSel], @"field: %@", 330*1b3f573fSAndroid Build Coastguard Worker name); 331*1b3f573fSAndroid Build Coastguard Worker } 332*1b3f573fSAndroid Build Coastguard Worker} 333*1b3f573fSAndroid Build Coastguard Worker 334*1b3f573fSAndroid Build Coastguard Worker- (void)testProto2SingleFieldHasBehavior { 335*1b3f573fSAndroid Build Coastguard Worker // 336*1b3f573fSAndroid Build Coastguard Worker // Setting to any value including the default value (0) should result has* 337*1b3f573fSAndroid Build Coastguard Worker // being true. 338*1b3f573fSAndroid Build Coastguard Worker // 339*1b3f573fSAndroid Build Coastguard Worker 340*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE PROTO2_TEST_HAS_FIELD(FIELD, NON_ZERO_VALUE, ZERO_VALUE) 341*1b3f573fSAndroid Build Coastguard Worker//% { // optional##FIELD :: NON_ZERO_VALUE 342*1b3f573fSAndroid Build Coastguard Worker//% Message2 *msg = [[Message2 alloc] init]; 343*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(msg.hasOptional##FIELD); 344*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD)); 345*1b3f573fSAndroid Build Coastguard Worker//% msg.optional##FIELD = NON_ZERO_VALUE; 346*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertTrue(msg.hasOptional##FIELD); 347*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD)); 348*1b3f573fSAndroid Build Coastguard Worker//% [msg release]; 349*1b3f573fSAndroid Build Coastguard Worker//% } 350*1b3f573fSAndroid Build Coastguard Worker//% { // optional##FIELD :: ZERO_VALUE 351*1b3f573fSAndroid Build Coastguard Worker//% Message2 *msg = [[Message2 alloc] init]; 352*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(msg.hasOptional##FIELD); 353*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD)); 354*1b3f573fSAndroid Build Coastguard Worker//% msg.optional##FIELD = ZERO_VALUE; 355*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertTrue(msg.hasOptional##FIELD); 356*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD)); 357*1b3f573fSAndroid Build Coastguard Worker//% [msg release]; 358*1b3f573fSAndroid Build Coastguard Worker//% } 359*1b3f573fSAndroid Build Coastguard Worker//% 360*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE PROTO2_TEST_CLEAR_FIELD_WITH_NIL(FIELD, VALUE) 361*1b3f573fSAndroid Build Coastguard Worker//% { // optional##FIELD 362*1b3f573fSAndroid Build Coastguard Worker//% Message2 *msg = [[Message2 alloc] init]; 363*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD)); 364*1b3f573fSAndroid Build Coastguard Worker//% msg.optional##FIELD = VALUE; 365*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD)); 366*1b3f573fSAndroid Build Coastguard Worker//% msg.optional##FIELD = nil; 367*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD)); 368*1b3f573fSAndroid Build Coastguard Worker//% [msg release]; 369*1b3f573fSAndroid Build Coastguard Worker//% } 370*1b3f573fSAndroid Build Coastguard Worker//% 371*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE PROTO2_TEST_HAS_FIELDS() 372*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Int32, 1, 0) 373*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Int64, 1, 0) 374*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Uint32, 1, 0) 375*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Uint64, 1, 0) 376*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Sint32, 1, 0) 377*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Sint64, 1, 0) 378*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Fixed32, 1, 0) 379*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Fixed64, 1, 0) 380*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Sfixed32, 1, 0) 381*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Sfixed64, 1, 0) 382*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Float, 1.0f, 0.0f) 383*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Double, 1.0, 0.0) 384*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Bool, YES, NO) 385*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(String, @"foo", @"") 386*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding], [NSData data]) 387*1b3f573fSAndroid Build Coastguard Worker//% // 388*1b3f573fSAndroid Build Coastguard Worker//% // Test doesn't apply to optionalGroup/optionalMessage. 389*1b3f573fSAndroid Build Coastguard Worker//% // 390*1b3f573fSAndroid Build Coastguard Worker//% 391*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_HAS_FIELD(Enum, Message2_Enum_Bar, Message2_Enum_Foo) 392*1b3f573fSAndroid Build Coastguard Worker//% // 393*1b3f573fSAndroid Build Coastguard Worker//% // Nil can also be used to clear strings, bytes, groups, and messages. 394*1b3f573fSAndroid Build Coastguard Worker//% // 395*1b3f573fSAndroid Build Coastguard Worker//% 396*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(String, @"foo") 397*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding]) 398*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Group, [Message2_OptionalGroup message]) 399*1b3f573fSAndroid Build Coastguard Worker//%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Message, [Message2 message]) 400*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND PROTO2_TEST_HAS_FIELDS() 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 { // optionalInt32 :: 1 405*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 406*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalInt32); 407*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt32)); 408*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt32 = 1; 409*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalInt32); 410*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt32)); 411*1b3f573fSAndroid Build Coastguard Worker [msg release]; 412*1b3f573fSAndroid Build Coastguard Worker } 413*1b3f573fSAndroid Build Coastguard Worker { // optionalInt32 :: 0 414*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 415*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalInt32); 416*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt32)); 417*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt32 = 0; 418*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalInt32); 419*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt32)); 420*1b3f573fSAndroid Build Coastguard Worker [msg release]; 421*1b3f573fSAndroid Build Coastguard Worker } 422*1b3f573fSAndroid Build Coastguard Worker 423*1b3f573fSAndroid Build Coastguard Worker { // optionalInt64 :: 1 424*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 425*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalInt64); 426*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt64)); 427*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt64 = 1; 428*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalInt64); 429*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt64)); 430*1b3f573fSAndroid Build Coastguard Worker [msg release]; 431*1b3f573fSAndroid Build Coastguard Worker } 432*1b3f573fSAndroid Build Coastguard Worker { // optionalInt64 :: 0 433*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 434*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalInt64); 435*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt64)); 436*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt64 = 0; 437*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalInt64); 438*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalInt64)); 439*1b3f573fSAndroid Build Coastguard Worker [msg release]; 440*1b3f573fSAndroid Build Coastguard Worker } 441*1b3f573fSAndroid Build Coastguard Worker 442*1b3f573fSAndroid Build Coastguard Worker { // optionalUint32 :: 1 443*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 444*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalUint32); 445*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint32)); 446*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint32 = 1; 447*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalUint32); 448*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint32)); 449*1b3f573fSAndroid Build Coastguard Worker [msg release]; 450*1b3f573fSAndroid Build Coastguard Worker } 451*1b3f573fSAndroid Build Coastguard Worker { // optionalUint32 :: 0 452*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 453*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalUint32); 454*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint32)); 455*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint32 = 0; 456*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalUint32); 457*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint32)); 458*1b3f573fSAndroid Build Coastguard Worker [msg release]; 459*1b3f573fSAndroid Build Coastguard Worker } 460*1b3f573fSAndroid Build Coastguard Worker 461*1b3f573fSAndroid Build Coastguard Worker { // optionalUint64 :: 1 462*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 463*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalUint64); 464*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint64)); 465*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint64 = 1; 466*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalUint64); 467*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint64)); 468*1b3f573fSAndroid Build Coastguard Worker [msg release]; 469*1b3f573fSAndroid Build Coastguard Worker } 470*1b3f573fSAndroid Build Coastguard Worker { // optionalUint64 :: 0 471*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 472*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalUint64); 473*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint64)); 474*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint64 = 0; 475*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalUint64); 476*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalUint64)); 477*1b3f573fSAndroid Build Coastguard Worker [msg release]; 478*1b3f573fSAndroid Build Coastguard Worker } 479*1b3f573fSAndroid Build Coastguard Worker 480*1b3f573fSAndroid Build Coastguard Worker { // optionalSint32 :: 1 481*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 482*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalSint32); 483*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint32)); 484*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint32 = 1; 485*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalSint32); 486*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint32)); 487*1b3f573fSAndroid Build Coastguard Worker [msg release]; 488*1b3f573fSAndroid Build Coastguard Worker } 489*1b3f573fSAndroid Build Coastguard Worker { // optionalSint32 :: 0 490*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 491*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalSint32); 492*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint32)); 493*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint32 = 0; 494*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalSint32); 495*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint32)); 496*1b3f573fSAndroid Build Coastguard Worker [msg release]; 497*1b3f573fSAndroid Build Coastguard Worker } 498*1b3f573fSAndroid Build Coastguard Worker 499*1b3f573fSAndroid Build Coastguard Worker { // optionalSint64 :: 1 500*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 501*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalSint64); 502*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint64)); 503*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint64 = 1; 504*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalSint64); 505*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint64)); 506*1b3f573fSAndroid Build Coastguard Worker [msg release]; 507*1b3f573fSAndroid Build Coastguard Worker } 508*1b3f573fSAndroid Build Coastguard Worker { // optionalSint64 :: 0 509*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 510*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalSint64); 511*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint64)); 512*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint64 = 0; 513*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalSint64); 514*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSint64)); 515*1b3f573fSAndroid Build Coastguard Worker [msg release]; 516*1b3f573fSAndroid Build Coastguard Worker } 517*1b3f573fSAndroid Build Coastguard Worker 518*1b3f573fSAndroid Build Coastguard Worker { // optionalFixed32 :: 1 519*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 520*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalFixed32); 521*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed32)); 522*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed32 = 1; 523*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalFixed32); 524*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed32)); 525*1b3f573fSAndroid Build Coastguard Worker [msg release]; 526*1b3f573fSAndroid Build Coastguard Worker } 527*1b3f573fSAndroid Build Coastguard Worker { // optionalFixed32 :: 0 528*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 529*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalFixed32); 530*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed32)); 531*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed32 = 0; 532*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalFixed32); 533*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed32)); 534*1b3f573fSAndroid Build Coastguard Worker [msg release]; 535*1b3f573fSAndroid Build Coastguard Worker } 536*1b3f573fSAndroid Build Coastguard Worker 537*1b3f573fSAndroid Build Coastguard Worker { // optionalFixed64 :: 1 538*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 539*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalFixed64); 540*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed64)); 541*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed64 = 1; 542*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalFixed64); 543*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed64)); 544*1b3f573fSAndroid Build Coastguard Worker [msg release]; 545*1b3f573fSAndroid Build Coastguard Worker } 546*1b3f573fSAndroid Build Coastguard Worker { // optionalFixed64 :: 0 547*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 548*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalFixed64); 549*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed64)); 550*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed64 = 0; 551*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalFixed64); 552*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFixed64)); 553*1b3f573fSAndroid Build Coastguard Worker [msg release]; 554*1b3f573fSAndroid Build Coastguard Worker } 555*1b3f573fSAndroid Build Coastguard Worker 556*1b3f573fSAndroid Build Coastguard Worker { // optionalSfixed32 :: 1 557*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 558*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalSfixed32); 559*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed32)); 560*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed32 = 1; 561*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalSfixed32); 562*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed32)); 563*1b3f573fSAndroid Build Coastguard Worker [msg release]; 564*1b3f573fSAndroid Build Coastguard Worker } 565*1b3f573fSAndroid Build Coastguard Worker { // optionalSfixed32 :: 0 566*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 567*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalSfixed32); 568*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed32)); 569*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed32 = 0; 570*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalSfixed32); 571*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed32)); 572*1b3f573fSAndroid Build Coastguard Worker [msg release]; 573*1b3f573fSAndroid Build Coastguard Worker } 574*1b3f573fSAndroid Build Coastguard Worker 575*1b3f573fSAndroid Build Coastguard Worker { // optionalSfixed64 :: 1 576*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 577*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalSfixed64); 578*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed64)); 579*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed64 = 1; 580*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalSfixed64); 581*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed64)); 582*1b3f573fSAndroid Build Coastguard Worker [msg release]; 583*1b3f573fSAndroid Build Coastguard Worker } 584*1b3f573fSAndroid Build Coastguard Worker { // optionalSfixed64 :: 0 585*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 586*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalSfixed64); 587*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed64)); 588*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed64 = 0; 589*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalSfixed64); 590*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalSfixed64)); 591*1b3f573fSAndroid Build Coastguard Worker [msg release]; 592*1b3f573fSAndroid Build Coastguard Worker } 593*1b3f573fSAndroid Build Coastguard Worker 594*1b3f573fSAndroid Build Coastguard Worker { // optionalFloat :: 1.0f 595*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 596*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalFloat); 597*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFloat)); 598*1b3f573fSAndroid Build Coastguard Worker msg.optionalFloat = 1.0f; 599*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalFloat); 600*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFloat)); 601*1b3f573fSAndroid Build Coastguard Worker [msg release]; 602*1b3f573fSAndroid Build Coastguard Worker } 603*1b3f573fSAndroid Build Coastguard Worker { // optionalFloat :: 0.0f 604*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 605*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalFloat); 606*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFloat)); 607*1b3f573fSAndroid Build Coastguard Worker msg.optionalFloat = 0.0f; 608*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalFloat); 609*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalFloat)); 610*1b3f573fSAndroid Build Coastguard Worker [msg release]; 611*1b3f573fSAndroid Build Coastguard Worker } 612*1b3f573fSAndroid Build Coastguard Worker 613*1b3f573fSAndroid Build Coastguard Worker { // optionalDouble :: 1.0 614*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 615*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalDouble); 616*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalDouble)); 617*1b3f573fSAndroid Build Coastguard Worker msg.optionalDouble = 1.0; 618*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalDouble); 619*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalDouble)); 620*1b3f573fSAndroid Build Coastguard Worker [msg release]; 621*1b3f573fSAndroid Build Coastguard Worker } 622*1b3f573fSAndroid Build Coastguard Worker { // optionalDouble :: 0.0 623*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 624*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalDouble); 625*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalDouble)); 626*1b3f573fSAndroid Build Coastguard Worker msg.optionalDouble = 0.0; 627*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalDouble); 628*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalDouble)); 629*1b3f573fSAndroid Build Coastguard Worker [msg release]; 630*1b3f573fSAndroid Build Coastguard Worker } 631*1b3f573fSAndroid Build Coastguard Worker 632*1b3f573fSAndroid Build Coastguard Worker { // optionalBool :: YES 633*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 634*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalBool); 635*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBool)); 636*1b3f573fSAndroid Build Coastguard Worker msg.optionalBool = YES; 637*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalBool); 638*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBool)); 639*1b3f573fSAndroid Build Coastguard Worker [msg release]; 640*1b3f573fSAndroid Build Coastguard Worker } 641*1b3f573fSAndroid Build Coastguard Worker { // optionalBool :: NO 642*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 643*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalBool); 644*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBool)); 645*1b3f573fSAndroid Build Coastguard Worker msg.optionalBool = NO; 646*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalBool); 647*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBool)); 648*1b3f573fSAndroid Build Coastguard Worker [msg release]; 649*1b3f573fSAndroid Build Coastguard Worker } 650*1b3f573fSAndroid Build Coastguard Worker 651*1b3f573fSAndroid Build Coastguard Worker { // optionalString :: @"foo" 652*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 653*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalString); 654*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString)); 655*1b3f573fSAndroid Build Coastguard Worker msg.optionalString = @"foo"; 656*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalString); 657*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString)); 658*1b3f573fSAndroid Build Coastguard Worker [msg release]; 659*1b3f573fSAndroid Build Coastguard Worker } 660*1b3f573fSAndroid Build Coastguard Worker { // optionalString :: @"" 661*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 662*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalString); 663*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString)); 664*1b3f573fSAndroid Build Coastguard Worker msg.optionalString = @""; 665*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalString); 666*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString)); 667*1b3f573fSAndroid Build Coastguard Worker [msg release]; 668*1b3f573fSAndroid Build Coastguard Worker } 669*1b3f573fSAndroid Build Coastguard Worker 670*1b3f573fSAndroid Build Coastguard Worker { // optionalBytes :: [@"foo" dataUsingEncoding:NSUTF8StringEncoding] 671*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 672*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalBytes); 673*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes)); 674*1b3f573fSAndroid Build Coastguard Worker msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding]; 675*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalBytes); 676*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes)); 677*1b3f573fSAndroid Build Coastguard Worker [msg release]; 678*1b3f573fSAndroid Build Coastguard Worker } 679*1b3f573fSAndroid Build Coastguard Worker { // optionalBytes :: [NSData data] 680*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 681*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalBytes); 682*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes)); 683*1b3f573fSAndroid Build Coastguard Worker msg.optionalBytes = [NSData data]; 684*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalBytes); 685*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes)); 686*1b3f573fSAndroid Build Coastguard Worker [msg release]; 687*1b3f573fSAndroid Build Coastguard Worker } 688*1b3f573fSAndroid Build Coastguard Worker 689*1b3f573fSAndroid Build Coastguard Worker // 690*1b3f573fSAndroid Build Coastguard Worker // Test doesn't apply to optionalGroup/optionalMessage. 691*1b3f573fSAndroid Build Coastguard Worker // 692*1b3f573fSAndroid Build Coastguard Worker 693*1b3f573fSAndroid Build Coastguard Worker { // optionalEnum :: Message2_Enum_Bar 694*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 695*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalEnum); 696*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalEnum)); 697*1b3f573fSAndroid Build Coastguard Worker msg.optionalEnum = Message2_Enum_Bar; 698*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalEnum); 699*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalEnum)); 700*1b3f573fSAndroid Build Coastguard Worker [msg release]; 701*1b3f573fSAndroid Build Coastguard Worker } 702*1b3f573fSAndroid Build Coastguard Worker { // optionalEnum :: Message2_Enum_Foo 703*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 704*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.hasOptionalEnum); 705*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalEnum)); 706*1b3f573fSAndroid Build Coastguard Worker msg.optionalEnum = Message2_Enum_Foo; 707*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.hasOptionalEnum); 708*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalEnum)); 709*1b3f573fSAndroid Build Coastguard Worker [msg release]; 710*1b3f573fSAndroid Build Coastguard Worker } 711*1b3f573fSAndroid Build Coastguard Worker 712*1b3f573fSAndroid Build Coastguard Worker // 713*1b3f573fSAndroid Build Coastguard Worker // Nil can also be used to clear strings, bytes, groups, and messages. 714*1b3f573fSAndroid Build Coastguard Worker // 715*1b3f573fSAndroid Build Coastguard Worker 716*1b3f573fSAndroid Build Coastguard Worker { // optionalString 717*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 718*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString)); 719*1b3f573fSAndroid Build Coastguard Worker msg.optionalString = @"foo"; 720*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString)); 721*1b3f573fSAndroid Build Coastguard Worker msg.optionalString = nil; 722*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString)); 723*1b3f573fSAndroid Build Coastguard Worker [msg release]; 724*1b3f573fSAndroid Build Coastguard Worker } 725*1b3f573fSAndroid Build Coastguard Worker 726*1b3f573fSAndroid Build Coastguard Worker { // optionalBytes 727*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 728*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes)); 729*1b3f573fSAndroid Build Coastguard Worker msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding]; 730*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes)); 731*1b3f573fSAndroid Build Coastguard Worker msg.optionalBytes = nil; 732*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes)); 733*1b3f573fSAndroid Build Coastguard Worker [msg release]; 734*1b3f573fSAndroid Build Coastguard Worker } 735*1b3f573fSAndroid Build Coastguard Worker 736*1b3f573fSAndroid Build Coastguard Worker { // optionalGroup 737*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 738*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalGroup)); 739*1b3f573fSAndroid Build Coastguard Worker msg.optionalGroup = [Message2_OptionalGroup message]; 740*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalGroup)); 741*1b3f573fSAndroid Build Coastguard Worker msg.optionalGroup = nil; 742*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalGroup)); 743*1b3f573fSAndroid Build Coastguard Worker [msg release]; 744*1b3f573fSAndroid Build Coastguard Worker } 745*1b3f573fSAndroid Build Coastguard Worker 746*1b3f573fSAndroid Build Coastguard Worker { // optionalMessage 747*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 748*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalMessage)); 749*1b3f573fSAndroid Build Coastguard Worker msg.optionalMessage = [Message2 message]; 750*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalMessage)); 751*1b3f573fSAndroid Build Coastguard Worker msg.optionalMessage = nil; 752*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalMessage)); 753*1b3f573fSAndroid Build Coastguard Worker [msg release]; 754*1b3f573fSAndroid Build Coastguard Worker } 755*1b3f573fSAndroid Build Coastguard Worker 756*1b3f573fSAndroid Build Coastguard Worker// clang-format on 757*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND-END PROTO2_TEST_HAS_FIELDS() 758*1b3f573fSAndroid Build Coastguard Worker} 759*1b3f573fSAndroid Build Coastguard Worker 760*1b3f573fSAndroid Build Coastguard Worker- (void)testProto3SingleFieldHasBehavior { 761*1b3f573fSAndroid Build Coastguard Worker // 762*1b3f573fSAndroid Build Coastguard Worker // Setting to any value but the default value (0) should result has* 763*1b3f573fSAndroid Build Coastguard Worker // being true. When set to the default, shouldn't be true. 764*1b3f573fSAndroid Build Coastguard Worker // 765*1b3f573fSAndroid Build Coastguard Worker 766*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE PROTO3_TEST_HAS_FIELD(FIELD, NON_ZERO_VALUE, ZERO_VALUE) 767*1b3f573fSAndroid Build Coastguard Worker//% { // optional##FIELD 768*1b3f573fSAndroid Build Coastguard Worker//% Message3 *msg = [[Message3 alloc] init]; 769*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD)); 770*1b3f573fSAndroid Build Coastguard Worker//% msg.optional##FIELD = NON_ZERO_VALUE; 771*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD)); 772*1b3f573fSAndroid Build Coastguard Worker//% msg.optional##FIELD = ZERO_VALUE; 773*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD)); 774*1b3f573fSAndroid Build Coastguard Worker//% [msg release]; 775*1b3f573fSAndroid Build Coastguard Worker//% } 776*1b3f573fSAndroid Build Coastguard Worker//% 777*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE PROTO3_TEST_CLEAR_FIELD_WITH_NIL(FIELD, VALUE) 778*1b3f573fSAndroid Build Coastguard Worker//% { // optional##FIELD 779*1b3f573fSAndroid Build Coastguard Worker//% Message3 *msg = [[Message3 alloc] init]; 780*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD)); 781*1b3f573fSAndroid Build Coastguard Worker//% msg.optional##FIELD = VALUE; 782*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD)); 783*1b3f573fSAndroid Build Coastguard Worker//% msg.optional##FIELD = nil; 784*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD)); 785*1b3f573fSAndroid Build Coastguard Worker//% [msg release]; 786*1b3f573fSAndroid Build Coastguard Worker//% } 787*1b3f573fSAndroid Build Coastguard Worker//% 788*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE PROTO3_TEST_HAS_FIELDS() 789*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Int32, 1, 0) 790*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Int64, 1, 0) 791*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Uint32, 1, 0) 792*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Uint64, 1, 0) 793*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Sint32, 1, 0) 794*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Sint64, 1, 0) 795*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Fixed32, 1, 0) 796*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Fixed64, 1, 0) 797*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Sfixed32, 1, 0) 798*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Sfixed64, 1, 0) 799*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Float, 1.0f, 0.0f) 800*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Double, 1.0, 0.0) 801*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Bool, YES, NO) 802*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(String, @"foo", @"") 803*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding], [NSData data]) 804*1b3f573fSAndroid Build Coastguard Worker//% // 805*1b3f573fSAndroid Build Coastguard Worker//% // Test doesn't apply to optionalMessage (no groups in proto3). 806*1b3f573fSAndroid Build Coastguard Worker//% // 807*1b3f573fSAndroid Build Coastguard Worker//% 808*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_HAS_FIELD(Enum, Message3_Enum_Bar, Message3_Enum_Foo) 809*1b3f573fSAndroid Build Coastguard Worker//% // 810*1b3f573fSAndroid Build Coastguard Worker//% // Nil can also be used to clear strings, bytes, and messages (no groups in proto3). 811*1b3f573fSAndroid Build Coastguard Worker//% // 812*1b3f573fSAndroid Build Coastguard Worker//% 813*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_CLEAR_FIELD_WITH_NIL(String, @"foo") 814*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_CLEAR_FIELD_WITH_NIL(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding]) 815*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_CLEAR_FIELD_WITH_NIL(Message, [Message3 message]) 816*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND PROTO3_TEST_HAS_FIELDS() 817*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 818*1b3f573fSAndroid Build Coastguard Worker// clang-format off 819*1b3f573fSAndroid Build Coastguard Worker 820*1b3f573fSAndroid Build Coastguard Worker { // optionalInt32 821*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 822*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt32)); 823*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt32 = 1; 824*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt32)); 825*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt32 = 0; 826*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt32)); 827*1b3f573fSAndroid Build Coastguard Worker [msg release]; 828*1b3f573fSAndroid Build Coastguard Worker } 829*1b3f573fSAndroid Build Coastguard Worker 830*1b3f573fSAndroid Build Coastguard Worker { // optionalInt64 831*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 832*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt64)); 833*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt64 = 1; 834*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt64)); 835*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt64 = 0; 836*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalInt64)); 837*1b3f573fSAndroid Build Coastguard Worker [msg release]; 838*1b3f573fSAndroid Build Coastguard Worker } 839*1b3f573fSAndroid Build Coastguard Worker 840*1b3f573fSAndroid Build Coastguard Worker { // optionalUint32 841*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 842*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint32)); 843*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint32 = 1; 844*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint32)); 845*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint32 = 0; 846*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint32)); 847*1b3f573fSAndroid Build Coastguard Worker [msg release]; 848*1b3f573fSAndroid Build Coastguard Worker } 849*1b3f573fSAndroid Build Coastguard Worker 850*1b3f573fSAndroid Build Coastguard Worker { // optionalUint64 851*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 852*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint64)); 853*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint64 = 1; 854*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint64)); 855*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint64 = 0; 856*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalUint64)); 857*1b3f573fSAndroid Build Coastguard Worker [msg release]; 858*1b3f573fSAndroid Build Coastguard Worker } 859*1b3f573fSAndroid Build Coastguard Worker 860*1b3f573fSAndroid Build Coastguard Worker { // optionalSint32 861*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 862*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint32)); 863*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint32 = 1; 864*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint32)); 865*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint32 = 0; 866*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint32)); 867*1b3f573fSAndroid Build Coastguard Worker [msg release]; 868*1b3f573fSAndroid Build Coastguard Worker } 869*1b3f573fSAndroid Build Coastguard Worker 870*1b3f573fSAndroid Build Coastguard Worker { // optionalSint64 871*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 872*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint64)); 873*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint64 = 1; 874*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint64)); 875*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint64 = 0; 876*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSint64)); 877*1b3f573fSAndroid Build Coastguard Worker [msg release]; 878*1b3f573fSAndroid Build Coastguard Worker } 879*1b3f573fSAndroid Build Coastguard Worker 880*1b3f573fSAndroid Build Coastguard Worker { // optionalFixed32 881*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 882*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed32)); 883*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed32 = 1; 884*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed32)); 885*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed32 = 0; 886*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed32)); 887*1b3f573fSAndroid Build Coastguard Worker [msg release]; 888*1b3f573fSAndroid Build Coastguard Worker } 889*1b3f573fSAndroid Build Coastguard Worker 890*1b3f573fSAndroid Build Coastguard Worker { // optionalFixed64 891*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 892*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed64)); 893*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed64 = 1; 894*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed64)); 895*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed64 = 0; 896*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFixed64)); 897*1b3f573fSAndroid Build Coastguard Worker [msg release]; 898*1b3f573fSAndroid Build Coastguard Worker } 899*1b3f573fSAndroid Build Coastguard Worker 900*1b3f573fSAndroid Build Coastguard Worker { // optionalSfixed32 901*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 902*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed32)); 903*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed32 = 1; 904*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed32)); 905*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed32 = 0; 906*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed32)); 907*1b3f573fSAndroid Build Coastguard Worker [msg release]; 908*1b3f573fSAndroid Build Coastguard Worker } 909*1b3f573fSAndroid Build Coastguard Worker 910*1b3f573fSAndroid Build Coastguard Worker { // optionalSfixed64 911*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 912*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed64)); 913*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed64 = 1; 914*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed64)); 915*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed64 = 0; 916*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalSfixed64)); 917*1b3f573fSAndroid Build Coastguard Worker [msg release]; 918*1b3f573fSAndroid Build Coastguard Worker } 919*1b3f573fSAndroid Build Coastguard Worker 920*1b3f573fSAndroid Build Coastguard Worker { // optionalFloat 921*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 922*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFloat)); 923*1b3f573fSAndroid Build Coastguard Worker msg.optionalFloat = 1.0f; 924*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFloat)); 925*1b3f573fSAndroid Build Coastguard Worker msg.optionalFloat = 0.0f; 926*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalFloat)); 927*1b3f573fSAndroid Build Coastguard Worker [msg release]; 928*1b3f573fSAndroid Build Coastguard Worker } 929*1b3f573fSAndroid Build Coastguard Worker 930*1b3f573fSAndroid Build Coastguard Worker { // optionalDouble 931*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 932*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalDouble)); 933*1b3f573fSAndroid Build Coastguard Worker msg.optionalDouble = 1.0; 934*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalDouble)); 935*1b3f573fSAndroid Build Coastguard Worker msg.optionalDouble = 0.0; 936*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalDouble)); 937*1b3f573fSAndroid Build Coastguard Worker [msg release]; 938*1b3f573fSAndroid Build Coastguard Worker } 939*1b3f573fSAndroid Build Coastguard Worker 940*1b3f573fSAndroid Build Coastguard Worker { // optionalBool 941*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 942*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBool)); 943*1b3f573fSAndroid Build Coastguard Worker msg.optionalBool = YES; 944*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBool)); 945*1b3f573fSAndroid Build Coastguard Worker msg.optionalBool = NO; 946*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBool)); 947*1b3f573fSAndroid Build Coastguard Worker [msg release]; 948*1b3f573fSAndroid Build Coastguard Worker } 949*1b3f573fSAndroid Build Coastguard Worker 950*1b3f573fSAndroid Build Coastguard Worker { // optionalString 951*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 952*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString)); 953*1b3f573fSAndroid Build Coastguard Worker msg.optionalString = @"foo"; 954*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString)); 955*1b3f573fSAndroid Build Coastguard Worker msg.optionalString = @""; 956*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString)); 957*1b3f573fSAndroid Build Coastguard Worker [msg release]; 958*1b3f573fSAndroid Build Coastguard Worker } 959*1b3f573fSAndroid Build Coastguard Worker 960*1b3f573fSAndroid Build Coastguard Worker { // optionalBytes 961*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 962*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes)); 963*1b3f573fSAndroid Build Coastguard Worker msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding]; 964*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes)); 965*1b3f573fSAndroid Build Coastguard Worker msg.optionalBytes = [NSData data]; 966*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes)); 967*1b3f573fSAndroid Build Coastguard Worker [msg release]; 968*1b3f573fSAndroid Build Coastguard Worker } 969*1b3f573fSAndroid Build Coastguard Worker 970*1b3f573fSAndroid Build Coastguard Worker // 971*1b3f573fSAndroid Build Coastguard Worker // Test doesn't apply to optionalMessage (no groups in proto3). 972*1b3f573fSAndroid Build Coastguard Worker // 973*1b3f573fSAndroid Build Coastguard Worker 974*1b3f573fSAndroid Build Coastguard Worker { // optionalEnum 975*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 976*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalEnum)); 977*1b3f573fSAndroid Build Coastguard Worker msg.optionalEnum = Message3_Enum_Bar; 978*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalEnum)); 979*1b3f573fSAndroid Build Coastguard Worker msg.optionalEnum = Message3_Enum_Foo; 980*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalEnum)); 981*1b3f573fSAndroid Build Coastguard Worker [msg release]; 982*1b3f573fSAndroid Build Coastguard Worker } 983*1b3f573fSAndroid Build Coastguard Worker 984*1b3f573fSAndroid Build Coastguard Worker // 985*1b3f573fSAndroid Build Coastguard Worker // Nil can also be used to clear strings, bytes, and messages (no groups in proto3). 986*1b3f573fSAndroid Build Coastguard Worker // 987*1b3f573fSAndroid Build Coastguard Worker 988*1b3f573fSAndroid Build Coastguard Worker { // optionalString 989*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 990*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString)); 991*1b3f573fSAndroid Build Coastguard Worker msg.optionalString = @"foo"; 992*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString)); 993*1b3f573fSAndroid Build Coastguard Worker msg.optionalString = nil; 994*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString)); 995*1b3f573fSAndroid Build Coastguard Worker [msg release]; 996*1b3f573fSAndroid Build Coastguard Worker } 997*1b3f573fSAndroid Build Coastguard Worker 998*1b3f573fSAndroid Build Coastguard Worker { // optionalBytes 999*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 1000*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes)); 1001*1b3f573fSAndroid Build Coastguard Worker msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding]; 1002*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes)); 1003*1b3f573fSAndroid Build Coastguard Worker msg.optionalBytes = nil; 1004*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes)); 1005*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1006*1b3f573fSAndroid Build Coastguard Worker } 1007*1b3f573fSAndroid Build Coastguard Worker 1008*1b3f573fSAndroid Build Coastguard Worker { // optionalMessage 1009*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 1010*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalMessage)); 1011*1b3f573fSAndroid Build Coastguard Worker msg.optionalMessage = [Message3 message]; 1012*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalMessage)); 1013*1b3f573fSAndroid Build Coastguard Worker msg.optionalMessage = nil; 1014*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalMessage)); 1015*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1016*1b3f573fSAndroid Build Coastguard Worker } 1017*1b3f573fSAndroid Build Coastguard Worker 1018*1b3f573fSAndroid Build Coastguard Worker// clang-format on 1019*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND-END PROTO3_TEST_HAS_FIELDS() 1020*1b3f573fSAndroid Build Coastguard Worker} 1021*1b3f573fSAndroid Build Coastguard Worker 1022*1b3f573fSAndroid Build Coastguard Worker- (void)testProto3SingleOptionalFieldHasBehavior { 1023*1b3f573fSAndroid Build Coastguard Worker // 1024*1b3f573fSAndroid Build Coastguard Worker // Setting to any value including the default (0) should result in true. 1025*1b3f573fSAndroid Build Coastguard Worker // 1026*1b3f573fSAndroid Build Coastguard Worker 1027*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE PROTO3_TEST_OPTIONAL_HAS_FIELD(FIELD, NON_ZERO_VALUE, ZERO_VALUE) 1028*1b3f573fSAndroid Build Coastguard Worker//% { // optional##FIELD 1029*1b3f573fSAndroid Build Coastguard Worker//% Message3Optional *msg = [[Message3Optional alloc] init]; 1030*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_Optional##FIELD)); 1031*1b3f573fSAndroid Build Coastguard Worker//% msg.optional##FIELD = NON_ZERO_VALUE; 1032*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_Optional##FIELD)); 1033*1b3f573fSAndroid Build Coastguard Worker//% msg.hasOptional##FIELD = NO; 1034*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_Optional##FIELD)); 1035*1b3f573fSAndroid Build Coastguard Worker//% msg.optional##FIELD = ZERO_VALUE; 1036*1b3f573fSAndroid Build Coastguard Worker//% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_Optional##FIELD)); 1037*1b3f573fSAndroid Build Coastguard Worker//% [msg release]; 1038*1b3f573fSAndroid Build Coastguard Worker//% } 1039*1b3f573fSAndroid Build Coastguard Worker//% 1040*1b3f573fSAndroid Build Coastguard Worker//%PDDM-DEFINE PROTO3_TEST_OPTIONAL_HAS_FIELDS() 1041*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Int32, 1, 0) 1042*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Int64, 1, 0) 1043*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Uint32, 1, 0) 1044*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Uint64, 1, 0) 1045*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Sint32, 1, 0) 1046*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Sint64, 1, 0) 1047*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Fixed32, 1, 0) 1048*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Fixed64, 1, 0) 1049*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Sfixed32, 1, 0) 1050*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Sfixed64, 1, 0) 1051*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Float, 1.0f, 0.0f) 1052*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Double, 1.0, 0.0) 1053*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Bool, YES, NO) 1054*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(String, @"foo", @"") 1055*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding], [NSData data]) 1056*1b3f573fSAndroid Build Coastguard Worker//% // 1057*1b3f573fSAndroid Build Coastguard Worker//% // Test doesn't apply to optionalMessage (no groups in proto3). 1058*1b3f573fSAndroid Build Coastguard Worker//% // 1059*1b3f573fSAndroid Build Coastguard Worker//% 1060*1b3f573fSAndroid Build Coastguard Worker//%PROTO3_TEST_OPTIONAL_HAS_FIELD(Enum, Message3Optional_Enum_Bar, Message3Optional_Enum_Foo) 1061*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND PROTO3_TEST_OPTIONAL_HAS_FIELDS() 1062*1b3f573fSAndroid Build Coastguard Worker// This block of code is generated, do not edit it directly. 1063*1b3f573fSAndroid Build Coastguard Worker// clang-format off 1064*1b3f573fSAndroid Build Coastguard Worker 1065*1b3f573fSAndroid Build Coastguard Worker { // optionalInt32 1066*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1067*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalInt32)); 1068*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt32 = 1; 1069*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalInt32)); 1070*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalInt32 = NO; 1071*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalInt32)); 1072*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt32 = 0; 1073*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalInt32)); 1074*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1075*1b3f573fSAndroid Build Coastguard Worker } 1076*1b3f573fSAndroid Build Coastguard Worker 1077*1b3f573fSAndroid Build Coastguard Worker { // optionalInt64 1078*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1079*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalInt64)); 1080*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt64 = 1; 1081*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalInt64)); 1082*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalInt64 = NO; 1083*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalInt64)); 1084*1b3f573fSAndroid Build Coastguard Worker msg.optionalInt64 = 0; 1085*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalInt64)); 1086*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1087*1b3f573fSAndroid Build Coastguard Worker } 1088*1b3f573fSAndroid Build Coastguard Worker 1089*1b3f573fSAndroid Build Coastguard Worker { // optionalUint32 1090*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1091*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalUint32)); 1092*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint32 = 1; 1093*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalUint32)); 1094*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalUint32 = NO; 1095*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalUint32)); 1096*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint32 = 0; 1097*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalUint32)); 1098*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1099*1b3f573fSAndroid Build Coastguard Worker } 1100*1b3f573fSAndroid Build Coastguard Worker 1101*1b3f573fSAndroid Build Coastguard Worker { // optionalUint64 1102*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1103*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalUint64)); 1104*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint64 = 1; 1105*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalUint64)); 1106*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalUint64 = NO; 1107*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalUint64)); 1108*1b3f573fSAndroid Build Coastguard Worker msg.optionalUint64 = 0; 1109*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalUint64)); 1110*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1111*1b3f573fSAndroid Build Coastguard Worker } 1112*1b3f573fSAndroid Build Coastguard Worker 1113*1b3f573fSAndroid Build Coastguard Worker { // optionalSint32 1114*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1115*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSint32)); 1116*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint32 = 1; 1117*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSint32)); 1118*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalSint32 = NO; 1119*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSint32)); 1120*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint32 = 0; 1121*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSint32)); 1122*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1123*1b3f573fSAndroid Build Coastguard Worker } 1124*1b3f573fSAndroid Build Coastguard Worker 1125*1b3f573fSAndroid Build Coastguard Worker { // optionalSint64 1126*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1127*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSint64)); 1128*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint64 = 1; 1129*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSint64)); 1130*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalSint64 = NO; 1131*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSint64)); 1132*1b3f573fSAndroid Build Coastguard Worker msg.optionalSint64 = 0; 1133*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSint64)); 1134*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1135*1b3f573fSAndroid Build Coastguard Worker } 1136*1b3f573fSAndroid Build Coastguard Worker 1137*1b3f573fSAndroid Build Coastguard Worker { // optionalFixed32 1138*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1139*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFixed32)); 1140*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed32 = 1; 1141*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFixed32)); 1142*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalFixed32 = NO; 1143*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFixed32)); 1144*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed32 = 0; 1145*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFixed32)); 1146*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1147*1b3f573fSAndroid Build Coastguard Worker } 1148*1b3f573fSAndroid Build Coastguard Worker 1149*1b3f573fSAndroid Build Coastguard Worker { // optionalFixed64 1150*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1151*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFixed64)); 1152*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed64 = 1; 1153*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFixed64)); 1154*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalFixed64 = NO; 1155*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFixed64)); 1156*1b3f573fSAndroid Build Coastguard Worker msg.optionalFixed64 = 0; 1157*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFixed64)); 1158*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1159*1b3f573fSAndroid Build Coastguard Worker } 1160*1b3f573fSAndroid Build Coastguard Worker 1161*1b3f573fSAndroid Build Coastguard Worker { // optionalSfixed32 1162*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1163*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSfixed32)); 1164*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed32 = 1; 1165*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSfixed32)); 1166*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalSfixed32 = NO; 1167*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSfixed32)); 1168*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed32 = 0; 1169*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSfixed32)); 1170*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1171*1b3f573fSAndroid Build Coastguard Worker } 1172*1b3f573fSAndroid Build Coastguard Worker 1173*1b3f573fSAndroid Build Coastguard Worker { // optionalSfixed64 1174*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1175*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSfixed64)); 1176*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed64 = 1; 1177*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSfixed64)); 1178*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalSfixed64 = NO; 1179*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSfixed64)); 1180*1b3f573fSAndroid Build Coastguard Worker msg.optionalSfixed64 = 0; 1181*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalSfixed64)); 1182*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1183*1b3f573fSAndroid Build Coastguard Worker } 1184*1b3f573fSAndroid Build Coastguard Worker 1185*1b3f573fSAndroid Build Coastguard Worker { // optionalFloat 1186*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1187*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFloat)); 1188*1b3f573fSAndroid Build Coastguard Worker msg.optionalFloat = 1.0f; 1189*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFloat)); 1190*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalFloat = NO; 1191*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFloat)); 1192*1b3f573fSAndroid Build Coastguard Worker msg.optionalFloat = 0.0f; 1193*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalFloat)); 1194*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1195*1b3f573fSAndroid Build Coastguard Worker } 1196*1b3f573fSAndroid Build Coastguard Worker 1197*1b3f573fSAndroid Build Coastguard Worker { // optionalDouble 1198*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1199*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalDouble)); 1200*1b3f573fSAndroid Build Coastguard Worker msg.optionalDouble = 1.0; 1201*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalDouble)); 1202*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalDouble = NO; 1203*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalDouble)); 1204*1b3f573fSAndroid Build Coastguard Worker msg.optionalDouble = 0.0; 1205*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalDouble)); 1206*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1207*1b3f573fSAndroid Build Coastguard Worker } 1208*1b3f573fSAndroid Build Coastguard Worker 1209*1b3f573fSAndroid Build Coastguard Worker { // optionalBool 1210*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1211*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalBool)); 1212*1b3f573fSAndroid Build Coastguard Worker msg.optionalBool = YES; 1213*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalBool)); 1214*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalBool = NO; 1215*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalBool)); 1216*1b3f573fSAndroid Build Coastguard Worker msg.optionalBool = NO; 1217*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalBool)); 1218*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1219*1b3f573fSAndroid Build Coastguard Worker } 1220*1b3f573fSAndroid Build Coastguard Worker 1221*1b3f573fSAndroid Build Coastguard Worker { // optionalString 1222*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1223*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalString)); 1224*1b3f573fSAndroid Build Coastguard Worker msg.optionalString = @"foo"; 1225*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalString)); 1226*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalString = NO; 1227*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalString)); 1228*1b3f573fSAndroid Build Coastguard Worker msg.optionalString = @""; 1229*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalString)); 1230*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1231*1b3f573fSAndroid Build Coastguard Worker } 1232*1b3f573fSAndroid Build Coastguard Worker 1233*1b3f573fSAndroid Build Coastguard Worker { // optionalBytes 1234*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1235*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalBytes)); 1236*1b3f573fSAndroid Build Coastguard Worker msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding]; 1237*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalBytes)); 1238*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalBytes = NO; 1239*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalBytes)); 1240*1b3f573fSAndroid Build Coastguard Worker msg.optionalBytes = [NSData data]; 1241*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalBytes)); 1242*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1243*1b3f573fSAndroid Build Coastguard Worker } 1244*1b3f573fSAndroid Build Coastguard Worker 1245*1b3f573fSAndroid Build Coastguard Worker // 1246*1b3f573fSAndroid Build Coastguard Worker // Test doesn't apply to optionalMessage (no groups in proto3). 1247*1b3f573fSAndroid Build Coastguard Worker // 1248*1b3f573fSAndroid Build Coastguard Worker 1249*1b3f573fSAndroid Build Coastguard Worker { // optionalEnum 1250*1b3f573fSAndroid Build Coastguard Worker Message3Optional *msg = [[Message3Optional alloc] init]; 1251*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalEnum)); 1252*1b3f573fSAndroid Build Coastguard Worker msg.optionalEnum = Message3Optional_Enum_Bar; 1253*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalEnum)); 1254*1b3f573fSAndroid Build Coastguard Worker msg.hasOptionalEnum = NO; 1255*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalEnum)); 1256*1b3f573fSAndroid Build Coastguard Worker msg.optionalEnum = Message3Optional_Enum_Foo; 1257*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3Optional_FieldNumber_OptionalEnum)); 1258*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1259*1b3f573fSAndroid Build Coastguard Worker } 1260*1b3f573fSAndroid Build Coastguard Worker 1261*1b3f573fSAndroid Build Coastguard Worker// clang-format on 1262*1b3f573fSAndroid Build Coastguard Worker//%PDDM-EXPAND-END PROTO3_TEST_OPTIONAL_HAS_FIELDS() 1263*1b3f573fSAndroid Build Coastguard Worker} 1264*1b3f573fSAndroid Build Coastguard Worker 1265*1b3f573fSAndroid Build Coastguard Worker- (void)testAccessingProto2UnknownEnumValues { 1266*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 1267*1b3f573fSAndroid Build Coastguard Worker 1268*1b3f573fSAndroid Build Coastguard Worker // Set it to something non zero, try and confirm it doesn't change. 1269*1b3f573fSAndroid Build Coastguard Worker 1270*1b3f573fSAndroid Build Coastguard Worker msg.optionalEnum = Message2_Enum_Bar; 1271*1b3f573fSAndroid Build Coastguard Worker XCTAssertThrowsSpecificNamed(msg.optionalEnum = 666, NSException, 1272*1b3f573fSAndroid Build Coastguard Worker NSInvalidArgumentException); 1273*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.optionalEnum, Message2_Enum_Bar); 1274*1b3f573fSAndroid Build Coastguard Worker 1275*1b3f573fSAndroid Build Coastguard Worker msg.oneofEnum = Message2_Enum_Bar; 1276*1b3f573fSAndroid Build Coastguard Worker XCTAssertThrowsSpecificNamed(msg.oneofEnum = 666, NSException, 1277*1b3f573fSAndroid Build Coastguard Worker NSInvalidArgumentException); 1278*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Bar); 1279*1b3f573fSAndroid Build Coastguard Worker 1280*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1281*1b3f573fSAndroid Build Coastguard Worker} 1282*1b3f573fSAndroid Build Coastguard Worker 1283*1b3f573fSAndroid Build Coastguard Worker- (void)testAccessingProto3UnknownEnumValues { 1284*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 1285*1b3f573fSAndroid Build Coastguard Worker 1286*1b3f573fSAndroid Build Coastguard Worker // Set it to something non zero, try and confirm it doesn't change. 1287*1b3f573fSAndroid Build Coastguard Worker 1288*1b3f573fSAndroid Build Coastguard Worker msg.optionalEnum = Message3_Enum_Bar; 1289*1b3f573fSAndroid Build Coastguard Worker XCTAssertThrowsSpecificNamed(msg.optionalEnum = 666, NSException, 1290*1b3f573fSAndroid Build Coastguard Worker NSInvalidArgumentException); 1291*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.optionalEnum, Message3_Enum_Bar); 1292*1b3f573fSAndroid Build Coastguard Worker 1293*1b3f573fSAndroid Build Coastguard Worker msg.oneofEnum = Message3_Enum_Bar; 1294*1b3f573fSAndroid Build Coastguard Worker XCTAssertThrowsSpecificNamed(msg.oneofEnum = 666, NSException, 1295*1b3f573fSAndroid Build Coastguard Worker NSInvalidArgumentException); 1296*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Bar); 1297*1b3f573fSAndroid Build Coastguard Worker 1298*1b3f573fSAndroid Build Coastguard Worker // Set via raw api to confirm it works. 1299*1b3f573fSAndroid Build Coastguard Worker 1300*1b3f573fSAndroid Build Coastguard Worker SetMessage3_OptionalEnum_RawValue(msg, 666); 1301*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.optionalEnum, 1302*1b3f573fSAndroid Build Coastguard Worker Message3_Enum_GPBUnrecognizedEnumeratorValue); 1303*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(Message3_OptionalEnum_RawValue(msg), 666); 1304*1b3f573fSAndroid Build Coastguard Worker 1305*1b3f573fSAndroid Build Coastguard Worker SetMessage3_OneofEnum_RawValue(msg, 666); 1306*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_GPBUnrecognizedEnumeratorValue); 1307*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(Message3_OneofEnum_RawValue(msg), 666); 1308*1b3f573fSAndroid Build Coastguard Worker 1309*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1310*1b3f573fSAndroid Build Coastguard Worker} 1311*1b3f573fSAndroid Build Coastguard Worker 1312*1b3f573fSAndroid Build Coastguard Worker- (void)testProto2OneofBasicBehaviors { 1313*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 1314*1b3f573fSAndroid Build Coastguard Worker 1315*1b3f573fSAndroid Build Coastguard Worker NSString *oneofStringDefault = @"string"; 1316*1b3f573fSAndroid Build Coastguard Worker NSData *oneofBytesDefault = [@"data" dataUsingEncoding:NSUTF8StringEncoding]; 1317*1b3f573fSAndroid Build Coastguard Worker 1318*1b3f573fSAndroid Build Coastguard Worker // Nothing set. 1319*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); 1320*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1321*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1322*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1323*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1324*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1325*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1326*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1327*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1328*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1329*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1330*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1331*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1332*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1333*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1334*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1335*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1336*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1337*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1338*1b3f573fSAndroid Build Coastguard Worker 1339*1b3f573fSAndroid Build Coastguard Worker // Set, check the case, check everyone has default but the one, confirm case 1340*1b3f573fSAndroid Build Coastguard Worker // didn't change. 1341*1b3f573fSAndroid Build Coastguard Worker 1342*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt32 = 1; 1343*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofInt32); 1344*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 1); 1345*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1346*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1347*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1348*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1349*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1350*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1351*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1352*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1353*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1354*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1355*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1356*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1357*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1358*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1359*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1360*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1361*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1362*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofInt32); 1363*1b3f573fSAndroid Build Coastguard Worker 1364*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt64 = 2; 1365*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofInt64); 1366*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1367*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 2); 1368*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1369*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1370*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1371*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1372*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1373*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1374*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1375*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1376*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1377*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1378*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1379*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1380*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1381*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1382*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1383*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1384*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofInt64); 1385*1b3f573fSAndroid Build Coastguard Worker 1386*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint32 = 3; 1387*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofUint32); 1388*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1389*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1390*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 3U); 1391*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1392*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1393*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1394*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1395*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1396*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1397*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1398*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1399*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1400*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1401*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1402*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1403*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1404*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1405*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1406*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofUint32); 1407*1b3f573fSAndroid Build Coastguard Worker 1408*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint64 = 4; 1409*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofUint64); 1410*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1411*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1412*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1413*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 4U); 1414*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1415*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1416*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1417*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1418*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1419*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1420*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1421*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1422*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1423*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1424*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1425*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1426*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1427*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1428*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofUint64); 1429*1b3f573fSAndroid Build Coastguard Worker 1430*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint32 = 5; 1431*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSint32); 1432*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1433*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1434*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1435*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1436*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 5); 1437*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1438*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1439*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1440*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1441*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1442*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1443*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1444*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1445*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1446*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1447*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1448*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1449*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1450*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSint32); 1451*1b3f573fSAndroid Build Coastguard Worker 1452*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint64 = 6; 1453*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSint64); 1454*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1455*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1456*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1457*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1458*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1459*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 6); 1460*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1461*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1462*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1463*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1464*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1465*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1466*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1467*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1468*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1469*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1470*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1471*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1472*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSint64); 1473*1b3f573fSAndroid Build Coastguard Worker 1474*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed32 = 7; 1475*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFixed32); 1476*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1477*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1478*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1479*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1480*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1481*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1482*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 7U); 1483*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1484*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1485*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1486*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1487*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1488*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1489*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1490*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1491*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1492*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1493*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1494*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFixed32); 1495*1b3f573fSAndroid Build Coastguard Worker 1496*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed64 = 8; 1497*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFixed64); 1498*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1499*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1500*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1501*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1502*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1503*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1504*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1505*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 8U); 1506*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1507*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1508*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1509*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1510*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1511*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1512*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1513*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1514*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1515*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1516*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFixed64); 1517*1b3f573fSAndroid Build Coastguard Worker 1518*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed32 = 9; 1519*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSfixed32); 1520*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1521*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1522*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1523*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1524*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1525*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1526*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1527*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1528*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 9); 1529*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1530*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1531*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1532*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1533*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1534*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1535*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1536*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1537*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1538*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSfixed32); 1539*1b3f573fSAndroid Build Coastguard Worker 1540*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed64 = 10; 1541*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSfixed64); 1542*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1543*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1544*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1545*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1546*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1547*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1548*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1549*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1550*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1551*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 10); 1552*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1553*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1554*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1555*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1556*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1557*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1558*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1559*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1560*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofSfixed64); 1561*1b3f573fSAndroid Build Coastguard Worker 1562*1b3f573fSAndroid Build Coastguard Worker msg.oneofFloat = 11.0f; 1563*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFloat); 1564*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1565*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1566*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1567*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1568*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1569*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1570*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1571*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1572*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1573*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1574*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 11.0f); 1575*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1576*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1577*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1578*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1579*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1580*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1581*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1582*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofFloat); 1583*1b3f573fSAndroid Build Coastguard Worker 1584*1b3f573fSAndroid Build Coastguard Worker msg.oneofDouble = 12.0; 1585*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofDouble); 1586*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1587*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1588*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1589*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1590*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1591*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1592*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1593*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1594*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1595*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1596*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1597*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 12.0); 1598*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1599*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1600*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1601*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1602*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1603*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1604*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofDouble); 1605*1b3f573fSAndroid Build Coastguard Worker 1606*1b3f573fSAndroid Build Coastguard Worker msg.oneofBool = NO; 1607*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofBool); 1608*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1609*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1610*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1611*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1612*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1613*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1614*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1615*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1616*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1617*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1618*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1619*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1620*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 1621*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1622*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1623*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1624*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1625*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1626*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofBool); 1627*1b3f573fSAndroid Build Coastguard Worker 1628*1b3f573fSAndroid Build Coastguard Worker msg.oneofString = @"foo"; 1629*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofString); 1630*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1631*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1632*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1633*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1634*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1635*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1636*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1637*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1638*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1639*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1640*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1641*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1642*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1643*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, @"foo"); 1644*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1645*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1646*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1647*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1648*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofString); 1649*1b3f573fSAndroid Build Coastguard Worker 1650*1b3f573fSAndroid Build Coastguard Worker msg.oneofBytes = [@"bar" dataUsingEncoding:NSUTF8StringEncoding]; 1651*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofBytes); 1652*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1653*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1654*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1655*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1656*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1657*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1658*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1659*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1660*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1661*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1662*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1663*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1664*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1665*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1666*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, 1667*1b3f573fSAndroid Build Coastguard Worker [@"bar" dataUsingEncoding:NSUTF8StringEncoding]); 1668*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1669*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1670*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1671*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofBytes); 1672*1b3f573fSAndroid Build Coastguard Worker 1673*1b3f573fSAndroid Build Coastguard Worker Message2_OneofGroup *group = [Message2_OneofGroup message]; 1674*1b3f573fSAndroid Build Coastguard Worker msg.oneofGroup = group; 1675*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofGroup); 1676*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1677*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1678*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1679*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1680*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1681*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1682*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1683*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1684*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1685*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1686*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1687*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1688*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1689*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1690*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1691*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofGroup, group); // Pointer compare. 1692*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1693*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1694*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofGroup); 1695*1b3f573fSAndroid Build Coastguard Worker 1696*1b3f573fSAndroid Build Coastguard Worker Message2 *subMessage = [Message2 message]; 1697*1b3f573fSAndroid Build Coastguard Worker msg.oneofMessage = subMessage; 1698*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofMessage); 1699*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1700*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1701*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1702*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1703*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1704*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1705*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1706*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1707*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1708*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1709*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1710*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1711*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1712*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1713*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1714*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1715*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg.oneofGroup, group); // Pointer compare. 1716*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofMessage, subMessage); // Pointer compare. 1717*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz); 1718*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofMessage); 1719*1b3f573fSAndroid Build Coastguard Worker 1720*1b3f573fSAndroid Build Coastguard Worker msg.oneofEnum = Message2_Enum_Bar; 1721*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofEnum); 1722*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100); 1723*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101); 1724*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U); 1725*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U); 1726*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104); 1727*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105); 1728*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U); 1729*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U); 1730*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108); 1731*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109); 1732*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f); 1733*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0); 1734*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 1735*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1736*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1737*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 1738*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg.oneofGroup, group); // Pointer compare. 1739*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1740*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg.oneofMessage, subMessage); // Pointer compare. 1741*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Bar); 1742*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_OneofEnum); 1743*1b3f573fSAndroid Build Coastguard Worker 1744*1b3f573fSAndroid Build Coastguard Worker // Test setting/calling clear clearing. 1745*1b3f573fSAndroid Build Coastguard Worker 1746*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1747*1b3f573fSAndroid Build Coastguard Worker msg = [[Message2 alloc] init]; 1748*1b3f573fSAndroid Build Coastguard Worker 1749*1b3f573fSAndroid Build Coastguard Worker int32_t values[] = { 1750*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofInt32, 1751*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofInt64, 1752*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofUint32, 1753*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofUint64, 1754*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofSint32, 1755*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofSint64, 1756*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofFixed32, 1757*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofFixed64, 1758*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofSfixed32, 1759*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofSfixed64, 1760*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofFloat, 1761*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofDouble, 1762*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofBool, 1763*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofString, 1764*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofBytes, 1765*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofGroup, 1766*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofMessage, 1767*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofEnum, 1768*1b3f573fSAndroid Build Coastguard Worker }; 1769*1b3f573fSAndroid Build Coastguard Worker 1770*1b3f573fSAndroid Build Coastguard Worker for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) { 1771*1b3f573fSAndroid Build Coastguard Worker switch (values[i]) { 1772*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofInt32: 1773*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt32 = 1; 1774*1b3f573fSAndroid Build Coastguard Worker break; 1775*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofInt64: 1776*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt64 = 2; 1777*1b3f573fSAndroid Build Coastguard Worker break; 1778*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofUint32: 1779*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint32 = 3; 1780*1b3f573fSAndroid Build Coastguard Worker break; 1781*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofUint64: 1782*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint64 = 4; 1783*1b3f573fSAndroid Build Coastguard Worker break; 1784*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofSint32: 1785*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint32 = 5; 1786*1b3f573fSAndroid Build Coastguard Worker break; 1787*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofSint64: 1788*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint64 = 6; 1789*1b3f573fSAndroid Build Coastguard Worker break; 1790*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofFixed32: 1791*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed32 = 7; 1792*1b3f573fSAndroid Build Coastguard Worker break; 1793*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofFixed64: 1794*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed64 = 8; 1795*1b3f573fSAndroid Build Coastguard Worker break; 1796*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofSfixed32: 1797*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed32 = 9; 1798*1b3f573fSAndroid Build Coastguard Worker break; 1799*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofSfixed64: 1800*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed64 = 10; 1801*1b3f573fSAndroid Build Coastguard Worker break; 1802*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofFloat: 1803*1b3f573fSAndroid Build Coastguard Worker msg.oneofFloat = 11.0f; 1804*1b3f573fSAndroid Build Coastguard Worker break; 1805*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofDouble: 1806*1b3f573fSAndroid Build Coastguard Worker msg.oneofDouble = 12.0; 1807*1b3f573fSAndroid Build Coastguard Worker break; 1808*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofBool: 1809*1b3f573fSAndroid Build Coastguard Worker msg.oneofBool = YES; 1810*1b3f573fSAndroid Build Coastguard Worker break; 1811*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofString: 1812*1b3f573fSAndroid Build Coastguard Worker msg.oneofString = @"foo"; 1813*1b3f573fSAndroid Build Coastguard Worker break; 1814*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofBytes: 1815*1b3f573fSAndroid Build Coastguard Worker msg.oneofBytes = [@"bar" dataUsingEncoding:NSUTF8StringEncoding]; 1816*1b3f573fSAndroid Build Coastguard Worker break; 1817*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofGroup: 1818*1b3f573fSAndroid Build Coastguard Worker msg.oneofGroup = group; 1819*1b3f573fSAndroid Build Coastguard Worker break; 1820*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofMessage: 1821*1b3f573fSAndroid Build Coastguard Worker msg.oneofMessage = subMessage; 1822*1b3f573fSAndroid Build Coastguard Worker break; 1823*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofEnum: 1824*1b3f573fSAndroid Build Coastguard Worker msg.oneofEnum = Message2_Enum_Bar; 1825*1b3f573fSAndroid Build Coastguard Worker break; 1826*1b3f573fSAndroid Build Coastguard Worker default: 1827*1b3f573fSAndroid Build Coastguard Worker XCTFail(@"shouldn't happen, loop: %zd, value: %d", i, values[i]); 1828*1b3f573fSAndroid Build Coastguard Worker break; 1829*1b3f573fSAndroid Build Coastguard Worker } 1830*1b3f573fSAndroid Build Coastguard Worker 1831*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i); 1832*1b3f573fSAndroid Build Coastguard Worker // No need to check the value was set, the above tests did that. 1833*1b3f573fSAndroid Build Coastguard Worker Message2_ClearOOneOfCase(msg); 1834*1b3f573fSAndroid Build Coastguard Worker // Nothing in the case. 1835*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase, 1836*1b3f573fSAndroid Build Coastguard Worker "Loop: %zd", i); 1837*1b3f573fSAndroid Build Coastguard Worker // Confirm everything is back to defaults after a clear. 1838*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100, "Loop: %zd", i); 1839*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101, "Loop: %zd", i); 1840*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U, "Loop: %zd", i); 1841*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U, "Loop: %zd", i); 1842*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104, "Loop: %zd", i); 1843*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105, "Loop: %zd", i); 1844*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U, "Loop: %zd", i); 1845*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U, "Loop: %zd", i); 1846*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108, "Loop: %zd", i); 1847*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109, "Loop: %zd", i); 1848*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f, "Loop: %zd", i); 1849*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0, "Loop: %zd", i); 1850*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES, "Loop: %zd", i); 1851*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i); 1852*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i); 1853*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup, "Loop: %zd", i); 1854*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg.oneofGroup, group, "Loop: %zd", 1855*1b3f573fSAndroid Build Coastguard Worker i); // Pointer compare. 1856*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage, "Loop: %zd", i); 1857*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg.oneofMessage, subMessage, "Loop: %zd", 1858*1b3f573fSAndroid Build Coastguard Worker i); // Pointer compare. 1859*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz, "Loop: %zd", i); 1860*1b3f573fSAndroid Build Coastguard Worker } 1861*1b3f573fSAndroid Build Coastguard Worker 1862*1b3f573fSAndroid Build Coastguard Worker [msg release]; 1863*1b3f573fSAndroid Build Coastguard Worker} 1864*1b3f573fSAndroid Build Coastguard Worker 1865*1b3f573fSAndroid Build Coastguard Worker- (void)testProto3OneofBasicBehaviors { 1866*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 1867*1b3f573fSAndroid Build Coastguard Worker 1868*1b3f573fSAndroid Build Coastguard Worker NSString *oneofStringDefault = @""; 1869*1b3f573fSAndroid Build Coastguard Worker NSData *oneofBytesDefault = [NSData data]; 1870*1b3f573fSAndroid Build Coastguard Worker 1871*1b3f573fSAndroid Build Coastguard Worker // Nothing set. 1872*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); 1873*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 1874*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 1875*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 1876*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 1877*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 1878*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 1879*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 1880*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 1881*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 1882*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 1883*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 1884*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 1885*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 1886*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1887*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1888*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1889*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 1890*1b3f573fSAndroid Build Coastguard Worker 1891*1b3f573fSAndroid Build Coastguard Worker // Set, check the case, check everyone has default but the one, confirm case 1892*1b3f573fSAndroid Build Coastguard Worker // didn't change. 1893*1b3f573fSAndroid Build Coastguard Worker 1894*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt32 = 1; 1895*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofInt32); 1896*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 1); 1897*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 1898*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 1899*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 1900*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 1901*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 1902*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 1903*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 1904*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 1905*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 1906*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 1907*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 1908*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 1909*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1910*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1911*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1912*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 1913*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofInt32); 1914*1b3f573fSAndroid Build Coastguard Worker 1915*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt64 = 2; 1916*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofInt64); 1917*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 1918*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 2); 1919*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 1920*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 1921*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 1922*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 1923*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 1924*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 1925*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 1926*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 1927*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 1928*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 1929*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 1930*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1931*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1932*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1933*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 1934*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofInt64); 1935*1b3f573fSAndroid Build Coastguard Worker 1936*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint32 = 3; 1937*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofUint32); 1938*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 1939*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 1940*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 3U); 1941*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 1942*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 1943*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 1944*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 1945*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 1946*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 1947*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 1948*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 1949*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 1950*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 1951*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1952*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1953*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1954*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 1955*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofUint32); 1956*1b3f573fSAndroid Build Coastguard Worker 1957*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint64 = 4; 1958*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofUint64); 1959*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 1960*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 1961*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 1962*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 4U); 1963*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 1964*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 1965*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 1966*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 1967*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 1968*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 1969*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 1970*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 1971*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 1972*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1973*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1974*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1975*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 1976*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofUint64); 1977*1b3f573fSAndroid Build Coastguard Worker 1978*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint32 = 5; 1979*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSint32); 1980*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 1981*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 1982*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 1983*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 1984*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 5); 1985*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 1986*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 1987*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 1988*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 1989*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 1990*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 1991*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 1992*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 1993*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 1994*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 1995*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 1996*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 1997*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSint32); 1998*1b3f573fSAndroid Build Coastguard Worker 1999*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint64 = 6; 2000*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSint64); 2001*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2002*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2003*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2004*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2005*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2006*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 6); 2007*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 2008*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 2009*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 2010*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 2011*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 2012*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 2013*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 2014*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2015*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2016*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2017*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 2018*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSint64); 2019*1b3f573fSAndroid Build Coastguard Worker 2020*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed32 = 7; 2021*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFixed32); 2022*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2023*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2024*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2025*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2026*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2027*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 2028*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 7U); 2029*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 2030*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 2031*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 2032*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 2033*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 2034*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 2035*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2036*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2037*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2038*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 2039*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFixed32); 2040*1b3f573fSAndroid Build Coastguard Worker 2041*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed64 = 8; 2042*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFixed64); 2043*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2044*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2045*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2046*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2047*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2048*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 2049*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 2050*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 8U); 2051*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 2052*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 2053*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 2054*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 2055*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 2056*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2057*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2058*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2059*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 2060*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFixed64); 2061*1b3f573fSAndroid Build Coastguard Worker 2062*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed32 = 9; 2063*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSfixed32); 2064*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2065*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2066*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2067*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2068*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2069*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 2070*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 2071*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 2072*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 9); 2073*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 2074*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 2075*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 2076*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 2077*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2078*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2079*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2080*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 2081*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSfixed32); 2082*1b3f573fSAndroid Build Coastguard Worker 2083*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed64 = 10; 2084*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSfixed64); 2085*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2086*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2087*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2088*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2089*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2090*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 2091*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 2092*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 2093*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 2094*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 10); 2095*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 2096*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 2097*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 2098*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2099*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2100*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2101*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 2102*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofSfixed64); 2103*1b3f573fSAndroid Build Coastguard Worker 2104*1b3f573fSAndroid Build Coastguard Worker msg.oneofFloat = 11.0f; 2105*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFloat); 2106*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2107*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2108*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2109*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2110*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2111*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 2112*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 2113*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 2114*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 2115*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 2116*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 11.0f); 2117*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 2118*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 2119*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2120*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2121*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2122*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 2123*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofFloat); 2124*1b3f573fSAndroid Build Coastguard Worker 2125*1b3f573fSAndroid Build Coastguard Worker msg.oneofDouble = 12.0; 2126*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofDouble); 2127*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2128*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2129*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2130*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2131*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2132*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 2133*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 2134*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 2135*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 2136*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 2137*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 2138*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 12.0); 2139*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 2140*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2141*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2142*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2143*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 2144*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofDouble); 2145*1b3f573fSAndroid Build Coastguard Worker 2146*1b3f573fSAndroid Build Coastguard Worker msg.oneofBool = YES; 2147*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofBool); 2148*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2149*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2150*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2151*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2152*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2153*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 2154*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 2155*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 2156*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 2157*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 2158*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 2159*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 2160*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES); 2161*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2162*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2163*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2164*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 2165*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofBool); 2166*1b3f573fSAndroid Build Coastguard Worker 2167*1b3f573fSAndroid Build Coastguard Worker msg.oneofString = @"foo"; 2168*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofString); 2169*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2170*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2171*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2172*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2173*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2174*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 2175*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 2176*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 2177*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 2178*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 2179*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 2180*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 2181*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 2182*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, @"foo"); 2183*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2184*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2185*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 2186*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofString); 2187*1b3f573fSAndroid Build Coastguard Worker 2188*1b3f573fSAndroid Build Coastguard Worker msg.oneofBytes = [@"bar" dataUsingEncoding:NSUTF8StringEncoding]; 2189*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofBytes); 2190*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2191*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2192*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2193*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2194*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2195*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 2196*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 2197*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 2198*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 2199*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 2200*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 2201*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 2202*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 2203*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2204*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, 2205*1b3f573fSAndroid Build Coastguard Worker [@"bar" dataUsingEncoding:NSUTF8StringEncoding]); 2206*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2207*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 2208*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofBytes); 2209*1b3f573fSAndroid Build Coastguard Worker 2210*1b3f573fSAndroid Build Coastguard Worker Message3 *subMessage = [Message3 message]; 2211*1b3f573fSAndroid Build Coastguard Worker msg.oneofMessage = subMessage; 2212*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofMessage); 2213*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2214*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2215*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2216*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2217*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2218*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 2219*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 2220*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 2221*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 2222*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 2223*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 2224*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 2225*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 2226*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2227*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2228*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofMessage, subMessage); // Pointer compare. 2229*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo); 2230*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofMessage); 2231*1b3f573fSAndroid Build Coastguard Worker 2232*1b3f573fSAndroid Build Coastguard Worker msg.oneofEnum = Message3_Enum_Bar; 2233*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofEnum); 2234*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0); 2235*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0); 2236*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U); 2237*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U); 2238*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0); 2239*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0); 2240*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U); 2241*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U); 2242*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0); 2243*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0); 2244*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f); 2245*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0); 2246*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO); 2247*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2248*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2249*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2250*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg.oneofMessage, subMessage); // Pointer compare. 2251*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Bar); 2252*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_OneofEnum); 2253*1b3f573fSAndroid Build Coastguard Worker 2254*1b3f573fSAndroid Build Coastguard Worker // Test setting/calling clear clearing. 2255*1b3f573fSAndroid Build Coastguard Worker 2256*1b3f573fSAndroid Build Coastguard Worker [msg release]; 2257*1b3f573fSAndroid Build Coastguard Worker msg = [[Message3 alloc] init]; 2258*1b3f573fSAndroid Build Coastguard Worker 2259*1b3f573fSAndroid Build Coastguard Worker int32_t values[] = { 2260*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofInt32, 2261*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofInt64, 2262*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofUint32, 2263*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofUint64, 2264*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofSint32, 2265*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofSint64, 2266*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofFixed32, 2267*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofFixed64, 2268*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofSfixed32, 2269*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofSfixed64, 2270*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofFloat, 2271*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofDouble, 2272*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofBool, 2273*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofString, 2274*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofBytes, 2275*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofMessage, 2276*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofEnum, 2277*1b3f573fSAndroid Build Coastguard Worker }; 2278*1b3f573fSAndroid Build Coastguard Worker 2279*1b3f573fSAndroid Build Coastguard Worker for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) { 2280*1b3f573fSAndroid Build Coastguard Worker switch (values[i]) { 2281*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofInt32: 2282*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt32 = 1; 2283*1b3f573fSAndroid Build Coastguard Worker break; 2284*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofInt64: 2285*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt64 = 2; 2286*1b3f573fSAndroid Build Coastguard Worker break; 2287*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofUint32: 2288*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint32 = 3; 2289*1b3f573fSAndroid Build Coastguard Worker break; 2290*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofUint64: 2291*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint64 = 4; 2292*1b3f573fSAndroid Build Coastguard Worker break; 2293*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofSint32: 2294*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint32 = 5; 2295*1b3f573fSAndroid Build Coastguard Worker break; 2296*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofSint64: 2297*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint64 = 6; 2298*1b3f573fSAndroid Build Coastguard Worker break; 2299*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofFixed32: 2300*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed32 = 7; 2301*1b3f573fSAndroid Build Coastguard Worker break; 2302*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofFixed64: 2303*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed64 = 8; 2304*1b3f573fSAndroid Build Coastguard Worker break; 2305*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofSfixed32: 2306*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed32 = 9; 2307*1b3f573fSAndroid Build Coastguard Worker break; 2308*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofSfixed64: 2309*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed64 = 10; 2310*1b3f573fSAndroid Build Coastguard Worker break; 2311*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofFloat: 2312*1b3f573fSAndroid Build Coastguard Worker msg.oneofFloat = 11.0f; 2313*1b3f573fSAndroid Build Coastguard Worker break; 2314*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofDouble: 2315*1b3f573fSAndroid Build Coastguard Worker msg.oneofDouble = 12.0; 2316*1b3f573fSAndroid Build Coastguard Worker break; 2317*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofBool: 2318*1b3f573fSAndroid Build Coastguard Worker msg.oneofBool = YES; 2319*1b3f573fSAndroid Build Coastguard Worker break; 2320*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofString: 2321*1b3f573fSAndroid Build Coastguard Worker msg.oneofString = @"foo"; 2322*1b3f573fSAndroid Build Coastguard Worker break; 2323*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofBytes: 2324*1b3f573fSAndroid Build Coastguard Worker msg.oneofBytes = [@"bar" dataUsingEncoding:NSUTF8StringEncoding]; 2325*1b3f573fSAndroid Build Coastguard Worker break; 2326*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofMessage: 2327*1b3f573fSAndroid Build Coastguard Worker msg.oneofMessage = subMessage; 2328*1b3f573fSAndroid Build Coastguard Worker break; 2329*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofEnum: 2330*1b3f573fSAndroid Build Coastguard Worker msg.oneofEnum = Message3_Enum_Baz; 2331*1b3f573fSAndroid Build Coastguard Worker break; 2332*1b3f573fSAndroid Build Coastguard Worker default: 2333*1b3f573fSAndroid Build Coastguard Worker XCTFail(@"shouldn't happen, loop: %zd, value: %d", i, values[i]); 2334*1b3f573fSAndroid Build Coastguard Worker break; 2335*1b3f573fSAndroid Build Coastguard Worker } 2336*1b3f573fSAndroid Build Coastguard Worker 2337*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i); 2338*1b3f573fSAndroid Build Coastguard Worker // No need to check the value was set, the above tests did that. 2339*1b3f573fSAndroid Build Coastguard Worker Message3_ClearOOneOfCase(msg); 2340*1b3f573fSAndroid Build Coastguard Worker // Nothing in the case. 2341*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase, 2342*1b3f573fSAndroid Build Coastguard Worker "Loop: %zd", i); 2343*1b3f573fSAndroid Build Coastguard Worker // Confirm everything is back to defaults after a clear. 2344*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0, "Loop: %zd", i); 2345*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0, "Loop: %zd", i); 2346*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U, "Loop: %zd", i); 2347*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U, "Loop: %zd", i); 2348*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0, "Loop: %zd", i); 2349*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0, "Loop: %zd", i); 2350*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U, "Loop: %zd", i); 2351*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U, "Loop: %zd", i); 2352*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0, "Loop: %zd", i); 2353*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0, "Loop: %zd", i); 2354*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f, "Loop: %zd", i); 2355*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0, "Loop: %zd", i); 2356*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO, "Loop: %zd", i); 2357*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i); 2358*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i); 2359*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage, "Loop: %zd", i); 2360*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg.oneofMessage, subMessage, "Loop: %zd", 2361*1b3f573fSAndroid Build Coastguard Worker i); // Pointer compare. 2362*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo, "Loop: %zd", i); 2363*1b3f573fSAndroid Build Coastguard Worker } 2364*1b3f573fSAndroid Build Coastguard Worker 2365*1b3f573fSAndroid Build Coastguard Worker [msg release]; 2366*1b3f573fSAndroid Build Coastguard Worker} 2367*1b3f573fSAndroid Build Coastguard Worker 2368*1b3f573fSAndroid Build Coastguard Worker- (void)testProto2OneofSetToDefault { 2369*1b3f573fSAndroid Build Coastguard Worker 2370*1b3f573fSAndroid Build Coastguard Worker // proto3 doesn't normally write out zero (default) fields, but if they are 2371*1b3f573fSAndroid Build Coastguard Worker // in a oneof it does. proto2 doesn't have this special behavior, but we 2372*1b3f573fSAndroid Build Coastguard Worker // still confirm setting to the explicit default does set the case to be 2373*1b3f573fSAndroid Build Coastguard Worker // sure the runtime is working correctly. 2374*1b3f573fSAndroid Build Coastguard Worker 2375*1b3f573fSAndroid Build Coastguard Worker NSString *oneofStringDefault = @"string"; 2376*1b3f573fSAndroid Build Coastguard Worker NSData *oneofBytesDefault = [@"data" dataUsingEncoding:NSUTF8StringEncoding]; 2377*1b3f573fSAndroid Build Coastguard Worker 2378*1b3f573fSAndroid Build Coastguard Worker Message2 *msg = [[Message2 alloc] init]; 2379*1b3f573fSAndroid Build Coastguard Worker 2380*1b3f573fSAndroid Build Coastguard Worker int32_t values[] = { 2381*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofInt32, 2382*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofInt64, 2383*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofUint32, 2384*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofUint64, 2385*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofSint32, 2386*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofSint64, 2387*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofFixed32, 2388*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofFixed64, 2389*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofSfixed32, 2390*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofSfixed64, 2391*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofFloat, 2392*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofDouble, 2393*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofBool, 2394*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofString, 2395*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofBytes, 2396*1b3f573fSAndroid Build Coastguard Worker // Skip group 2397*1b3f573fSAndroid Build Coastguard Worker // Skip message 2398*1b3f573fSAndroid Build Coastguard Worker Message2_O_OneOfCase_OneofEnum, 2399*1b3f573fSAndroid Build Coastguard Worker }; 2400*1b3f573fSAndroid Build Coastguard Worker 2401*1b3f573fSAndroid Build Coastguard Worker for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) { 2402*1b3f573fSAndroid Build Coastguard Worker switch (values[i]) { 2403*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofInt32: 2404*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt32 = 100; 2405*1b3f573fSAndroid Build Coastguard Worker break; 2406*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofInt64: 2407*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt64 = 101; 2408*1b3f573fSAndroid Build Coastguard Worker break; 2409*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofUint32: 2410*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint32 = 102; 2411*1b3f573fSAndroid Build Coastguard Worker break; 2412*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofUint64: 2413*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint64 = 103; 2414*1b3f573fSAndroid Build Coastguard Worker break; 2415*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofSint32: 2416*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint32 = 104; 2417*1b3f573fSAndroid Build Coastguard Worker break; 2418*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofSint64: 2419*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint64 = 105; 2420*1b3f573fSAndroid Build Coastguard Worker break; 2421*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofFixed32: 2422*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed32 = 106; 2423*1b3f573fSAndroid Build Coastguard Worker break; 2424*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofFixed64: 2425*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed64 = 107; 2426*1b3f573fSAndroid Build Coastguard Worker break; 2427*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofSfixed32: 2428*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed32 = 108; 2429*1b3f573fSAndroid Build Coastguard Worker break; 2430*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofSfixed64: 2431*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed64 = 109; 2432*1b3f573fSAndroid Build Coastguard Worker break; 2433*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofFloat: 2434*1b3f573fSAndroid Build Coastguard Worker msg.oneofFloat = 110.0f; 2435*1b3f573fSAndroid Build Coastguard Worker break; 2436*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofDouble: 2437*1b3f573fSAndroid Build Coastguard Worker msg.oneofDouble = 111.0; 2438*1b3f573fSAndroid Build Coastguard Worker break; 2439*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofBool: 2440*1b3f573fSAndroid Build Coastguard Worker msg.oneofBool = YES; 2441*1b3f573fSAndroid Build Coastguard Worker break; 2442*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofString: 2443*1b3f573fSAndroid Build Coastguard Worker msg.oneofString = oneofStringDefault; 2444*1b3f573fSAndroid Build Coastguard Worker break; 2445*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofBytes: 2446*1b3f573fSAndroid Build Coastguard Worker msg.oneofBytes = oneofBytesDefault; 2447*1b3f573fSAndroid Build Coastguard Worker break; 2448*1b3f573fSAndroid Build Coastguard Worker case Message2_O_OneOfCase_OneofEnum: 2449*1b3f573fSAndroid Build Coastguard Worker msg.oneofEnum = Message2_Enum_Baz; 2450*1b3f573fSAndroid Build Coastguard Worker break; 2451*1b3f573fSAndroid Build Coastguard Worker default: 2452*1b3f573fSAndroid Build Coastguard Worker XCTFail(@"shouldn't happen, loop: %zd, value: %d", i, values[i]); 2453*1b3f573fSAndroid Build Coastguard Worker break; 2454*1b3f573fSAndroid Build Coastguard Worker } 2455*1b3f573fSAndroid Build Coastguard Worker 2456*1b3f573fSAndroid Build Coastguard Worker // Should be set to the correct case. 2457*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i); 2458*1b3f573fSAndroid Build Coastguard Worker 2459*1b3f573fSAndroid Build Coastguard Worker // Confirm everything is the defaults. 2460*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 100, "Loop: %zd", i); 2461*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 101, "Loop: %zd", i); 2462*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 102U, "Loop: %zd", i); 2463*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 103U, "Loop: %zd", i); 2464*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 104, "Loop: %zd", i); 2465*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 105, "Loop: %zd", i); 2466*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 106U, "Loop: %zd", i); 2467*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 107U, "Loop: %zd", i); 2468*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 108, "Loop: %zd", i); 2469*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 109, "Loop: %zd", i); 2470*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 110.0f, "Loop: %zd", i); 2471*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 111.0, "Loop: %zd", i); 2472*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, YES, "Loop: %zd", i); 2473*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i); 2474*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i); 2475*1b3f573fSAndroid Build Coastguard Worker // Skip group, no default to consider. 2476*1b3f573fSAndroid Build Coastguard Worker // Skip message, no default to consider. 2477*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz, "Loop: %zd", i); 2478*1b3f573fSAndroid Build Coastguard Worker } 2479*1b3f573fSAndroid Build Coastguard Worker 2480*1b3f573fSAndroid Build Coastguard Worker // We special case nil on string, data, group, and message, ensure they work 2481*1b3f573fSAndroid Build Coastguard Worker // as expected. i.e. - it clears the case. 2482*1b3f573fSAndroid Build Coastguard Worker msg.oneofString = nil; 2483*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2484*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); 2485*1b3f573fSAndroid Build Coastguard Worker msg.oneofBytes = nil; 2486*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); 2487*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2488*1b3f573fSAndroid Build Coastguard Worker msg.oneofGroup = nil; 2489*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); 2490*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofGroup); 2491*1b3f573fSAndroid Build Coastguard Worker msg.oneofMessage = nil; 2492*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); 2493*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2494*1b3f573fSAndroid Build Coastguard Worker 2495*1b3f573fSAndroid Build Coastguard Worker [msg release]; 2496*1b3f573fSAndroid Build Coastguard Worker} 2497*1b3f573fSAndroid Build Coastguard Worker 2498*1b3f573fSAndroid Build Coastguard Worker- (void)testProto3OneofSetToZero { 2499*1b3f573fSAndroid Build Coastguard Worker 2500*1b3f573fSAndroid Build Coastguard Worker // Normally setting a proto3 field to the zero value should result in it being 2501*1b3f573fSAndroid Build Coastguard Worker // reset/cleared. But in a oneof, it still gets recorded so it can go out 2502*1b3f573fSAndroid Build Coastguard Worker // over the wire and the other side can see what was set in the oneof. 2503*1b3f573fSAndroid Build Coastguard Worker 2504*1b3f573fSAndroid Build Coastguard Worker NSString *oneofStringDefault = @""; 2505*1b3f573fSAndroid Build Coastguard Worker NSData *oneofBytesDefault = [NSData data]; 2506*1b3f573fSAndroid Build Coastguard Worker 2507*1b3f573fSAndroid Build Coastguard Worker Message3 *msg = [[Message3 alloc] init]; 2508*1b3f573fSAndroid Build Coastguard Worker 2509*1b3f573fSAndroid Build Coastguard Worker int32_t values[] = { 2510*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofInt32, 2511*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofInt64, 2512*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofUint32, 2513*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofUint64, 2514*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofSint32, 2515*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofSint64, 2516*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofFixed32, 2517*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofFixed64, 2518*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofSfixed32, 2519*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofSfixed64, 2520*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofFloat, 2521*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofDouble, 2522*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofBool, 2523*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofString, 2524*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofBytes, 2525*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofMessage, 2526*1b3f573fSAndroid Build Coastguard Worker Message3_O_OneOfCase_OneofEnum, 2527*1b3f573fSAndroid Build Coastguard Worker }; 2528*1b3f573fSAndroid Build Coastguard Worker 2529*1b3f573fSAndroid Build Coastguard Worker for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) { 2530*1b3f573fSAndroid Build Coastguard Worker switch (values[i]) { 2531*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofInt32: 2532*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt32 = 0; 2533*1b3f573fSAndroid Build Coastguard Worker break; 2534*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofInt64: 2535*1b3f573fSAndroid Build Coastguard Worker msg.oneofInt64 = 0; 2536*1b3f573fSAndroid Build Coastguard Worker break; 2537*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofUint32: 2538*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint32 = 0; 2539*1b3f573fSAndroid Build Coastguard Worker break; 2540*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofUint64: 2541*1b3f573fSAndroid Build Coastguard Worker msg.oneofUint64 = 0; 2542*1b3f573fSAndroid Build Coastguard Worker break; 2543*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofSint32: 2544*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint32 = 0; 2545*1b3f573fSAndroid Build Coastguard Worker break; 2546*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofSint64: 2547*1b3f573fSAndroid Build Coastguard Worker msg.oneofSint64 = 0; 2548*1b3f573fSAndroid Build Coastguard Worker break; 2549*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofFixed32: 2550*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed32 = 0; 2551*1b3f573fSAndroid Build Coastguard Worker break; 2552*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofFixed64: 2553*1b3f573fSAndroid Build Coastguard Worker msg.oneofFixed64 = 0; 2554*1b3f573fSAndroid Build Coastguard Worker break; 2555*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofSfixed32: 2556*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed32 = 0; 2557*1b3f573fSAndroid Build Coastguard Worker break; 2558*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofSfixed64: 2559*1b3f573fSAndroid Build Coastguard Worker msg.oneofSfixed64 = 0; 2560*1b3f573fSAndroid Build Coastguard Worker break; 2561*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofFloat: 2562*1b3f573fSAndroid Build Coastguard Worker msg.oneofFloat = 0.0f; 2563*1b3f573fSAndroid Build Coastguard Worker break; 2564*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofDouble: 2565*1b3f573fSAndroid Build Coastguard Worker msg.oneofDouble = 0.0; 2566*1b3f573fSAndroid Build Coastguard Worker break; 2567*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofBool: 2568*1b3f573fSAndroid Build Coastguard Worker msg.oneofBool = NO; 2569*1b3f573fSAndroid Build Coastguard Worker break; 2570*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofString: 2571*1b3f573fSAndroid Build Coastguard Worker msg.oneofString = oneofStringDefault; 2572*1b3f573fSAndroid Build Coastguard Worker break; 2573*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofBytes: 2574*1b3f573fSAndroid Build Coastguard Worker msg.oneofBytes = oneofBytesDefault; 2575*1b3f573fSAndroid Build Coastguard Worker break; 2576*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofMessage: 2577*1b3f573fSAndroid Build Coastguard Worker msg.oneofMessage.optionalInt32 = 0; 2578*1b3f573fSAndroid Build Coastguard Worker break; 2579*1b3f573fSAndroid Build Coastguard Worker case Message3_O_OneOfCase_OneofEnum: 2580*1b3f573fSAndroid Build Coastguard Worker msg.oneofEnum = Message3_Enum_Foo; 2581*1b3f573fSAndroid Build Coastguard Worker break; 2582*1b3f573fSAndroid Build Coastguard Worker default: 2583*1b3f573fSAndroid Build Coastguard Worker XCTFail(@"shouldn't happen, loop: %zd, value: %d", i, values[i]); 2584*1b3f573fSAndroid Build Coastguard Worker break; 2585*1b3f573fSAndroid Build Coastguard Worker } 2586*1b3f573fSAndroid Build Coastguard Worker 2587*1b3f573fSAndroid Build Coastguard Worker // Should be set to the correct case. 2588*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i); 2589*1b3f573fSAndroid Build Coastguard Worker 2590*1b3f573fSAndroid Build Coastguard Worker // Confirm everything is still zeros. 2591*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt32, 0, "Loop: %zd", i); 2592*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofInt64, 0, "Loop: %zd", i); 2593*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint32, 0U, "Loop: %zd", i); 2594*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofUint64, 0U, "Loop: %zd", i); 2595*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint32, 0, "Loop: %zd", i); 2596*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSint64, 0, "Loop: %zd", i); 2597*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed32, 0U, "Loop: %zd", i); 2598*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFixed64, 0U, "Loop: %zd", i); 2599*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed32, 0, "Loop: %zd", i); 2600*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofSfixed64, 0, "Loop: %zd", i); 2601*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofFloat, 0.0f, "Loop: %zd", i); 2602*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofDouble, 0.0, "Loop: %zd", i); 2603*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofBool, NO, "Loop: %zd", i); 2604*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i); 2605*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i); 2606*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage, "Loop: %zd", i); 2607*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo, "Loop: %zd", i); 2608*1b3f573fSAndroid Build Coastguard Worker } 2609*1b3f573fSAndroid Build Coastguard Worker 2610*1b3f573fSAndroid Build Coastguard Worker // We special case nil on string, data, message, ensure they work as expected. 2611*1b3f573fSAndroid Build Coastguard Worker msg.oneofString = nil; 2612*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); 2613*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); 2614*1b3f573fSAndroid Build Coastguard Worker msg.oneofBytes = nil; 2615*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); 2616*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); 2617*1b3f573fSAndroid Build Coastguard Worker msg.oneofMessage = nil; 2618*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); 2619*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(msg.oneofMessage); 2620*1b3f573fSAndroid Build Coastguard Worker 2621*1b3f573fSAndroid Build Coastguard Worker [msg release]; 2622*1b3f573fSAndroid Build Coastguard Worker} 2623*1b3f573fSAndroid Build Coastguard Worker 2624*1b3f573fSAndroid Build Coastguard Worker- (void)testCopyingMakesUniqueObjects { 2625*1b3f573fSAndroid Build Coastguard Worker const int repeatCount = 5; 2626*1b3f573fSAndroid Build Coastguard Worker TestAllTypes *msg1 = [TestAllTypes message]; 2627*1b3f573fSAndroid Build Coastguard Worker [self setAllFields:msg1 repeatedCount:repeatCount]; 2628*1b3f573fSAndroid Build Coastguard Worker 2629*1b3f573fSAndroid Build Coastguard Worker TestAllTypes *msg2 = [[msg1 copy] autorelease]; 2630*1b3f573fSAndroid Build Coastguard Worker 2631*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1, msg2); // Ptr compare, new object. 2632*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg1, msg2); // Equal values. 2633*1b3f573fSAndroid Build Coastguard Worker 2634*1b3f573fSAndroid Build Coastguard Worker // Pointer comparisons, different objects. 2635*1b3f573fSAndroid Build Coastguard Worker 2636*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.optionalGroup, msg2.optionalGroup); 2637*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.optionalNestedMessage, msg2.optionalNestedMessage); 2638*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.optionalForeignMessage, msg2.optionalForeignMessage); 2639*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.optionalImportMessage, msg2.optionalImportMessage); 2640*1b3f573fSAndroid Build Coastguard Worker 2641*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedInt32Array, msg2.repeatedInt32Array); 2642*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedInt64Array, msg2.repeatedInt64Array); 2643*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedUint32Array, msg2.repeatedUint32Array); 2644*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedUint64Array, msg2.repeatedUint64Array); 2645*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedSint32Array, msg2.repeatedSint32Array); 2646*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedSint64Array, msg2.repeatedSint64Array); 2647*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedFixed32Array, msg2.repeatedFixed32Array); 2648*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedFixed64Array, msg2.repeatedFixed64Array); 2649*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedSfixed32Array, msg2.repeatedSfixed32Array); 2650*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedSfixed64Array, msg2.repeatedSfixed64Array); 2651*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedFloatArray, msg2.repeatedFloatArray); 2652*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedDoubleArray, msg2.repeatedDoubleArray); 2653*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedBoolArray, msg2.repeatedBoolArray); 2654*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedStringArray, msg2.repeatedStringArray); 2655*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedBytesArray, msg2.repeatedBytesArray); 2656*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedGroupArray, msg2.repeatedGroupArray); 2657*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedNestedMessageArray, 2658*1b3f573fSAndroid Build Coastguard Worker msg2.repeatedNestedMessageArray); 2659*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedForeignMessageArray, 2660*1b3f573fSAndroid Build Coastguard Worker msg2.repeatedForeignMessageArray); 2661*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedImportMessageArray, 2662*1b3f573fSAndroid Build Coastguard Worker msg2.repeatedImportMessageArray); 2663*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedNestedEnumArray, msg2.repeatedNestedEnumArray); 2664*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedForeignEnumArray, 2665*1b3f573fSAndroid Build Coastguard Worker msg2.repeatedForeignEnumArray); 2666*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedImportEnumArray, msg2.repeatedImportEnumArray); 2667*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedStringPieceArray, 2668*1b3f573fSAndroid Build Coastguard Worker msg2.repeatedStringPieceArray); 2669*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedCordArray, msg2.repeatedCordArray); 2670*1b3f573fSAndroid Build Coastguard Worker 2671*1b3f573fSAndroid Build Coastguard Worker for (int i = 0; i < repeatCount; i++) { 2672*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedNestedMessageArray[i], 2673*1b3f573fSAndroid Build Coastguard Worker msg2.repeatedNestedMessageArray[i]); 2674*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedForeignMessageArray[i], 2675*1b3f573fSAndroid Build Coastguard Worker msg2.repeatedForeignMessageArray[i]); 2676*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.repeatedImportMessageArray[i], 2677*1b3f573fSAndroid Build Coastguard Worker msg2.repeatedImportMessageArray[i]); 2678*1b3f573fSAndroid Build Coastguard Worker } 2679*1b3f573fSAndroid Build Coastguard Worker} 2680*1b3f573fSAndroid Build Coastguard Worker 2681*1b3f573fSAndroid Build Coastguard Worker- (void)testCopyingMapsMakesUniqueObjects { 2682*1b3f573fSAndroid Build Coastguard Worker TestMap *msg1 = [TestMap message]; 2683*1b3f573fSAndroid Build Coastguard Worker [self setAllMapFields:msg1 numEntries:5]; 2684*1b3f573fSAndroid Build Coastguard Worker 2685*1b3f573fSAndroid Build Coastguard Worker TestMap *msg2 = [[msg1 copy] autorelease]; 2686*1b3f573fSAndroid Build Coastguard Worker 2687*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1, msg2); // Ptr compare, new object. 2688*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg1, msg2); // Equal values. 2689*1b3f573fSAndroid Build Coastguard Worker 2690*1b3f573fSAndroid Build Coastguard Worker // Pointer comparisons, different objects. 2691*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapInt32Int32, msg2.mapInt32Int32); 2692*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapInt64Int64, msg2.mapInt64Int64); 2693*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapUint32Uint32, msg2.mapUint32Uint32); 2694*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapUint64Uint64, msg2.mapUint64Uint64); 2695*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapSint32Sint32, msg2.mapSint32Sint32); 2696*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapSint64Sint64, msg2.mapSint64Sint64); 2697*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapFixed32Fixed32, msg2.mapFixed32Fixed32); 2698*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapFixed64Fixed64, msg2.mapFixed64Fixed64); 2699*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapSfixed32Sfixed32, msg2.mapSfixed32Sfixed32); 2700*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapSfixed64Sfixed64, msg2.mapSfixed64Sfixed64); 2701*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapInt32Float, msg2.mapInt32Float); 2702*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapInt32Double, msg2.mapInt32Double); 2703*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapBoolBool, msg2.mapBoolBool); 2704*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapStringString, msg2.mapStringString); 2705*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapInt32Bytes, msg2.mapInt32Bytes); 2706*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapInt32Enum, msg2.mapInt32Enum); 2707*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(msg1.mapInt32ForeignMessage, msg2.mapInt32ForeignMessage); 2708*1b3f573fSAndroid Build Coastguard Worker 2709*1b3f573fSAndroid Build Coastguard Worker // Ensure the messages are unique per map. 2710*1b3f573fSAndroid Build Coastguard Worker [msg1.mapInt32ForeignMessage 2711*1b3f573fSAndroid Build Coastguard Worker enumerateKeysAndObjectsUsingBlock:^(int32_t key, id value, BOOL *stop) { 2712*1b3f573fSAndroid Build Coastguard Worker#pragma unused(stop) 2713*1b3f573fSAndroid Build Coastguard Worker ForeignMessage *subMsg2 = [msg2.mapInt32ForeignMessage objectForKey:key]; 2714*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqual(value, subMsg2); // Ptr compare, new object. 2715*1b3f573fSAndroid Build Coastguard Worker }]; 2716*1b3f573fSAndroid Build Coastguard Worker} 2717*1b3f573fSAndroid Build Coastguard Worker 2718*1b3f573fSAndroid Build Coastguard Worker- (void)test_GPBGetMessageRepeatedField { 2719*1b3f573fSAndroid Build Coastguard Worker TestAllTypes *message = [TestAllTypes message]; 2720*1b3f573fSAndroid Build Coastguard Worker GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"repeatedStringArray"]; 2721*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(fieldDescriptor); 2722*1b3f573fSAndroid Build Coastguard Worker NSMutableArray *fieldArray = GPBGetMessageRepeatedField(message, fieldDescriptor); 2723*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(fieldArray); // Should have autocreated. 2724*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(fieldArray == message.repeatedStringArray); // Same pointer 2725*1b3f573fSAndroid Build Coastguard Worker} 2726*1b3f573fSAndroid Build Coastguard Worker 2727*1b3f573fSAndroid Build Coastguard Worker- (void)test_GPBSetMessageRepeatedField { 2728*1b3f573fSAndroid Build Coastguard Worker TestAllTypes *message = [TestAllTypes message]; 2729*1b3f573fSAndroid Build Coastguard Worker GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"repeatedStringArray"]; 2730*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(fieldDescriptor); 2731*1b3f573fSAndroid Build Coastguard Worker 2732*1b3f573fSAndroid Build Coastguard Worker NSMutableArray *fieldArray = [NSMutableArray arrayWithObject:@"foo"]; 2733*1b3f573fSAndroid Build Coastguard Worker GPBSetMessageRepeatedField(message, fieldDescriptor, fieldArray); 2734*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(fieldArray == message.repeatedStringArray); // Same pointer 2735*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(@"foo", message.repeatedStringArray.firstObject); 2736*1b3f573fSAndroid Build Coastguard Worker} 2737*1b3f573fSAndroid Build Coastguard Worker 2738*1b3f573fSAndroid Build Coastguard Worker- (void)test_GPBGetMessageMapField { 2739*1b3f573fSAndroid Build Coastguard Worker TestMap *message = [TestMap message]; 2740*1b3f573fSAndroid Build Coastguard Worker GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"mapStringString"]; 2741*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(fieldDescriptor); 2742*1b3f573fSAndroid Build Coastguard Worker NSMutableDictionary *fieldMap = GPBGetMessageMapField(message, fieldDescriptor); 2743*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(fieldMap); // Should have autocreated. 2744*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(fieldMap == message.mapStringString); // Same pointer 2745*1b3f573fSAndroid Build Coastguard Worker} 2746*1b3f573fSAndroid Build Coastguard Worker 2747*1b3f573fSAndroid Build Coastguard Worker- (void)test_GPBSetMessageMapField { 2748*1b3f573fSAndroid Build Coastguard Worker TestMap *message = [TestMap message]; 2749*1b3f573fSAndroid Build Coastguard Worker GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"mapStringString"]; 2750*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotNil(fieldDescriptor); 2751*1b3f573fSAndroid Build Coastguard Worker 2752*1b3f573fSAndroid Build Coastguard Worker NSMutableDictionary *fieldMap = [NSMutableDictionary dictionaryWithObject:@"bar" forKey:@"foo"]; 2753*1b3f573fSAndroid Build Coastguard Worker GPBSetMessageMapField(message, fieldDescriptor, fieldMap); 2754*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(fieldMap == message.mapStringString); // Same pointer 2755*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(@"bar", message.mapStringString[@"foo"]); 2756*1b3f573fSAndroid Build Coastguard Worker} 2757*1b3f573fSAndroid Build Coastguard Worker 2758*1b3f573fSAndroid Build Coastguard Worker- (void)test_StringFieldsCopy { 2759*1b3f573fSAndroid Build Coastguard Worker // ObjC conventions call for NSString properties to be copy, ensure 2760*1b3f573fSAndroid Build Coastguard Worker // that is done correctly and the string isn't simply retained. 2761*1b3f573fSAndroid Build Coastguard Worker 2762*1b3f573fSAndroid Build Coastguard Worker Message2 *msg1 = [Message2 message]; 2763*1b3f573fSAndroid Build Coastguard Worker Message2 *msg2 = [Message2 message]; 2764*1b3f573fSAndroid Build Coastguard Worker 2765*1b3f573fSAndroid Build Coastguard Worker GPBFieldDescriptor *fieldDesc = 2766*1b3f573fSAndroid Build Coastguard Worker [[Message2 descriptor] fieldWithNumber:Message2_FieldNumber_OptionalString]; 2767*1b3f573fSAndroid Build Coastguard Worker NSMutableString *mutableStr = [NSMutableString stringWithString:@"foo"]; 2768*1b3f573fSAndroid Build Coastguard Worker 2769*1b3f573fSAndroid Build Coastguard Worker msg1.optionalString = mutableStr; 2770*1b3f573fSAndroid Build Coastguard Worker GPBSetMessageStringField(msg2, fieldDesc, mutableStr); 2771*1b3f573fSAndroid Build Coastguard Worker 2772*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg1.optionalString, mutableStr); 2773*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg1.optionalString, @"foo"); 2774*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg1.optionalString != mutableStr); // Ptr comparison. 2775*1b3f573fSAndroid Build Coastguard Worker 2776*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg2.optionalString, mutableStr); 2777*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg2.optionalString, @"foo"); 2778*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg2.optionalString != mutableStr); // Ptr comparison. 2779*1b3f573fSAndroid Build Coastguard Worker 2780*1b3f573fSAndroid Build Coastguard Worker [mutableStr appendString:@"bar"]; 2781*1b3f573fSAndroid Build Coastguard Worker 2782*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqualObjects(msg1.optionalString, mutableStr); 2783*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg1.optionalString, @"foo"); 2784*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg1.optionalString != mutableStr); // Ptr comparison. 2785*1b3f573fSAndroid Build Coastguard Worker 2786*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqualObjects(msg2.optionalString, mutableStr); 2787*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg2.optionalString, @"foo"); 2788*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg2.optionalString != mutableStr); // Ptr comparison. 2789*1b3f573fSAndroid Build Coastguard Worker} 2790*1b3f573fSAndroid Build Coastguard Worker 2791*1b3f573fSAndroid Build Coastguard Worker- (void)test_BytesFieldsCopy { 2792*1b3f573fSAndroid Build Coastguard Worker // ObjC conventions call for NSData properties to be copy, ensure 2793*1b3f573fSAndroid Build Coastguard Worker // that is done correctly and the data isn't simply retained. 2794*1b3f573fSAndroid Build Coastguard Worker 2795*1b3f573fSAndroid Build Coastguard Worker Message2 *msg1 = [Message2 message]; 2796*1b3f573fSAndroid Build Coastguard Worker Message2 *msg2 = [Message2 message]; 2797*1b3f573fSAndroid Build Coastguard Worker 2798*1b3f573fSAndroid Build Coastguard Worker GPBFieldDescriptor *fieldDesc = 2799*1b3f573fSAndroid Build Coastguard Worker [[Message2 descriptor] fieldWithNumber:Message2_FieldNumber_OptionalBytes]; 2800*1b3f573fSAndroid Build Coastguard Worker NSMutableData *mutableData = [NSMutableData dataWithData:DataFromCStr("abc")]; 2801*1b3f573fSAndroid Build Coastguard Worker 2802*1b3f573fSAndroid Build Coastguard Worker msg1.optionalBytes = mutableData; 2803*1b3f573fSAndroid Build Coastguard Worker GPBSetMessageBytesField(msg2, fieldDesc, mutableData); 2804*1b3f573fSAndroid Build Coastguard Worker 2805*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg1.optionalBytes, mutableData); 2806*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg1.optionalBytes, DataFromCStr("abc")); 2807*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg1.optionalBytes != mutableData); // Ptr comparison. 2808*1b3f573fSAndroid Build Coastguard Worker 2809*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg2.optionalBytes, mutableData); 2810*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg2.optionalBytes, DataFromCStr("abc")); 2811*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg2.optionalBytes != mutableData); // Ptr comparison. 2812*1b3f573fSAndroid Build Coastguard Worker 2813*1b3f573fSAndroid Build Coastguard Worker [mutableData appendData:DataFromCStr("123")]; 2814*1b3f573fSAndroid Build Coastguard Worker 2815*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqualObjects(msg1.optionalBytes, mutableData); 2816*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg1.optionalBytes, DataFromCStr("abc")); 2817*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg1.optionalBytes != mutableData); // Ptr comparison. 2818*1b3f573fSAndroid Build Coastguard Worker 2819*1b3f573fSAndroid Build Coastguard Worker XCTAssertNotEqualObjects(msg2.optionalBytes, mutableData); 2820*1b3f573fSAndroid Build Coastguard Worker XCTAssertEqualObjects(msg2.optionalBytes, DataFromCStr("abc")); 2821*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg2.optionalBytes != mutableData); // Ptr comparison. 2822*1b3f573fSAndroid Build Coastguard Worker} 2823*1b3f573fSAndroid Build Coastguard Worker 2824*1b3f573fSAndroid Build Coastguard Worker#pragma mark - Subset from from map_tests.cc 2825*1b3f573fSAndroid Build Coastguard Worker 2826*1b3f573fSAndroid Build Coastguard Worker// TEST(GeneratedMapFieldTest, IsInitialized) 2827*1b3f573fSAndroid Build Coastguard Worker- (void)testMap_IsInitialized { 2828*1b3f573fSAndroid Build Coastguard Worker TestRequiredMessageMap *msg = [[TestRequiredMessageMap alloc] init]; 2829*1b3f573fSAndroid Build Coastguard Worker 2830*1b3f573fSAndroid Build Coastguard Worker // Add an uninitialized message. 2831*1b3f573fSAndroid Build Coastguard Worker TestRequired *subMsg = [[TestRequired alloc] init]; 2832*1b3f573fSAndroid Build Coastguard Worker [msg.mapField setObject:subMsg forKey:0]; 2833*1b3f573fSAndroid Build Coastguard Worker XCTAssertFalse(msg.initialized); 2834*1b3f573fSAndroid Build Coastguard Worker 2835*1b3f573fSAndroid Build Coastguard Worker // Initialize uninitialized message 2836*1b3f573fSAndroid Build Coastguard Worker subMsg.a = 0; 2837*1b3f573fSAndroid Build Coastguard Worker subMsg.b = 0; 2838*1b3f573fSAndroid Build Coastguard Worker subMsg.c = 0; 2839*1b3f573fSAndroid Build Coastguard Worker XCTAssertTrue(msg.initialized); 2840*1b3f573fSAndroid Build Coastguard Worker 2841*1b3f573fSAndroid Build Coastguard Worker [subMsg release]; 2842*1b3f573fSAndroid Build Coastguard Worker [msg release]; 2843*1b3f573fSAndroid Build Coastguard Worker} 2844*1b3f573fSAndroid Build Coastguard Worker 2845*1b3f573fSAndroid Build Coastguard Worker@end 2846