Skip to content

Commit cd561dd

Browse files
authored
Merge pull request protocolbuffers#1949 from thomasvl/objc_more_reset_tests
Objc more reset tests
2 parents 91b6d04 + ff85a17 commit cd561dd

File tree

1 file changed

+152
-29
lines changed

1 file changed

+152
-29
lines changed

Diff for: objectivec/Tests/GPBMessageTests+Runtime.m

+152-29
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,17 @@ - (void)testProto2SingleFieldHasBehavior {
326326
//% [msg release];
327327
//% }
328328
//%
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+
//%
329340
//%PDDM-DEFINE PROTO2_TEST_HAS_FIELDS()
330341
//%PROTO2_TEST_HAS_FIELD(Int32, 1, 0)
331342
//%PROTO2_TEST_HAS_FIELD(Int64, 1, 0)
@@ -347,6 +358,14 @@ - (void)testProto2SingleFieldHasBehavior {
347358
//% //
348359
//%
349360
//%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])
350369
//%PDDM-EXPAND PROTO2_TEST_HAS_FIELDS()
351370
// This block of code is generated, do not edit it directly.
352371

@@ -658,13 +677,57 @@ - (void)testProto2SingleFieldHasBehavior {
658677
[msg release];
659678
}
660679

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+
661724
//%PDDM-EXPAND-END PROTO2_TEST_HAS_FIELDS()
662725
}
663726

664727
- (void)testProto3SingleFieldHasBehavior {
665728
//
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.
668731
//
669732

670733
//%PDDM-DEFINE PROTO3_TEST_HAS_FIELD(FIELD, NON_ZERO_VALUE, ZERO_VALUE)
@@ -678,6 +741,17 @@ - (void)testProto3SingleFieldHasBehavior {
678741
//% [msg release];
679742
//% }
680743
//%
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+
//%
681755
//%PDDM-DEFINE PROTO3_TEST_HAS_FIELDS()
682756
//%PROTO3_TEST_HAS_FIELD(Int32, 1, 0)
683757
//%PROTO3_TEST_HAS_FIELD(Int64, 1, 0)
@@ -695,10 +769,17 @@ - (void)testProto3SingleFieldHasBehavior {
695769
//%PROTO3_TEST_HAS_FIELD(String, @"foo", @"")
696770
//%PROTO3_TEST_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding], [NSData data])
697771
//% //
698-
//% // Test doesn't apply to optionalGroup/optionalMessage.
772+
//% // Test doesn't apply to optionalMessage (no groups in proto3).
699773
//% //
700774
//%
701775
//%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])
702783
//%PDDM-EXPAND PROTO3_TEST_HAS_FIELDS()
703784
// This block of code is generated, do not edit it directly.
704785

@@ -853,7 +934,7 @@ - (void)testProto3SingleFieldHasBehavior {
853934
}
854935

855936
//
856-
// Test doesn't apply to optionalGroup/optionalMessage.
937+
// Test doesn't apply to optionalMessage (no groups in proto3).
857938
//
858939

859940
{ // optionalEnum
@@ -866,6 +947,40 @@ - (void)testProto3SingleFieldHasBehavior {
866947
[msg release];
867948
}
868949

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+
869984
//%PDDM-EXPAND-END PROTO3_TEST_HAS_FIELDS()
870985
}
871986

@@ -2007,52 +2122,52 @@ - (void)testProto2OneofSetToDefault {
20072122

20082123
for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) {
20092124
switch (values[i]) {
2010-
case Message3_O_OneOfCase_OneofInt32:
2125+
case Message2_O_OneOfCase_OneofInt32:
20112126
msg.oneofInt32 = 100;
20122127
break;
2013-
case Message3_O_OneOfCase_OneofInt64:
2128+
case Message2_O_OneOfCase_OneofInt64:
20142129
msg.oneofInt64 = 101;
20152130
break;
2016-
case Message3_O_OneOfCase_OneofUint32:
2131+
case Message2_O_OneOfCase_OneofUint32:
20172132
msg.oneofUint32 = 102;
20182133
break;
2019-
case Message3_O_OneOfCase_OneofUint64:
2134+
case Message2_O_OneOfCase_OneofUint64:
20202135
msg.oneofUint64 = 103;
20212136
break;
2022-
case Message3_O_OneOfCase_OneofSint32:
2137+
case Message2_O_OneOfCase_OneofSint32:
20232138
msg.oneofSint32 = 104;
20242139
break;
2025-
case Message3_O_OneOfCase_OneofSint64:
2140+
case Message2_O_OneOfCase_OneofSint64:
20262141
msg.oneofSint64 = 105;
20272142
break;
2028-
case Message3_O_OneOfCase_OneofFixed32:
2143+
case Message2_O_OneOfCase_OneofFixed32:
20292144
msg.oneofFixed32 = 106;
20302145
break;
2031-
case Message3_O_OneOfCase_OneofFixed64:
2146+
case Message2_O_OneOfCase_OneofFixed64:
20322147
msg.oneofFixed64 = 107;
20332148
break;
2034-
case Message3_O_OneOfCase_OneofSfixed32:
2149+
case Message2_O_OneOfCase_OneofSfixed32:
20352150
msg.oneofSfixed32 = 108;
20362151
break;
2037-
case Message3_O_OneOfCase_OneofSfixed64:
2152+
case Message2_O_OneOfCase_OneofSfixed64:
20382153
msg.oneofSfixed64 = 109;
20392154
break;
2040-
case Message3_O_OneOfCase_OneofFloat:
2155+
case Message2_O_OneOfCase_OneofFloat:
20412156
msg.oneofFloat = 110.0f;
20422157
break;
2043-
case Message3_O_OneOfCase_OneofDouble:
2158+
case Message2_O_OneOfCase_OneofDouble:
20442159
msg.oneofDouble = 111.0;
20452160
break;
2046-
case Message3_O_OneOfCase_OneofBool:
2161+
case Message2_O_OneOfCase_OneofBool:
20472162
msg.oneofBool = YES;
20482163
break;
2049-
case Message3_O_OneOfCase_OneofString:
2164+
case Message2_O_OneOfCase_OneofString:
20502165
msg.oneofString = oneofStringDefault;
20512166
break;
2052-
case Message3_O_OneOfCase_OneofBytes:
2167+
case Message2_O_OneOfCase_OneofBytes:
20532168
msg.oneofBytes = oneofBytesDefault;
20542169
break;
2055-
case Message3_O_OneOfCase_OneofEnum:
2170+
case Message2_O_OneOfCase_OneofEnum:
20562171
msg.oneofEnum = Message3_Enum_Baz;
20572172
break;
20582173
default:
@@ -2063,7 +2178,7 @@ - (void)testProto2OneofSetToDefault {
20632178
// Should be set to the correct case.
20642179
XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i);
20652180

2066-
// Confirm everything is back as the defaults.
2181+
// Confirm everything is the defaults.
20672182
XCTAssertEqual(msg.oneofInt32, 100, "Loop: %zd", i);
20682183
XCTAssertEqual(msg.oneofInt64, 101, "Loop: %zd", i);
20692184
XCTAssertEqual(msg.oneofUint32, 102U, "Loop: %zd", i);
@@ -2079,20 +2194,25 @@ - (void)testProto2OneofSetToDefault {
20792194
XCTAssertEqual(msg.oneofBool, YES, "Loop: %zd", i);
20802195
XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i);
20812196
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.
20852199
XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz, "Loop: %zd", i);
20862200
}
20872201

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.
20902204
msg.oneofString = nil;
2091-
XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase);
2205+
XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
2206+
XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase);
20922207
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);
20942213
msg.oneofMessage = nil;
2095-
XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase);
2214+
XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase);
2215+
XCTAssertNotNil(msg.oneofMessage);
20962216

20972217
[msg release];
20982218
}
@@ -2212,10 +2332,13 @@ - (void)testProto3OneofSetToZero {
22122332
// We special case nil on string, data, message, ensure they work as expected.
22132333
msg.oneofString = nil;
22142334
XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase);
2335+
XCTAssertEqualObjects(msg.oneofString, oneofStringDefault);
22152336
msg.oneofBytes = nil;
22162337
XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase);
2338+
XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault);
22172339
msg.oneofMessage = nil;
22182340
XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase);
2341+
XCTAssertNotNil(msg.oneofMessage);
22192342

22202343
[msg release];
22212344
}

0 commit comments

Comments
 (0)