OLD | NEW |
| (Empty) |
1 // Protocol Buffers - Google's data interchange format | |
2 // Copyright 2015 Google Inc. All rights reserved. | |
3 // https://developers.google.com/protocol-buffers/ | |
4 // | |
5 // Redistribution and use in source and binary forms, with or without | |
6 // modification, are permitted provided that the following conditions are | |
7 // met: | |
8 // | |
9 // * Redistributions of source code must retain the above copyright | |
10 // notice, this list of conditions and the following disclaimer. | |
11 // * Redistributions in binary form must reproduce the above | |
12 // copyright notice, this list of conditions and the following disclaimer | |
13 // in the documentation and/or other materials provided with the | |
14 // distribution. | |
15 // * Neither the name of Google Inc. nor the names of its | |
16 // contributors may be used to endorse or promote products derived from | |
17 // this software without specific prior written permission. | |
18 // | |
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
30 | |
31 import Foundation | |
32 import XCTest | |
33 | |
34 // Test some usage of the ObjC library from Swift. | |
35 | |
36 class GPBBridgeTests: XCTestCase { | |
37 | |
38 func testProto2Basics() { | |
39 let msg = Message2() | |
40 let msg2 = Message2() | |
41 let msg3 = Message2_OptionalGroup() | |
42 | |
43 msg.optionalInt32 = 100 | |
44 msg.optionalString = "abc" | |
45 msg.optionalEnum = .Bar | |
46 msg2.optionalString = "other" | |
47 msg.optionalMessage = msg2 | |
48 msg3.a = 200 | |
49 msg.optionalGroup = msg3 | |
50 msg.repeatedInt32Array.addValue(300) | |
51 msg.repeatedInt32Array.addValue(301) | |
52 msg.repeatedStringArray.addObject("mno") | |
53 msg.repeatedStringArray.addObject("pqr") | |
54 msg.repeatedEnumArray.addValue(Message2_Enum.Bar.rawValue) | |
55 msg.repeatedEnumArray.addValue(Message2_Enum.Baz.rawValue) | |
56 msg.mapInt32Int32.setValue(400, forKey:500) | |
57 msg.mapInt32Int32.setValue(401, forKey:501) | |
58 msg.mapStringString.setObject("foo", forKey:"bar") | |
59 msg.mapStringString.setObject("abc", forKey:"xyz") | |
60 msg.mapInt32Enum.setValue(Message2_Enum.Bar.rawValue, forKey:600) | |
61 msg.mapInt32Enum.setValue(Message2_Enum.Baz.rawValue, forKey:601) | |
62 | |
63 // Check has*. | |
64 XCTAssertTrue(msg.hasOptionalInt32) | |
65 XCTAssertTrue(msg.hasOptionalString) | |
66 XCTAssertTrue(msg.hasOptionalEnum) | |
67 XCTAssertTrue(msg2.hasOptionalString) | |
68 XCTAssertTrue(msg.hasOptionalMessage) | |
69 XCTAssertTrue(msg3.hasA) | |
70 XCTAssertTrue(msg.hasOptionalGroup) | |
71 XCTAssertFalse(msg.hasOptionalInt64) | |
72 XCTAssertFalse(msg.hasOptionalFloat) | |
73 | |
74 // Check values. | |
75 XCTAssertEqual(msg.optionalInt32, Int32(100)) | |
76 XCTAssertEqual(msg.optionalString, "abc") | |
77 XCTAssertEqual(msg2.optionalString, "other") | |
78 XCTAssertTrue(msg.optionalMessage === msg2) | |
79 XCTAssertEqual(msg.optionalEnum, Message2_Enum.Bar) | |
80 XCTAssertEqual(msg3.a, Int32(200)) | |
81 XCTAssertTrue(msg.optionalGroup === msg3) | |
82 XCTAssertEqual(msg.repeatedInt32Array.count, UInt(2)) | |
83 XCTAssertEqual(msg.repeatedInt32Array.valueAtIndex(0), Int32(300)) | |
84 XCTAssertEqual(msg.repeatedInt32Array.valueAtIndex(1), Int32(301)) | |
85 XCTAssertEqual(msg.repeatedStringArray.count, Int(2)) | |
86 XCTAssertEqual(msg.repeatedStringArray.objectAtIndex(0) as! String, "mno") | |
87 XCTAssertEqual(msg.repeatedStringArray.objectAtIndex(1) as! String, "pqr") | |
88 XCTAssertEqual(msg.repeatedEnumArray.count, UInt(2)) | |
89 XCTAssertEqual(msg.repeatedEnumArray.valueAtIndex(0), Message2_Enum.Bar.rawV
alue) | |
90 XCTAssertEqual(msg.repeatedEnumArray.valueAtIndex(1), Message2_Enum.Baz.rawV
alue) | |
91 XCTAssertEqual(msg.repeatedInt64Array.count, UInt(0)) | |
92 XCTAssertEqual(msg.mapInt32Int32.count, UInt(2)) | |
93 var intValue: Int32 = 0; | |
94 XCTAssertTrue(msg.mapInt32Int32.valueForKey(500, value:&intValue)) | |
95 XCTAssertEqual(intValue, Int32(400)) | |
96 XCTAssertTrue(msg.mapInt32Int32.valueForKey(501, value:&intValue)) | |
97 XCTAssertEqual(intValue, Int32(401)) | |
98 XCTAssertEqual(msg.mapStringString.count, Int(2)) | |
99 XCTAssertEqual(msg.mapStringString.objectForKey("bar") as! String, "foo") | |
100 XCTAssertEqual(msg.mapStringString.objectForKey("xyz") as! String, "abc") | |
101 XCTAssertEqual(msg.mapInt32Enum.count, UInt(2)) | |
102 XCTAssertTrue(msg.mapInt32Enum.valueForKey(600, value:&intValue)) | |
103 XCTAssertEqual(intValue, Message2_Enum.Bar.rawValue) | |
104 XCTAssertTrue(msg.mapInt32Enum.valueForKey(601, value:&intValue)) | |
105 XCTAssertEqual(intValue, Message2_Enum.Baz.rawValue) | |
106 | |
107 // Clearing a string with nil. | |
108 msg2.optionalString = nil | |
109 XCTAssertFalse(msg2.hasOptionalString) | |
110 XCTAssertEqual(msg2.optionalString, "") | |
111 | |
112 // Clearing a message with nil. | |
113 msg.optionalGroup = nil | |
114 XCTAssertFalse(msg.hasOptionalGroup) | |
115 XCTAssertTrue(msg.optionalGroup !== msg3) // New instance | |
116 | |
117 // Clear. | |
118 msg.clear() | |
119 XCTAssertFalse(msg.hasOptionalInt32) | |
120 XCTAssertFalse(msg.hasOptionalString) | |
121 XCTAssertFalse(msg.hasOptionalEnum) | |
122 XCTAssertFalse(msg.hasOptionalMessage) | |
123 XCTAssertFalse(msg.hasOptionalInt64) | |
124 XCTAssertFalse(msg.hasOptionalFloat) | |
125 XCTAssertEqual(msg.optionalInt32, Int32(0)) | |
126 XCTAssertEqual(msg.optionalString, "") | |
127 XCTAssertTrue(msg.optionalMessage !== msg2) // New instance | |
128 XCTAssertEqual(msg.optionalEnum, Message2_Enum.Foo) // Default | |
129 XCTAssertEqual(msg.repeatedInt32Array.count, UInt(0)) | |
130 XCTAssertEqual(msg.repeatedStringArray.count, Int(0)) | |
131 XCTAssertEqual(msg.repeatedEnumArray.count, UInt(0)) | |
132 XCTAssertEqual(msg.mapInt32Int32.count, UInt(0)) | |
133 XCTAssertEqual(msg.mapStringString.count, Int(0)) | |
134 XCTAssertEqual(msg.mapInt32Enum.count, UInt(0)) | |
135 } | |
136 | |
137 func testProto3Basics() { | |
138 let msg = Message3() | |
139 let msg2 = Message3() | |
140 | |
141 msg.optionalInt32 = 100 | |
142 msg.optionalString = "abc" | |
143 msg.optionalEnum = .Bar | |
144 msg2.optionalString = "other" | |
145 msg.optionalMessage = msg2 | |
146 msg.repeatedInt32Array.addValue(300) | |
147 msg.repeatedInt32Array.addValue(301) | |
148 msg.repeatedStringArray.addObject("mno") | |
149 msg.repeatedStringArray.addObject("pqr") | |
150 // "proto3" syntax lets enum get unknown values. | |
151 msg.repeatedEnumArray.addValue(Message3_Enum.Bar.rawValue) | |
152 msg.repeatedEnumArray.addRawValue(666) | |
153 SetMessage3_OptionalEnum_RawValue(msg2, 666) | |
154 msg.mapInt32Int32.setValue(400, forKey:500) | |
155 msg.mapInt32Int32.setValue(401, forKey:501) | |
156 msg.mapStringString.setObject("foo", forKey:"bar") | |
157 msg.mapStringString.setObject("abc", forKey:"xyz") | |
158 msg.mapInt32Enum.setValue(Message2_Enum.Bar.rawValue, forKey:600) | |
159 // "proto3" syntax lets enum get unknown values. | |
160 msg.mapInt32Enum.setRawValue(666, forKey:601) | |
161 | |
162 // Has only exists on for message fields. | |
163 XCTAssertTrue(msg.hasOptionalMessage) | |
164 XCTAssertFalse(msg2.hasOptionalMessage) | |
165 | |
166 // Check values. | |
167 XCTAssertEqual(msg.optionalInt32, Int32(100)) | |
168 XCTAssertEqual(msg.optionalString, "abc") | |
169 XCTAssertEqual(msg2.optionalString, "other") | |
170 XCTAssertTrue(msg.optionalMessage === msg2) | |
171 XCTAssertEqual(msg.optionalEnum, Message3_Enum.Bar) | |
172 XCTAssertEqual(msg.repeatedInt32Array.count, UInt(2)) | |
173 XCTAssertEqual(msg.repeatedInt32Array.valueAtIndex(0), Int32(300)) | |
174 XCTAssertEqual(msg.repeatedInt32Array.valueAtIndex(1), Int32(301)) | |
175 XCTAssertEqual(msg.repeatedStringArray.count, Int(2)) | |
176 XCTAssertEqual(msg.repeatedStringArray.objectAtIndex(0) as! String, "mno") | |
177 XCTAssertEqual(msg.repeatedStringArray.objectAtIndex(1) as! String, "pqr") | |
178 XCTAssertEqual(msg.repeatedInt64Array.count, UInt(0)) | |
179 XCTAssertEqual(msg.repeatedEnumArray.count, UInt(2)) | |
180 XCTAssertEqual(msg.repeatedEnumArray.valueAtIndex(0), Message3_Enum.Bar.rawV
alue) | |
181 XCTAssertEqual(msg.repeatedEnumArray.valueAtIndex(1), Message3_Enum.GPBUnrec
ognizedEnumeratorValue.rawValue) | |
182 XCTAssertEqual(msg.repeatedEnumArray.rawValueAtIndex(1), 666) | |
183 XCTAssertEqual(msg2.optionalEnum, Message3_Enum.GPBUnrecognizedEnumeratorVal
ue) | |
184 XCTAssertEqual(Message3_OptionalEnum_RawValue(msg2), Int32(666)) | |
185 XCTAssertEqual(msg.mapInt32Int32.count, UInt(2)) | |
186 var intValue: Int32 = 0; | |
187 XCTAssertTrue(msg.mapInt32Int32.valueForKey(500, value:&intValue)) | |
188 XCTAssertEqual(intValue, Int32(400)) | |
189 XCTAssertTrue(msg.mapInt32Int32.valueForKey(501, value:&intValue)) | |
190 XCTAssertEqual(intValue, Int32(401)) | |
191 XCTAssertEqual(msg.mapStringString.count, Int(2)) | |
192 XCTAssertEqual(msg.mapStringString.objectForKey("bar") as! String, "foo") | |
193 XCTAssertEqual(msg.mapStringString.objectForKey("xyz") as! String, "abc") | |
194 XCTAssertEqual(msg.mapInt32Enum.count, UInt(2)) | |
195 XCTAssertTrue(msg.mapInt32Enum.valueForKey(600, value:&intValue)) | |
196 XCTAssertEqual(intValue, Message2_Enum.Bar.rawValue) | |
197 XCTAssertTrue(msg.mapInt32Enum.valueForKey(601, value:&intValue)) | |
198 XCTAssertEqual(intValue, Message3_Enum.GPBUnrecognizedEnumeratorValue.rawVal
ue) | |
199 XCTAssertTrue(msg.mapInt32Enum.valueForKey(601, rawValue:&intValue)) | |
200 XCTAssertEqual(intValue, 666) | |
201 | |
202 // Clearing a string with nil. | |
203 msg2.optionalString = nil | |
204 XCTAssertEqual(msg2.optionalString, "") | |
205 | |
206 // Clearing a message with nil. | |
207 msg.optionalMessage = nil | |
208 XCTAssertFalse(msg.hasOptionalMessage) | |
209 XCTAssertTrue(msg.optionalMessage !== msg2) // New instance | |
210 | |
211 // Clear. | |
212 msg.clear() | |
213 XCTAssertFalse(msg.hasOptionalMessage) | |
214 XCTAssertEqual(msg.optionalInt32, Int32(0)) | |
215 XCTAssertEqual(msg.optionalString, "") | |
216 XCTAssertTrue(msg.optionalMessage !== msg2) // New instance | |
217 XCTAssertEqual(msg.optionalEnum, Message3_Enum.Foo) // Default | |
218 XCTAssertEqual(msg.repeatedInt32Array.count, UInt(0)) | |
219 XCTAssertEqual(msg.repeatedStringArray.count, Int(0)) | |
220 XCTAssertEqual(msg.repeatedEnumArray.count, UInt(0)) | |
221 msg2.clear() | |
222 XCTAssertEqual(msg2.optionalEnum, Message3_Enum.Foo) // Default | |
223 XCTAssertEqual(Message3_OptionalEnum_RawValue(msg2), Message3_Enum.Foo.rawVa
lue) | |
224 XCTAssertEqual(msg.mapInt32Int32.count, UInt(0)) | |
225 XCTAssertEqual(msg.mapStringString.count, Int(0)) | |
226 XCTAssertEqual(msg.mapInt32Enum.count, UInt(0)) | |
227 } | |
228 | |
229 func testAutoCreation() { | |
230 let msg = Message2() | |
231 | |
232 XCTAssertFalse(msg.hasOptionalGroup) | |
233 XCTAssertFalse(msg.hasOptionalMessage) | |
234 | |
235 // Access shouldn't result in has* but should return objects. | |
236 let msg2 = msg.optionalGroup | |
237 let msg3 = msg.optionalMessage.optionalMessage | |
238 let msg4 = msg.optionalMessage | |
239 XCTAssertNotNil(msg2) | |
240 XCTAssertNotNil(msg3) | |
241 XCTAssertFalse(msg.hasOptionalGroup) | |
242 XCTAssertFalse(msg.optionalMessage.hasOptionalMessage) | |
243 XCTAssertFalse(msg.hasOptionalMessage) | |
244 | |
245 // Setting things should trigger has* getting set. | |
246 msg.optionalGroup.a = 10 | |
247 msg.optionalMessage.optionalMessage.optionalInt32 = 100 | |
248 XCTAssertTrue(msg.hasOptionalGroup) | |
249 XCTAssertTrue(msg.optionalMessage.hasOptionalMessage) | |
250 XCTAssertTrue(msg.hasOptionalMessage) | |
251 | |
252 // And they should be the same pointer as before. | |
253 XCTAssertTrue(msg2 === msg.optionalGroup) | |
254 XCTAssertTrue(msg3 === msg.optionalMessage.optionalMessage) | |
255 XCTAssertTrue(msg4 === msg.optionalMessage) | |
256 | |
257 // Clear gets us new objects next time around. | |
258 msg.clear() | |
259 XCTAssertFalse(msg.hasOptionalGroup) | |
260 XCTAssertFalse(msg.optionalMessage.hasOptionalMessage) | |
261 XCTAssertFalse(msg.hasOptionalMessage) | |
262 msg.optionalGroup.a = 20 | |
263 msg.optionalMessage.optionalMessage.optionalInt32 = 200 | |
264 XCTAssertTrue(msg.hasOptionalGroup) | |
265 XCTAssertTrue(msg.optionalMessage.hasOptionalMessage) | |
266 XCTAssertTrue(msg.hasOptionalMessage) | |
267 XCTAssertTrue(msg2 !== msg.optionalGroup) | |
268 XCTAssertTrue(msg3 !== msg.optionalMessage.optionalMessage) | |
269 XCTAssertTrue(msg4 !== msg.optionalMessage) | |
270 | |
271 // Explicit set of a message, means autocreated object doesn't bind. | |
272 msg.clear() | |
273 let autoCreated = msg.optionalMessage | |
274 XCTAssertFalse(msg.hasOptionalMessage) | |
275 let msg5 = Message2() | |
276 msg5.optionalInt32 = 123 | |
277 msg.optionalMessage = msg5 | |
278 XCTAssertTrue(msg.hasOptionalMessage) | |
279 // Modifing the autocreated doesn't replaced the explicit set one. | |
280 autoCreated.optionalInt32 = 456 | |
281 XCTAssertTrue(msg.hasOptionalMessage) | |
282 XCTAssertTrue(msg.optionalMessage === msg5) | |
283 XCTAssertEqual(msg.optionalMessage.optionalInt32, Int32(123)) | |
284 } | |
285 | |
286 func testProto2OneOfSupport() { | |
287 let msg = Message2() | |
288 | |
289 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase.GPBUnsetOneOfCase) | |
290 XCTAssertEqual(msg.oneofInt32, Int32(100)) // Default | |
291 XCTAssertEqual(msg.oneofFloat, Float(110.0)) // Default | |
292 XCTAssertEqual(msg.oneofEnum, Message2_Enum.Baz) // Default | |
293 let autoCreated = msg.oneofMessage // Default create one. | |
294 XCTAssertNotNil(autoCreated) | |
295 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase.GPBUnsetOneOfCase) | |
296 | |
297 msg.oneofInt32 = 10 | |
298 XCTAssertEqual(msg.oneofInt32, Int32(10)) | |
299 XCTAssertEqual(msg.oneofFloat, Float(110.0)) // Default | |
300 XCTAssertEqual(msg.oneofEnum, Message2_Enum.Baz) // Default | |
301 XCTAssertTrue(msg.oneofMessage === autoCreated) // Still the same | |
302 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase.OneofInt32) | |
303 | |
304 msg.oneofFloat = 20.0 | |
305 XCTAssertEqual(msg.oneofInt32, Int32(100)) // Default | |
306 XCTAssertEqual(msg.oneofFloat, Float(20.0)) | |
307 XCTAssertEqual(msg.oneofEnum, Message2_Enum.Baz) // Default | |
308 XCTAssertTrue(msg.oneofMessage === autoCreated) // Still the same | |
309 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase.OneofFloat) | |
310 | |
311 msg.oneofEnum = .Bar | |
312 XCTAssertEqual(msg.oneofInt32, Int32(100)) // Default | |
313 XCTAssertEqual(msg.oneofFloat, Float(110.0)) // Default | |
314 XCTAssertEqual(msg.oneofEnum, Message2_Enum.Bar) | |
315 XCTAssertTrue(msg.oneofMessage === autoCreated) // Still the same | |
316 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase.OneofEnum) | |
317 | |
318 // Sets via the autocreated instance. | |
319 msg.oneofMessage.optionalInt32 = 200 | |
320 XCTAssertEqual(msg.oneofInt32, Int32(100)) // Default | |
321 XCTAssertEqual(msg.oneofFloat, Float(110.0)) // Default | |
322 XCTAssertEqual(msg.oneofEnum, Message2_Enum.Baz) // Default | |
323 XCTAssertTrue(msg.oneofMessage === autoCreated) // Still the same | |
324 XCTAssertEqual(msg.oneofMessage.optionalInt32, Int32(200)) | |
325 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase.OneofMessage) | |
326 | |
327 // Clear the oneof. | |
328 Message2_ClearOOneOfCase(msg) | |
329 XCTAssertEqual(msg.oneofInt32, Int32(100)) // Default | |
330 XCTAssertEqual(msg.oneofFloat, Float(110.0)) // Default | |
331 XCTAssertEqual(msg.oneofEnum, Message2_Enum.Baz) // Default | |
332 let autoCreated2 = msg.oneofMessage // Default create one | |
333 XCTAssertNotNil(autoCreated2) | |
334 XCTAssertTrue(autoCreated2 !== autoCreated) // New instance | |
335 XCTAssertEqual(msg.oneofMessage.optionalInt32, Int32(0)) // Default | |
336 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase.GPBUnsetOneOfCase) | |
337 | |
338 msg.oneofInt32 = 10 | |
339 XCTAssertEqual(msg.oneofInt32, Int32(10)) | |
340 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase.OneofInt32) | |
341 | |
342 // Confirm Message.clear() handles the oneof correctly. | |
343 msg.clear() | |
344 XCTAssertEqual(msg.oneofInt32, Int32(100)) // Default | |
345 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase.GPBUnsetOneOfCase) | |
346 | |
347 // Sets via the autocreated instance. | |
348 msg.oneofMessage.optionalInt32 = 300 | |
349 XCTAssertTrue(msg.oneofMessage !== autoCreated) // New instance | |
350 XCTAssertTrue(msg.oneofMessage !== autoCreated2) // New instance | |
351 XCTAssertEqual(msg.oneofMessage.optionalInt32, Int32(300)) | |
352 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase.OneofMessage) | |
353 | |
354 // Set message to nil clears the oneof. | |
355 msg.oneofMessage = nil | |
356 XCTAssertEqual(msg.oneofMessage.optionalInt32, Int32(0)) // Default | |
357 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase.GPBUnsetOneOfCase) | |
358 } | |
359 | |
360 func testProto3OneOfSupport() { | |
361 let msg = Message3() | |
362 | |
363 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase.GPBUnsetOneOfCase) | |
364 XCTAssertEqual(msg.oneofInt32, Int32(0)) // Default | |
365 XCTAssertEqual(msg.oneofFloat, Float(0.0)) // Default | |
366 XCTAssertEqual(msg.oneofEnum, Message3_Enum.Foo) // Default | |
367 let autoCreated = msg.oneofMessage // Default create one. | |
368 XCTAssertNotNil(autoCreated) | |
369 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase.GPBUnsetOneOfCase) | |
370 | |
371 msg.oneofInt32 = 10 | |
372 XCTAssertEqual(msg.oneofInt32, Int32(10)) | |
373 XCTAssertEqual(msg.oneofFloat, Float(0.0)) // Default | |
374 XCTAssertEqual(msg.oneofEnum, Message3_Enum.Foo) // Default | |
375 XCTAssertTrue(msg.oneofMessage === autoCreated) // Still the same | |
376 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase.OneofInt32) | |
377 | |
378 msg.oneofFloat = 20.0 | |
379 XCTAssertEqual(msg.oneofInt32, Int32(0)) // Default | |
380 XCTAssertEqual(msg.oneofFloat, Float(20.0)) | |
381 XCTAssertEqual(msg.oneofEnum, Message3_Enum.Foo) // Default | |
382 XCTAssertTrue(msg.oneofMessage === autoCreated) // Still the same | |
383 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase.OneofFloat) | |
384 | |
385 msg.oneofEnum = .Bar | |
386 XCTAssertEqual(msg.oneofInt32, Int32(0)) // Default | |
387 XCTAssertEqual(msg.oneofFloat, Float(0.0)) // Default | |
388 XCTAssertEqual(msg.oneofEnum, Message3_Enum.Bar) | |
389 XCTAssertTrue(msg.oneofMessage === autoCreated) // Still the same | |
390 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase.OneofEnum) | |
391 | |
392 // Sets via the autocreated instance. | |
393 msg.oneofMessage.optionalInt32 = 200 | |
394 XCTAssertEqual(msg.oneofInt32, Int32(0)) // Default | |
395 XCTAssertEqual(msg.oneofFloat, Float(0.0)) // Default | |
396 XCTAssertEqual(msg.oneofEnum, Message3_Enum.Foo) // Default | |
397 XCTAssertTrue(msg.oneofMessage === autoCreated) // Still the same | |
398 XCTAssertEqual(msg.oneofMessage.optionalInt32, Int32(200)) | |
399 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase.OneofMessage) | |
400 | |
401 // Clear the oneof. | |
402 Message3_ClearOOneOfCase(msg) | |
403 XCTAssertEqual(msg.oneofInt32, Int32(0)) // Default | |
404 XCTAssertEqual(msg.oneofFloat, Float(0.0)) // Default | |
405 XCTAssertEqual(msg.oneofEnum, Message3_Enum.Foo) // Default | |
406 let autoCreated2 = msg.oneofMessage // Default create one | |
407 XCTAssertNotNil(autoCreated2) | |
408 XCTAssertTrue(autoCreated2 !== autoCreated) // New instance | |
409 XCTAssertEqual(msg.oneofMessage.optionalInt32, Int32(0)) // Default | |
410 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase.GPBUnsetOneOfCase) | |
411 | |
412 msg.oneofInt32 = 10 | |
413 XCTAssertEqual(msg.oneofInt32, Int32(10)) | |
414 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase.OneofInt32) | |
415 | |
416 // Confirm Message.clear() handles the oneof correctly. | |
417 msg.clear() | |
418 XCTAssertEqual(msg.oneofInt32, Int32(0)) // Default | |
419 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase.GPBUnsetOneOfCase) | |
420 | |
421 // Sets via the autocreated instance. | |
422 msg.oneofMessage.optionalInt32 = 300 | |
423 XCTAssertTrue(msg.oneofMessage !== autoCreated) // New instance | |
424 XCTAssertTrue(msg.oneofMessage !== autoCreated2) // New instance | |
425 XCTAssertEqual(msg.oneofMessage.optionalInt32, Int32(300)) | |
426 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase.OneofMessage) | |
427 | |
428 // Set message to nil clears the oneof. | |
429 msg.oneofMessage = nil | |
430 XCTAssertEqual(msg.oneofMessage.optionalInt32, Int32(0)) // Default | |
431 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase.GPBUnsetOneOfCase) | |
432 } | |
433 | |
434 func testSerialization() { | |
435 let msg = Message2() | |
436 | |
437 msg.optionalInt32 = 100 | |
438 msg.optionalInt64 = 101 | |
439 msg.optionalGroup.a = 102 | |
440 msg.repeatedStringArray.addObject("abc") | |
441 msg.repeatedStringArray.addObject("def") | |
442 msg.mapInt32Int32.setValue(200, forKey:300) | |
443 msg.mapInt32Int32.setValue(201, forKey:201) | |
444 msg.mapStringString.setObject("foo", forKey:"bar") | |
445 msg.mapStringString.setObject("abc", forKey:"xyz") | |
446 | |
447 let data = msg.data() | |
448 | |
449 let msg2 = Message2(data: data!, error:nil) | |
450 XCTAssertTrue(msg2 !== msg) // New instance | |
451 XCTAssertEqual(msg.optionalInt32, Int32(100)) | |
452 XCTAssertEqual(msg.optionalInt64, Int64(101)) | |
453 XCTAssertEqual(msg.optionalGroup.a, Int32(102)) | |
454 XCTAssertEqual(msg.repeatedStringArray.count, Int(2)) | |
455 XCTAssertEqual(msg.mapInt32Int32.count, UInt(2)) | |
456 XCTAssertEqual(msg.mapStringString.count, Int(2)) | |
457 XCTAssertEqual(msg2, msg) | |
458 } | |
459 | |
460 } | |
OLD | NEW |