From fc4c6171999243695166747108cf7d65e34bf4c0 Mon Sep 17 00:00:00 2001 From: Thomas Van Lenten Date: Mon, 27 Jun 2016 20:45:16 -0400 Subject: Fix GPBGetMessage{Repeated,Map}Field() - Correct impl by using helpers the message wiring does. - Add unittests. Fixes https://github.com/google/protobuf/issues/1716 --- objectivec/Tests/GPBMessageTests+Runtime.m | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'objectivec/Tests/GPBMessageTests+Runtime.m') diff --git a/objectivec/Tests/GPBMessageTests+Runtime.m b/objectivec/Tests/GPBMessageTests+Runtime.m index 5e197711..1520381b 100644 --- a/objectivec/Tests/GPBMessageTests+Runtime.m +++ b/objectivec/Tests/GPBMessageTests+Runtime.m @@ -2066,6 +2066,46 @@ }]; } +- (void)test_GPBGetMessageRepeatedField { + TestAllTypes *message = [TestAllTypes message]; + GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"repeatedStringArray"]; + XCTAssertNotNil(fieldDescriptor); + NSMutableArray *fieldArray = GPBGetMessageRepeatedField(message, fieldDescriptor); + XCTAssertNotNil(fieldArray); // Should have autocreated. + XCTAssertTrue(fieldArray == message.repeatedStringArray); // Same pointer +} + +- (void)test_GPBSetMessageRepeatedField { + TestAllTypes *message = [TestAllTypes message]; + GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"repeatedStringArray"]; + XCTAssertNotNil(fieldDescriptor); + + NSMutableArray *fieldArray = [NSMutableArray arrayWithObject:@"foo"]; + GPBSetMessageRepeatedField(message, fieldDescriptor, fieldArray); + XCTAssertTrue(fieldArray == message.repeatedStringArray); // Same pointer + XCTAssertEqualObjects(@"foo", message.repeatedStringArray.firstObject); +} + +- (void)test_GPBGetMessageMapField { + TestMap *message = [TestMap message]; + GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"mapStringString"]; + XCTAssertNotNil(fieldDescriptor); + NSMutableDictionary *fieldMap = GPBGetMessageMapField(message, fieldDescriptor); + XCTAssertNotNil(fieldMap); // Should have autocreated. + XCTAssertTrue(fieldMap == message.mapStringString); // Same pointer +} + +- (void)test_GPBSetMessageMapField { + TestMap *message = [TestMap message]; + GPBFieldDescriptor *fieldDescriptor = [[message descriptor] fieldWithName:@"mapStringString"]; + XCTAssertNotNil(fieldDescriptor); + + NSMutableDictionary *fieldMap = [NSMutableDictionary dictionaryWithObject:@"bar" forKey:@"foo"]; + GPBSetMessageMapField(message, fieldDescriptor, fieldMap); + XCTAssertTrue(fieldMap == message.mapStringString); // Same pointer + XCTAssertEqualObjects(@"bar", message.mapStringString[@"foo"]); +} + #pragma mark - Subset from from map_tests.cc // TEST(GeneratedMapFieldTest, IsInitialized) -- cgit v1.2.3