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