Merge pull request #1604 from jonwallg/repeated_types

fix expected class checking in GPBSetMessageRepeatedField
pull/1620/head
Thomas Van Lenten 9 years ago
commit 86e8f1fd7a
  1. 4
      objectivec/GPBUtilities.m
  2. 27
      objectivec/Tests/GPBUtilitiesTests.m

@ -948,10 +948,10 @@ void GPBSetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field, id
case GPBDataTypeString: case GPBDataTypeString:
case GPBDataTypeMessage: case GPBDataTypeMessage:
case GPBDataTypeGroup: case GPBDataTypeGroup:
expectedClass = [NSMutableDictionary class]; expectedClass = [NSMutableArray class];
break; break;
case GPBDataTypeEnum: case GPBDataTypeEnum:
expectedClass = [GPBBoolArray class]; expectedClass = [GPBEnumArray class];
break; break;
} }
if (array && ![array isKindOfClass:expectedClass]) { if (array && ![array isKindOfClass:expectedClass]) {

@ -170,4 +170,31 @@
// TODO(thomasvl): add test with extensions once those format with correct names. // TODO(thomasvl): add test with extensions once those format with correct names.
- (void)testSetRepeatedFields {
TestAllTypes *message = [TestAllTypes message];
NSDictionary *repeatedFieldValues = @{
@"repeatedStringArray" : [@[@"foo", @"bar"] mutableCopy],
@"repeatedBoolArray" : [GPBBoolArray arrayWithValue:YES],
@"repeatedInt32Array" : [GPBInt32Array arrayWithValue:14],
@"repeatedInt64Array" : [GPBInt64Array arrayWithValue:15],
@"repeatedUint32Array" : [GPBUInt32Array arrayWithValue:16],
@"repeatedUint64Array" : [GPBUInt64Array arrayWithValue:16],
@"repeatedFloatArray" : [GPBFloatArray arrayWithValue:16],
@"repeatedDoubleArray" : [GPBDoubleArray arrayWithValue:16],
@"repeatedNestedEnumArray" :
[GPBEnumArray arrayWithValidationFunction:TestAllTypes_NestedEnum_IsValidValue
rawValue:TestAllTypes_NestedEnum_Foo],
};
for (NSString *fieldName in repeatedFieldValues) {
GPBFieldDescriptor *field =
[message.descriptor fieldWithName:fieldName];
XCTAssertNotNil(field, @"No field with name: %@", fieldName);
id expectedValues = repeatedFieldValues[fieldName];
GPBSetMessageRepeatedField(message, field, expectedValues);
XCTAssertEqualObjects(expectedValues,
[message valueForKeyPath:fieldName]);
}
}
@end @end

Loading…
Cancel
Save