|
|
|
@ -326,6 +326,17 @@ |
|
|
|
|
//% [msg release]; |
|
|
|
|
//% } |
|
|
|
|
//% |
|
|
|
|
//%PDDM-DEFINE PROTO2_TEST_CLEAR_FIELD_WITH_NIL(FIELD, VALUE) |
|
|
|
|
//% { // optional##FIELD |
|
|
|
|
//% Message2 *msg = [[Message2 alloc] init]; |
|
|
|
|
//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD)); |
|
|
|
|
//% msg.optional##FIELD = VALUE; |
|
|
|
|
//% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD)); |
|
|
|
|
//% msg.optional##FIELD = nil; |
|
|
|
|
//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_Optional##FIELD)); |
|
|
|
|
//% [msg release]; |
|
|
|
|
//% } |
|
|
|
|
//% |
|
|
|
|
//%PDDM-DEFINE PROTO2_TEST_HAS_FIELDS() |
|
|
|
|
//%PROTO2_TEST_HAS_FIELD(Int32, 1, 0) |
|
|
|
|
//%PROTO2_TEST_HAS_FIELD(Int64, 1, 0) |
|
|
|
@ -347,6 +358,14 @@ |
|
|
|
|
//% // |
|
|
|
|
//% |
|
|
|
|
//%PROTO2_TEST_HAS_FIELD(Enum, Message2_Enum_Bar, Message2_Enum_Foo) |
|
|
|
|
//% // |
|
|
|
|
//% // Nil can also be used to clear strings, bytes, groups, and messages. |
|
|
|
|
//% // |
|
|
|
|
//% |
|
|
|
|
//%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(String, @"foo") |
|
|
|
|
//%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding]) |
|
|
|
|
//%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Group, [Message2_OptionalGroup message]) |
|
|
|
|
//%PROTO2_TEST_CLEAR_FIELD_WITH_NIL(Message, [Message2 message]) |
|
|
|
|
//%PDDM-EXPAND PROTO2_TEST_HAS_FIELDS() |
|
|
|
|
// This block of code is generated, do not edit it directly. |
|
|
|
|
|
|
|
|
@ -658,13 +677,57 @@ |
|
|
|
|
[msg release]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// |
|
|
|
|
// Nil can also be used to clear strings, bytes, groups, and messages. |
|
|
|
|
// |
|
|
|
|
|
|
|
|
|
{ // optionalString |
|
|
|
|
Message2 *msg = [[Message2 alloc] init]; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString)); |
|
|
|
|
msg.optionalString = @"foo"; |
|
|
|
|
XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString)); |
|
|
|
|
msg.optionalString = nil; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalString)); |
|
|
|
|
[msg release]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
{ // optionalBytes |
|
|
|
|
Message2 *msg = [[Message2 alloc] init]; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes)); |
|
|
|
|
msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding]; |
|
|
|
|
XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes)); |
|
|
|
|
msg.optionalBytes = nil; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalBytes)); |
|
|
|
|
[msg release]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
{ // optionalGroup |
|
|
|
|
Message2 *msg = [[Message2 alloc] init]; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalGroup)); |
|
|
|
|
msg.optionalGroup = [Message2_OptionalGroup message]; |
|
|
|
|
XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalGroup)); |
|
|
|
|
msg.optionalGroup = nil; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalGroup)); |
|
|
|
|
[msg release]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
{ // optionalMessage |
|
|
|
|
Message2 *msg = [[Message2 alloc] init]; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalMessage)); |
|
|
|
|
msg.optionalMessage = [Message2 message]; |
|
|
|
|
XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalMessage)); |
|
|
|
|
msg.optionalMessage = nil; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message2_FieldNumber_OptionalMessage)); |
|
|
|
|
[msg release]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//%PDDM-EXPAND-END PROTO2_TEST_HAS_FIELDS() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
- (void)testProto3SingleFieldHasBehavior { |
|
|
|
|
// |
|
|
|
|
// Setting to any value including the default value (0) should result has* |
|
|
|
|
// being true. |
|
|
|
|
// Setting to any value but the default value (0) should result has* |
|
|
|
|
// being true. When set to the default, shouldn't be true. |
|
|
|
|
// |
|
|
|
|
|
|
|
|
|
//%PDDM-DEFINE PROTO3_TEST_HAS_FIELD(FIELD, NON_ZERO_VALUE, ZERO_VALUE) |
|
|
|
@ -678,6 +741,17 @@ |
|
|
|
|
//% [msg release]; |
|
|
|
|
//% } |
|
|
|
|
//% |
|
|
|
|
//%PDDM-DEFINE PROTO3_TEST_CLEAR_FIELD_WITH_NIL(FIELD, VALUE) |
|
|
|
|
//% { // optional##FIELD |
|
|
|
|
//% Message3 *msg = [[Message3 alloc] init]; |
|
|
|
|
//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD)); |
|
|
|
|
//% msg.optional##FIELD = VALUE; |
|
|
|
|
//% XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD)); |
|
|
|
|
//% msg.optional##FIELD = nil; |
|
|
|
|
//% XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_Optional##FIELD)); |
|
|
|
|
//% [msg release]; |
|
|
|
|
//% } |
|
|
|
|
//% |
|
|
|
|
//%PDDM-DEFINE PROTO3_TEST_HAS_FIELDS() |
|
|
|
|
//%PROTO3_TEST_HAS_FIELD(Int32, 1, 0) |
|
|
|
|
//%PROTO3_TEST_HAS_FIELD(Int64, 1, 0) |
|
|
|
@ -695,10 +769,17 @@ |
|
|
|
|
//%PROTO3_TEST_HAS_FIELD(String, @"foo", @"") |
|
|
|
|
//%PROTO3_TEST_HAS_FIELD(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding], [NSData data]) |
|
|
|
|
//% // |
|
|
|
|
//% // Test doesn't apply to optionalGroup/optionalMessage. |
|
|
|
|
//% // Test doesn't apply to optionalMessage (no groups in proto3). |
|
|
|
|
//% // |
|
|
|
|
//% |
|
|
|
|
//%PROTO3_TEST_HAS_FIELD(Enum, Message3_Enum_Bar, Message3_Enum_Foo) |
|
|
|
|
//% // |
|
|
|
|
//% // Nil can also be used to clear strings, bytes, and messages (no groups in proto3). |
|
|
|
|
//% // |
|
|
|
|
//% |
|
|
|
|
//%PROTO3_TEST_CLEAR_FIELD_WITH_NIL(String, @"foo") |
|
|
|
|
//%PROTO3_TEST_CLEAR_FIELD_WITH_NIL(Bytes, [@"foo" dataUsingEncoding:NSUTF8StringEncoding]) |
|
|
|
|
//%PROTO3_TEST_CLEAR_FIELD_WITH_NIL(Message, [Message3 message]) |
|
|
|
|
//%PDDM-EXPAND PROTO3_TEST_HAS_FIELDS() |
|
|
|
|
// This block of code is generated, do not edit it directly. |
|
|
|
|
|
|
|
|
@ -853,7 +934,7 @@ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// |
|
|
|
|
// Test doesn't apply to optionalGroup/optionalMessage. |
|
|
|
|
// Test doesn't apply to optionalMessage (no groups in proto3). |
|
|
|
|
// |
|
|
|
|
|
|
|
|
|
{ // optionalEnum |
|
|
|
@ -866,6 +947,40 @@ |
|
|
|
|
[msg release]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// |
|
|
|
|
// Nil can also be used to clear strings, bytes, and messages (no groups in proto3). |
|
|
|
|
// |
|
|
|
|
|
|
|
|
|
{ // optionalString |
|
|
|
|
Message3 *msg = [[Message3 alloc] init]; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString)); |
|
|
|
|
msg.optionalString = @"foo"; |
|
|
|
|
XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString)); |
|
|
|
|
msg.optionalString = nil; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalString)); |
|
|
|
|
[msg release]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
{ // optionalBytes |
|
|
|
|
Message3 *msg = [[Message3 alloc] init]; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes)); |
|
|
|
|
msg.optionalBytes = [@"foo" dataUsingEncoding:NSUTF8StringEncoding]; |
|
|
|
|
XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes)); |
|
|
|
|
msg.optionalBytes = nil; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalBytes)); |
|
|
|
|
[msg release]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
{ // optionalMessage |
|
|
|
|
Message3 *msg = [[Message3 alloc] init]; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalMessage)); |
|
|
|
|
msg.optionalMessage = [Message3 message]; |
|
|
|
|
XCTAssertTrue(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalMessage)); |
|
|
|
|
msg.optionalMessage = nil; |
|
|
|
|
XCTAssertFalse(GPBMessageHasFieldNumberSet(msg, Message3_FieldNumber_OptionalMessage)); |
|
|
|
|
[msg release]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//%PDDM-EXPAND-END PROTO3_TEST_HAS_FIELDS() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -2007,52 +2122,52 @@ |
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < GPBARRAYSIZE(values); ++i) { |
|
|
|
|
switch (values[i]) { |
|
|
|
|
case Message3_O_OneOfCase_OneofInt32: |
|
|
|
|
case Message2_O_OneOfCase_OneofInt32: |
|
|
|
|
msg.oneofInt32 = 100; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofInt64: |
|
|
|
|
case Message2_O_OneOfCase_OneofInt64: |
|
|
|
|
msg.oneofInt64 = 101; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofUint32: |
|
|
|
|
case Message2_O_OneOfCase_OneofUint32: |
|
|
|
|
msg.oneofUint32 = 102; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofUint64: |
|
|
|
|
case Message2_O_OneOfCase_OneofUint64: |
|
|
|
|
msg.oneofUint64 = 103; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofSint32: |
|
|
|
|
case Message2_O_OneOfCase_OneofSint32: |
|
|
|
|
msg.oneofSint32 = 104; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofSint64: |
|
|
|
|
case Message2_O_OneOfCase_OneofSint64: |
|
|
|
|
msg.oneofSint64 = 105; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofFixed32: |
|
|
|
|
case Message2_O_OneOfCase_OneofFixed32: |
|
|
|
|
msg.oneofFixed32 = 106; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofFixed64: |
|
|
|
|
case Message2_O_OneOfCase_OneofFixed64: |
|
|
|
|
msg.oneofFixed64 = 107; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofSfixed32: |
|
|
|
|
case Message2_O_OneOfCase_OneofSfixed32: |
|
|
|
|
msg.oneofSfixed32 = 108; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofSfixed64: |
|
|
|
|
case Message2_O_OneOfCase_OneofSfixed64: |
|
|
|
|
msg.oneofSfixed64 = 109; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofFloat: |
|
|
|
|
case Message2_O_OneOfCase_OneofFloat: |
|
|
|
|
msg.oneofFloat = 110.0f; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofDouble: |
|
|
|
|
case Message2_O_OneOfCase_OneofDouble: |
|
|
|
|
msg.oneofDouble = 111.0; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofBool: |
|
|
|
|
case Message2_O_OneOfCase_OneofBool: |
|
|
|
|
msg.oneofBool = YES; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofString: |
|
|
|
|
case Message2_O_OneOfCase_OneofString: |
|
|
|
|
msg.oneofString = oneofStringDefault; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofBytes: |
|
|
|
|
case Message2_O_OneOfCase_OneofBytes: |
|
|
|
|
msg.oneofBytes = oneofBytesDefault; |
|
|
|
|
break; |
|
|
|
|
case Message3_O_OneOfCase_OneofEnum: |
|
|
|
|
case Message2_O_OneOfCase_OneofEnum: |
|
|
|
|
msg.oneofEnum = Message3_Enum_Baz; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
@ -2063,7 +2178,7 @@ |
|
|
|
|
// Should be set to the correct case. |
|
|
|
|
XCTAssertEqual(msg.oOneOfCase, values[i], "Loop: %zd", i); |
|
|
|
|
|
|
|
|
|
// Confirm everything is back as the defaults. |
|
|
|
|
// Confirm everything is the defaults. |
|
|
|
|
XCTAssertEqual(msg.oneofInt32, 100, "Loop: %zd", i); |
|
|
|
|
XCTAssertEqual(msg.oneofInt64, 101, "Loop: %zd", i); |
|
|
|
|
XCTAssertEqual(msg.oneofUint32, 102U, "Loop: %zd", i); |
|
|
|
@ -2079,20 +2194,25 @@ |
|
|
|
|
XCTAssertEqual(msg.oneofBool, YES, "Loop: %zd", i); |
|
|
|
|
XCTAssertEqualObjects(msg.oneofString, oneofStringDefault, "Loop: %zd", i); |
|
|
|
|
XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault, "Loop: %zd", i); |
|
|
|
|
XCTAssertNotNil(msg.oneofGroup, "Loop: %zd", i); |
|
|
|
|
// Skip group |
|
|
|
|
// Skip message |
|
|
|
|
// Skip group, no default to consider. |
|
|
|
|
// Skip message, no default to consider. |
|
|
|
|
XCTAssertEqual(msg.oneofEnum, Message2_Enum_Baz, "Loop: %zd", i); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// We special case nil on string, data, message, ensure they work as expected. |
|
|
|
|
// i.e. - it clears the case. |
|
|
|
|
// We special case nil on string, data, group, and message, ensure they work |
|
|
|
|
// as expected. i.e. - it clears the case. |
|
|
|
|
msg.oneofString = nil; |
|
|
|
|
XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); |
|
|
|
|
XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); |
|
|
|
|
XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); |
|
|
|
|
msg.oneofBytes = nil; |
|
|
|
|
XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); |
|
|
|
|
XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); |
|
|
|
|
XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); |
|
|
|
|
msg.oneofGroup = nil; |
|
|
|
|
XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); |
|
|
|
|
XCTAssertNotNil(msg.oneofGroup); |
|
|
|
|
msg.oneofMessage = nil; |
|
|
|
|
XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); |
|
|
|
|
XCTAssertEqual(msg.oOneOfCase, Message2_O_OneOfCase_GPBUnsetOneOfCase); |
|
|
|
|
XCTAssertNotNil(msg.oneofMessage); |
|
|
|
|
|
|
|
|
|
[msg release]; |
|
|
|
|
} |
|
|
|
@ -2212,10 +2332,13 @@ |
|
|
|
|
// We special case nil on string, data, message, ensure they work as expected. |
|
|
|
|
msg.oneofString = nil; |
|
|
|
|
XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); |
|
|
|
|
XCTAssertEqualObjects(msg.oneofString, oneofStringDefault); |
|
|
|
|
msg.oneofBytes = nil; |
|
|
|
|
XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); |
|
|
|
|
XCTAssertEqualObjects(msg.oneofBytes, oneofBytesDefault); |
|
|
|
|
msg.oneofMessage = nil; |
|
|
|
|
XCTAssertEqual(msg.oOneOfCase, Message3_O_OneOfCase_GPBUnsetOneOfCase); |
|
|
|
|
XCTAssertNotNil(msg.oneofMessage); |
|
|
|
|
|
|
|
|
|
[msg release]; |
|
|
|
|
} |
|
|
|
|