@@ -326,6 +326,17 @@ - (void)testProto2SingleFieldHasBehavior {
326
326
// % [msg release];
327
327
// % }
328
328
// %
329
+ // %PDDM-DEFINE PROTO2_TEST_CLEAR_FIELD_WITH_NIL(FIELD, VALUE)
330
+ // % { // optional##FIELD
331
+ // % Message2 *msg = [[Message2 alloc] init];
332
+ // % XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD));
333
+ // % msg.optional##FIELD = VALUE;
334
+ // % XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD));
335
+ // % msg.optional##FIELD = nil;
336
+ // % XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD));
337
+ // % [msg release];
338
+ // % }
339
+ // %
329
340
// %PDDM-DEFINE PROTO2_TEST_HAS_FIELDS()
330
341
// %PROTO2_TEST_HAS_FIELD(Int32, 1, 0)
331
342
// %PROTO2_TEST_HAS_FIELD(Int64, 1, 0)
@@ -347,6 +358,14 @@ - (void)testProto2SingleFieldHasBehavior {
347
358
// % //
348
359
// %
349
360
// %PROTO2_TEST_HAS_FIELD(Enum, Message2_Enum_Bar, Message2_Enum_Foo)
361
+ // % //
362
+ // % // Nil can also be used to clear strings, bytes, groups, and messages.
363
+ // % //
364
+ // %
365
+ // %PROTO2_TEST_CLEAR_FIELD_WITH_NIL(String, @"foo")
366
+ // %PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding])
367
+ // %PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Group, [Message2_OptionalGroup message])
368
+ // %PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Message, [Message2 message])
350
369
// %PDDM-EXPAND PROTO2_TEST_HAS_FIELDS()
351
370
// This block of code is generated, do not edit it directly.
352
371
@@ -658,13 +677,57 @@ - (void)testProto2SingleFieldHasBehavior {
658
677
[msg release ];
659
678
}
660
679
680
+ //
681
+ // Nil can also be used to clear strings, bytes, groups, and messages.
682
+ //
683
+
684
+ { // optionalString
685
+ Message2 *msg = [[Message2 alloc ] init ];
686
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalString));
687
+ msg.optionalString = @" foo" ;
688
+ XCTAssertTrue (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalString));
689
+ msg.optionalString = nil ;
690
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalString));
691
+ [msg release ];
692
+ }
693
+
694
+ { // optionalBytes
695
+ Message2 *msg = [[Message2 alloc ] init ];
696
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalBytes));
697
+ msg.optionalBytes = [@" foo" dataUsingEncoding: NSUTF8StringEncoding];
698
+ XCTAssertTrue (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalBytes));
699
+ msg.optionalBytes = nil ;
700
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalBytes));
701
+ [msg release ];
702
+ }
703
+
704
+ { // optionalGroup
705
+ Message2 *msg = [[Message2 alloc ] init ];
706
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalGroup));
707
+ msg.optionalGroup = [Message2_OptionalGroup message ];
708
+ XCTAssertTrue (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalGroup));
709
+ msg.optionalGroup = nil ;
710
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalGroup));
711
+ [msg release ];
712
+ }
713
+
714
+ { // optionalMessage
715
+ Message2 *msg = [[Message2 alloc ] init ];
716
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalMessage));
717
+ msg.optionalMessage = [Message2 message ];
718
+ XCTAssertTrue (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalMessage));
719
+ msg.optionalMessage = nil ;
720
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message2_FieldNumber_OptionalMessage));
721
+ [msg release ];
722
+ }
723
+
661
724
// %PDDM-EXPAND-END PROTO2_TEST_HAS_FIELDS()
662
725
}
663
726
664
727
- (void )testProto3SingleFieldHasBehavior {
665
728
//
666
- // Setting to any value including the default value (0) should result has*
667
- // being true.
729
+ // Setting to any value but the default value (0) should result has*
730
+ // being true. When set to the default, shouldn't be true.
668
731
//
669
732
670
733
// %PDDM-DEFINE PROTO3_TEST_HAS_FIELD(FIELD, NON_ZERO_VALUE, ZERO_VALUE)
@@ -678,6 +741,17 @@ - (void)testProto3SingleFieldHasBehavior {
678
741
// % [msg release];
679
742
// % }
680
743
// %
744
+ // %PDDM-DEFINE PROTO3_TEST_CLEAR_FIELD_WITH_NIL(FIELD, VALUE)
745
+ // % { // optional##FIELD
746
+ // % Message3 *msg = [[Message3 alloc] init];
747
+ // % XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD));
748
+ // % msg.optional##FIELD = VALUE;
749
+ // % XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD));
750
+ // % msg.optional##FIELD = nil;
751
+ // % XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD));
752
+ // % [msg release];
753
+ // % }
754
+ // %
681
755
// %PDDM-DEFINE PROTO3_TEST_HAS_FIELDS()
682
756
// %PROTO3_TEST_HAS_FIELD(Int32, 1, 0)
683
757
// %PROTO3_TEST_HAS_FIELD(Int64, 1, 0)
@@ -695,10 +769,17 @@ - (void)testProto3SingleFieldHasBehavior {
695
769
// %PROTO3_TEST_HAS_FIELD(String, @"foo", @"")
696
770
// %PROTO3_TEST_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding], [NSData data])
697
771
// % //
698
- // % // Test doesn't apply to optionalGroup/ optionalMessage.
772
+ // % // Test doesn't apply to optionalMessage (no groups in proto3) .
699
773
// % //
700
774
// %
701
775
// %PROTO3_TEST_HAS_FIELD(Enum, Message3_Enum_Bar, Message3_Enum_Foo)
776
+ // % //
777
+ // % // Nil can also be used to clear strings, bytes, and messages (no groups in proto3).
778
+ // % //
779
+ // %
780
+ // %PROTO3_TEST_CLEAR_FIELD_WITH_NIL(String, @"foo")
781
+ // %PROTO3_TEST_CLEAR_FIELD_WITH_NIL(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding])
782
+ // %PROTO3_TEST_CLEAR_FIELD_WITH_NIL(Message, [Message3 message])
702
783
// %PDDM-EXPAND PROTO3_TEST_HAS_FIELDS()
703
784
// This block of code is generated, do not edit it directly.
704
785
@@ -853,7 +934,7 @@ - (void)testProto3SingleFieldHasBehavior {
853
934
}
854
935
855
936
//
856
- // Test doesn't apply to optionalGroup/ optionalMessage.
937
+ // Test doesn't apply to optionalMessage (no groups in proto3) .
857
938
//
858
939
859
940
{ // optionalEnum
@@ -866,6 +947,40 @@ - (void)testProto3SingleFieldHasBehavior {
866
947
[msg release ];
867
948
}
868
949
950
+ //
951
+ // Nil can also be used to clear strings, bytes, and messages (no groups in proto3).
952
+ //
953
+
954
+ { // optionalString
955
+ Message3 *msg = [[Message3 alloc ] init ];
956
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message3_FieldNumber_OptionalString));
957
+ msg.optionalString = @" foo" ;
958
+ XCTAssertTrue (GPBMessageHasFieldNumberSet (msg, Message3_FieldNumber_OptionalString));
959
+ msg.optionalString = nil ;
960
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message3_FieldNumber_OptionalString));
961
+ [msg release ];
962
+ }
963
+
964
+ { // optionalBytes
965
+ Message3 *msg = [[Message3 alloc ] init ];
966
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message3_FieldNumber_OptionalBytes));
967
+ msg.optionalBytes = [@" foo" dataUsingEncoding: NSUTF8StringEncoding];
968
+ XCTAssertTrue (GPBMessageHasFieldNumberSet (msg, Message3_FieldNumber_OptionalBytes));
969
+ msg.optionalBytes = nil ;
970
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message3_FieldNumber_OptionalBytes));
971
+ [msg release ];
972
+ }
973
+
974
+ { // optionalMessage
975
+ Message3 *msg = [[Message3 alloc ] init ];
976
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message3_FieldNumber_OptionalMessage));
977
+ msg.optionalMessage = [Message3 message ];
978
+ XCTAssertTrue (GPBMessageHasFieldNumberSet (msg, Message3_FieldNumber_OptionalMessage));
979
+ msg.optionalMessage = nil ;
980
+ XCTAssertFalse (GPBMessageHasFieldNumberSet (msg, Message3_FieldNumber_OptionalMessage));
981
+ [msg release ];
982
+ }
983
+
869
984
// %PDDM-EXPAND-END PROTO3_TEST_HAS_FIELDS()
870
985
}
871
986
@@ -2007,52 +2122,52 @@ - (void)testProto2OneofSetToDefault {
2007
2122
2008
2123
for (size_t i = 0 ; i < GPBARRAYSIZE (values); ++i) {
2009
2124
switch (values[i]) {
2010
- case Message3_O_OneOfCase_OneofInt32 :
2125
+ case Message2_O_OneOfCase_OneofInt32 :
2011
2126
msg.oneofInt32 = 100 ;
2012
2127
break ;
2013
- case Message3_O_OneOfCase_OneofInt64 :
2128
+ case Message2_O_OneOfCase_OneofInt64 :
2014
2129
msg.oneofInt64 = 101 ;
2015
2130
break ;
2016
- case Message3_O_OneOfCase_OneofUint32 :
2131
+ case Message2_O_OneOfCase_OneofUint32 :
2017
2132
msg.oneofUint32 = 102 ;
2018
2133
break ;
2019
- case Message3_O_OneOfCase_OneofUint64 :
2134
+ case Message2_O_OneOfCase_OneofUint64 :
2020
2135
msg.oneofUint64 = 103 ;
2021
2136
break ;
2022
- case Message3_O_OneOfCase_OneofSint32 :
2137
+ case Message2_O_OneOfCase_OneofSint32 :
2023
2138
msg.oneofSint32 = 104 ;
2024
2139
break ;
2025
- case Message3_O_OneOfCase_OneofSint64 :
2140
+ case Message2_O_OneOfCase_OneofSint64 :
2026
2141
msg.oneofSint64 = 105 ;
2027
2142
break ;
2028
- case Message3_O_OneOfCase_OneofFixed32 :
2143
+ case Message2_O_OneOfCase_OneofFixed32 :
2029
2144
msg.oneofFixed32 = 106 ;
2030
2145
break ;
2031
- case Message3_O_OneOfCase_OneofFixed64 :
2146
+ case Message2_O_OneOfCase_OneofFixed64 :
2032
2147
msg.oneofFixed64 = 107 ;
2033
2148
break ;
2034
- case Message3_O_OneOfCase_OneofSfixed32 :
2149
+ case Message2_O_OneOfCase_OneofSfixed32 :
2035
2150
msg.oneofSfixed32 = 108 ;
2036
2151
break ;
2037
- case Message3_O_OneOfCase_OneofSfixed64 :
2152
+ case Message2_O_OneOfCase_OneofSfixed64 :
2038
2153
msg.oneofSfixed64 = 109 ;
2039
2154
break ;
2040
- case Message3_O_OneOfCase_OneofFloat :
2155
+ case Message2_O_OneOfCase_OneofFloat :
2041
2156
msg.oneofFloat = 110 .0f ;
2042
2157
break ;
2043
- case Message3_O_OneOfCase_OneofDouble :
2158
+ case Message2_O_OneOfCase_OneofDouble :
2044
2159
msg.oneofDouble = 111.0 ;
2045
2160
break ;
2046
- case Message3_O_OneOfCase_OneofBool :
2161
+ case Message2_O_OneOfCase_OneofBool :
2047
2162
msg.oneofBool = YES ;
2048
2163
break ;
2049
- case Message3_O_OneOfCase_OneofString :
2164
+ case Message2_O_OneOfCase_OneofString :
2050
2165
msg.oneofString = oneofStringDefault;
2051
2166
break ;
2052
- case Message3_O_OneOfCase_OneofBytes :
2167
+ case Message2_O_OneOfCase_OneofBytes :
2053
2168
msg.oneofBytes = oneofBytesDefault;
2054
2169
break ;
2055
- case Message3_O_OneOfCase_OneofEnum :
2170
+ case Message2_O_OneOfCase_OneofEnum :
2056
2171
msg.oneofEnum = Message3_Enum_Baz;
2057
2172
break ;
2058
2173
default :
@@ -2063,7 +2178,7 @@ - (void)testProto2OneofSetToDefault {
2063
2178
// Should be set to the correct case.
2064
2179
XCTAssertEqual (msg.oOneOfCase , values[i], " Loop: %zd " , i);
2065
2180
2066
- // Confirm everything is back as the defaults.
2181
+ // Confirm everything is the defaults.
2067
2182
XCTAssertEqual (msg.oneofInt32 , 100 , " Loop: %zd " , i);
2068
2183
XCTAssertEqual (msg.oneofInt64 , 101 , " Loop: %zd " , i);
2069
2184
XCTAssertEqual (msg.oneofUint32 , 102U , " Loop: %zd " , i);
@@ -2079,20 +2194,25 @@ - (void)testProto2OneofSetToDefault {
2079
2194
XCTAssertEqual (msg.oneofBool , YES , " Loop: %zd " , i);
2080
2195
XCTAssertEqualObjects (msg.oneofString , oneofStringDefault, " Loop: %zd " , i);
2081
2196
XCTAssertEqualObjects (msg.oneofBytes , oneofBytesDefault, " Loop: %zd " , i);
2082
- XCTAssertNotNil (msg.oneofGroup , " Loop: %zd " , i);
2083
- // Skip group
2084
- // Skip message
2197
+ // Skip group, no default to consider.
2198
+ // Skip message, no default to consider.
2085
2199
XCTAssertEqual (msg.oneofEnum , Message2_Enum_Baz, " Loop: %zd " , i);
2086
2200
}
2087
2201
2088
- // We special case nil on string, data, message, ensure they work as expected.
2089
- // i.e. - it clears the case.
2202
+ // We special case nil on string, data, group, and message, ensure they work
2203
+ // as expected. i.e. - it clears the case.
2090
2204
msg.oneofString = nil ;
2091
- XCTAssertEqual (msg.oOneOfCase , Message3_O_OneOfCase_GPBUnsetOneOfCase);
2205
+ XCTAssertEqualObjects (msg.oneofString , oneofStringDefault);
2206
+ XCTAssertEqual (msg.oOneOfCase , Message2_O_OneOfCase_GPBUnsetOneOfCase);
2092
2207
msg.oneofBytes = nil ;
2093
- XCTAssertEqual (msg.oOneOfCase , Message3_O_OneOfCase_GPBUnsetOneOfCase);
2208
+ XCTAssertEqual (msg.oOneOfCase , Message2_O_OneOfCase_GPBUnsetOneOfCase);
2209
+ XCTAssertEqualObjects (msg.oneofBytes , oneofBytesDefault);
2210
+ msg.oneofGroup = nil ;
2211
+ XCTAssertEqual (msg.oOneOfCase , Message2_O_OneOfCase_GPBUnsetOneOfCase);
2212
+ XCTAssertNotNil (msg.oneofGroup );
2094
2213
msg.oneofMessage = nil ;
2095
- XCTAssertEqual (msg.oOneOfCase , Message3_O_OneOfCase_GPBUnsetOneOfCase);
2214
+ XCTAssertEqual (msg.oOneOfCase , Message2_O_OneOfCase_GPBUnsetOneOfCase);
2215
+ XCTAssertNotNil (msg.oneofMessage );
2096
2216
2097
2217
[msg release ];
2098
2218
}
@@ -2212,10 +2332,13 @@ - (void)testProto3OneofSetToZero {
2212
2332
// We special case nil on string, data, message, ensure they work as expected.
2213
2333
msg.oneofString = nil ;
2214
2334
XCTAssertEqual (msg.oOneOfCase , Message3_O_OneOfCase_GPBUnsetOneOfCase);
2335
+ XCTAssertEqualObjects (msg.oneofString , oneofStringDefault);
2215
2336
msg.oneofBytes = nil ;
2216
2337
XCTAssertEqual (msg.oOneOfCase , Message3_O_OneOfCase_GPBUnsetOneOfCase);
2338
+ XCTAssertEqualObjects (msg.oneofBytes , oneofBytesDefault);
2217
2339
msg.oneofMessage = nil ;
2218
2340
XCTAssertEqual (msg.oOneOfCase , Message3_O_OneOfCase_GPBUnsetOneOfCase);
2341
+ XCTAssertNotNil (msg.oneofMessage );
2219
2342
2220
2343
[msg release ];
2221
2344
}
0 commit comments