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 |