ADD: added new version of protobuf

This commit is contained in:
Henry Winkel
2022-12-20 10:09:28 +01:00
parent 4a79559129
commit 1e2b3dda7b
1513 changed files with 123720 additions and 83381 deletions

View File

@@ -36,12 +36,12 @@
#import "GPBDescriptor.h"
#import "GPBDictionary_PackagePrivate.h"
#import "GPBMessage_PackagePrivate.h"
#import "GPBUnknownFieldSet_PackagePrivate.h"
#import "GPBUnknownField_PackagePrivate.h"
#import "objectivec/Tests/Unittest.pbobjc.h"
#import "objectivec/Tests/UnittestImport.pbobjc.h"
#import "objectivec/Tests/UnittestObjc.pbobjc.h"
#import "objectivec/Tests/UnittestObjcOptions.pbobjc.h"
#import "GPBUnknownFieldSet_PackagePrivate.h"
#import "google/protobuf/Unittest.pbobjc.h"
#import "google/protobuf/UnittestObjc.pbobjc.h"
#import "google/protobuf/UnittestObjcOptions.pbobjc.h"
#import "google/protobuf/UnittestImport.pbobjc.h"
// Helper class to test KVO.
@interface GPBKVOTestObserver : NSObject {
@@ -49,7 +49,7 @@
NSString *keyPath_;
}
@property(nonatomic) BOOL didObserve;
@property (nonatomic) BOOL didObserve;
- (id)initWithObservee:(id)observee keyPath:(NSString *)keyPath;
@end
@@ -74,9 +74,13 @@
}
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(__unused id)object
change:(__unused NSDictionary *)change
context:(__unused void *)context {
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
#pragma unused(object)
#pragma unused(change)
#pragma unused(context)
if ([keyPath isEqualToString:keyPath_]) {
self.didObserve = YES;
}
@@ -152,9 +156,12 @@
[message setExtension:[UnittestRoot optionalStringExtension] value:@"foo"];
ForeignMessage *foreignMessage = [ForeignMessage message];
foreignMessage.c = 4;
[message setExtension:[UnittestRoot optionalForeignMessageExtension] value:foreignMessage];
TestAllTypes_NestedMessage *nestedMessage = [TestAllTypes_NestedMessage message];
[message setExtension:[UnittestRoot optionalNestedMessageExtension] value:nestedMessage];
[message setExtension:[UnittestRoot optionalForeignMessageExtension]
value:foreignMessage];
TestAllTypes_NestedMessage *nestedMessage =
[TestAllTypes_NestedMessage message];
[message setExtension:[UnittestRoot optionalNestedMessageExtension]
value:nestedMessage];
return message;
}
@@ -163,10 +170,13 @@
[message setExtension:[UnittestRoot optionalInt64Extension] value:@6];
[message setExtension:[UnittestRoot optionalStringExtension] value:@"bar"];
ForeignMessage *foreignMessage = [ForeignMessage message];
[message setExtension:[UnittestRoot optionalForeignMessageExtension] value:foreignMessage];
TestAllTypes_NestedMessage *nestedMessage = [TestAllTypes_NestedMessage message];
[message setExtension:[UnittestRoot optionalForeignMessageExtension]
value:foreignMessage];
TestAllTypes_NestedMessage *nestedMessage =
[TestAllTypes_NestedMessage message];
nestedMessage.bb = 7;
[message setExtension:[UnittestRoot optionalNestedMessageExtension] value:nestedMessage];
[message setExtension:[UnittestRoot optionalNestedMessageExtension]
value:nestedMessage];
return message;
}
@@ -177,10 +187,13 @@
[message setExtension:[UnittestRoot optionalStringExtension] value:@"bar"];
ForeignMessage *foreignMessage = [ForeignMessage message];
foreignMessage.c = 4;
[message setExtension:[UnittestRoot optionalForeignMessageExtension] value:foreignMessage];
TestAllTypes_NestedMessage *nestedMessage = [TestAllTypes_NestedMessage message];
[message setExtension:[UnittestRoot optionalForeignMessageExtension]
value:foreignMessage];
TestAllTypes_NestedMessage *nestedMessage =
[TestAllTypes_NestedMessage message];
nestedMessage.bb = 7;
[message setExtension:[UnittestRoot optionalNestedMessageExtension] value:nestedMessage];
[message setExtension:[UnittestRoot optionalNestedMessageExtension]
value:nestedMessage];
return message;
}
@@ -198,9 +211,11 @@
result = [[self.mergeDestinationWithoutForeignMessageIvar copy] autorelease];
[result mergeFrom:self.mergeSource];
resultData = [result data];
mergeResultData = [self.mergeResultForDestinationWithoutForeignMessageIvar data];
mergeResultData =
[self.mergeResultForDestinationWithoutForeignMessageIvar data];
XCTAssertEqualObjects(resultData, mergeResultData);
XCTAssertEqualObjects(result, self.mergeResultForDestinationWithoutForeignMessageIvar);
XCTAssertEqualObjects(
result, self.mergeResultForDestinationWithoutForeignMessageIvar);
// Test when destination is empty.
// The result must is same as the source.
@@ -224,7 +239,8 @@
result = [self mergeExtensionsDestination];
NSData *data = [[self mergeExtensionsSource] data];
XCTAssertNotNil(data);
[result mergeFromData:data extensionRegistry:[UnittestRoot extensionRegistry]];
[result mergeFromData:data
extensionRegistry:[UnittestRoot extensionRegistry]];
resultData = [result data];
XCTAssertEqualObjects(resultData, mergeResultData);
XCTAssertEqualObjects(result, [self mergeExtensionsResult]);
@@ -290,13 +306,16 @@
[message setExtension:[TestRequired single] value:[TestRequired message]];
XCTAssertFalse(message.initialized);
[message setExtension:[TestRequired single] value:self.testRequiredInitialized];
[message setExtension:[TestRequired single]
value:self.testRequiredInitialized];
XCTAssertTrue(message.initialized);
[message addExtension:[TestRequired multi] value:[TestRequired message]];
XCTAssertFalse(message.initialized);
[message setExtension:[TestRequired multi] index:0 value:self.testRequiredInitialized];
[message setExtension:[TestRequired multi]
index:0
value:self.testRequiredInitialized];
XCTAssertTrue(message.initialized);
}
@@ -348,7 +367,8 @@
- (void)testParseUninitialized {
NSError *error = nil;
TestRequired *msg = [TestRequired parseFromData:GPBEmptyNSData() error:&error];
TestRequired *msg =
[TestRequired parseFromData:GPBEmptyNSData() error:&error];
// In DEBUG, the parse will fail, but in non DEBUG, it passes because
// the check isn't done (for speed).
#ifdef DEBUG
@@ -368,7 +388,8 @@
- (void)testCoding {
GPBMessage *original = [self mergeResult];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:original];
NSData *data =
[NSKeyedArchiver archivedDataWithRootObject:original];
id unarchivedObject = [NSKeyedUnarchiver unarchiveObjectWithData:data];
XCTAssertEqualObjects(unarchivedObject, original);
@@ -390,7 +411,8 @@
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
[unarchiver setRequiresSecureCoding:YES];
id unarchivedObject = [unarchiver decodeObjectOfClass:[GPBMessage class] forKey:key];
id unarchivedObject = [unarchiver decodeObjectOfClass:[GPBMessage class]
forKey:key];
[unarchiver finishDecoding];
XCTAssertEqualObjects(unarchivedObject, original);
@@ -463,7 +485,9 @@
- (void)testKVOBasic {
TestAllTypes *message = [TestAllTypes message];
GPBKVOTestObserver *observer =
[[[GPBKVOTestObserver alloc] initWithObservee:message keyPath:@"optionalString"] autorelease];
[[[GPBKVOTestObserver alloc] initWithObservee:message
keyPath:@"optionalString"]
autorelease];
XCTAssertFalse(observer.didObserve);
message.defaultString = @"Hello";
XCTAssertFalse(observer.didObserve);
@@ -475,10 +499,12 @@
TestAllTypes *message = [TestAllTypes message];
GPBKVOTestObserver *autocreateObserver =
[[[GPBKVOTestObserver alloc] initWithObservee:message
keyPath:@"optionalImportMessage"] autorelease];
GPBKVOTestObserver *innerFieldObserver =
[[[GPBKVOTestObserver alloc] initWithObservee:message
keyPath:@"optionalImportMessage.d"] autorelease];
keyPath:@"optionalImportMessage"]
autorelease];
GPBKVOTestObserver *innerFieldObserver =
[[[GPBKVOTestObserver alloc] initWithObservee:message
keyPath:@"optionalImportMessage.d"]
autorelease];
XCTAssertFalse(autocreateObserver.didObserve);
XCTAssertFalse(innerFieldObserver.didObserve);
@@ -510,8 +536,10 @@
TestAllTypes *message = [TestAllTypes message];
[self setAllFields:message repeatedCount:kGPBDefaultRepeatCount];
GPBUnknownFieldSet *unknownFields = [[[GPBUnknownFieldSet alloc] init] autorelease];
GPBUnknownField *field = [[[GPBUnknownField alloc] initWithNumber:2] autorelease];
GPBUnknownFieldSet *unknownFields =
[[[GPBUnknownFieldSet alloc] init] autorelease];
GPBUnknownField *field =
[[[GPBUnknownField alloc] initWithNumber:2] autorelease];
[field addVarint:2];
[unknownFields addField:field];
field = [[[GPBUnknownField alloc] initWithNumber:3] autorelease];
@@ -539,7 +567,8 @@
TestAllTypes *message = [TestAllTypes message];
GPBDescriptor *descriptor = [[message class] descriptor];
XCTAssertNotNil(descriptor);
GPBFieldDescriptor *fieldDescriptor = [descriptor fieldWithName:@"defaultInt32"];
GPBFieldDescriptor *fieldDescriptor =
[descriptor fieldWithName:@"defaultInt32"];
XCTAssertNotNil(fieldDescriptor);
GPBGenericValue defaultValue = [fieldDescriptor defaultValue];
[message setDefaultInt32:defaultValue.valueInt32];
@@ -650,7 +679,8 @@
TestAllTypes *message = [TestAllTypes message];
[self setAllFields:message repeatedCount:kGPBDefaultRepeatCount];
[self modifyRepeatedFields:message];
[self assertRepeatedFieldsModified:message repeatedCount:kGPBDefaultRepeatCount];
[self assertRepeatedFieldsModified:message
repeatedCount:kGPBDefaultRepeatCount];
}
- (void)testClear {
@@ -682,16 +712,19 @@
GPBMessage *message2 = [TestAllExtensions message];
[message2 addExtension:[UnittestRoot repeatedInt32Extension] value:@1];
XCTAssertEqual([[message2 getExtension:[UnittestRoot repeatedInt32Extension]] count],
(NSUInteger)1);
XCTAssertEqual(
[[message2 getExtension:[UnittestRoot repeatedInt32Extension]] count],
(NSUInteger)1);
[message2 clearExtension:[UnittestRoot repeatedInt32Extension]];
XCTAssertEqual([[message2 getExtension:[UnittestRoot repeatedInt32Extension]] count],
(NSUInteger)0);
XCTAssertEqual(
[[message2 getExtension:[UnittestRoot repeatedInt32Extension]] count],
(NSUInteger)0);
// Clearing an unset extension field shouldn't make the target message
// visible.
GPBMessage *message3 = [TestAllExtensions message];
GPBMessage *extension_msg = [message3 getExtension:[UnittestObjcRoot recursiveExtension]];
GPBMessage *extension_msg =
[message3 getExtension:[UnittestObjcRoot recursiveExtension]];
XCTAssertFalse([message3 hasExtension:[UnittestObjcRoot recursiveExtension]]);
[extension_msg clearExtension:[UnittestRoot optionalInt32Extension]];
XCTAssertFalse([message3 hasExtension:[UnittestObjcRoot recursiveExtension]]);
@@ -712,11 +745,15 @@
// They should auto create something when fetched.
TestAllTypes_OptionalGroup *optionalGroup = [message.optionalGroup retain];
TestAllTypes_NestedMessage *optionalNestedMessage = [message.optionalNestedMessage retain];
ForeignMessage *optionalForeignMessage = [message.optionalForeignMessage retain];
TestAllTypes_NestedMessage *optionalNestedMessage =
[message.optionalNestedMessage retain];
ForeignMessage *optionalForeignMessage =
[message.optionalForeignMessage retain];
ImportMessage *optionalImportMessage = [message.optionalImportMessage retain];
PublicImportMessage *optionalPublicImportMessage = [message.optionalPublicImportMessage retain];
TestAllTypes_NestedMessage *optionalLazyMessage = [message.optionalLazyMessage retain];
PublicImportMessage *optionalPublicImportMessage =
[message.optionalPublicImportMessage retain];
TestAllTypes_NestedMessage *optionalLazyMessage =
[message.optionalLazyMessage retain];
XCTAssertNotNil(optionalGroup);
XCTAssertNotNil(optionalNestedMessage);
@@ -742,7 +779,8 @@
XCTAssertEqual(message.optionalNestedMessage, optionalNestedMessage);
XCTAssertEqual(message.optionalForeignMessage, optionalForeignMessage);
XCTAssertEqual(message.optionalImportMessage, optionalImportMessage);
XCTAssertEqual(message.optionalPublicImportMessage, optionalPublicImportMessage);
XCTAssertEqual(message.optionalPublicImportMessage,
optionalPublicImportMessage);
XCTAssertEqual(message.optionalLazyMessage, optionalLazyMessage);
// And the default objects for a second message should be distinct (again,
@@ -755,7 +793,8 @@
XCTAssertNotEqual(message2.optionalNestedMessage, optionalNestedMessage);
XCTAssertNotEqual(message2.optionalForeignMessage, optionalForeignMessage);
XCTAssertNotEqual(message2.optionalImportMessage, optionalImportMessage);
XCTAssertNotEqual(message2.optionalPublicImportMessage, optionalPublicImportMessage);
XCTAssertNotEqual(message2.optionalPublicImportMessage,
optionalPublicImportMessage);
XCTAssertNotEqual(message2.optionalLazyMessage, optionalLazyMessage);
// Setting the values to nil will clear the has flag, and on next access you
@@ -780,7 +819,8 @@
XCTAssertNotEqual(message.optionalNestedMessage, optionalNestedMessage);
XCTAssertNotEqual(message.optionalForeignMessage, optionalForeignMessage);
XCTAssertNotEqual(message.optionalImportMessage, optionalImportMessage);
XCTAssertNotEqual(message.optionalPublicImportMessage, optionalPublicImportMessage);
XCTAssertNotEqual(message.optionalPublicImportMessage,
optionalPublicImportMessage);
XCTAssertNotEqual(message.optionalLazyMessage, optionalLazyMessage);
[optionalGroup release];
@@ -813,7 +853,8 @@
XCTAssertFalse([message2 hasOptionalNestedMessage]);
// Intentionally doing a pointer comparison.
XCTAssertNotEqual(message.optionalNestedMessage, message2.optionalNestedMessage);
XCTAssertNotEqual(message.optionalNestedMessage,
message2.optionalNestedMessage);
}
- (void)testClearAutocreatedSubmessage {
@@ -839,9 +880,10 @@
ForeignMessage *subMessage;
@autoreleasepool {
TestAllTypes *message2 = [TestAllTypes message];
subMessage = message2.optionalForeignMessage; // Autocreated
subMessage = message2.optionalForeignMessage; // Autocreated
message.optionalForeignMessage = subMessage;
XCTAssertTrue(GPBWasMessageAutocreatedBy(message.optionalForeignMessage, message2));
XCTAssertTrue(GPBWasMessageAutocreatedBy(message.optionalForeignMessage,
message2));
}
// Should be the same object, and should still be live.
@@ -977,7 +1019,8 @@
// Setting autocreated submessage to another value should cause the old one to
// lose its creator.
TestAllTypes *message = [TestAllTypes message];
TestAllTypes_NestedMessage *nestedMessage = [message.optionalNestedMessage retain];
TestAllTypes_NestedMessage *nestedMessage =
[message.optionalNestedMessage retain];
message.optionalNestedMessage = [TestAllTypes_NestedMessage message];
XCTAssertTrue([message hasOptionalNestedMessage]);
@@ -996,7 +1039,8 @@
XCTAssertNil(message.optionalNestedMessage.unknownFields);
XCTAssertFalse([message hasOptionalNestedMessage]);
GPBUnknownFieldSet *unknownFields = [[[GPBUnknownFieldSet alloc] init] autorelease];
GPBUnknownFieldSet *unknownFields =
[[[GPBUnknownFieldSet alloc] init] autorelease];
message.optionalNestedMessage.unknownFields = unknownFields;
XCTAssertTrue([message hasOptionalNestedMessage]);
@@ -1045,8 +1089,10 @@
- (void)testDefaultingArrays {
// Basic tests for default creation of arrays in a message.
TestRecursiveMessageWithRepeatedField *message = [TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message2 = [TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message =
[TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message2 =
[TestRecursiveMessageWithRepeatedField message];
// Simply accessing the array should not make any fields visible.
XCTAssertNotNil(message.a.a.iArray);
@@ -1113,9 +1159,11 @@
XCTAssertNotNil(message.repeatedStringArray);
TestAllTypes *message4 = [[message3 copy] autorelease];
XCTAssertNotEqual(message3.repeatedInt32Array, message4.repeatedInt32Array);
XCTAssertEqualObjects(message3.repeatedInt32Array, message4.repeatedInt32Array);
XCTAssertEqualObjects(message3.repeatedInt32Array,
message4.repeatedInt32Array);
XCTAssertNotEqual(message3.repeatedStringArray, message4.repeatedStringArray);
XCTAssertEqualObjects(message3.repeatedStringArray, message4.repeatedStringArray);
XCTAssertEqualObjects(message3.repeatedStringArray,
message4.repeatedStringArray);
}
- (void)testAutocreatedArrayRetain {
@@ -1128,13 +1176,18 @@
message.repeatedStringArray = message2.repeatedStringArray;
// Pointer conparision
XCTAssertEqual(message.repeatedInt32Array->_autocreator, message2);
XCTAssertTrue([message.repeatedStringArray isKindOfClass:[GPBAutocreatedArray class]]);
XCTAssertEqual(((GPBAutocreatedArray *)message.repeatedStringArray)->_autocreator, message2);
XCTAssertTrue([message.repeatedStringArray
isKindOfClass:[GPBAutocreatedArray class]]);
XCTAssertEqual(
((GPBAutocreatedArray *)message.repeatedStringArray)->_autocreator,
message2);
}
XCTAssertNil(message.repeatedInt32Array->_autocreator);
XCTAssertTrue([message.repeatedStringArray isKindOfClass:[GPBAutocreatedArray class]]);
XCTAssertNil(((GPBAutocreatedArray *)message.repeatedStringArray)->_autocreator);
XCTAssertTrue(
[message.repeatedStringArray isKindOfClass:[GPBAutocreatedArray class]]);
XCTAssertNil(
((GPBAutocreatedArray *)message.repeatedStringArray)->_autocreator);
}
- (void)testSetNilAutocreatedArray {
@@ -1192,7 +1245,8 @@
XCTAssertNotNil(message.a);
XCTAssertNotNil(message.a.strArray);
XCTAssertFalse([message hasA]);
GPBAutocreatedArray *strArray = (GPBAutocreatedArray *)[message.a.strArray retain];
GPBAutocreatedArray *strArray =
(GPBAutocreatedArray *)[message.a.strArray retain];
XCTAssertTrue([strArray isKindOfClass:[GPBAutocreatedArray class]]);
XCTAssertEqual(strArray->_autocreator, message.a); // Pointer comparison
message.a.strArray = [NSMutableArray arrayWithObject:@"foo"];
@@ -1232,7 +1286,8 @@
- (void)testAutocreatedArrayRemoveAllValues {
// Calling removeAllValues on autocreated array should not cause it to be
// visible.
TestRecursiveMessageWithRepeatedField *message = [TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message =
[TestRecursiveMessageWithRepeatedField message];
[message.a.iArray removeAll];
XCTAssertFalse([message hasA]);
[message.a.strArray removeAllObjects];
@@ -1241,8 +1296,10 @@
- (void)testDefaultingMaps {
// Basic tests for default creation of maps in a message.
TestRecursiveMessageWithRepeatedField *message = [TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message2 = [TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message =
[TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message2 =
[TestRecursiveMessageWithRepeatedField message];
// Simply accessing the map should not make any fields visible.
XCTAssertNotNil(message.a.a.iToI);
@@ -1292,23 +1349,28 @@
- (void)testAutocreatedMapCopy {
// Copy should not copy autocreated maps.
TestRecursiveMessageWithRepeatedField *message = [TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message =
[TestRecursiveMessageWithRepeatedField message];
XCTAssertNotNil(message.strToStr);
XCTAssertNotNil(message.iToI);
TestRecursiveMessageWithRepeatedField *message2 = [[message copy] autorelease];
TestRecursiveMessageWithRepeatedField *message2 =
[[message copy] autorelease];
// Pointer conparisions.
XCTAssertNotEqual(message.strToStr, message2.strToStr);
XCTAssertNotEqual(message.iToI, message2.iToI);
// Mutable copy should copy empty arrays that were explicitly set (end up
// with different objects that are equal).
TestRecursiveMessageWithRepeatedField *message3 = [TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message3 =
[TestRecursiveMessageWithRepeatedField message];
message3.iToI = [[[GPBInt32Int32Dictionary alloc] init] autorelease];
[message3.iToI setInt32:10 forKey:20];
message3.strToStr = [NSMutableDictionary dictionaryWithObject:@"abc" forKey:@"123"];
message3.strToStr =
[NSMutableDictionary dictionaryWithObject:@"abc" forKey:@"123"];
XCTAssertNotNil(message.iToI);
XCTAssertNotNil(message.iToI);
TestRecursiveMessageWithRepeatedField *message4 = [[message3 copy] autorelease];
TestRecursiveMessageWithRepeatedField *message4 =
[[message3 copy] autorelease];
XCTAssertNotEqual(message3.iToI, message4.iToI);
XCTAssertEqualObjects(message3.iToI, message4.iToI);
XCTAssertNotEqual(message3.strToStr, message4.strToStr);
@@ -1317,7 +1379,8 @@
- (void)testAutocreatedMapRetain {
// Should be able to retain autocreated map while the creator is dealloced.
TestRecursiveMessageWithRepeatedField *message = [TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message =
[TestRecursiveMessageWithRepeatedField message];
@autoreleasepool {
TestRecursiveMessageWithRepeatedField *message2 =
@@ -1326,20 +1389,27 @@
message.strToStr = message2.strToStr;
// Pointer conparision
XCTAssertEqual(message.iToI->_autocreator, message2);
XCTAssertTrue([message.strToStr isKindOfClass:[GPBAutocreatedDictionary class]]);
XCTAssertEqual(((GPBAutocreatedDictionary *)message.strToStr)->_autocreator, message2);
XCTAssertTrue([message.strToStr
isKindOfClass:[GPBAutocreatedDictionary class]]);
XCTAssertEqual(
((GPBAutocreatedDictionary *)message.strToStr)->_autocreator,
message2);
}
XCTAssertNil(message.iToI->_autocreator);
XCTAssertTrue([message.strToStr isKindOfClass:[GPBAutocreatedDictionary class]]);
XCTAssertNil(((GPBAutocreatedDictionary *)message.strToStr)->_autocreator);
XCTAssertTrue(
[message.strToStr isKindOfClass:[GPBAutocreatedDictionary class]]);
XCTAssertNil(
((GPBAutocreatedDictionary *)message.strToStr)->_autocreator);
}
- (void)testSetNilAutocreatedMap {
// Setting map to nil should cause it to lose its delegate.
TestRecursiveMessageWithRepeatedField *message = [TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message =
[TestRecursiveMessageWithRepeatedField message];
GPBInt32Int32Dictionary *iToI = [message.iToI retain];
GPBAutocreatedDictionary *strToStr = (GPBAutocreatedDictionary *)[message.strToStr retain];
GPBAutocreatedDictionary *strToStr =
(GPBAutocreatedDictionary *)[message.strToStr retain];
XCTAssertTrue([strToStr isKindOfClass:[GPBAutocreatedDictionary class]]);
XCTAssertEqual(iToI->_autocreator, message);
XCTAssertEqual(strToStr->_autocreator, message);
@@ -1356,13 +1426,15 @@
// an autocreated one or a straight NSDictionary.
// The real test here is that nothing crashes while doing the work.
TestRecursiveMessageWithRepeatedField *message = [TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message =
[TestRecursiveMessageWithRepeatedField message];
message.strToStr[@"foo"] = @"bar";
XCTAssertEqual(message.strToStr_Count, (NSUInteger)1);
message.strToStr =
[NSMutableDictionary dictionaryWithObjectsAndKeys:@"bar", @"key1", @"baz", @"key2", nil];
XCTAssertEqual(message.strToStr_Count, (NSUInteger)2);
message.strToStr = [NSMutableDictionary dictionaryWithObject:@"baz" forKey:@"mumble"];
message.strToStr =
[NSMutableDictionary dictionaryWithObject:@"baz" forKey:@"mumble"];
XCTAssertEqual(message.strToStr_Count, (NSUInteger)1);
}
@@ -1391,10 +1463,12 @@
XCTAssertNotNil(message.a);
XCTAssertNotNil(message.a.strToStr);
XCTAssertFalse([message hasA]);
GPBAutocreatedDictionary *strToStr = (GPBAutocreatedDictionary *)[message.a.strToStr retain];
GPBAutocreatedDictionary *strToStr =
(GPBAutocreatedDictionary *)[message.a.strToStr retain];
XCTAssertTrue([strToStr isKindOfClass:[GPBAutocreatedDictionary class]]);
XCTAssertEqual(strToStr->_autocreator, message.a); // Pointer comparison
message.a.strToStr = [NSMutableDictionary dictionaryWithObject:@"abc" forKey:@"def"];
message.a.strToStr =
[NSMutableDictionary dictionaryWithObject:@"abc" forKey:@"def"];
XCTAssertTrue([message hasA]);
XCTAssertNotEqual(message.a.strToStr, strToStr); // Pointer comparison
XCTAssertNil(strToStr->_autocreator);
@@ -1430,7 +1504,8 @@
- (void)testAutocreatedMapRemoveAllValues {
// Calling removeAll on autocreated map should not cause it to be visible.
TestRecursiveMessageWithRepeatedField *message = [TestRecursiveMessageWithRepeatedField message];
TestRecursiveMessageWithRepeatedField *message =
[TestRecursiveMessageWithRepeatedField message];
[message.a.iToI removeAll];
XCTAssertFalse([message hasA]);
[message.a.strToStr removeAllObjects];
@@ -1447,7 +1522,8 @@
TestAllExtensions *message = [TestAllExtensions message];
[self setAllExtensions:message repeatedCount:kGPBDefaultRepeatCount];
[self modifyRepeatedExtensions:message];
[self assertRepeatedExtensionsModified:message repeatedCount:kGPBDefaultRepeatCount];
[self assertRepeatedExtensionsModified:message
repeatedCount:kGPBDefaultRepeatCount];
}
- (void)testExtensionDefaults {
@@ -1488,11 +1564,16 @@
XCTAssertFalse([message hasExtension:[UnittestRoot optionalGroupExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalGroupExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalNestedMessageExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalForeignMessageExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalImportMessageExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalPublicImportMessageExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalLazyMessageExtension]]);
XCTAssertFalse(
[message hasExtension:[UnittestRoot optionalNestedMessageExtension]]);
XCTAssertFalse(
[message hasExtension:[UnittestRoot optionalForeignMessageExtension]]);
XCTAssertFalse(
[message hasExtension:[UnittestRoot optionalImportMessageExtension]]);
XCTAssertFalse([message
hasExtension:[UnittestRoot optionalPublicImportMessageExtension]]);
XCTAssertFalse(
[message hasExtension:[UnittestRoot optionalLazyMessageExtension]]);
// They should auto create something when fetched.
@@ -1504,8 +1585,8 @@
[message getExtension:[UnittestRoot optionalForeignMessageExtension]];
ImportMessage *optionalImportMessage =
[message getExtension:[UnittestRoot optionalImportMessageExtension]];
PublicImportMessage *optionalPublicImportMessage =
[message getExtension:[UnittestRoot optionalPublicImportMessageExtension]];
PublicImportMessage *optionalPublicImportMessage = [message
getExtension:[UnittestRoot optionalPublicImportMessageExtension]];
TestAllTypes_NestedMessage *optionalLazyMessage =
[message getExtension:[UnittestRoot optionalLazyMessageExtension]];
@@ -1530,17 +1611,23 @@
// And they set that value back in to the message since the value created was
// mutable (so a second fetch should give the same object).
XCTAssertEqual([message getExtension:[UnittestRoot optionalGroupExtension]], optionalGroup);
XCTAssertEqual([message getExtension:[UnittestRoot optionalNestedMessageExtension]],
optionalNestedMessage);
XCTAssertEqual([message getExtension:[UnittestRoot optionalForeignMessageExtension]],
optionalForeignMessage);
XCTAssertEqual([message getExtension:[UnittestRoot optionalImportMessageExtension]],
optionalImportMessage);
XCTAssertEqual([message getExtension:[UnittestRoot optionalPublicImportMessageExtension]],
optionalPublicImportMessage);
XCTAssertEqual([message getExtension:[UnittestRoot optionalLazyMessageExtension]],
optionalLazyMessage);
XCTAssertEqual([message getExtension:[UnittestRoot optionalGroupExtension]],
optionalGroup);
XCTAssertEqual(
[message getExtension:[UnittestRoot optionalNestedMessageExtension]],
optionalNestedMessage);
XCTAssertEqual(
[message getExtension:[UnittestRoot optionalForeignMessageExtension]],
optionalForeignMessage);
XCTAssertEqual(
[message getExtension:[UnittestRoot optionalImportMessageExtension]],
optionalImportMessage);
XCTAssertEqual(
[message getExtension:[UnittestRoot optionalPublicImportMessageExtension]],
optionalPublicImportMessage);
XCTAssertEqual(
[message getExtension:[UnittestRoot optionalLazyMessageExtension]],
optionalLazyMessage);
// And the default objects for a second message should be distinct (again,
// since they are mutable, each needs their own copy).
@@ -1548,47 +1635,70 @@
TestAllExtensions *message2 = [TestAllExtensions message];
// Intentionally doing a pointer comparison.
XCTAssertNotEqual([message2 getExtension:[UnittestRoot optionalGroupExtension]], optionalGroup);
XCTAssertNotEqual([message2 getExtension:[UnittestRoot optionalNestedMessageExtension]],
optionalNestedMessage);
XCTAssertNotEqual([message2 getExtension:[UnittestRoot optionalForeignMessageExtension]],
optionalForeignMessage);
XCTAssertNotEqual([message2 getExtension:[UnittestRoot optionalImportMessageExtension]],
optionalImportMessage);
XCTAssertNotEqual([message2 getExtension:[UnittestRoot optionalPublicImportMessageExtension]],
optionalPublicImportMessage);
XCTAssertNotEqual([message2 getExtension:[UnittestRoot optionalLazyMessageExtension]],
optionalLazyMessage);
XCTAssertNotEqual(
[message2 getExtension:[UnittestRoot optionalGroupExtension]],
optionalGroup);
XCTAssertNotEqual(
[message2 getExtension:[UnittestRoot optionalNestedMessageExtension]],
optionalNestedMessage);
XCTAssertNotEqual(
[message2 getExtension:[UnittestRoot optionalForeignMessageExtension]],
optionalForeignMessage);
XCTAssertNotEqual(
[message2 getExtension:[UnittestRoot optionalImportMessageExtension]],
optionalImportMessage);
XCTAssertNotEqual(
[message2 getExtension:[UnittestRoot optionalPublicImportMessageExtension]],
optionalPublicImportMessage);
XCTAssertNotEqual(
[message2 getExtension:[UnittestRoot optionalLazyMessageExtension]],
optionalLazyMessage);
// Clear values, and on next access you get back new submessages.
[message setExtension:[UnittestRoot optionalGroupExtension] value:nil];
[message setExtension:[UnittestRoot optionalGroupExtension] value:nil];
[message setExtension:[UnittestRoot optionalNestedMessageExtension] value:nil];
[message setExtension:[UnittestRoot optionalForeignMessageExtension] value:nil];
[message setExtension:[UnittestRoot optionalImportMessageExtension] value:nil];
[message setExtension:[UnittestRoot optionalPublicImportMessageExtension] value:nil];
[message setExtension:[UnittestRoot optionalNestedMessageExtension]
value:nil];
[message setExtension:[UnittestRoot optionalForeignMessageExtension]
value:nil];
[message setExtension:[UnittestRoot optionalImportMessageExtension]
value:nil];
[message setExtension:[UnittestRoot optionalPublicImportMessageExtension]
value:nil];
[message setExtension:[UnittestRoot optionalLazyMessageExtension] value:nil];
XCTAssertFalse([message hasExtension:[UnittestRoot optionalGroupExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalGroupExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalNestedMessageExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalForeignMessageExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalImportMessageExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalPublicImportMessageExtension]]);
XCTAssertFalse([message hasExtension:[UnittestRoot optionalLazyMessageExtension]]);
XCTAssertFalse(
[message hasExtension:[UnittestRoot optionalNestedMessageExtension]]);
XCTAssertFalse(
[message hasExtension:[UnittestRoot optionalForeignMessageExtension]]);
XCTAssertFalse(
[message hasExtension:[UnittestRoot optionalImportMessageExtension]]);
XCTAssertFalse([message
hasExtension:[UnittestRoot optionalPublicImportMessageExtension]]);
XCTAssertFalse(
[message hasExtension:[UnittestRoot optionalLazyMessageExtension]]);
XCTAssertEqual([message getExtension:[UnittestRoot optionalGroupExtension]], optionalGroup);
XCTAssertEqual([message getExtension:[UnittestRoot optionalNestedMessageExtension]],
optionalNestedMessage);
XCTAssertEqual([message getExtension:[UnittestRoot optionalForeignMessageExtension]],
optionalForeignMessage);
XCTAssertEqual([message getExtension:[UnittestRoot optionalImportMessageExtension]],
optionalImportMessage);
XCTAssertEqual([message getExtension:[UnittestRoot optionalPublicImportMessageExtension]],
optionalPublicImportMessage);
XCTAssertEqual([message getExtension:[UnittestRoot optionalLazyMessageExtension]],
optionalLazyMessage);
XCTAssertEqual([message getExtension:[UnittestRoot optionalGroupExtension]],
optionalGroup);
XCTAssertEqual(
[message getExtension:[UnittestRoot optionalNestedMessageExtension]],
optionalNestedMessage);
XCTAssertEqual(
[message getExtension:[UnittestRoot optionalForeignMessageExtension]],
optionalForeignMessage);
XCTAssertEqual(
[message getExtension:[UnittestRoot optionalImportMessageExtension]],
optionalImportMessage);
XCTAssertEqual(
[message
getExtension:[UnittestRoot optionalPublicImportMessageExtension]],
optionalPublicImportMessage);
XCTAssertEqual(
[message getExtension:[UnittestRoot optionalLazyMessageExtension]],
optionalLazyMessage);
}
- (void)testMultiplePointersToAutocreatedExtension {
@@ -1598,11 +1708,13 @@
TestAllExtensions *message2 = [TestAllExtensions message];
GPBExtensionDescriptor *extension = [UnittestRoot optionalGroupExtension];
[message setExtension:extension value:[message2 getExtension:extension]];
XCTAssertEqual([message getExtension:extension], [message2 getExtension:extension]);
XCTAssertEqual([message getExtension:extension],
[message2 getExtension:extension]);
XCTAssertFalse([message2 hasExtension:extension]);
XCTAssertTrue([message hasExtension:extension]);
TestAllTypes_OptionalGroup *extensionValue = [message2 getExtension:extension];
TestAllTypes_OptionalGroup *extensionValue =
[message2 getExtension:extension];
extensionValue.a = 1;
XCTAssertTrue([message2 hasExtension:extension]);
XCTAssertTrue([message hasExtension:extension]);
@@ -1611,10 +1723,12 @@
- (void)testCopyWithAutocreatedExtension {
// Mutable copy shouldn't copy autocreated extensions.
TestAllExtensions *message = [TestAllExtensions message];
GPBExtensionDescriptor *optionalGroupExtension = [UnittestRoot optionalGroupExtension];
GPBExtensionDescriptor *optionalGroupExtension =
[UnittestRoot optionalGroupExtension];
GPBExtensionDescriptor *optionalNestedMessageExtesion =
[UnittestRoot optionalNestedMessageExtension];
TestAllTypes_OptionalGroup *optionalGroup = [message getExtension:optionalGroupExtension];
TestAllTypes_OptionalGroup *optionalGroup =
[message getExtension:optionalGroupExtension];
optionalGroup.a = 42;
XCTAssertNotNil(optionalGroup);
XCTAssertNotNil([message getExtension:optionalNestedMessageExtesion]);
@@ -1641,11 +1755,13 @@
- (void)testClearMessageAutocreatedExtension {
// Call clear should cause it to recreate its autocreated extensions.
TestAllExtensions *message = [TestAllExtensions message];
GPBExtensionDescriptor *optionalGroupExtension = [UnittestRoot optionalGroupExtension];
GPBExtensionDescriptor *optionalGroupExtension =
[UnittestRoot optionalGroupExtension];
TestAllTypes_OptionalGroup *optionalGroup =
[[message getExtension:optionalGroupExtension] retain];
[message clear];
TestAllTypes_OptionalGroup *optionalGroupNew = [message getExtension:optionalGroupExtension];
TestAllTypes_OptionalGroup *optionalGroupNew =
[message getExtension:optionalGroupExtension];
// Intentionally doing a pointer comparison.
XCTAssertNotEqual(optionalGroup, optionalGroupNew);
@@ -1656,37 +1772,42 @@
// Should be able to retain autocreated extension while the creator is
// dealloced.
TestAllExtensions *message = [TestAllExtensions message];
GPBExtensionDescriptor *optionalGroupExtension = [UnittestRoot optionalGroupExtension];
GPBExtensionDescriptor *optionalGroupExtension =
[UnittestRoot optionalGroupExtension];
@autoreleasepool {
TestAllExtensions *message2 = [TestAllExtensions message];
[message setExtension:optionalGroupExtension
value:[message2 getExtension:optionalGroupExtension]];
XCTAssertTrue(
GPBWasMessageAutocreatedBy([message getExtension:optionalGroupExtension], message2));
XCTAssertTrue(GPBWasMessageAutocreatedBy(
[message getExtension:optionalGroupExtension], message2));
}
XCTAssertFalse(
GPBWasMessageAutocreatedBy([message getExtension:optionalGroupExtension], message));
XCTAssertFalse(GPBWasMessageAutocreatedBy(
[message getExtension:optionalGroupExtension], message));
}
- (void)testClearAutocreatedExtension {
// Clearing autocreated extension should NOT cause it to lose its creator.
TestAllExtensions *message = [TestAllExtensions message];
GPBExtensionDescriptor *optionalGroupExtension = [UnittestRoot optionalGroupExtension];
GPBExtensionDescriptor *optionalGroupExtension =
[UnittestRoot optionalGroupExtension];
TestAllTypes_OptionalGroup *optionalGroup =
[[message getExtension:optionalGroupExtension] retain];
[message clearExtension:optionalGroupExtension];
TestAllTypes_OptionalGroup *optionalGroupNew = [message getExtension:optionalGroupExtension];
TestAllTypes_OptionalGroup *optionalGroupNew =
[message getExtension:optionalGroupExtension];
XCTAssertEqual(optionalGroup, optionalGroupNew);
XCTAssertFalse([message hasExtension:optionalGroupExtension]);
[optionalGroup release];
// Clearing autocreated extension should not cause its creator to become
// visible
GPBExtensionDescriptor *recursiveExtension = [UnittestObjcRoot recursiveExtension];
GPBExtensionDescriptor *recursiveExtension =
[UnittestObjcRoot recursiveExtension];
TestAllExtensions *message_lvl2 = [message getExtension:recursiveExtension];
TestAllExtensions *message_lvl3 = [message_lvl2 getExtension:recursiveExtension];
TestAllExtensions *message_lvl3 =
[message_lvl2 getExtension:recursiveExtension];
[message_lvl3 clearExtension:recursiveExtension];
XCTAssertFalse([message hasExtension:recursiveExtension]);
}
@@ -1695,10 +1816,13 @@
// Setting an extension should cause the extension to appear to its creator.
// Test this several levels deep.
TestAllExtensions *message = [TestAllExtensions message];
GPBExtensionDescriptor *recursiveExtension = [UnittestObjcRoot recursiveExtension];
GPBExtensionDescriptor *recursiveExtension =
[UnittestObjcRoot recursiveExtension];
TestAllExtensions *message_lvl2 = [message getExtension:recursiveExtension];
TestAllExtensions *message_lvl3 = [message_lvl2 getExtension:recursiveExtension];
TestAllExtensions *message_lvl4 = [message_lvl3 getExtension:recursiveExtension];
TestAllExtensions *message_lvl3 =
[message_lvl2 getExtension:recursiveExtension];
TestAllExtensions *message_lvl4 =
[message_lvl3 getExtension:recursiveExtension];
XCTAssertFalse([message hasExtension:recursiveExtension]);
XCTAssertFalse([message_lvl2 hasExtension:recursiveExtension]);
XCTAssertFalse([message_lvl3 hasExtension:recursiveExtension]);
@@ -1716,15 +1840,18 @@
- (void)testSetAutocreatedExtensionToSelf {
// Setting extension to itself should cause it to become visible.
TestAllExtensions *message = [TestAllExtensions message];
GPBExtensionDescriptor *optionalGroupExtension = [UnittestRoot optionalGroupExtension];
GPBExtensionDescriptor *optionalGroupExtension =
[UnittestRoot optionalGroupExtension];
XCTAssertNotNil([message getExtension:optionalGroupExtension]);
XCTAssertFalse([message hasExtension:optionalGroupExtension]);
[message setExtension:optionalGroupExtension value:[message getExtension:optionalGroupExtension]];
[message setExtension:optionalGroupExtension
value:[message getExtension:optionalGroupExtension]];
XCTAssertTrue([message hasExtension:optionalGroupExtension]);
}
- (void)testAutocreatedExtensionMemoryLeaks {
GPBExtensionDescriptor *recursiveExtension = [UnittestObjcRoot recursiveExtension];
GPBExtensionDescriptor *recursiveExtension =
[UnittestObjcRoot recursiveExtension];
// Test for memory leaks with autocreated extensions.
TestAllExtensions *message;
@@ -1736,7 +1863,8 @@
message_lvl2 = [[message getExtension:recursiveExtension] retain];
message_lvl3 = [[message_lvl2 getExtension:recursiveExtension] retain];
message_lvl4 = [[message_lvl3 getExtension:recursiveExtension] retain];
[message_lvl2 setExtension:[UnittestRoot optionalInt32Extension] value:@(1)];
[message_lvl2 setExtension:[UnittestRoot optionalInt32Extension]
value:@(1)];
}
XCTAssertEqual(message.retainCount, (NSUInteger)1);
@@ -1756,7 +1884,8 @@
}
- (void)testSetExtensionWithAutocreatedValue {
GPBExtensionDescriptor *recursiveExtension = [UnittestObjcRoot recursiveExtension];
GPBExtensionDescriptor *recursiveExtension =
[UnittestObjcRoot recursiveExtension];
TestAllExtensions *message;
@autoreleasepool {
@@ -1766,7 +1895,8 @@
// This statements checks that the extension value isn't accidentally
// dealloced when removing it from the autocreated map.
[message setExtension:recursiveExtension value:[message getExtension:recursiveExtension]];
[message setExtension:recursiveExtension
value:[message getExtension:recursiveExtension]];
XCTAssertTrue([message hasExtension:recursiveExtension]);
[message release];
}
@@ -1779,22 +1909,26 @@
}
- (void)testGenerateAndParseUnknownMessage {
GPBUnknownFieldSet *unknowns = [[[GPBUnknownFieldSet alloc] init] autorelease];
GPBUnknownFieldSet *unknowns =
[[[GPBUnknownFieldSet alloc] init] autorelease];
[unknowns mergeVarintField:123 value:456];
GPBMessage *message = [GPBMessage message];
[message setUnknownFields:unknowns];
NSData *data = [message data];
GPBMessage *message2 = [GPBMessage parseFromData:data extensionRegistry:nil error:NULL];
GPBMessage *message2 =
[GPBMessage parseFromData:data extensionRegistry:nil error:NULL];
XCTAssertEqualObjects(message, message2);
}
- (void)testDelimitedWriteAndParseMultipleMessages {
GPBUnknownFieldSet *unknowns1 = [[[GPBUnknownFieldSet alloc] init] autorelease];
GPBUnknownFieldSet *unknowns1 =
[[[GPBUnknownFieldSet alloc] init] autorelease];
[unknowns1 mergeVarintField:123 value:456];
GPBMessage *message1 = [GPBMessage message];
[message1 setUnknownFields:unknowns1];
GPBUnknownFieldSet *unknowns2 = [[[GPBUnknownFieldSet alloc] init] autorelease];
GPBUnknownFieldSet *unknowns2 =
[[[GPBUnknownFieldSet alloc] init] autorelease];
[unknowns2 mergeVarintField:789 value:987];
[unknowns2 mergeVarintField:654 value:321];
GPBMessage *message2 = [GPBMessage message];
@@ -1803,7 +1937,8 @@
NSMutableData *delimitedData = [NSMutableData data];
[delimitedData appendData:[message1 delimitedData]];
[delimitedData appendData:[message2 delimitedData]];
GPBCodedInputStream *input = [GPBCodedInputStream streamWithData:delimitedData];
GPBCodedInputStream *input =
[GPBCodedInputStream streamWithData:delimitedData];
GPBMessage *message3 = [GPBMessage parseDelimitedFromCodedInputStream:input
extensionRegistry:nil
error:NULL];
@@ -1835,7 +1970,8 @@
}
- (void)testEnumDescriptorFromExtensionDescriptor {
GPBExtensionDescriptor *extDescriptor = [UnittestRoot optionalForeignEnumExtension];
GPBExtensionDescriptor *extDescriptor =
[UnittestRoot optionalForeignEnumExtension];
XCTAssertEqual(extDescriptor.dataType, GPBDataTypeEnum);
GPBEnumDescriptor *enumDescriptor = extDescriptor.enumDescriptor;
GPBEnumDescriptor *expectedDescriptor = ForeignEnum_EnumDescriptor();
@@ -1843,8 +1979,8 @@
}
- (void)testPropertyNaming {
// names.cc has some special handing to get proper all caps for a few cases to
// meet objc developer expectations.
// objectivec_helpers.cc has some special handing to get proper all caps
// for a few cases to meet objc developer expectations.
//
// This "test" confirms that the expected names are generated, otherwise the
// test itself will fail to compile.
@@ -1861,7 +1997,7 @@
}
- (void)testEnumNaming {
// names.cc has some interesting cases to deal with in
// objectivec_helpers.cc has some interesting cases to deal with in
// EnumValueName/EnumValueShortName. Confirm that things generated as
// expected.
@@ -1942,7 +2078,8 @@
// Repeated field (shouldn't ever be an issue since developer has to use the
// right GPBArray methods themselves).
msg.mumbleArray = [GPBEnumArray arrayWithValidationFunction:EnumTestMsg_MyEnum_IsValidValue];
msg.mumbleArray = [GPBEnumArray
arrayWithValidationFunction:EnumTestMsg_MyEnum_IsValidValue];
[msg.mumbleArray addValue:EnumTestMsg_MyEnum_Zero];
[msg.mumbleArray addValue:EnumTestMsg_MyEnum_One];
[msg.mumbleArray addValue:EnumTestMsg_MyEnum_Two];
@@ -1958,16 +2095,20 @@
XCTAssertNotNil(data);
msgPrime = [EnumTestMsg parseFromData:data error:NULL];
XCTAssertEqualObjects(msgPrime, msg);
XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:0], EnumTestMsg_MyEnum_Zero);
XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:0],
EnumTestMsg_MyEnum_Zero);
XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:1], EnumTestMsg_MyEnum_One);
XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:2], EnumTestMsg_MyEnum_Two);
XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:3], EnumTestMsg_MyEnum_NegOne);
XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:4], EnumTestMsg_MyEnum_NegTwo);
XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:3],
EnumTestMsg_MyEnum_NegOne);
XCTAssertEqual([msgPrime.mumbleArray valueAtIndex:4],
EnumTestMsg_MyEnum_NegTwo);
}
- (void)testReservedWordNaming {
// names.cc has some special handing to make sure that some "reserved" objc
// names get renamed in a way so they don't conflict.
// objectivec_helpers.cc has some special handing to make sure that
// some "reserved" objc names get renamed in a way so they
// don't conflict.
//
// This "test" confirms that the expected names are generated,
// otherwise the test itself will fail to compile.
@@ -2059,12 +2200,12 @@
msg1.boolField32 = YES;
msg2.boolField32 = YES;
XCTAssertTrue(msg1 != msg2); // Different pointers.
XCTAssertTrue(msg1 != msg2); // Different pointers.
XCTAssertEqual([msg1 hash], [msg2 hash]);
XCTAssertEqualObjects(msg1, msg2);
BoolOnlyMessage *msg1Prime = [[msg1 copy] autorelease];
XCTAssertTrue(msg1Prime != msg1); // Different pointers.
XCTAssertTrue(msg1Prime != msg1); // Different pointers.
XCTAssertEqual([msg1 hash], [msg1Prime hash]);
XCTAssertEqualObjects(msg1, msg1Prime);
@@ -2111,26 +2252,24 @@
TestMessageOfMaps *msg2 = [[msg copy] autorelease];
XCTAssertNotNil(msg2);
XCTAssertEqualObjects(msg2, msg);
XCTAssertTrue(msg2 != msg); // ptr compare
XCTAssertTrue(msg.strToStr != msg2.strToStr); // ptr compare
XCTAssertTrue(msg.intToStr != msg2.intToStr); // ptr compare
XCTAssertTrue(msg.intToInt != msg2.intToInt); // ptr compare
XCTAssertTrue(msg.strToBool != msg2.strToBool); // ptr compare
XCTAssertTrue(msg.boolToStr != msg2.boolToStr); // ptr compare
XCTAssertTrue(msg2 != msg); // ptr compare
XCTAssertTrue(msg.strToStr != msg2.strToStr); // ptr compare
XCTAssertTrue(msg.intToStr != msg2.intToStr); // ptr compare
XCTAssertTrue(msg.intToInt != msg2.intToInt); // ptr compare
XCTAssertTrue(msg.strToBool != msg2.strToBool); // ptr compare
XCTAssertTrue(msg.boolToStr != msg2.boolToStr); // ptr compare
XCTAssertTrue(msg.boolToBool != msg2.boolToBool); // ptr compare
XCTAssertTrue(msg.intToBool != msg2.intToBool); // ptr compare
XCTAssertTrue(msg.boolToInt != msg2.boolToInt); // ptr compare
XCTAssertTrue(msg.strToMsg != msg2.strToMsg); // ptr compare
XCTAssertTrue(msg.intToMsg != msg2.intToMsg); // ptr compare
XCTAssertTrue(msg.boolToMsg != msg2.boolToMsg); // ptr compare
XCTAssertTrue(msg.intToBool != msg2.intToBool); // ptr compare
XCTAssertTrue(msg.boolToInt != msg2.boolToInt); // ptr compare
XCTAssertTrue(msg.strToMsg != msg2.strToMsg); // ptr compare
XCTAssertTrue(msg.intToMsg != msg2.intToMsg); // ptr compare
XCTAssertTrue(msg.boolToMsg != msg2.boolToMsg); // ptr compare
XCTAssertTrue(msg.strToMsg[@"baz"] != msg2.strToMsg[@"baz"]); // ptr compare
XCTAssertEqualObjects(msg.strToMsg[@"baz"], msg2.strToMsg[@"baz"]);
XCTAssertTrue([msg.intToMsg objectForKey:222] !=
[msg2.intToMsg objectForKey:222]); // ptr compare
XCTAssertTrue([msg.intToMsg objectForKey:222] != [msg2.intToMsg objectForKey:222]); // ptr compare
XCTAssertEqualObjects([msg.intToMsg objectForKey:222], [msg2.intToMsg objectForKey:222]);
XCTAssertTrue([msg.boolToMsg objectForKey:YES] !=
[msg2.boolToMsg objectForKey:YES]); // ptr compare
XCTAssertTrue([msg.boolToMsg objectForKey:YES] != [msg2.boolToMsg objectForKey:YES]); // ptr compare
XCTAssertEqualObjects([msg.boolToMsg objectForKey:YES], [msg2.boolToMsg objectForKey:YES]);
}