ADD: added new version of protobuf
This commit is contained in:
@@ -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]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user