| OLD | NEW |
| 1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format |
| 2 // Copyright 2015 Google Inc. All rights reserved. | 2 // Copyright 2015 Google Inc. All rights reserved. |
| 3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ |
| 4 // | 4 // |
| 5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
| 6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
| 7 // met: | 7 // met: |
| 8 // | 8 // |
| 9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
| 10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 30 | 30 |
| 31 #import "GPBTestUtilities.h" | 31 #import "GPBTestUtilities.h" |
| 32 | 32 |
| 33 #import <objc/runtime.h> | 33 #import <objc/runtime.h> |
| 34 | 34 |
| 35 #import "GPBMessage.h" | 35 #import "GPBMessage.h" |
| 36 | 36 |
| 37 #import "google/protobuf/MapUnittest.pbobjc.h" | 37 #import "google/protobuf/MapUnittest.pbobjc.h" |
| 38 #import "google/protobuf/Unittest.pbobjc.h" | 38 #import "google/protobuf/Unittest.pbobjc.h" |
| 39 #import "google/protobuf/UnittestCycle.pbobjc.h" | |
| 40 #import "google/protobuf/UnittestObjcStartup.pbobjc.h" | 39 #import "google/protobuf/UnittestObjcStartup.pbobjc.h" |
| 41 #import "google/protobuf/UnittestRuntimeProto2.pbobjc.h" | 40 #import "google/protobuf/UnittestRuntimeProto2.pbobjc.h" |
| 42 #import "google/protobuf/UnittestRuntimeProto3.pbobjc.h" | 41 #import "google/protobuf/UnittestRuntimeProto3.pbobjc.h" |
| 43 | 42 |
| 44 @interface MessageRuntimeTests : GPBTestCase | 43 @interface MessageRuntimeTests : GPBTestCase |
| 45 @end | 44 @end |
| 46 | 45 |
| 47 @implementation MessageRuntimeTests | 46 @implementation MessageRuntimeTests |
| 48 | 47 |
| 49 // TODO(thomasvl): Pull tests over from GPBMessageTests that are runtime | 48 // TODO(thomasvl): Pull tests over from GPBMessageTests that are runtime |
| 50 // specific. | 49 // specific. |
| 51 | 50 |
| 52 - (void)testStartupOrdering { | 51 - (void)testStartupOrdering { |
| 53 // Message class/Root class initialization is a little tricky, so these just | 52 // Just have to create a message. Nothing else uses the classes from |
| 54 // create some possible patterns that can be a problem. The messages don't | 53 // this file, so the first selector invoked on the class will initialize |
| 55 // have to be exercised, just creating them is enough to test. If there | 54 // it, which also initializes the root. |
| 56 // is a problem, the runtime should assert or hang. | |
| 57 // | |
| 58 // Note: the messages from these proto files should not be used in any other | |
| 59 // tests, that way when they are referenced here it will be the first use and | |
| 60 // initialization will take place now. | |
| 61 | |
| 62 TestObjCStartupMessage *message = [TestObjCStartupMessage message]; | 55 TestObjCStartupMessage *message = [TestObjCStartupMessage message]; |
| 63 XCTAssertNotNil(message); | 56 XCTAssertNotNil(message); |
| 64 | |
| 65 CycleBaz *baz = [CycleBaz message]; | |
| 66 CycleBar *bar = [CycleBar message]; | |
| 67 CycleFoo *foo = [CycleFoo message]; | |
| 68 XCTAssertNotNil(baz); | |
| 69 XCTAssertNotNil(bar); | |
| 70 XCTAssertNotNil(foo); | |
| 71 } | 57 } |
| 72 | 58 |
| 73 - (void)testProto2HasMethodSupport { | 59 - (void)testProto2HasMethodSupport { |
| 74 NSArray *names = @[ | 60 NSArray *names = @[ |
| 75 @"Int32", | 61 @"Int32", |
| 76 @"Int64", | 62 @"Int64", |
| 77 @"Uint32", | 63 @"Uint32", |
| 78 @"Uint64", | 64 @"Uint64", |
| 79 @"Sint32", | 65 @"Sint32", |
| 80 @"Sint64", | 66 @"Sint64", |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 //% { // optional##FIELD :: ZERO_VALUE | 319 //% { // optional##FIELD :: ZERO_VALUE |
| 334 //% Message2 *msg = [[Message2 alloc] init]; | 320 //% Message2 *msg = [[Message2 alloc] init]; |
| 335 //% XCTAssertFalse(msg.hasOptional##FIELD); | 321 //% XCTAssertFalse(msg.hasOptional##FIELD); |
| 336 //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Opti
onal##FIELD)); | 322 //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Opti
onal##FIELD)); |
| 337 //% msg.optional##FIELD = ZERO_VALUE; | 323 //% msg.optional##FIELD = ZERO_VALUE; |
| 338 //% XCTAssertTrue(msg.hasOptional##FIELD); | 324 //% XCTAssertTrue(msg.hasOptional##FIELD); |
| 339 //% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optio
nal##FIELD)); | 325 //% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optio
nal##FIELD)); |
| 340 //% [msg release]; | 326 //% [msg release]; |
| 341 //% } | 327 //% } |
| 342 //% | 328 //% |
| 343 //%PDDM-DEFINE PROTO2_TEST_CLEAR_FIELD_WITH_NIL(FIELD, VALUE) | |
| 344 //% { // optional##FIELD | |
| 345 //% Message2 *msg = [[Message2 alloc] init]; | |
| 346 //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Opti
onal##FIELD)); | |
| 347 //% msg.optional##FIELD = VALUE; | |
| 348 //% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optio
nal##FIELD)); | |
| 349 //% msg.optional##FIELD = nil; | |
| 350 //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Opti
onal##FIELD)); | |
| 351 //% [msg release]; | |
| 352 //% } | |
| 353 //% | |
| 354 //%PDDM-DEFINE PROTO2_TEST_HAS_FIELDS() | 329 //%PDDM-DEFINE PROTO2_TEST_HAS_FIELDS() |
| 355 //%PROTO2_TEST_HAS_FIELD(Int32, 1, 0) | 330 //%PROTO2_TEST_HAS_FIELD(Int32, 1, 0) |
| 356 //%PROTO2_TEST_HAS_FIELD(Int64, 1, 0) | 331 //%PROTO2_TEST_HAS_FIELD(Int64, 1, 0) |
| 357 //%PROTO2_TEST_HAS_FIELD(Uint32, 1, 0) | 332 //%PROTO2_TEST_HAS_FIELD(Uint32, 1, 0) |
| 358 //%PROTO2_TEST_HAS_FIELD(Uint64, 1, 0) | 333 //%PROTO2_TEST_HAS_FIELD(Uint64, 1, 0) |
| 359 //%PROTO2_TEST_HAS_FIELD(Sint32, 1, 0) | 334 //%PROTO2_TEST_HAS_FIELD(Sint32, 1, 0) |
| 360 //%PROTO2_TEST_HAS_FIELD(Sint64, 1, 0) | 335 //%PROTO2_TEST_HAS_FIELD(Sint64, 1, 0) |
| 361 //%PROTO2_TEST_HAS_FIELD(Fixed32, 1, 0) | 336 //%PROTO2_TEST_HAS_FIELD(Fixed32, 1, 0) |
| 362 //%PROTO2_TEST_HAS_FIELD(Fixed64, 1, 0) | 337 //%PROTO2_TEST_HAS_FIELD(Fixed64, 1, 0) |
| 363 //%PROTO2_TEST_HAS_FIELD(Sfixed32, 1, 0) | 338 //%PROTO2_TEST_HAS_FIELD(Sfixed32, 1, 0) |
| 364 //%PROTO2_TEST_HAS_FIELD(Sfixed64, 1, 0) | 339 //%PROTO2_TEST_HAS_FIELD(Sfixed64, 1, 0) |
| 365 //%PROTO2_TEST_HAS_FIELD(Float, 1.0f, 0.0f) | 340 //%PROTO2_TEST_HAS_FIELD(Float, 1.0f, 0.0f) |
| 366 //%PROTO2_TEST_HAS_FIELD(Double, 1.0, 0.0) | 341 //%PROTO2_TEST_HAS_FIELD(Double, 1.0, 0.0) |
| 367 //%PROTO2_TEST_HAS_FIELD(Bool, YES, NO) | 342 //%PROTO2_TEST_HAS_FIELD(Bool, YES, NO) |
| 368 //%PROTO2_TEST_HAS_FIELD(String, @"foo", @"") | 343 //%PROTO2_TEST_HAS_FIELD(String, @"foo", @"") |
| 369 //%PROTO2_TEST_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding],
[NSData data]) | 344 //%PROTO2_TEST_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding],
[NSData data]) |
| 370 //% // | 345 //% // |
| 371 //% // Test doesn't apply to optionalGroup/optionalMessage. | 346 //% // Test doesn't apply to optionalGroup/optionalMessage. |
| 372 //% // | 347 //% // |
| 373 //% | 348 //% |
| 374 //%PROTO2_TEST_HAS_FIELD(Enum, Message2_Enum_Bar, Message2_Enum_Foo) | 349 //%PROTO2_TEST_HAS_FIELD(Enum, Message2_Enum_Bar, Message2_Enum_Foo) |
| 375 //% // | |
| 376 //% // Nil can also be used to clear strings, bytes, groups, and messages. | |
| 377 //% // | |
| 378 //% | |
| 379 //%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(String, @"foo") | |
| 380 //%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Bytes, [@"foo" dataUsingEncoding:NSUTF8Strin
gEncoding]) | |
| 381 //%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Group, [Message2_OptionalGroup message]) | |
| 382 //%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Message, [Message2 message]) | |
| 383 //%PDDM-EXPAND PROTO2_TEST_HAS_FIELDS() | 350 //%PDDM-EXPAND PROTO2_TEST_HAS_FIELDS() |
| 384 // This block of code is generated, do not edit it directly. | 351 // This block of code is generated, do not edit it directly. |
| 385 | 352 |
| 386 { // optionalInt32 :: 1 | 353 { // optionalInt32 :: 1 |
| 387 Message2 *msg = [[Message2 alloc] init]; | 354 Message2 *msg = [[Message2 alloc] init]; |
| 388 XCTAssertFalse(msg.hasOptionalInt32); | 355 XCTAssertFalse(msg.hasOptionalInt32); |
| 389 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lInt32)); | 356 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lInt32)); |
| 390 msg.optionalInt32 = 1; | 357 msg.optionalInt32 = 1; |
| 391 XCTAssertTrue(msg.hasOptionalInt32); | 358 XCTAssertTrue(msg.hasOptionalInt32); |
| 392 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional
Int32)); | 359 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional
Int32)); |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 684 { // optionalEnum :: Message2_Enum_Foo | 651 { // optionalEnum :: Message2_Enum_Foo |
| 685 Message2 *msg = [[Message2 alloc] init]; | 652 Message2 *msg = [[Message2 alloc] init]; |
| 686 XCTAssertFalse(msg.hasOptionalEnum); | 653 XCTAssertFalse(msg.hasOptionalEnum); |
| 687 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lEnum)); | 654 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lEnum)); |
| 688 msg.optionalEnum = Message2_Enum_Foo; | 655 msg.optionalEnum = Message2_Enum_Foo; |
| 689 XCTAssertTrue(msg.hasOptionalEnum); | 656 XCTAssertTrue(msg.hasOptionalEnum); |
| 690 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional
Enum)); | 657 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional
Enum)); |
| 691 [msg release]; | 658 [msg release]; |
| 692 } | 659 } |
| 693 | 660 |
| 694 // | |
| 695 // Nil can also be used to clear strings, bytes, groups, and messages. | |
| 696 // | |
| 697 | |
| 698 { // optionalString | |
| 699 Message2 *msg = [[Message2 alloc] init]; | |
| 700 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lString)); | |
| 701 msg.optionalString = @"foo"; | |
| 702 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional
String)); | |
| 703 msg.optionalString = nil; | |
| 704 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lString)); | |
| 705 [msg release]; | |
| 706 } | |
| 707 | |
| 708 { // optionalBytes | |
| 709 Message2 *msg = [[Message2 alloc] init]; | |
| 710 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lBytes)); | |
| 711 msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding]; | |
| 712 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional
Bytes)); | |
| 713 msg.optionalBytes = nil; | |
| 714 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lBytes)); | |
| 715 [msg release]; | |
| 716 } | |
| 717 | |
| 718 { // optionalGroup | |
| 719 Message2 *msg = [[Message2 alloc] init]; | |
| 720 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lGroup)); | |
| 721 msg.optionalGroup = [Message2_OptionalGroup message]; | |
| 722 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional
Group)); | |
| 723 msg.optionalGroup = nil; | |
| 724 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lGroup)); | |
| 725 [msg release]; | |
| 726 } | |
| 727 | |
| 728 { // optionalMessage | |
| 729 Message2 *msg = [[Message2 alloc] init]; | |
| 730 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lMessage)); | |
| 731 msg.optionalMessage = [Message2 message]; | |
| 732 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional
Message)); | |
| 733 msg.optionalMessage = nil; | |
| 734 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optiona
lMessage)); | |
| 735 [msg release]; | |
| 736 } | |
| 737 | |
| 738 //%PDDM-EXPAND-END PROTO2_TEST_HAS_FIELDS() | 661 //%PDDM-EXPAND-END PROTO2_TEST_HAS_FIELDS() |
| 739 } | 662 } |
| 740 | 663 |
| 741 - (void)testProto3SingleFieldHasBehavior { | 664 - (void)testProto3SingleFieldHasBehavior { |
| 742 // | 665 // |
| 743 // Setting to any value but the default value (0) should result has* | 666 // Setting to any value including the default value (0) should result has* |
| 744 // being true. When set to the default, shouldn't be true. | 667 // being true. |
| 745 // | 668 // |
| 746 | 669 |
| 747 //%PDDM-DEFINE PROTO3_TEST_HAS_FIELD(FIELD, NON_ZERO_VALUE, ZERO_VALUE) | 670 //%PDDM-DEFINE PROTO3_TEST_HAS_FIELD(FIELD, NON_ZERO_VALUE, ZERO_VALUE) |
| 748 //% { // optional##FIELD | 671 //% { // optional##FIELD |
| 749 //% Message3 *msg = [[Message3 alloc] init]; | 672 //% Message3 *msg = [[Message3 alloc] init]; |
| 750 //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Opti
onal##FIELD)); | 673 //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Opti
onal##FIELD)); |
| 751 //% msg.optional##FIELD = NON_ZERO_VALUE; | 674 //% msg.optional##FIELD = NON_ZERO_VALUE; |
| 752 //% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optio
nal##FIELD)); | 675 //% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optio
nal##FIELD)); |
| 753 //% msg.optional##FIELD = ZERO_VALUE; | 676 //% msg.optional##FIELD = ZERO_VALUE; |
| 754 //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Opti
onal##FIELD)); | 677 //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Opti
onal##FIELD)); |
| 755 //% [msg release]; | 678 //% [msg release]; |
| 756 //% } | 679 //% } |
| 757 //% | 680 //% |
| 758 //%PDDM-DEFINE PROTO3_TEST_CLEAR_FIELD_WITH_NIL(FIELD, VALUE) | |
| 759 //% { // optional##FIELD | |
| 760 //% Message3 *msg = [[Message3 alloc] init]; | |
| 761 //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Opti
onal##FIELD)); | |
| 762 //% msg.optional##FIELD = VALUE; | |
| 763 //% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optio
nal##FIELD)); | |
| 764 //% msg.optional##FIELD = nil; | |
| 765 //% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Opti
onal##FIELD)); | |
| 766 //% [msg release]; | |
| 767 //% } | |
| 768 //% | |
| 769 //%PDDM-DEFINE PROTO3_TEST_HAS_FIELDS() | 681 //%PDDM-DEFINE PROTO3_TEST_HAS_FIELDS() |
| 770 //%PROTO3_TEST_HAS_FIELD(Int32, 1, 0) | 682 //%PROTO3_TEST_HAS_FIELD(Int32, 1, 0) |
| 771 //%PROTO3_TEST_HAS_FIELD(Int64, 1, 0) | 683 //%PROTO3_TEST_HAS_FIELD(Int64, 1, 0) |
| 772 //%PROTO3_TEST_HAS_FIELD(Uint32, 1, 0) | 684 //%PROTO3_TEST_HAS_FIELD(Uint32, 1, 0) |
| 773 //%PROTO3_TEST_HAS_FIELD(Uint64, 1, 0) | 685 //%PROTO3_TEST_HAS_FIELD(Uint64, 1, 0) |
| 774 //%PROTO3_TEST_HAS_FIELD(Sint32, 1, 0) | 686 //%PROTO3_TEST_HAS_FIELD(Sint32, 1, 0) |
| 775 //%PROTO3_TEST_HAS_FIELD(Sint64, 1, 0) | 687 //%PROTO3_TEST_HAS_FIELD(Sint64, 1, 0) |
| 776 //%PROTO3_TEST_HAS_FIELD(Fixed32, 1, 0) | 688 //%PROTO3_TEST_HAS_FIELD(Fixed32, 1, 0) |
| 777 //%PROTO3_TEST_HAS_FIELD(Fixed64, 1, 0) | 689 //%PROTO3_TEST_HAS_FIELD(Fixed64, 1, 0) |
| 778 //%PROTO3_TEST_HAS_FIELD(Sfixed32, 1, 0) | 690 //%PROTO3_TEST_HAS_FIELD(Sfixed32, 1, 0) |
| 779 //%PROTO3_TEST_HAS_FIELD(Sfixed64, 1, 0) | 691 //%PROTO3_TEST_HAS_FIELD(Sfixed64, 1, 0) |
| 780 //%PROTO3_TEST_HAS_FIELD(Float, 1.0f, 0.0f) | 692 //%PROTO3_TEST_HAS_FIELD(Float, 1.0f, 0.0f) |
| 781 //%PROTO3_TEST_HAS_FIELD(Double, 1.0, 0.0) | 693 //%PROTO3_TEST_HAS_FIELD(Double, 1.0, 0.0) |
| 782 //%PROTO3_TEST_HAS_FIELD(Bool, YES, NO) | 694 //%PROTO3_TEST_HAS_FIELD(Bool, YES, NO) |
| 783 //%PROTO3_TEST_HAS_FIELD(String, @"foo", @"") | 695 //%PROTO3_TEST_HAS_FIELD(String, @"foo", @"") |
| 784 //%PROTO3_TEST_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding],
[NSData data]) | 696 //%PROTO3_TEST_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding],
[NSData data]) |
| 785 //% // | 697 //% // |
| 786 //% // Test doesn't apply to optionalMessage (no groups in proto3). | 698 //% // Test doesn't apply to optionalGroup/optionalMessage. |
| 787 //% // | 699 //% // |
| 788 //% | 700 //% |
| 789 //%PROTO3_TEST_HAS_FIELD(Enum, Message3_Enum_Bar, Message3_Enum_Foo) | 701 //%PROTO3_TEST_HAS_FIELD(Enum, Message3_Enum_Bar, Message3_Enum_Foo) |
| 790 //% // | |
| 791 //% // Nil can also be used to clear strings, bytes, and messages (no groups in
proto3). | |
| 792 //% // | |
| 793 //% | |
| 794 //%PROTO3_TEST_CLEAR_FIELD_WITH_NIL(String, @"foo") | |
| 795 //%PROTO3_TEST_CLEAR_FIELD_WITH_NIL(Bytes, [@"foo" dataUsingEncoding:NSUTF8Strin
gEncoding]) | |
| 796 //%PROTO3_TEST_CLEAR_FIELD_WITH_NIL(Message, [Message3 message]) | |
| 797 //%PDDM-EXPAND PROTO3_TEST_HAS_FIELDS() | 702 //%PDDM-EXPAND PROTO3_TEST_HAS_FIELDS() |
| 798 // This block of code is generated, do not edit it directly. | 703 // This block of code is generated, do not edit it directly. |
| 799 | 704 |
| 800 { // optionalInt32 | 705 { // optionalInt32 |
| 801 Message3 *msg = [[Message3 alloc] init]; | 706 Message3 *msg = [[Message3 alloc] init]; |
| 802 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lInt32)); | 707 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lInt32)); |
| 803 msg.optionalInt32 = 1; | 708 msg.optionalInt32 = 1; |
| 804 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional
Int32)); | 709 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional
Int32)); |
| 805 msg.optionalInt32 = 0; | 710 msg.optionalInt32 = 0; |
| 806 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lInt32)); | 711 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lInt32)); |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 941 Message3 *msg = [[Message3 alloc] init]; | 846 Message3 *msg = [[Message3 alloc] init]; |
| 942 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lBytes)); | 847 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lBytes)); |
| 943 msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding]; | 848 msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding]; |
| 944 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional
Bytes)); | 849 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional
Bytes)); |
| 945 msg.optionalBytes = [NSData data]; | 850 msg.optionalBytes = [NSData data]; |
| 946 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lBytes)); | 851 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lBytes)); |
| 947 [msg release]; | 852 [msg release]; |
| 948 } | 853 } |
| 949 | 854 |
| 950 // | 855 // |
| 951 // Test doesn't apply to optionalMessage (no groups in proto3). | 856 // Test doesn't apply to optionalGroup/optionalMessage. |
| 952 // | 857 // |
| 953 | 858 |
| 954 { // optionalEnum | 859 { // optionalEnum |
| 955 Message3 *msg = [[Message3 alloc] init]; | 860 Message3 *msg = [[Message3 alloc] init]; |
| 956 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lEnum)); | 861 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lEnum)); |
| 957 msg.optionalEnum = Message3_Enum_Bar; | 862 msg.optionalEnum = Message3_Enum_Bar; |
| 958 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional
Enum)); | 863 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional
Enum)); |
| 959 msg.optionalEnum = Message3_Enum_Foo; | 864 msg.optionalEnum = Message3_Enum_Foo; |
| 960 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lEnum)); | 865 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lEnum)); |
| 961 [msg release]; | 866 [msg release]; |
| 962 } | 867 } |
| 963 | 868 |
| 964 // | |
| 965 // Nil can also be used to clear strings, bytes, and messages (no groups in pr
oto3). | |
| 966 // | |
| 967 | |
| 968 { // optionalString | |
| 969 Message3 *msg = [[Message3 alloc] init]; | |
| 970 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lString)); | |
| 971 msg.optionalString = @"foo"; | |
| 972 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional
String)); | |
| 973 msg.optionalString = nil; | |
| 974 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lString)); | |
| 975 [msg release]; | |
| 976 } | |
| 977 | |
| 978 { // optionalBytes | |
| 979 Message3 *msg = [[Message3 alloc] init]; | |
| 980 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lBytes)); | |
| 981 msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding]; | |
| 982 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional
Bytes)); | |
| 983 msg.optionalBytes = nil; | |
| 984 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lBytes)); | |
| 985 [msg release]; | |
| 986 } | |
| 987 | |
| 988 { // optionalMessage | |
| 989 Message3 *msg = [[Message3 alloc] init]; | |
| 990 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lMessage)); | |
| 991 msg.optionalMessage = [Message3 message]; | |
| 992 XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional
Message)); | |
| 993 msg.optionalMessage = nil; | |
| 994 XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optiona
lMessage)); | |
| 995 [msg release]; | |
| 996 } | |
| 997 | |
| 998 //%PDDM-EXPAND-END PROTO3_TEST_HAS_FIELDS() | 869 //%PDDM-EXPAND-END PROTO3_TEST_HAS_FIELDS() |
| 999 } | 870 } |
| 1000 | 871 |
| 1001 - (void)testAccessingProto2UnknownEnumValues { | 872 - (void)testAccessingProto2UnknownEnumValues { |
| 1002 Message2 *msg = [[Message2 alloc] init]; | 873 Message2 *msg = [[Message2 alloc] init]; |
| 1003 | 874 |
| 1004 // Set it to something non zero, try and confirm it doesn't change. | 875 // Set it to something non zero, try and confirm it doesn't change. |
| 1005 | 876 |
| 1006 msg.optionalEnum = Message2_Enum_Bar; | 877 msg.optionalEnum = Message2_Enum_Bar; |
| 1007 XCTAssertThrowsSpecificNamed(msg.optionalEnum = 666, NSException, | 878 XCTAssertThrowsSpecificNamed(msg.optionalEnum = 666, NSException, |
| (...skipping 1086 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2094 XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i); | 1965 XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i); |
| 2095 XCTAssertNotNil(msg.oneofMessage, "Loop: %zd", i); | 1966 XCTAssertNotNil(msg.oneofMessage, "Loop: %zd", i); |
| 2096 XCTAssertNotEqual(msg.oneofMessage, subMessage, "Loop: %zd", | 1967 XCTAssertNotEqual(msg.oneofMessage, subMessage, "Loop: %zd", |
| 2097 i); // Pointer compare. | 1968 i); // Pointer compare. |
| 2098 XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo, "Loop: %zd", i); | 1969 XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo, "Loop: %zd", i); |
| 2099 } | 1970 } |
| 2100 | 1971 |
| 2101 [msg release]; | 1972 [msg release]; |
| 2102 } | 1973 } |
| 2103 | 1974 |
| 2104 - (void)testProto2OneofSetToDefault { | |
| 2105 | |
| 2106 // proto3 doesn't normally write out zero (default) fields, but if they are | |
| 2107 // in a oneof it does. proto2 doesn't have this special behavior, but we | |
| 2108 // still confirm setting to the explicit default does set the case to be | |
| 2109 // sure the runtime is working correctly. | |
| 2110 | |
| 2111 NSString *oneofStringDefault = @"string"; | |
| 2112 NSData *oneofBytesDefault = [@"data" dataUsingEncoding:NSUTF8StringEncoding]; | |
| 2113 | |
| 2114 Message2 *msg = [[Message2 alloc] init]; | |
| 2115 | |
| 2116 uint32_t values[] = { | |
| 2117 Message2_O_OneOfCase_OneofInt32, | |
| 2118 Message2_O_OneOfCase_OneofInt64, | |
| 2119 Message2_O_OneOfCase_OneofUint32, | |
| 2120 Message2_O_OneOfCase_OneofUint64, | |
| 2121 Message2_O_OneOfCase_OneofSint32, | |
| 2122 Message2_O_OneOfCase_OneofSint64, | |
| 2123 Message2_O_OneOfCase_OneofFixed32, | |
| 2124 Message2_O_OneOfCase_OneofFixed64, | |
| 2125 Message2_O_OneOfCase_OneofSfixed32, | |
| 2126 Message2_O_OneOfCase_OneofSfixed64, | |
| 2127 Message2_O_OneOfCase_OneofFloat, | |
| 2128 Message2_O_OneOfCase_OneofDouble, | |
| 2129 Message2_O_OneOfCase_OneofBool, | |
| 2130 Message2_O_OneOfCase_OneofString, | |
| 2131 Message2_O_OneOfCase_OneofBytes, | |
| 2132 // Skip group | |
| 2133 // Skip message | |
| 2134 Message2_O_OneOfCase_OneofEnum, | |
| 2135 }; | |
| 2136 | |
| 2137 for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) { | |
| 2138 switch (values[i]) { | |
| 2139 case Message2_O_OneOfCase_OneofInt32: | |
| 2140 msg.oneofInt32 = 100; | |
| 2141 break; | |
| 2142 case Message2_O_OneOfCase_OneofInt64: | |
| 2143 msg.oneofInt64 = 101; | |
| 2144 break; | |
| 2145 case Message2_O_OneOfCase_OneofUint32: | |
| 2146 msg.oneofUint32 = 102; | |
| 2147 break; | |
| 2148 case Message2_O_OneOfCase_OneofUint64: | |
| 2149 msg.oneofUint64 = 103; | |
| 2150 break; | |
| 2151 case Message2_O_OneOfCase_OneofSint32: | |
| 2152 msg.oneofSint32 = 104; | |
| 2153 break; | |
| 2154 case Message2_O_OneOfCase_OneofSint64: | |
| 2155 msg.oneofSint64 = 105; | |
| 2156 break; | |
| 2157 case Message2_O_OneOfCase_OneofFixed32: | |
| 2158 msg.oneofFixed32 = 106; | |
| 2159 break; | |
| 2160 case Message2_O_OneOfCase_OneofFixed64: | |
| 2161 msg.oneofFixed64 = 107; | |
| 2162 break; | |
| 2163 case Message2_O_OneOfCase_OneofSfixed32: | |
| 2164 msg.oneofSfixed32 = 108; | |
| 2165 break; | |
| 2166 case Message2_O_OneOfCase_OneofSfixed64: | |
| 2167 msg.oneofSfixed64 = 109; | |
| 2168 break; | |
| 2169 case Message2_O_OneOfCase_OneofFloat: | |
| 2170 msg.oneofFloat = 110.0f; | |
| 2171 break; | |
| 2172 case Message2_O_OneOfCase_OneofDouble: | |
| 2173 msg.oneofDouble = 111.0; | |
| 2174 break; | |
| 2175 case Message2_O_OneOfCase_OneofBool: | |
| 2176 msg.oneofBool = YES; | |
| 2177 break; | |
| 2178 case Message2_O_OneOfCase_OneofString: | |
| 2179 msg.oneofString = oneofStringDefault; | |
| 2180 break; | |
| 2181 case Message2_O_OneOfCase_OneofBytes: | |
| 2182 msg.oneofBytes = oneofBytesDefault; | |
| 2183 break; | |
| 2184 case Message2_O_OneOfCase_OneofEnum: | |
| 2185 msg.oneofEnum = Message3_Enum_Baz; | |
| 2186 break; | |
| 2187 default: | |
| 2188 XCTFail(@"shouldn't happen, loop: %zd, value: %d", i, values[i]); | |
| 2189 break; | |
| 2190 } | |
| 2191 | |
| 2192 // Should be set to the correct case. | |
| 2193 XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i); | |
| 2194 | |
| 2195 // Confirm everything is the defaults. | |
| 2196 XCTAssertEqual(msg.oneofInt32, 100, "Loop: %zd", i); | |
| 2197 XCTAssertEqual(msg.oneofInt64, 101, "Loop: %zd", i); | |
| 2198 XCTAssertEqual(msg.oneofUint32, 102U, "Loop: %zd", i); | |
| 2199 XCTAssertEqual(msg.oneofUint64, 103U, "Loop: %zd", i); | |
| 2200 XCTAssertEqual(msg.oneofSint32, 104, "Loop: %zd", i); | |
| 2201 XCTAssertEqual(msg.oneofSint64, 105, "Loop: %zd", i); | |
| 2202 XCTAssertEqual(msg.oneofFixed32, 106U, "Loop: %zd", i); | |
| 2203 XCTAssertEqual(msg.oneofFixed64, 107U, "Loop: %zd", i); | |
| 2204 XCTAssertEqual(msg.oneofSfixed32, 108, "Loop: %zd", i); | |
| 2205 XCTAssertEqual(msg.oneofSfixed64, 109, "Loop: %zd", i); | |
| 2206 XCTAssertEqual(msg.oneofFloat, 110.0f, "Loop: %zd", i); | |
| 2207 XCTAssertEqual(msg.oneofDouble, 111.0, "Loop: %zd", i); | |
| 2208 XCTAssertEqual(msg.oneofBool, YES, "Loop: %zd", i); | |
| 2209 XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i); | |
| 2210 XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i); | |
| 2211 // Skip group, no default to consider. | |
| 2212 // Skip message, no default to consider. | |
| 2213 XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz, "Loop: %zd", i); | |
| 2214 } | |
| 2215 | |
| 2216 // We special case nil on string, data, group, and message, ensure they work | |
| 2217 // as expected. i.e. - it clears the case. | |
| 2218 msg.oneofString = nil; | |
| 2219 XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); | |
| 2220 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); | |
| 2221 msg.oneofBytes = nil; | |
| 2222 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); | |
| 2223 XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); | |
| 2224 msg.oneofGroup = nil; | |
| 2225 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); | |
| 2226 XCTAssertNotNil(msg.oneofGroup); | |
| 2227 msg.oneofMessage = nil; | |
| 2228 XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); | |
| 2229 XCTAssertNotNil(msg.oneofMessage); | |
| 2230 | |
| 2231 [msg release]; | |
| 2232 } | |
| 2233 | |
| 2234 - (void)testProto3OneofSetToZero { | |
| 2235 | |
| 2236 // Normally setting a proto3 field to the zero value should result in it being | |
| 2237 // reset/cleared. But in a oneof, it still gets recored so it can go out | |
| 2238 // over the wire and the other side can see what was set in the oneof. | |
| 2239 | |
| 2240 NSString *oneofStringDefault = @""; | |
| 2241 NSData *oneofBytesDefault = [NSData data]; | |
| 2242 | |
| 2243 Message3 *msg = [[Message3 alloc] init]; | |
| 2244 | |
| 2245 uint32_t values[] = { | |
| 2246 Message3_O_OneOfCase_OneofInt32, | |
| 2247 Message3_O_OneOfCase_OneofInt64, | |
| 2248 Message3_O_OneOfCase_OneofUint32, | |
| 2249 Message3_O_OneOfCase_OneofUint64, | |
| 2250 Message3_O_OneOfCase_OneofSint32, | |
| 2251 Message3_O_OneOfCase_OneofSint64, | |
| 2252 Message3_O_OneOfCase_OneofFixed32, | |
| 2253 Message3_O_OneOfCase_OneofFixed64, | |
| 2254 Message3_O_OneOfCase_OneofSfixed32, | |
| 2255 Message3_O_OneOfCase_OneofSfixed64, | |
| 2256 Message3_O_OneOfCase_OneofFloat, | |
| 2257 Message3_O_OneOfCase_OneofDouble, | |
| 2258 Message3_O_OneOfCase_OneofBool, | |
| 2259 Message3_O_OneOfCase_OneofString, | |
| 2260 Message3_O_OneOfCase_OneofBytes, | |
| 2261 Message3_O_OneOfCase_OneofMessage, | |
| 2262 Message3_O_OneOfCase_OneofEnum, | |
| 2263 }; | |
| 2264 | |
| 2265 for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) { | |
| 2266 switch (values[i]) { | |
| 2267 case Message3_O_OneOfCase_OneofInt32: | |
| 2268 msg.oneofInt32 = 0; | |
| 2269 break; | |
| 2270 case Message3_O_OneOfCase_OneofInt64: | |
| 2271 msg.oneofInt64 = 0; | |
| 2272 break; | |
| 2273 case Message3_O_OneOfCase_OneofUint32: | |
| 2274 msg.oneofUint32 = 0; | |
| 2275 break; | |
| 2276 case Message3_O_OneOfCase_OneofUint64: | |
| 2277 msg.oneofUint64 = 0; | |
| 2278 break; | |
| 2279 case Message3_O_OneOfCase_OneofSint32: | |
| 2280 msg.oneofSint32 = 0; | |
| 2281 break; | |
| 2282 case Message3_O_OneOfCase_OneofSint64: | |
| 2283 msg.oneofSint64 = 0; | |
| 2284 break; | |
| 2285 case Message3_O_OneOfCase_OneofFixed32: | |
| 2286 msg.oneofFixed32 = 0; | |
| 2287 break; | |
| 2288 case Message3_O_OneOfCase_OneofFixed64: | |
| 2289 msg.oneofFixed64 = 0; | |
| 2290 break; | |
| 2291 case Message3_O_OneOfCase_OneofSfixed32: | |
| 2292 msg.oneofSfixed32 = 0; | |
| 2293 break; | |
| 2294 case Message3_O_OneOfCase_OneofSfixed64: | |
| 2295 msg.oneofSfixed64 = 0; | |
| 2296 break; | |
| 2297 case Message3_O_OneOfCase_OneofFloat: | |
| 2298 msg.oneofFloat = 0.0f; | |
| 2299 break; | |
| 2300 case Message3_O_OneOfCase_OneofDouble: | |
| 2301 msg.oneofDouble = 0.0; | |
| 2302 break; | |
| 2303 case Message3_O_OneOfCase_OneofBool: | |
| 2304 msg.oneofBool = NO; | |
| 2305 break; | |
| 2306 case Message3_O_OneOfCase_OneofString: | |
| 2307 msg.oneofString = oneofStringDefault; | |
| 2308 break; | |
| 2309 case Message3_O_OneOfCase_OneofBytes: | |
| 2310 msg.oneofBytes = oneofBytesDefault; | |
| 2311 break; | |
| 2312 case Message3_O_OneOfCase_OneofMessage: | |
| 2313 msg.oneofMessage.optionalInt32 = 0; | |
| 2314 break; | |
| 2315 case Message3_O_OneOfCase_OneofEnum: | |
| 2316 msg.oneofEnum = Message3_Enum_Foo; | |
| 2317 break; | |
| 2318 default: | |
| 2319 XCTFail(@"shouldn't happen, loop: %zd, value: %d", i, values[i]); | |
| 2320 break; | |
| 2321 } | |
| 2322 | |
| 2323 // Should be set to the correct case. | |
| 2324 XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i); | |
| 2325 | |
| 2326 // Confirm everything is still zeros. | |
| 2327 XCTAssertEqual(msg.oneofInt32, 0, "Loop: %zd", i); | |
| 2328 XCTAssertEqual(msg.oneofInt64, 0, "Loop: %zd", i); | |
| 2329 XCTAssertEqual(msg.oneofUint32, 0U, "Loop: %zd", i); | |
| 2330 XCTAssertEqual(msg.oneofUint64, 0U, "Loop: %zd", i); | |
| 2331 XCTAssertEqual(msg.oneofSint32, 0, "Loop: %zd", i); | |
| 2332 XCTAssertEqual(msg.oneofSint64, 0, "Loop: %zd", i); | |
| 2333 XCTAssertEqual(msg.oneofFixed32, 0U, "Loop: %zd", i); | |
| 2334 XCTAssertEqual(msg.oneofFixed64, 0U, "Loop: %zd", i); | |
| 2335 XCTAssertEqual(msg.oneofSfixed32, 0, "Loop: %zd", i); | |
| 2336 XCTAssertEqual(msg.oneofSfixed64, 0, "Loop: %zd", i); | |
| 2337 XCTAssertEqual(msg.oneofFloat, 0.0f, "Loop: %zd", i); | |
| 2338 XCTAssertEqual(msg.oneofDouble, 0.0, "Loop: %zd", i); | |
| 2339 XCTAssertEqual(msg.oneofBool, NO, "Loop: %zd", i); | |
| 2340 XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i); | |
| 2341 XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i); | |
| 2342 XCTAssertNotNil(msg.oneofMessage, "Loop: %zd", i); | |
| 2343 XCTAssertEqual(msg.oneofEnum, Message3_Enum_Foo, "Loop: %zd", i); | |
| 2344 } | |
| 2345 | |
| 2346 // We special case nil on string, data, message, ensure they work as expected. | |
| 2347 msg.oneofString = nil; | |
| 2348 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); | |
| 2349 XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); | |
| 2350 msg.oneofBytes = nil; | |
| 2351 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); | |
| 2352 XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); | |
| 2353 msg.oneofMessage = nil; | |
| 2354 XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); | |
| 2355 XCTAssertNotNil(msg.oneofMessage); | |
| 2356 | |
| 2357 [msg release]; | |
| 2358 } | |
| 2359 | |
| 2360 - (void)testCopyingMakesUniqueObjects { | 1975 - (void)testCopyingMakesUniqueObjects { |
| 2361 const int repeatCount = 5; | 1976 const int repeatCount = 5; |
| 2362 TestAllTypes *msg1 = [TestAllTypes message]; | 1977 TestAllTypes *msg1 = [TestAllTypes message]; |
| 2363 [self setAllFields:msg1 repeatedCount:repeatCount]; | 1978 [self setAllFields:msg1 repeatedCount:repeatCount]; |
| 2364 | 1979 |
| 2365 TestAllTypes *msg2 = [[msg1 copy] autorelease]; | 1980 TestAllTypes *msg2 = [[msg1 copy] autorelease]; |
| 2366 | 1981 |
| 2367 XCTAssertNotEqual(msg1, msg2); // Ptr compare, new object. | 1982 XCTAssertNotEqual(msg1, msg2); // Ptr compare, new object. |
| 2368 XCTAssertEqualObjects(msg1, msg2); // Equal values. | 1983 XCTAssertEqualObjects(msg1, msg2); // Equal values. |
| 2369 | 1984 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2444 | 2059 |
| 2445 // Ensure the messages are unique per map. | 2060 // Ensure the messages are unique per map. |
| 2446 [msg1.mapInt32ForeignMessage | 2061 [msg1.mapInt32ForeignMessage |
| 2447 enumerateKeysAndObjectsUsingBlock:^(int32_t key, id value, BOOL *stop) { | 2062 enumerateKeysAndObjectsUsingBlock:^(int32_t key, id value, BOOL *stop) { |
| 2448 #pragma unused(stop) | 2063 #pragma unused(stop) |
| 2449 ForeignMessage *subMsg2 = [msg2.mapInt32ForeignMessage objectForKey:key]
; | 2064 ForeignMessage *subMsg2 = [msg2.mapInt32ForeignMessage objectForKey:key]
; |
| 2450 XCTAssertNotEqual(value, subMsg2); // Ptr compare, new object. | 2065 XCTAssertNotEqual(value, subMsg2); // Ptr compare, new object. |
| 2451 }]; | 2066 }]; |
| 2452 } | 2067 } |
| 2453 | 2068 |
| 2454 - (void)test_GPBGetMessageRepeatedField { | |
| 2455 TestAllTypes *message = [TestAllTypes message]; | |
| 2456 GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"re
peatedStringArray"]; | |
| 2457 XCTAssertNotNil(fieldDescriptor); | |
| 2458 NSMutableArray *fieldArray = GPBGetMessageRepeatedField(message, fieldDescript
or); | |
| 2459 XCTAssertNotNil(fieldArray); // Should have autocreated. | |
| 2460 XCTAssertTrue(fieldArray == message.repeatedStringArray); // Same pointer | |
| 2461 } | |
| 2462 | |
| 2463 - (void)test_GPBSetMessageRepeatedField { | |
| 2464 TestAllTypes *message = [TestAllTypes message]; | |
| 2465 GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"re
peatedStringArray"]; | |
| 2466 XCTAssertNotNil(fieldDescriptor); | |
| 2467 | |
| 2468 NSMutableArray *fieldArray = [NSMutableArray arrayWithObject:@"foo"]; | |
| 2469 GPBSetMessageRepeatedField(message, fieldDescriptor, fieldArray); | |
| 2470 XCTAssertTrue(fieldArray == message.repeatedStringArray); // Same pointer | |
| 2471 XCTAssertEqualObjects(@"foo", message.repeatedStringArray.firstObject); | |
| 2472 } | |
| 2473 | |
| 2474 - (void)test_GPBGetMessageMapField { | |
| 2475 TestMap *message = [TestMap message]; | |
| 2476 GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"ma
pStringString"]; | |
| 2477 XCTAssertNotNil(fieldDescriptor); | |
| 2478 NSMutableDictionary *fieldMap = GPBGetMessageMapField(message, fieldDescriptor
); | |
| 2479 XCTAssertNotNil(fieldMap); // Should have autocreated. | |
| 2480 XCTAssertTrue(fieldMap == message.mapStringString); // Same pointer | |
| 2481 } | |
| 2482 | |
| 2483 - (void)test_GPBSetMessageMapField { | |
| 2484 TestMap *message = [TestMap message]; | |
| 2485 GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"ma
pStringString"]; | |
| 2486 XCTAssertNotNil(fieldDescriptor); | |
| 2487 | |
| 2488 NSMutableDictionary *fieldMap = [NSMutableDictionary dictionaryWithObject:@"ba
r" forKey:@"foo"]; | |
| 2489 GPBSetMessageMapField(message, fieldDescriptor, fieldMap); | |
| 2490 XCTAssertTrue(fieldMap == message.mapStringString); // Same pointer | |
| 2491 XCTAssertEqualObjects(@"bar", message.mapStringString[@"foo"]); | |
| 2492 } | |
| 2493 | |
| 2494 #pragma mark - Subset from from map_tests.cc | 2069 #pragma mark - Subset from from map_tests.cc |
| 2495 | 2070 |
| 2496 // TEST(GeneratedMapFieldTest, IsInitialized) | 2071 // TEST(GeneratedMapFieldTest, IsInitialized) |
| 2497 - (void)testMap_IsInitialized { | 2072 - (void)testMap_IsInitialized { |
| 2498 TestRequiredMessageMap *msg = [[TestRequiredMessageMap alloc] init]; | 2073 TestRequiredMessageMap *msg = [[TestRequiredMessageMap alloc] init]; |
| 2499 | 2074 |
| 2500 // Add an uninitialized message. | 2075 // Add an uninitialized message. |
| 2501 TestRequired *subMsg = [[TestRequired alloc] init]; | 2076 TestRequired *subMsg = [[TestRequired alloc] init]; |
| 2502 [msg.mapField setObject:subMsg forKey:0]; | 2077 [msg.mapField setObject:subMsg forKey:0]; |
| 2503 XCTAssertFalse(msg.initialized); | 2078 XCTAssertFalse(msg.initialized); |
| 2504 | 2079 |
| 2505 // Initialize uninitialized message | 2080 // Initialize uninitialized message |
| 2506 subMsg.a = 0; | 2081 subMsg.a = 0; |
| 2507 subMsg.b = 0; | 2082 subMsg.b = 0; |
| 2508 subMsg.c = 0; | 2083 subMsg.c = 0; |
| 2509 XCTAssertTrue(msg.initialized); | 2084 XCTAssertTrue(msg.initialized); |
| 2510 | 2085 |
| 2511 [subMsg release]; | 2086 [subMsg release]; |
| 2512 [msg release]; | 2087 [msg release]; |
| 2513 } | 2088 } |
| 2514 | 2089 |
| 2515 @end | 2090 @end |
| OLD | NEW |