diff options
405 files changed, 8208 insertions, 61348 deletions
diff --git a/AddressBook/GTMABAddressBook.m b/AddressBook/GTMABAddressBook.m index d71aa91..c6916f9 100644 --- a/AddressBook/GTMABAddressBook.m +++ b/AddressBook/GTMABAddressBook.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -25,15 +25,6 @@ #import <Cocoa/Cocoa.h> #endif // GTM_IPHONE_SDK -#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 -// Tiger does not have this functionality, so we just set them to 0 -// as they are "or'd" in. This does change the functionality slightly. -enum { - NSDiacriticInsensitiveSearch = 0, - NSWidthInsensitiveSearch = 0 -}; -#endif - NSString *const kGTMABUnknownPropertyName = @"UNKNOWN_PROPERTY"; typedef struct { @@ -62,11 +53,9 @@ typedef struct { + (id)valueEnumeratorFor:(GTMABMultiValue*)enumeree; + (id)labelEnumeratorFor:(GTMABMultiValue*)enumeree; - (id)initWithEnumeree:(GTMABMultiValue*)enumeree useLabels:(BOOL)useLabels; -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state - objects:(id *)stackbuf +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state + objects:(id *)stackbuf count:(NSUInteger)len; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 @end @implementation GTMABAddressBook @@ -109,7 +98,7 @@ typedef struct { CFErrorRef cfError = NULL; bool wasGood = ABAddressBookSave(addressBook_, &cfError); if (!wasGood) { - _GTMDevLog(@"Error in [%@ %@]: %@", + _GTMDevLog(@"Error in [%@ %@]: %@", [self class], NSStringFromSelector(_cmd), cfError); CFRelease(cfError); } @@ -135,13 +124,13 @@ typedef struct { if (!record) return NO; #if GTM_IPHONE_SDK CFErrorRef cfError = NULL; - bool wasGood = ABAddressBookAddRecord(addressBook_, + bool wasGood = ABAddressBookAddRecord(addressBook_, [record recordRef], &cfError); if (cfError) { // COV_NF_START - _GTMDevLog(@"Error in [%@ %@]: %@", + _GTMDevLog(@"Error in [%@ %@]: %@", [self class], NSStringFromSelector(_cmd), cfError); - CFRelease(cfError); + CFRelease(cfError); // COV_NF_END } #else // GTM_IPHONE_SDK @@ -156,11 +145,11 @@ typedef struct { if (!record) return NO; #if GTM_IPHONE_SDK CFErrorRef cfError = NULL; - bool wasGood = ABAddressBookRemoveRecord(addressBook_, + bool wasGood = ABAddressBookRemoveRecord(addressBook_, [record recordRef], &cfError); if (cfError) { // COV_NF_START - _GTMDevLog(@"Error in [%@ %@]: %@", + _GTMDevLog(@"Error in [%@ %@]: %@", [self class], NSStringFromSelector(_cmd), cfError); CFRelease(cfError); // COV_NF_END @@ -175,19 +164,19 @@ typedef struct { } #endif // GTM_IPHONE_SDK return wasGood ? YES : NO; -} +} - (NSArray *)people { #if GTM_IPHONE_SDK - NSArray *people + NSArray *people = GTMCFAutorelease(ABAddressBookCopyArrayOfAllPeople(addressBook_)); #else // GTM_IPHONE_SDK - NSArray *people + NSArray *people = GTMCFAutorelease(ABCopyArrayOfAllPeople(addressBook_)); -#endif // GTM_IPHONE_SDK +#endif // GTM_IPHONE_SDK NSMutableArray *result = [NSMutableArray arrayWithCapacity:[people count]]; id person; - GTM_FOREACH_OBJECT(person, people) { + for (person in people) { [result addObject:[GTMABPerson recordWithRecord:person]]; } return result; @@ -195,15 +184,15 @@ typedef struct { - (NSArray *)groups { #if GTM_IPHONE_SDK - NSArray *groups + NSArray *groups = GTMCFAutorelease(ABAddressBookCopyArrayOfAllGroups(addressBook_)); #else // GTM_IPHONE_SDK - NSArray *groups + NSArray *groups = GTMCFAutorelease(ABCopyArrayOfAllGroups(addressBook_)); -#endif // GTM_IPHONE_SDK +#endif // GTM_IPHONE_SDK NSMutableArray *result = [NSMutableArray arrayWithCapacity:[groups count]]; id group; - GTM_FOREACH_OBJECT(group, groups) { + for (group in groups) { [result addObject:[GTMABGroup recordWithRecord:group]]; } return result; @@ -218,7 +207,7 @@ typedef struct { #if GTM_IPHONE_SDK ABRecordRef ref = ABAddressBookGetPersonWithRecordID(addressBook_, uniqueId); #else // GTM_IPHONE_SDK - ABRecordRef ref = ABCopyRecordForUniqueId(addressBook_, + ABRecordRef ref = ABCopyRecordForUniqueId(addressBook_, (CFStringRef)uniqueId); #endif // GTM_IPHONE_SDK if (ref) { @@ -232,7 +221,7 @@ typedef struct { #if GTM_IPHONE_SDK ABRecordRef ref = ABAddressBookGetGroupWithRecordID(addressBook_, uniqueId); #else // GTM_IPHONE_SDK - ABRecordRef ref = ABCopyRecordForUniqueId(addressBook_, + ABRecordRef ref = ABCopyRecordForUniqueId(addressBook_, (CFStringRef)uniqueId); #endif // GTM_IPHONE_SDK if (ref) { @@ -241,16 +230,16 @@ typedef struct { return group; } -// Performs a prefix search on the composite names of people in an address book +// Performs a prefix search on the composite names of people in an address book // and returns an array of persons that match the search criteria. - (NSArray *)peopleWithCompositeNameWithPrefix:(NSString *)prefix { #if GTM_IPHONE_SDK - NSArray *people = + NSArray *people = GTMCFAutorelease(ABAddressBookCopyPeopleWithName(addressBook_, (CFStringRef)prefix)); NSMutableArray *gtmPeople = [NSMutableArray arrayWithCapacity:[people count]]; id person; - GTM_FOREACH_OBJECT(person, people) { + for (person in people) { GTMABPerson *gtmPerson = [GTMABPerson recordWithRecord:person]; [gtmPeople addObject:gtmPerson]; } @@ -263,10 +252,10 @@ typedef struct { NSArray *people = [self people]; NSMutableArray *foundPeople = [NSMutableArray array]; GTMABPerson *person; - GTM_FOREACH_OBJECT(person, people) { + for (person in people) { NSString *compositeName = [person compositeName]; NSRange range = [compositeName rangeOfString:prefix - options:(NSCaseInsensitiveSearch + options:(NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch | NSWidthInsensitiveSearch | NSAnchoredSearch)]; @@ -278,16 +267,16 @@ typedef struct { #endif } -// Performs a prefix search on the composite names of groups in an address book +// Performs a prefix search on the composite names of groups in an address book // and returns an array of groups that match the search criteria. - (NSArray *)groupsWithCompositeNameWithPrefix:(NSString *)prefix { NSArray *groups = [self groups]; NSMutableArray *foundGroups = [NSMutableArray array]; GTMABGroup *group; - GTM_FOREACH_OBJECT(group, groups) { + for (group in groups) { NSString *compositeName = [group compositeName]; NSRange range = [compositeName rangeOfString:prefix - options:(NSCaseInsensitiveSearch + options:(NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch | NSWidthInsensitiveSearch | NSAnchoredSearch)]; @@ -296,7 +285,7 @@ typedef struct { } } return foundGroups; -} +} + (NSString *)localizedLabel:(NSString *)label { #if GTM_IPHONE_SDK @@ -342,7 +331,7 @@ typedef struct { // 6203836 ABRecords hash to their address // but it's the best we can do without knowing what properties // are in a record, and we don't have an API for that. - return [object respondsToSelector:@selector(recordRef)] + return [object respondsToSelector:@selector(recordRef)] && CFEqual(record_, [object recordRef]); } @@ -368,12 +357,12 @@ typedef struct { - (id)valueForProperty:(GTMABPropertyID)property { #if GTM_IPHONE_SDK id value = GTMCFAutorelease(ABRecordCopyValue(record_, property)); -#else // GTM_IPHONE_SDK +#else // GTM_IPHONE_SDK id value = GTMCFAutorelease(ABRecordCopyValue(record_, (CFStringRef)property)); #endif // GTM_IPHONE_SDK if (value) { if ([[self class] typeOfProperty:property] & kABMultiValueMask) { - value = [[[GTMABMultiValue alloc] + value = [[[GTMABMultiValue alloc] initWithMultiValue:(ABMultiValueRef)value] autorelease]; } } @@ -384,7 +373,7 @@ typedef struct { if (!value) return NO; // We check the type here because of // Radar 6201046 ABRecordSetValue returns true even if you pass in a bad type - // for a value + // for a value TypeClassNameMap fullTypeMap[] = { { kGTMABStringPropertyType, [NSString class] }, { kGTMABIntegerPropertyType, [NSNumber class] }, @@ -414,11 +403,11 @@ typedef struct { } #if GTM_IPHONE_SDK CFErrorRef cfError = nil; - bool wasGood = ABRecordSetValue(record_, property, + bool wasGood = ABRecordSetValue(record_, property, (CFTypeRef)value, &cfError); if (cfError) { // COV_NF_START - _GTMDevLog(@"Error in [%@ %@]: %@", + _GTMDevLog(@"Error in [%@ %@]: %@", [self class], NSStringFromSelector(_cmd), cfError); CFRelease(cfError); // COV_NF_END @@ -433,13 +422,13 @@ typedef struct { #if GTM_IPHONE_SDK CFErrorRef cfError = nil; // We check to see if the value is in the property because of: - // Radar 6201005 ABRecordRemoveValue returns true for value that aren't + // Radar 6201005 ABRecordRemoveValue returns true for value that aren't // in the record id value = [self valueForProperty:property]; bool wasGood = value && ABRecordRemoveValue(record_, property, &cfError); if (cfError) { // COV_NF_START - _GTMDevLog(@"Error in [%@ %@]: %@", + _GTMDevLog(@"Error in [%@ %@]: %@", [self class], NSStringFromSelector(_cmd), cfError); CFRelease(cfError); // COV_NF_END @@ -466,20 +455,20 @@ typedef struct { + (NSString *)localizedPropertyName:(GTMABPropertyID)property { [self doesNotRecognizeSelector:_cmd]; - return nil; + return nil; } // COV_NF_END @end @implementation GTMABPerson -+ (GTMABPerson *)personWithFirstName:(NSString *)first ++ (GTMABPerson *)personWithFirstName:(NSString *)first lastName:(NSString *)last { GTMABPerson *person = [[[self alloc] init] autorelease]; if (person) { BOOL isGood = YES; if (first) { - isGood = [person setValue:first + isGood = [person setValue:first forProperty:kGTMABPersonFirstNameProperty]; } if (isGood && last) { @@ -500,7 +489,7 @@ typedef struct { self = [super initWithRecord:person]; if (person) { CFRelease(person); - } + } return self; } @@ -514,12 +503,12 @@ typedef struct { // We verify that the data is good because of: // Radar 6202868 ABPersonSetImageData should validate image data UIImage *image = [UIImage imageWithData:data]; - wasGood = image && ABPersonSetImageData([self recordRef], + wasGood = image && ABPersonSetImageData([self recordRef], (CFDataRef)data, &cfError); } if (cfError) { // COV_NF_START - _GTMDevLog(@"Error in [%@ %@]: %@", + _GTMDevLog(@"Error in [%@ %@]: %@", [self class], NSStringFromSelector(_cmd), cfError); CFRelease(cfError); // COV_NF_END @@ -569,7 +558,7 @@ typedef struct { } else { NSString *firstName = [self valueForProperty:kGTMABPersonFirstNameProperty]; NSString *lastName = [self valueForProperty:kGTMABPersonLastNameProperty]; - + if (firstName && lastName) { GTMABPersonCompositeNameFormat format; if (flags & kABFirstNameFirst) { @@ -593,7 +582,7 @@ typedef struct { compositeName = @""; } } - + return compositeName; #endif // GTM_IPHONE_SDK } @@ -601,13 +590,13 @@ typedef struct { - (NSString *)description { #if GTM_IPHONE_SDK return [NSString stringWithFormat:@"%@ %@ %@ %d", - [self class], + [self class], [self valueForProperty:kGTMABPersonFirstNameProperty], [self valueForProperty:kGTMABPersonLastNameProperty], - [self recordID]]; + [self recordID]]; #else // GTM_IPHONE_SDK return [NSString stringWithFormat:@"%@ %@ %@ %@", - [self class], + [self class], [self valueForProperty:kGTMABPersonFirstNameProperty], [self valueForProperty:kGTMABPersonLastNameProperty], [self recordID]]; @@ -616,7 +605,7 @@ typedef struct { + (NSString *)localizedPropertyName:(GTMABPropertyID)property { #if GTM_IPHONE_SDK - return GTMCFAutorelease(ABPersonCopyLocalizedPropertyName(property)); + return GTMCFAutorelease(ABPersonCopyLocalizedPropertyName(property)); #else // GTM_IPHONE_SDK return ABLocalizedPropertyOrLabel(property); #endif // GTM_IPHONE_SDK @@ -630,9 +619,9 @@ typedef struct { return ABPersonGetCompositeNameFormatForRecord(NULL); #endif // __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 #else // GTM_IPHONE_SDK - NSInteger nameOrdering + NSInteger nameOrdering = [[ABAddressBook sharedAddressBook] defaultNameOrdering]; - return nameOrdering == kABFirstNameFirst ? + return nameOrdering == kABFirstNameFirst ? kABPersonCompositeNameFormatFirstNameFirst : kABPersonCompositeNameFormatLastNameFirst; #endif // GTM_IPHONE_SDK @@ -642,8 +631,8 @@ typedef struct { #if GTM_IPHONE_SDK return ABPersonGetTypeOfProperty(property); #else // GTM_IPHONE_SDK - return ABTypeOfProperty([[GTMABAddressBook addressBook] addressBookRef], - (CFStringRef)kABPersonRecordType, + return ABTypeOfProperty([[GTMABAddressBook addressBook] addressBookRef], + (CFStringRef)kABPersonRecordType, (CFStringRef)property); #endif // GTM_IPHONE_SDK } @@ -669,41 +658,41 @@ typedef struct { self = [super initWithRecord:group]; if (group) { CFRelease(group); - } + } return self; } - (NSArray *)members { - NSArray *people + NSArray *people = GTMCFAutorelease(ABGroupCopyArrayOfAllMembers([self recordRef])); NSMutableArray *gtmPeople = [NSMutableArray arrayWithCapacity:[people count]]; id person; - GTM_FOREACH_OBJECT(person, people) { + for (person in people) { [gtmPeople addObject:[GTMABPerson recordWithRecord:(ABRecordRef)person]]; } return gtmPeople; -} +} - (BOOL)addMember:(GTMABPerson *)person { #if GTM_IPHONE_SDK CFErrorRef cfError = nil; // We check for person because of // Radar 6202860 Passing nil person into ABGroupAddMember crashes - bool wasGood = person && ABGroupAddMember([self recordRef], + bool wasGood = person && ABGroupAddMember([self recordRef], [person recordRef], &cfError); if (cfError) { // COV_NF_START - _GTMDevLog(@"Error in [%@ %@]: %@", + _GTMDevLog(@"Error in [%@ %@]: %@", [self class], NSStringFromSelector(_cmd), cfError); CFRelease(cfError); // COV_NF_END } #else // GTM_IPHONE_SDK - bool wasGood = person && ABGroupAddMember([self recordRef], + bool wasGood = person && ABGroupAddMember([self recordRef], [person recordRef]); #endif // GTM_IPHONE_SDK return wasGood ? YES : NO; -} +} - (BOOL)removeMember:(GTMABPerson *)person { #if GTM_IPHONE_SDK @@ -711,11 +700,11 @@ typedef struct { // We check for person because of // Radar 6202860 Passing nil person into ABGroupAddMember crashes // (I know this is remove, but it crashes there too) - bool wasGood = person && ABGroupRemoveMember([self recordRef], + bool wasGood = person && ABGroupRemoveMember([self recordRef], [person recordRef], &cfError); if (cfError) { // COV_NF_START - _GTMDevLog(@"Error in [%@ %@]: %@", + _GTMDevLog(@"Error in [%@ %@]: %@", [self class], NSStringFromSelector(_cmd), cfError); CFRelease(cfError); // COV_NF_END @@ -725,7 +714,7 @@ typedef struct { if (wasGood) { NSArray *array = GTMCFAutorelease(ABPersonCopyParentGroups([person recordRef])); if ([array containsObject:[self recordRef]]) { - wasGood = ABGroupRemoveMember([self recordRef], + wasGood = ABGroupRemoveMember([self recordRef], [person recordRef]); } else { wasGood = NO; @@ -733,7 +722,7 @@ typedef struct { } #endif // GTM_IPHONE_SDK return wasGood ? YES : NO; -} +} - (NSString *)compositeName { #if GTM_IPHONE_SDK @@ -747,7 +736,7 @@ typedef struct { GTMABPropertyType type = kGTMABInvalidPropertyType; if (property == kABGroupNameProperty) { type = kGTMABStringPropertyType; - } + } return type; } @@ -755,7 +744,7 @@ typedef struct { NSString *name = kGTMABUnknownPropertyName; if (property == kABGroupNameProperty) { name = NSLocalizedStringFromTable(@"Name", - @"GTMABAddressBook", + @"GTMABAddressBook", @"name property"); } return name; @@ -763,13 +752,13 @@ typedef struct { - (NSString *)description { #if GTM_IPHONE_SDK - return [NSString stringWithFormat:@"%@ %@ %d", - [self class], + return [NSString stringWithFormat:@"%@ %@ %d", + [self class], [self valueForProperty:kABGroupNameProperty], [self recordID]]; #else // GTM_IPHONE_SDK - return [NSString stringWithFormat:@"%@ %@ %@", - [self class], + return [NSString stringWithFormat:@"%@ %@ %@", + [self class], [self valueForProperty:kABGroupNameProperty], [self recordID]]; #endif // GTM_IPHONE_SDK @@ -823,7 +812,7 @@ typedef struct { // 6203854 ABMultiValues hash to their address // and it appears CFEquals just calls through to hash to compare them. BOOL isEqual = NO; - if ([object respondsToSelector:@selector(multiValueRef)]) { + if ([object respondsToSelector:@selector(multiValueRef)]) { isEqual = multiValue_ == [object multiValueRef]; if (!isEqual) { NSUInteger count = [self count]; @@ -835,7 +824,7 @@ typedef struct { isEqual = [label isEqual:objLabel]; if (isEqual) { id value = [self valueAtIndex:i]; - GTMABMultiValue *multiValueObject + GTMABMultiValue *multiValueObject = GTM_STATIC_CAST(GTMABMultiValue, object); id objValue = [multiValueObject valueAtIndex:i]; isEqual = [value isEqual:objValue]; @@ -870,13 +859,13 @@ typedef struct { if (idx < [self count]) { value = GTMCFAutorelease(ABMultiValueCopyValueAtIndex(multiValue_, idx)); ABPropertyType type = [self propertyType]; - if (type == kGTMABIntegerPropertyType + if (type == kGTMABIntegerPropertyType || type == kGTMABRealPropertyType || type == kGTMABDictionaryPropertyType) { // This is because of // 6208390 Integer and real values don't work in ABMultiValueRefs - // Apparently they forget to add a ref count on int, real and - // dictionary values in ABMultiValueCopyValueAtIndex, although they do + // Apparently they forget to add a ref count on int, real and + // dictionary values in ABMultiValueCopyValueAtIndex, although they do // remember them for all other types. // Once they fix this, this will lead to a leak, but I figure the leak // is better than the crash. Our unittests will test to make sure that @@ -907,7 +896,7 @@ typedef struct { #if GTM_IPHONE_SDK identifier = ABMultiValueGetIdentifierAtIndex(multiValue_, idx); #else // GTM_IPHONE_SDK - identifier = GTMCFAutorelease(ABMultiValueCopyIdentifierAtIndex(multiValue_, + identifier = GTMCFAutorelease(ABMultiValueCopyIdentifierAtIndex(multiValue_, idx)); #endif // GTM_IPHONE_SDK } @@ -918,7 +907,7 @@ typedef struct { #if GTM_IPHONE_SDK NSUInteger idx = ABMultiValueGetIndexForIdentifier(multiValue_, identifier); #else // GTM_IPHONE_SDK - NSUInteger idx = ABMultiValueIndexForIdentifier(multiValue_, + NSUInteger idx = ABMultiValueIndexForIdentifier(multiValue_, (CFStringRef)identifier); #endif // GTM_IPHONE_SDK return idx == (NSUInteger)kCFNotFound ? (NSUInteger)NSNotFound : idx; @@ -974,7 +963,7 @@ typedef struct { self = [super initWithMultiValue:ref]; if (ref) { CFRelease(ref); - } + } return self; } @@ -986,7 +975,7 @@ typedef struct { self = [super initWithMultiValue:ref]; if (ref) { CFRelease(ref); - } + } return self; } @@ -1006,11 +995,11 @@ typedef struct { }; GTMABPropertyType type = [self propertyType] & ~kABMultiValueMask; #if GTM_MACOS_SDK - // Since on the desktop mutables don't have a type UNTIL they have + // Since on the desktop mutables don't have a type UNTIL they have // something in them, return YES if it's empty. if ((type == 0) && ([self count] == 0)) return YES; #endif // GTM_MACOS_SDK - for (size_t i = 0; + for (size_t i = 0; i < sizeof(singleValueTypeMap) / sizeof(TypeClassNameMap); ++i) { if (singleValueTypeMap[i].pType == type) { if ([[value class] isSubclassOfClass:singleValueTypeMap[i].class]) { @@ -1030,14 +1019,14 @@ typedef struct { bool wasGood = label && [self checkValueType:value]; if (wasGood) { #if GTM_IPHONE_SDK - wasGood = ABMultiValueAddValueAndLabel(multiValue_, - value, - label, + wasGood = ABMultiValueAddValueAndLabel(multiValue_, + value, + label, &identifier); -#else // GTM_IPHONE_SDK - wasGood = ABMultiValueAdd((ABMutableMultiValueRef)multiValue_, - value, - label, +#else // GTM_IPHONE_SDK + wasGood = ABMultiValueAdd((ABMutableMultiValueRef)multiValue_, + value, + label, (CFStringRef *)&identifier); #endif // GTM_IPHONE_SDK } @@ -1049,12 +1038,12 @@ typedef struct { return identifier; } -- (GTMABMultiValueIdentifier)insertValue:(id)value - withLabel:(CFStringRef)label +- (GTMABMultiValueIdentifier)insertValue:(id)value + withLabel:(CFStringRef)label atIndex:(NSUInteger)idx { GTMABMultiValueIdentifier identifier = kGTMABMultiValueInvalidIdentifier; // We perform a check here to ensure that we don't get bitten by - // Radar 6202807 ABMultiValueInsertValueAndLabelAtIndex allows you to insert + // Radar 6202807 ABMultiValueInsertValueAndLabelAtIndex allows you to insert // values past end NSUInteger count = [self count]; // We check label and value here because of @@ -1062,16 +1051,16 @@ typedef struct { bool wasGood = idx <= count && label && [self checkValueType:value]; if (wasGood) { #if GTM_IPHONE_SDK - wasGood = ABMultiValueInsertValueAndLabelAtIndex(multiValue_, - value, - label, - idx, + wasGood = ABMultiValueInsertValueAndLabelAtIndex(multiValue_, + value, + label, + idx, &identifier); #else // GTM_IPHONE_SDK - wasGood = ABMultiValueInsert((ABMutableMultiValueRef)multiValue_, - value, - label, - idx, + wasGood = ABMultiValueInsert((ABMutableMultiValueRef)multiValue_, + value, + label, + idx, (CFStringRef *)&identifier); #endif // GTM_IPHONE_SDK } @@ -1088,7 +1077,7 @@ typedef struct { NSUInteger count = [self count]; if (idx < count) { #if GTM_IPHONE_SDK - bool wasGood = ABMultiValueRemoveValueAndLabelAtIndex(multiValue_, + bool wasGood = ABMultiValueRemoveValueAndLabelAtIndex(multiValue_, idx); #else // GTM_IPHONE_SDK bool wasGood = ABMultiValueRemove((ABMutableMultiValueRef)multiValue_, @@ -1099,7 +1088,7 @@ typedef struct { isGood = YES; } } - return isGood; + return isGood; } - (BOOL)replaceValueAtIndex:(NSUInteger)idx withValue:(id)value { @@ -1107,11 +1096,11 @@ typedef struct { NSUInteger count = [self count]; if (idx < count && [self checkValueType:value]) { #if GTM_IPHONE_SDK - bool goodReplace = ABMultiValueReplaceValueAtIndex(multiValue_, + bool goodReplace = ABMultiValueReplaceValueAtIndex(multiValue_, value, idx); #else // GTM_IPHONE_SDK - bool goodReplace - = ABMultiValueReplaceValue((ABMutableMultiValueRef)multiValue_, + bool goodReplace + = ABMultiValueReplaceValue((ABMutableMultiValueRef)multiValue_, (CFTypeRef)value, idx); #endif // GTM_IPHONE_SDK if (goodReplace) { @@ -1119,7 +1108,7 @@ typedef struct { isGood = YES; } } - return isGood; + return isGood; } - (BOOL)replaceLabelAtIndex:(NSUInteger)idx withLabel:(CFStringRef)label { @@ -1127,11 +1116,11 @@ typedef struct { NSUInteger count = [self count]; if (idx < count) { #if GTM_IPHONE_SDK - bool goodReplace = ABMultiValueReplaceLabelAtIndex(multiValue_, + bool goodReplace = ABMultiValueReplaceLabelAtIndex(multiValue_, label, idx); #else // GTM_IPHONE_SDK - bool goodReplace - = ABMultiValueReplaceLabel((ABMutableMultiValueRef)multiValue_, + bool goodReplace + = ABMultiValueReplaceLabel((ABMutableMultiValueRef)multiValue_, (CFTypeRef)label, idx); #endif // GTM_IPHONE_SDK if (goodReplace) { @@ -1139,14 +1128,14 @@ typedef struct { isGood = YES; } } - return isGood; + return isGood; } - + - (unsigned long*)mutations { return &mutations_; } @end - + @implementation GTMABMultiValueEnumerator @@ -1180,19 +1169,18 @@ typedef struct { [super dealloc]; } -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 -- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state - objects:(id *)stackbuf +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state + objects:(id *)stackbuf count:(NSUInteger)len { NSUInteger i; if (!ref_) { count_ = [enumeree_ count]; ref_ = [enumeree_ multiValueRef]; } - + for (i = 0; state->state < count_ && i < len; ++i, ++state->state) { if (useLabels_) { - stackbuf[i] = GTMCFAutorelease(ABMultiValueCopyLabelAtIndex(ref_, + stackbuf[i] = GTMCFAutorelease(ABMultiValueCopyLabelAtIndex(ref_, state->state)); } else { // TODO(dmaclach) Check this on Mac Desktop and use fast path if we can @@ -1203,12 +1191,11 @@ typedef struct { stackbuf[i] = [enumeree_ valueAtIndex:state->state]; } } - + state->itemsPtr = stackbuf; state->mutationsPtr = [enumeree_ mutations]; return i; } -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - (id)nextObject { id value = nil; @@ -1227,7 +1214,7 @@ typedef struct { } if (index_ < count_) { if (useLabels_) { - value = GTMCFAutorelease(ABMultiValueCopyLabelAtIndex(ref_, + value = GTMCFAutorelease(ABMultiValueCopyLabelAtIndex(ref_, index_)); } else { // TODO(dmaclach) Check this on Mac Desktop and use fast path if we can diff --git a/AddressBook/GTMABAddressBookTest.m b/AddressBook/GTMABAddressBookTest.m index 7711648..de5a2ab 100644 --- a/AddressBook/GTMABAddressBookTest.m +++ b/AddressBook/GTMABAddressBookTest.m @@ -37,6 +37,24 @@ static NSString *const kGTMABTestGroupName = @"GTMABAddressBookTestGroupName"; @implementation GTMABAddressBookTest + +#if GTM_IPHONE_SDK + +// On iOS we need to check if we have access to the Address Book before running any tests. +// See +// third_party/objective_c/google_toolbox_for_mac/UnitTesting/GTMIPhoneUnitTestMain.m +// for a way this can be provided via entitlements. + ++ (void)setUp { + [super setUp]; + ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus(); + if(status != kABAuthorizationStatusAuthorized) { + [NSException raise:NSInternalInconsistencyException format:@"Don't have Address Book Access"]; + } +} + +#endif // GTM_IPHONE_SDK + - (void)setUp { // Create a book forcing it out of it's autorelease pool. // I force it out of the release pool, so that we will see any errors @@ -45,17 +63,17 @@ static NSString *const kGTMABTestGroupName = @"GTMABAddressBookTestGroupName"; NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; book_ = [[GTMABAddressBook addressBook] retain]; [pool release]; - STAssertNotNil(book_, nil); + XCTAssertNotNil(book_); NSArray *people = [book_ peopleWithCompositeNameWithPrefix:kGTMABTestFirstName]; GTMABPerson *person; - GTM_FOREACH_OBJECT(person, people) { + for (person in people) { [book_ removeRecord:person]; } NSArray *groups = [book_ groupsWithCompositeNameWithPrefix:kGTMABTestGroupName]; GTMABGroup *group; - GTM_FOREACH_OBJECT(group, groups) { + for (group in groups) { [book_ removeRecord:group]; } [book_ save]; @@ -66,340 +84,339 @@ static NSString *const kGTMABTestGroupName = @"GTMABAddressBookTestGroupName"; } - (void)testGenericAddressBook { - STAssertEqualObjects([GTMABAddressBook localizedLabel:(NSString *)kABHomeLabel], - @"home", - nil); - STAssertThrows([GTMABRecord recordWithRecord:nil], nil); + XCTAssertEqualObjects([GTMABAddressBook localizedLabel:(NSString *)kABHomeLabel], + @"home"); + XCTAssertThrows([GTMABRecord recordWithRecord:nil]); } - (void)testAddingAndRemovingPerson { // Create a person GTMABPerson *person = [GTMABPerson personWithFirstName:kGTMABTestFirstName lastName:kGTMABTestLastName]; - STAssertNotNil(person, nil); + XCTAssertNotNil(person); // Add person NSArray *people = [book_ people]; - STAssertFalse([people containsObject:person], nil); - STAssertTrue([book_ addRecord:person], nil); + XCTAssertFalse([people containsObject:person]); + XCTAssertTrue([book_ addRecord:person]); #if GTM_IPHONE_SDK && (__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2) - // Normally this next line would be STAssertTrue, however due to + // Normally this next line would be XCTAssertTrue, however due to // Radar 6200638: ABAddressBookHasUnsavedChanges doesn't work // We will check to make sure it stays broken ;-) - STAssertFalse([book_ hasUnsavedChanges], nil); + XCTAssertFalse([book_ hasUnsavedChanges]); #else // GTM_IPHONE_SDK - STAssertTrue([book_ hasUnsavedChanges], nil); + XCTAssertTrue([book_ hasUnsavedChanges]); #endif // GTM_IPHONE_SDK people = [book_ people]; - STAssertNotNil(people, nil); + XCTAssertNotNil(people); #if GTM_IPHONE_SDK - // Normally this next line would be STAssertTrue, however due to + // Normally this next line would be XCTAssertTrue, however due to // Radar 6200703: ABAddressBookAddRecord doesn't add an item to the people // array until it's saved // We will check to make sure it stays broken ;-) - STAssertFalse([people containsObject:person], nil); + XCTAssertFalse([people containsObject:person]); #else // GTM_IPHONE_SDK - STAssertTrue([people containsObject:person], nil); + XCTAssertTrue([people containsObject:person]); #endif // GTM_IPHONE_SDK // Save book_ - STAssertTrue([book_ save], nil); + XCTAssertTrue([book_ save]); people = [book_ people]; - STAssertNotNil(people, nil); - STAssertTrue([people containsObject:person], nil); + XCTAssertNotNil(people); + XCTAssertTrue([people containsObject:person]); people = [book_ peopleWithCompositeNameWithPrefix:kGTMABTestFirstName]; - STAssertEqualObjects([people objectAtIndex:0], person, nil); + XCTAssertEqualObjects([people objectAtIndex:0], person); GTMABRecordID recordID = [person recordID]; - STAssertNotEquals(recordID, kGTMABRecordInvalidID, nil); + XCTAssertNotEqual(recordID, kGTMABRecordInvalidID); GTMABRecord *record = [book_ personForId:recordID]; - STAssertEqualObjects(record, person, nil); + XCTAssertEqualObjects(record, person); // Remove person - STAssertTrue([book_ removeRecord:person], nil); + XCTAssertTrue([book_ removeRecord:person]); people = [book_ peopleWithCompositeNameWithPrefix:kGTMABTestFirstName]; - STAssertEquals([people count], (NSUInteger)0, nil); + XCTAssertEqual([people count], (NSUInteger)0); #if GTM_IPHONE_SDK && (__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2) - // Normally this next line would be STAssertTrue, however due to + // Normally this next line would be XCTAssertTrue, however due to // Radar 6200638: ABAddressBookHasUnsavedChanges doesn't work // We will check to make sure it stays broken ;-) - STAssertFalse([book_ hasUnsavedChanges], nil); + XCTAssertFalse([book_ hasUnsavedChanges]); #else // GTM_IPHONE_SDK - STAssertTrue([book_ hasUnsavedChanges], nil); + XCTAssertTrue([book_ hasUnsavedChanges]); #endif // GTM_IPHONE_SDK people = [book_ people]; - STAssertFalse([people containsObject:person], nil); + XCTAssertFalse([people containsObject:person]); // Save Book - STAssertTrue([book_ save], nil); + XCTAssertTrue([book_ save]); people = [book_ people]; - STAssertFalse([book_ hasUnsavedChanges], nil); - STAssertFalse([people containsObject:person], nil); + XCTAssertFalse([book_ hasUnsavedChanges]); + XCTAssertFalse([people containsObject:person]); record = [book_ personForId:recordID]; - STAssertNil(record, nil); + XCTAssertNil(record); // Bogus data - STAssertFalse([book_ addRecord:nil], nil); - STAssertFalse([book_ removeRecord:nil], nil); + XCTAssertFalse([book_ addRecord:nil]); + XCTAssertFalse([book_ removeRecord:nil]); - STAssertNotNULL([book_ addressBookRef], nil); + XCTAssertNotNULL([book_ addressBookRef]); } - (void)testAddingAndRemovingGroup { // Create a group GTMABGroup *group = [GTMABGroup groupNamed:kGTMABTestGroupName]; - STAssertNotNil(group, nil); + XCTAssertNotNil(group); // Add group NSArray *groups = [book_ groups]; - STAssertFalse([groups containsObject:group], nil); - STAssertTrue([book_ addRecord:group], nil); + XCTAssertFalse([groups containsObject:group]); + XCTAssertTrue([book_ addRecord:group]); #if GTM_IPHONE_SDK && (__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2) - // Normally this next line would be STAssertTrue, however due to + // Normally this next line would be XCTAssertTrue, however due to // Radar 6200638: ABAddressBookHasUnsavedChanges doesn't work // We will check to make sure it stays broken ;-) - STAssertFalse([book_ hasUnsavedChanges], nil); + XCTAssertFalse([book_ hasUnsavedChanges]); #else // GTM_IPHONE_SDK - STAssertTrue([book_ hasUnsavedChanges], nil); + XCTAssertTrue([book_ hasUnsavedChanges]); #endif // GTM_IPHONE_SDK groups = [book_ groups]; - STAssertNotNil(groups, nil); + XCTAssertNotNil(groups); #if GTM_IPHONE_SDK - // Normally this next line would be STAssertTrue, however due to + // Normally this next line would be XCTAssertTrue, however due to // Radar 6200703: ABAddressBookAddRecord doesn't add an item to the groups // array until it's saved // We will check to make sure it stays broken ;-) - STAssertFalse([groups containsObject:group], nil); + XCTAssertFalse([groups containsObject:group]); #else // GTM_IPHONE_SDK - STAssertTrue([groups containsObject:group], nil); + XCTAssertTrue([groups containsObject:group]); #endif // GTM_IPHONE_SDK // Save book_ - STAssertTrue([book_ save], nil); + XCTAssertTrue([book_ save]); groups = [book_ groups]; - STAssertNotNil(groups, nil); - STAssertTrue([groups containsObject:group], nil); + XCTAssertNotNil(groups); + XCTAssertTrue([groups containsObject:group]); groups = [book_ groupsWithCompositeNameWithPrefix:kGTMABTestGroupName]; - STAssertEqualObjects([groups objectAtIndex:0], group, nil); + XCTAssertEqualObjects([groups objectAtIndex:0], group); GTMABRecordID recordID = [group recordID]; - STAssertNotEquals(recordID, kGTMABRecordInvalidID, nil); + XCTAssertNotEqual(recordID, kGTMABRecordInvalidID); GTMABRecord *record = [book_ groupForId:recordID]; - STAssertEqualObjects(record, group, nil); + XCTAssertEqualObjects(record, group); // Remove group - STAssertTrue([book_ removeRecord:group], nil); + XCTAssertTrue([book_ removeRecord:group]); #if GTM_IPHONE_SDK && (__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_3_2) - // Normally this next line would be STAssertTrue, however due to + // Normally this next line would be XCTAssertTrue, however due to // Radar 6200638: ABAddressBookHasUnsavedChanges doesn't work // We will check to make sure it stays broken ;-) - STAssertFalse([book_ hasUnsavedChanges], nil); + XCTAssertFalse([book_ hasUnsavedChanges]); #else // GTM_IPHONE_SDK - STAssertTrue([book_ hasUnsavedChanges], nil); + XCTAssertTrue([book_ hasUnsavedChanges]); #endif // GTM_IPHONE_SDK groups = [book_ groups]; - STAssertFalse([groups containsObject:group], nil); + XCTAssertFalse([groups containsObject:group]); // Save Book - STAssertTrue([book_ save], nil); + XCTAssertTrue([book_ save]); groups = [book_ groups]; - STAssertFalse([book_ hasUnsavedChanges], nil); - STAssertFalse([groups containsObject:group], nil); + XCTAssertFalse([book_ hasUnsavedChanges]); + XCTAssertFalse([groups containsObject:group]); groups = [book_ groupsWithCompositeNameWithPrefix:kGTMABTestGroupName]; - STAssertEquals([groups count], (NSUInteger)0, nil); + XCTAssertEqual([groups count], (NSUInteger)0); record = [book_ groupForId:recordID]; - STAssertNil(record, nil); + XCTAssertNil(record); } - (void)testPerson { GTMABPerson *person = [[[GTMABPerson alloc] initWithRecord:nil] autorelease]; - STAssertNil(person, nil); + XCTAssertNil(person); person = [GTMABPerson personWithFirstName:kGTMABTestFirstName lastName:nil]; - STAssertNotNil(person, nil); - STAssertEqualObjects([person compositeName], kGTMABTestFirstName, nil); + XCTAssertNotNil(person); + XCTAssertEqualObjects([person compositeName], kGTMABTestFirstName); NSString *firstName = [person valueForProperty:kGTMABPersonFirstNameProperty]; - STAssertEqualObjects(firstName, kGTMABTestFirstName, nil); + XCTAssertEqualObjects(firstName, kGTMABTestFirstName); NSString *lastName = [person valueForProperty:kGTMABPersonLastNameProperty]; - STAssertNil(lastName, nil); - STAssertTrue([person removeValueForProperty:kGTMABPersonFirstNameProperty], nil); - STAssertFalse([person removeValueForProperty:kGTMABPersonFirstNameProperty], nil); - STAssertFalse([person removeValueForProperty:kGTMABPersonLastNameProperty], nil); - STAssertFalse([person setValue:nil forProperty:kGTMABPersonFirstNameProperty], nil); - STAssertFalse([person setValue:[NSNumber numberWithInt:1] - forProperty:kGTMABPersonFirstNameProperty], nil); - STAssertFalse([person setValue:@"Bart" - forProperty:kGTMABPersonBirthdayProperty], nil); + XCTAssertNil(lastName); + XCTAssertTrue([person removeValueForProperty:kGTMABPersonFirstNameProperty]); + XCTAssertFalse([person removeValueForProperty:kGTMABPersonFirstNameProperty]); + XCTAssertFalse([person removeValueForProperty:kGTMABPersonLastNameProperty]); + XCTAssertFalse([person setValue:nil forProperty:kGTMABPersonFirstNameProperty]); + XCTAssertFalse([person setValue:[NSNumber numberWithInt:1] + forProperty:kGTMABPersonFirstNameProperty]); + XCTAssertFalse([person setValue:@"Bart" + forProperty:kGTMABPersonBirthdayProperty]); GTMABPropertyType property = [GTMABPerson typeOfProperty:kGTMABPersonLastNameProperty]; - STAssertEquals(property, (GTMABPropertyType)kGTMABStringPropertyType, nil); + XCTAssertEqual(property, (GTMABPropertyType)kGTMABStringPropertyType); NSString *string = [GTMABPerson localizedPropertyName:kGTMABPersonLastNameProperty]; - STAssertEqualObjects(string, @"Last", nil); + XCTAssertEqualObjects(string, @"Last"); string = [GTMABPerson localizedPropertyName:kGTMABRecordInvalidID]; #if GTM_IPHONE_SDK - STAssertEqualObjects(string, kGTMABUnknownPropertyName, nil); + XCTAssertEqualObjects(string, kGTMABUnknownPropertyName); #else // GTM_IPHONE_SDK - STAssertEqualObjects(string, kGTMABRecordInvalidID, nil); + XCTAssertEqualObjects(string, kGTMABRecordInvalidID); #endif // GTM_IPHONE_SDK string = [person description]; - STAssertNotNil(string, nil); + XCTAssertNotNil(string); GTMABPersonCompositeNameFormat format = [GTMABPerson compositeNameFormat]; - STAssertTrue(format == kABPersonCompositeNameFormatFirstNameFirst || - format == kABPersonCompositeNameFormatLastNameFirst, nil); + XCTAssertTrue(format == kABPersonCompositeNameFormatFirstNameFirst || + format == kABPersonCompositeNameFormatLastNameFirst); NSData *data = [person imageData]; - STAssertNil(data, nil); - STAssertTrue([person setImageData:nil], nil); + XCTAssertNil(data); + XCTAssertTrue([person setImageData:nil]); data = [person imageData]; - STAssertNil(data, nil); + XCTAssertNil(data); NSBundle *bundle = [NSBundle bundleForClass:[self class]]; NSString *phonePath = [bundle pathForResource:@"phone" ofType:@"png"]; - STAssertNotNil(phonePath, nil); + XCTAssertNotNil(phonePath); GTMABImage *image = [[[GTMABImage alloc] initWithContentsOfFile:phonePath] autorelease]; - STAssertNotNil(image, nil); + XCTAssertNotNil(image); #if GTM_IPHONE_SDK data = UIImagePNGRepresentation(image); #else // GTM_IPHONE_SDK data = [image TIFFRepresentation]; #endif // GTM_IPHONE_SDK - STAssertTrue([person setImageData:data], nil); + XCTAssertTrue([person setImageData:data]); NSData *data2 = [person imageData]; - STAssertEqualObjects(data, data2, nil); - STAssertTrue([person setImageData:nil], nil); + XCTAssertEqualObjects(data, data2); + XCTAssertTrue([person setImageData:nil]); data = [person imageData]; - STAssertNil(data, nil); + XCTAssertNil(data); - STAssertTrue([person setImage:image], nil); + XCTAssertTrue([person setImage:image]); GTMABImage *image2 = [person image]; - STAssertNotNil(image2, nil); + XCTAssertNotNil(image2); #if GTM_IPHONE_SDK - STAssertEqualObjects(UIImagePNGRepresentation(image), - UIImagePNGRepresentation(image2), nil); + XCTAssertEqualObjects(UIImagePNGRepresentation(image), + UIImagePNGRepresentation(image2)); #else // GTM_IPHONE_SDK - STAssertEqualObjects([image TIFFRepresentation], - [image2 TIFFRepresentation], nil); + XCTAssertEqualObjects([image TIFFRepresentation], + [image2 TIFFRepresentation]); #endif // GTM_IPHONE_SDK person = [GTMABPerson personWithFirstName:kGTMABTestFirstName lastName:kGTMABTestLastName]; data = [NSData dataWithBytes:"a" length:1]; - STAssertFalse([person setImageData:data], nil); + XCTAssertFalse([person setImageData:data]); GTMABMutableMultiValue *value = [GTMABMutableMultiValue valueWithPropertyType:kGTMABStringPropertyType]; - STAssertNotNil(value, nil); - STAssertNotEquals([value addValue:@"222-222-2222" + XCTAssertNotNil(value); + XCTAssertNotEqual([value addValue:@"222-222-2222" withLabel:(CFStringRef)kABHomeLabel], - kGTMABMultiValueInvalidIdentifier, nil); - STAssertNotEquals([value addValue:@"333-333-3333" + kGTMABMultiValueInvalidIdentifier); + XCTAssertNotEqual([value addValue:@"333-333-3333" withLabel:(CFStringRef)kABWorkLabel], - kGTMABMultiValueInvalidIdentifier, nil); - STAssertTrue([person setValue:value - forProperty:kGTMABPersonPhoneProperty], nil); + kGTMABMultiValueInvalidIdentifier); + XCTAssertTrue([person setValue:value + forProperty:kGTMABPersonPhoneProperty]); id value2 = [person valueForProperty:kGTMABPersonPhoneProperty]; - STAssertNotNil(value2, nil); - STAssertEqualObjects(value, value2, nil); - STAssertEquals([value hash], [value2 hash], nil); - STAssertNotEquals([person hash], (NSUInteger)0, nil); + XCTAssertNotNil(value2); + XCTAssertEqualObjects(value, value2); + XCTAssertEqual([value hash], [value2 hash]); + XCTAssertNotEqual([person hash], (NSUInteger)0); } - (void)testGroup { GTMABGroup *group = [[[GTMABGroup alloc] initWithRecord:nil] autorelease]; - STAssertNil(group, nil); + XCTAssertNil(group); group = [GTMABGroup groupNamed:kGTMABTestGroupName]; - STAssertNotNil(group, nil); - STAssertEqualObjects([group compositeName], kGTMABTestGroupName, nil); + XCTAssertNotNil(group); + XCTAssertEqualObjects([group compositeName], kGTMABTestGroupName); NSString *name = [group valueForProperty:kABGroupNameProperty]; - STAssertEqualObjects(name, kGTMABTestGroupName, nil); + XCTAssertEqualObjects(name, kGTMABTestGroupName); NSString *lastName = [group valueForProperty:kGTMABPersonLastNameProperty]; - STAssertNil(lastName, nil); - STAssertTrue([group removeValueForProperty:kABGroupNameProperty], nil); - STAssertFalse([group removeValueForProperty:kABGroupNameProperty], nil); - STAssertFalse([group removeValueForProperty:kGTMABPersonLastNameProperty], nil); - STAssertFalse([group setValue:nil forProperty:kABGroupNameProperty], nil); - STAssertFalse([group setValue:[NSNumber numberWithInt:1] - forProperty:kABGroupNameProperty], nil); - STAssertFalse([group setValue:@"Bart" - forProperty:kGTMABPersonBirthdayProperty], nil); + XCTAssertNil(lastName); + XCTAssertTrue([group removeValueForProperty:kABGroupNameProperty]); + XCTAssertFalse([group removeValueForProperty:kABGroupNameProperty]); + XCTAssertFalse([group removeValueForProperty:kGTMABPersonLastNameProperty]); + XCTAssertFalse([group setValue:nil forProperty:kABGroupNameProperty]); + XCTAssertFalse([group setValue:[NSNumber numberWithInt:1] + forProperty:kABGroupNameProperty]); + XCTAssertFalse([group setValue:@"Bart" + forProperty:kGTMABPersonBirthdayProperty]); ABPropertyType property = [GTMABGroup typeOfProperty:kABGroupNameProperty]; - STAssertEquals(property, (ABPropertyType)kGTMABStringPropertyType, nil); + XCTAssertEqual(property, (ABPropertyType)kGTMABStringPropertyType); property = [GTMABGroup typeOfProperty:kGTMABPersonLastNameProperty]; - STAssertEquals(property, (ABPropertyType)kGTMABInvalidPropertyType, nil); + XCTAssertEqual(property, (ABPropertyType)kGTMABInvalidPropertyType); NSString *string = [GTMABGroup localizedPropertyName:kABGroupNameProperty]; - STAssertEqualObjects(string, @"Name", nil); + XCTAssertEqualObjects(string, @"Name"); string = [GTMABGroup localizedPropertyName:kGTMABPersonLastNameProperty]; - STAssertEqualObjects(string, kGTMABUnknownPropertyName, nil); + XCTAssertEqualObjects(string, kGTMABUnknownPropertyName); string = [GTMABGroup localizedPropertyName:kGTMABRecordInvalidID]; - STAssertEqualObjects(string, kGTMABUnknownPropertyName, nil); + XCTAssertEqualObjects(string, kGTMABUnknownPropertyName); string = [group description]; - STAssertNotNil(string, nil); + XCTAssertNotNil(string); // Adding and removing members group = [GTMABGroup groupNamed:kGTMABTestGroupName]; NSArray *members = [group members]; - STAssertEquals([members count], (NSUInteger)0, @"Members: %@", members); + XCTAssertEqual([members count], (NSUInteger)0, @"Members: %@", members); - STAssertFalse([group addMember:nil], nil); + XCTAssertFalse([group addMember:nil]); members = [group members]; - STAssertEquals([members count], (NSUInteger)0, @"Members: %@", members); + XCTAssertEqual([members count], (NSUInteger)0, @"Members: %@", members); GTMABPerson *person = [GTMABPerson personWithFirstName:kGTMABTestFirstName lastName:kGTMABTestLastName]; - STAssertNotNil(person, nil); - STAssertTrue([book_ addRecord:person], nil); - STAssertTrue([book_ save], nil); - STAssertTrue([book_ addRecord:group], nil); - STAssertTrue([book_ save], nil); - STAssertTrue([group addMember:person], nil); - STAssertTrue([book_ save], nil); + XCTAssertNotNil(person); + XCTAssertTrue([book_ addRecord:person]); + XCTAssertTrue([book_ save]); + XCTAssertTrue([book_ addRecord:group]); + XCTAssertTrue([book_ save]); + XCTAssertTrue([group addMember:person]); + XCTAssertTrue([book_ save]); members = [group members]; - STAssertEquals([members count], (NSUInteger)1, @"Members: %@", members); - STAssertTrue([group removeMember:person], nil); - STAssertFalse([group removeMember:person], nil); - STAssertFalse([group removeMember:nil], nil); - STAssertTrue([book_ removeRecord:group], nil); - STAssertTrue([book_ removeRecord:person], nil); - STAssertTrue([book_ save], nil); + XCTAssertEqual([members count], (NSUInteger)1, @"Members: %@", members); + XCTAssertTrue([group removeMember:person]); + XCTAssertFalse([group removeMember:person]); + XCTAssertFalse([group removeMember:nil]); + XCTAssertTrue([book_ removeRecord:group]); + XCTAssertTrue([book_ removeRecord:person]); + XCTAssertTrue([book_ save]); } - (void)testMultiValues { - STAssertThrows([[GTMABMultiValue alloc] init], nil); - STAssertThrows([[GTMABMutableMultiValue alloc] init], nil); + XCTAssertThrows([[GTMABMultiValue alloc] init]); + XCTAssertThrows([[GTMABMutableMultiValue alloc] init]); GTMABMultiValue *value = [[GTMABMultiValue alloc] initWithMultiValue:nil]; - STAssertNil(value, nil); + XCTAssertNil(value); GTMABMutableMultiValue *mutValue = [GTMABMutableMultiValue valueWithPropertyType:kGTMABInvalidPropertyType]; - STAssertNil(mutValue, nil); + XCTAssertNil(mutValue); mutValue = [[[GTMABMutableMultiValue alloc] initWithMutableMultiValue:nil] autorelease]; - STAssertNil(mutValue, nil); + XCTAssertNil(mutValue); mutValue = [[[GTMABMutableMultiValue alloc] initWithMultiValue:nil] autorelease]; - STAssertNil(mutValue, nil); + XCTAssertNil(mutValue); #if GTM_IPHONE_SDK // Only the IPhone version actually allows you to check types of a multivalue // before you stick anything in it @@ -417,154 +434,154 @@ static NSString *const kGTMABTestGroupName = @"GTMABAddressBookTestGroupName"; }; for (size_t i = 0; i < sizeof(types) / sizeof(GTMABPropertyType); ++i) { mutValue = [GTMABMutableMultiValue valueWithPropertyType:types[i]]; - STAssertNotNil(mutValue, nil); + XCTAssertNotNil(mutValue); // Oddly the Apple APIs allow you to create a mutable multi value with // either a property type of kABFooPropertyType or kABMultiFooPropertyType // and apparently you get back basically the same thing. However if you // ask a type that you created with kABMultiFooPropertyType for it's type // it returns just kABFooPropertyType. - STAssertEquals([mutValue propertyType], - (GTMABPropertyType)(types[i] & ~kABMultiValueMask), nil); + XCTAssertEqual([mutValue propertyType], + (GTMABPropertyType)(types[i] & ~kABMultiValueMask)); } #endif // GTM_IPHONE_SDK mutValue = [GTMABMutableMultiValue valueWithPropertyType:kGTMABStringPropertyType]; - STAssertNotNil(mutValue, nil); + XCTAssertNotNil(mutValue); value = [[mutValue copy] autorelease]; - STAssertEqualObjects([value class], [GTMABMultiValue class], nil); + XCTAssertEqualObjects([value class], [GTMABMultiValue class]); mutValue = [[value mutableCopy] autorelease]; - STAssertEqualObjects([mutValue class], [GTMABMutableMultiValue class], nil); - STAssertEquals([mutValue count], (NSUInteger)0, nil); - STAssertNil([mutValue valueAtIndex:0], nil); - STAssertNil([mutValue labelAtIndex:0], nil); + XCTAssertEqualObjects([mutValue class], [GTMABMutableMultiValue class]); + XCTAssertEqual([mutValue count], (NSUInteger)0); + XCTAssertNil([mutValue valueAtIndex:0]); + XCTAssertNil([mutValue labelAtIndex:0]); #if GTM_IPHONE_SDK - STAssertEquals([mutValue identifierAtIndex:0], - kGTMABMultiValueInvalidIdentifier, nil); - STAssertEquals([mutValue propertyType], - (GTMABPropertyType)kGTMABStringPropertyType, nil); + XCTAssertEqual([mutValue identifierAtIndex:0], + kGTMABMultiValueInvalidIdentifier); + XCTAssertEqual([mutValue propertyType], + (GTMABPropertyType)kGTMABStringPropertyType); #else // GTM_IPHONE_SDK - STAssertEqualObjects([mutValue identifierAtIndex:0], - kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertEqualObjects([mutValue identifierAtIndex:0], + kGTMABMultiValueInvalidIdentifier); #endif // GTM_IPHONE_SDK GTMABMultiValueIdentifier ident = [mutValue addValue:nil withLabel:(CFStringRef)kABHomeLabel]; #if GTM_IPHONE_SDK - STAssertEquals(ident, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertEqual(ident, kGTMABMultiValueInvalidIdentifier); #else // GTM_IPHONE_SDK - STAssertEqualObjects(ident, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertEqualObjects(ident, kGTMABMultiValueInvalidIdentifier); #endif // GTM_IPHONE_SDK ident = [mutValue addValue:@"val1" withLabel:nil]; #if GTM_IPHONE_SDK - STAssertEquals(ident, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertEqual(ident, kGTMABMultiValueInvalidIdentifier); #else // GTM_IPHONE_SDK - STAssertEqualObjects(ident, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertEqualObjects(ident, kGTMABMultiValueInvalidIdentifier); #endif // GTM_IPHONE_SDK ident = [mutValue insertValue:@"val1" withLabel:nil atIndex:0]; #if GTM_IPHONE_SDK - STAssertEquals(ident, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertEqual(ident, kGTMABMultiValueInvalidIdentifier); #else // GTM_IPHONE_SDK - STAssertEqualObjects(ident, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertEqualObjects(ident, kGTMABMultiValueInvalidIdentifier); #endif // GTM_IPHONE_SDK ident = [mutValue insertValue:nil withLabel:(CFStringRef)kABHomeLabel atIndex:0]; #if GTM_IPHONE_SDK - STAssertEquals(ident, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertEqual(ident, kGTMABMultiValueInvalidIdentifier); #else // GTM_IPHONE_SDK - STAssertEqualObjects(ident, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertEqualObjects(ident, kGTMABMultiValueInvalidIdentifier); #endif // GTM_IPHONE_SDK ident = [mutValue addValue:@"val1" withLabel:(CFStringRef)kABHomeLabel]; #if GTM_IPHONE_SDK - STAssertNotEquals(ident, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertNotEqual(ident, kGTMABMultiValueInvalidIdentifier); #else // GTM_IPHONE_SDK - STAssertNotEqualObjects(ident, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertNotEqualObjects(ident, kGTMABMultiValueInvalidIdentifier); #endif // GTM_IPHONE_SDK GTMABMultiValueIdentifier identCheck = [mutValue identifierAtIndex:0]; #if GTM_IPHONE_SDK - STAssertEquals(ident, identCheck, nil); + XCTAssertEqual(ident, identCheck); #else // GTM_IPHONE_SDK - STAssertEqualObjects(ident, identCheck, nil); + XCTAssertEqualObjects(ident, identCheck); #endif // GTM_IPHONE_SDK NSUInteger idx = [mutValue indexForIdentifier:ident]; - STAssertEquals(idx, (NSUInteger)0, nil); - STAssertTrue([mutValue replaceLabelAtIndex:0 - withLabel:(CFStringRef)kABWorkLabel], nil); - STAssertFalse([mutValue replaceLabelAtIndex:10 - withLabel:(CFStringRef)kABWorkLabel], nil); - STAssertTrue([mutValue replaceValueAtIndex:0 - withValue:@"newVal1"], nil); - STAssertFalse([mutValue replaceValueAtIndex:10 - withValue:@"newVal1"], nil); - - STAssertEqualObjects([mutValue valueForIdentifier:ident], @"newVal1", nil); - STAssertEqualObjects([mutValue labelForIdentifier:ident], - (NSString *)kABWorkLabel, nil); + XCTAssertEqual(idx, (NSUInteger)0); + XCTAssertTrue([mutValue replaceLabelAtIndex:0 + withLabel:(CFStringRef)kABWorkLabel]); + XCTAssertFalse([mutValue replaceLabelAtIndex:10 + withLabel:(CFStringRef)kABWorkLabel]); + XCTAssertTrue([mutValue replaceValueAtIndex:0 + withValue:@"newVal1"]); + XCTAssertFalse([mutValue replaceValueAtIndex:10 + withValue:@"newVal1"]); + + XCTAssertEqualObjects([mutValue valueForIdentifier:ident], @"newVal1"); + XCTAssertEqualObjects([mutValue labelForIdentifier:ident], + (NSString *)kABWorkLabel); GTMABMultiValueIdentifier ident2 = [mutValue insertValue:@"val2" withLabel:(CFStringRef)kABOtherLabel atIndex:0]; - STAssertNotEquals(ident2, kGTMABMultiValueInvalidIdentifier, nil); - STAssertNotEquals(ident2, ident, nil); + XCTAssertNotEqual(ident2, kGTMABMultiValueInvalidIdentifier); + XCTAssertNotEqual(ident2, ident); GTMABMultiValueIdentifier ident3 = [mutValue insertValue:@"val3" withLabel:(CFStringRef)kGTMABPersonPhoneMainLabel atIndex:10]; #if GTM_IPHONE_SDK - STAssertEquals(ident3, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertEqual(ident3, kGTMABMultiValueInvalidIdentifier); #else // GTM_IPHONE_SDK - STAssertEqualObjects(ident3, kGTMABMultiValueInvalidIdentifier, nil); + XCTAssertEqualObjects(ident3, kGTMABMultiValueInvalidIdentifier); #endif // GTM_IPHONE_SDK NSUInteger idx3 = [mutValue indexForIdentifier:ident3]; - STAssertEquals(idx3, (NSUInteger)NSNotFound, nil); - STAssertTrue([mutValue removeValueAndLabelAtIndex:1], nil); - STAssertFalse([mutValue removeValueAndLabelAtIndex:1], nil); + XCTAssertEqual(idx3, (NSUInteger)NSNotFound); + XCTAssertTrue([mutValue removeValueAndLabelAtIndex:1]); + XCTAssertFalse([mutValue removeValueAndLabelAtIndex:1]); NSUInteger idx4 = [mutValue indexForIdentifier:kGTMABMultiValueInvalidIdentifier]; - STAssertEquals(idx4, (NSUInteger)NSNotFound, nil); + XCTAssertEqual(idx4, (NSUInteger)NSNotFound); - STAssertNotNULL([mutValue multiValueRef], nil); + XCTAssertNotNULL([mutValue multiValueRef]); // Enumerator test mutValue = [GTMABMutableMultiValue valueWithPropertyType:kGTMABIntegerPropertyType]; - STAssertNotNil(mutValue, nil); + XCTAssertNotNil(mutValue); for (int i = 0; i < 100; i++) { NSString *label = [NSString stringWithFormat:@"label %d", i]; NSNumber *val = [NSNumber numberWithInt:i]; - STAssertNotEquals([mutValue addValue:val + XCTAssertNotEqual([mutValue addValue:val withLabel:(CFStringRef)label], - kGTMABMultiValueInvalidIdentifier, nil); + kGTMABMultiValueInvalidIdentifier); } int count = 0; NSString *label; - GTM_FOREACH_ENUMEREE(label, [mutValue labelEnumerator]) { + for (label in [mutValue labelEnumerator]) { NSString *testLabel = [NSString stringWithFormat:@"label %d", count++]; - STAssertEqualObjects(label, testLabel, nil); + XCTAssertEqualObjects(label, testLabel); } count = 0; value = [[mutValue copy] autorelease]; NSNumber *val; - GTM_FOREACH_ENUMEREE(val, [value valueEnumerator]) { - STAssertEqualObjects(val, [NSNumber numberWithInt:count++], nil); + for (val in [value valueEnumerator]) { + XCTAssertEqualObjects(val, [NSNumber numberWithInt:count++]); } // Test messing with the values while we're enumerating them NSEnumerator *labelEnum = [mutValue labelEnumerator]; NSEnumerator *valueEnum = [mutValue valueEnumerator]; - STAssertNotNil(labelEnum, nil); - STAssertNotNil(valueEnum, nil); - STAssertNotNil([labelEnum nextObject], nil); - STAssertNotNil([valueEnum nextObject], nil); - STAssertTrue([mutValue removeValueAndLabelAtIndex:0], nil); - STAssertThrows([labelEnum nextObject], nil); - STAssertThrows([valueEnum nextObject], nil); + XCTAssertNotNil(labelEnum); + XCTAssertNotNil(valueEnum); + XCTAssertNotNil([labelEnum nextObject]); + XCTAssertNotNil([valueEnum nextObject]); + XCTAssertTrue([mutValue removeValueAndLabelAtIndex:0]); + XCTAssertThrows([labelEnum nextObject]); + XCTAssertThrows([valueEnum nextObject]); // Test messing with the values while we're fast enumerating them // Should throw an exception on the second access. @@ -572,23 +589,27 @@ static NSString *const kGTMABTestGroupName = @"GTMABAddressBookTestGroupName"; // Start at one because we removed index 0 above. count = 1; @try { - GTM_FOREACH_ENUMEREE(label, [mutValue labelEnumerator]) { + for (label in [mutValue labelEnumerator]) { NSString *testLabel = [NSString stringWithFormat:@"label %d", count++]; - STAssertEqualObjects(label, testLabel, nil); - STAssertTrue([mutValue removeValueAndLabelAtIndex:50], nil); + XCTAssertEqualObjects(label, testLabel); + XCTAssertTrue([mutValue removeValueAndLabelAtIndex:50]); } } @catch(NSException *e) { - STAssertEqualObjects([e name], NSGenericException, @"Got %@ instead", e); - STAssertEquals(count, 2, + XCTAssertEqualObjects([e name], NSGenericException, @"Got %@ instead", e); + XCTAssertEqual(count, 2, @"Should have caught it on the second access"); exceptionThrown = YES; } // COV_NF_LINE - because we always catch, this brace doesn't get exec'd - STAssertTrue(exceptionThrown, @"We should have thrown an exception" + XCTAssertTrue(exceptionThrown, @"We should have thrown an exception" @" because the values under the enumerator were modified"); } #if GTM_IPHONE_SDK + +#if (!defined(__LP64__) || !__LP64__) +// This test does not work on LP64 because refcounts are magic and don't work the +// same as on i386. - (void)testRadar6208390 { GTMABPropertyType types[] = { kGTMABStringPropertyType, @@ -599,14 +620,10 @@ static NSString *const kGTMABTestGroupName = @"GTMABAddressBookTestGroupName"; }; for (size_t j = 0; j < sizeof(types) / sizeof(ABPropertyType); ++j) { ABPropertyType type = types[j]; -#if GTM_IPHONE_SDK ABMultiValueRef ref = ABMultiValueCreateMutable(type); -#else // GTM_IPHONE_SDK - ABMutableMultiValueRef ref = ABMultiValueCreateMutable(); -#endif // GTM_IPHONE_SDK - STAssertNotNULL(ref, nil); + XCTAssertNotNULL(ref); NSString *label = [[NSString alloc] initWithString:@"label"]; - STAssertNotNil(label, nil); + XCTAssertNotNil(label); id val = nil; if (type == kGTMABDictionaryPropertyType) { val = [[NSDictionary alloc] initWithObjectsAndKeys:@"1", @"1", nil]; @@ -618,27 +635,26 @@ static NSString *const kGTMABTestGroupName = @"GTMABAddressBookTestGroupName"; } else if (type == kGTMABDateTimePropertyType) { val = [[NSDate alloc] init]; } - STAssertNotNil(val, - @"Testing type %d, %@", type, val); + XCTAssertNotNil(val, @"Testing type %d, %@", type, val); NSUInteger firstRetainCount = [val retainCount]; - STAssertNotEquals(firstRetainCount, + XCTAssertNotEqual(firstRetainCount, (NSUInteger)0, @"Testing type %d, %@", type, val); GTMABMultiValueIdentifier identifier; - STAssertTrue(ABMultiValueAddValueAndLabel(ref, - val, - (CFStringRef)label, - &identifier), - @"Testing type %d, %@", type, val); + XCTAssertTrue(ABMultiValueAddValueAndLabel(ref, + val, + (CFStringRef)label, + &identifier), + @"Testing type %d, %@", type, val); NSUInteger secondRetainCount = [val retainCount]; - STAssertEquals(firstRetainCount + 1, + XCTAssertEqual(firstRetainCount + 1, secondRetainCount, @"Testing type %d, %@", type, val); [label release]; [val release]; NSUInteger thirdRetainCount = [val retainCount]; - STAssertEquals(firstRetainCount, + XCTAssertEqual(firstRetainCount, thirdRetainCount, @"Testing type %d, %@", type, val); @@ -653,13 +669,13 @@ static NSString *const kGTMABTestGroupName = @"GTMABAddressBookTestGroupName"; if (type == kGTMABIntegerPropertyType || type == kGTMABRealPropertyType) { // We are verifying that yes indeed 6208390 is still broken - STAssertEquals(fourthRetainCount, + XCTAssertEqual(fourthRetainCount, thirdRetainCount, @"Testing type %d, %@. If you see this error it may " @"be time to update the code to change retain behaviors" @"with this os version", type, val); } else { - STAssertEquals(fourthRetainCount, + XCTAssertEqual(fourthRetainCount, thirdRetainCount + 1, @"Testing type %d, %@", type, val); [val release]; @@ -671,6 +687,8 @@ static NSString *const kGTMABTestGroupName = @"GTMABAddressBookTestGroupName"; } } +#endif // (!defined(__LP64__) || !__LP64__) + // Globals used by testRadar6240394. static GTMABPropertyID gGTMTestID; static const GTMABPropertyID *gGTMTestIDPtr; @@ -685,9 +703,9 @@ void __attribute__((constructor))SetUpIDForTestRadar6240394(void) { // As of iPhone SDK 2.1, the property IDs aren't initialized until // ABAddressBookCreate is actually called. They will return zero until // then. Logged as radar 6240394. - STAssertEquals(gGTMTestID, 0, @"If this isn't zero, Apple has fixed 6240394"); + XCTAssertEqual(gGTMTestID, 0, @"If this isn't zero, Apple has fixed 6240394"); (void)ABAddressBookCreate(); - STAssertEquals(*gGTMTestIDPtr, kGTMABPersonLastNameProperty, + XCTAssertEqual(*gGTMTestIDPtr, kGTMABPersonLastNameProperty, @"If this doesn't work, something else has broken"); } diff --git a/AppKit/GTMCarbonEvent.m b/AppKit/GTMCarbonEvent.m index 235306e..e18551e 100644 --- a/AppKit/GTMCarbonEvent.m +++ b/AppKit/GTMCarbonEvent.m @@ -343,6 +343,12 @@ const OSType kGTMCarbonFrameworkSignature = 'GTM '; @implementation GTMCarbonEventHandler +-(void)dealloc { + if (eventHandler_) { + verify_noerr(RemoveEventHandler(eventHandler_)); + } + [super dealloc]; +} // Does our delegate respond to eventHandler:receivedEvent:handler: // // Returns: @@ -621,7 +627,7 @@ CantCreateKey: data:&keyID]; if (handled) { GTMCarbonHotKey *hotkey; - GTM_FOREACH_OBJECT(hotkey, hotkeys_) { + for (hotkey in hotkeys_) { if ([hotkey matchesHotKeyID:keyID]) { EventKind kind = [event eventKind]; BOOL onKeyDown = [hotkey onKeyDown]; diff --git a/AppKit/GTMCarbonEventTest.m b/AppKit/GTMCarbonEventTest.m index 0c7286b..ed18342 100644 --- a/AppKit/GTMCarbonEventTest.m +++ b/AppKit/GTMCarbonEventTest.m @@ -19,7 +19,6 @@ #import "GTMSenTestCase.h" #import "GTMCarbonEvent.h" #import "GTMAppKitUnitTestingUtilities.h" -#import "GTMUnitTestDevLog.h" @interface GTMCarbonEventTest : GTMTestCase { @private @@ -62,23 +61,23 @@ static const UInt32 kTestParameterValue = 'bam '; - (void)testCopy { GTMCarbonEvent *event2 = [[event_ copy] autorelease]; - STAssertNotNil(event2, nil); + XCTAssertNotNil(event2); } - (void)testEventWithClassAndKind { - STAssertEquals([event_ eventClass], kTestClass, nil); - STAssertEquals([event_ eventKind], kTestKind, nil); + XCTAssertEqual([event_ eventClass], kTestClass); + XCTAssertEqual([event_ eventKind], kTestKind); } - (void)testEventWithEvent { GTMCarbonEvent *event2 = [GTMCarbonEvent eventWithEvent:[event_ event]]; - STAssertEquals([event2 event], [event_ event], nil); + XCTAssertEqual([event2 event], [event_ event]); } - (void)testCurrentEvent { EventRef eventRef = GetCurrentEvent(); GTMCarbonEvent *event = [GTMCarbonEvent currentEvent]; - STAssertEquals([event event], eventRef, nil); + XCTAssertEqual([event event], eventRef); } - (void)testEventClass { @@ -91,13 +90,13 @@ static const UInt32 kTestParameterValue = 'bam '; - (void)testSetTime { EventTime eventTime = [event_ time]; - STAssertNotEquals(eventTime, kEventDurationNoWait, nil); - STAssertNotEquals(eventTime, kEventDurationForever, nil); + XCTAssertNotEqualWithAccuracy(eventTime, kEventDurationNoWait, 0.01); + XCTAssertNotEqualWithAccuracy(eventTime, kEventDurationForever, 0.01); [event_ setTime:kEventDurationForever]; EventTime testTime = [event_ time]; - STAssertEquals(testTime, kEventDurationForever, nil); + XCTAssertEqualWithAccuracy(testTime, kEventDurationForever, 0.01); [event_ setTime:eventTime]; - STAssertEquals([event_ time], eventTime, nil); + XCTAssertEqualWithAccuracy([event_ time], eventTime, 0.01); } - (void)testTime { @@ -112,21 +111,21 @@ static const UInt32 kTestParameterValue = 'bam '; UInt32 theData = kTestParameterValue; [event_ setUInt32ParameterNamed:kTestParameterName data:&theData]; theData = 0; - STAssertEquals([event_ sizeOfParameterNamed:kTestParameterName + XCTAssertEqual([event_ sizeOfParameterNamed:kTestParameterName type:typeUInt32], - sizeof(UInt32), nil); - STAssertTrue([event_ getUInt32ParameterNamed:kTestParameterName - data:&theData], nil); - STAssertEquals(theData, kTestParameterValue, nil); + sizeof(UInt32)); + XCTAssertTrue([event_ getUInt32ParameterNamed:kTestParameterName + data:&theData]); + XCTAssertEqual(theData, kTestParameterValue); } - (void)testGetParameterNamed { [self testSetParameterNamed]; UInt32 theData = kTestParameterValue; - STAssertFalse([event_ getUInt32ParameterNamed:kTestBadParameterName - data:&theData], nil); - STAssertFalse([event_ getUInt32ParameterNamed:kTestBadParameterName - data:NULL], nil); + XCTAssertFalse([event_ getUInt32ParameterNamed:kTestBadParameterName + data:&theData]); + XCTAssertFalse([event_ getUInt32ParameterNamed:kTestBadParameterName + data:NULL]); } @@ -155,10 +154,10 @@ static const UInt32 kTestParameterValue = 'bam '; autorelease]; [handler registerForEvents:&types count:1]; OSStatus status = [event_ sendToTarget:handler options:0]; - STAssertErr(status, eventNotHandledErr, @"status: %ld", (long)status); + XCTAssertErr(status, eventNotHandledErr, @"status: %d", (int)status); [handler setDelegate:self]; status = [event_ sendToTarget:handler options:0]; - STAssertNoErr(status, @"status: %ld", (long)status); + XCTAssertNoErr(status, @"status: %d", (int)status); [handler unregisterForEvents:&types count:1]; } @@ -167,17 +166,17 @@ static const UInt32 kTestParameterValue = 'bam '; [event_ postToMainQueue]; OSStatus status = [event_ postToQueue:eventQueue priority:kEventPriorityStandard]; - STAssertErr(status, eventAlreadyPostedErr, @"status: %ld", (long)status); + XCTAssertErr(status, eventAlreadyPostedErr, @"status: %d", (int)status); EventTypeSpec types = { kTestClass, kTestKind }; status = FlushEventsMatchingListFromQueue(eventQueue, 1, &types); - STAssertNoErr(status, @"status: %ld", (long)status); + XCTAssertNoErr(status, @"status: %ld", (long)status); eventQueue = GetCurrentEventQueue(); [event_ postToCurrentQueue]; status = [event_ postToQueue:eventQueue priority:kEventPriorityStandard]; - STAssertErr(status, eventAlreadyPostedErr, @"status: %ld", (long)status); + XCTAssertErr(status, eventAlreadyPostedErr, @"status: %d", (int)status); status = FlushEventsMatchingListFromQueue(eventQueue, 1, &types); - STAssertNoErr(status, @"status: %ld", status); + XCTAssertNoErr(status, @"status: %ld", (long)status); } - (void)testPostToMainQueue { @@ -185,7 +184,7 @@ static const UInt32 kTestParameterValue = 'bam '; } - (void)testPostToCurrentQueue { - STAssertEquals(GetCurrentEventQueue(), GetMainEventQueue(), nil); + XCTAssertEqual(GetCurrentEventQueue(), GetMainEventQueue()); [self testPostToMainQueue]; } @@ -193,7 +192,7 @@ static const UInt32 kTestParameterValue = 'bam '; NSString *descString = [NSString stringWithFormat:@"GTMCarbonEvent 'foo ' %lu", (unsigned long)kTestKind]; - STAssertEqualObjects([event_ description], descString, nil); + XCTAssertEqualObjects([event_ description], descString); } @end @@ -208,21 +207,19 @@ static const UInt32 kTestParameterValue = 'bam '; } - (void)testEventTarget { - STAssertNULL([handler_ eventTarget], nil); + XCTAssertNULL([handler_ eventTarget]); } - (void)testEventHandler { - [GTMUnitTestDevLogDebug expectPattern: - @"DebugAssert: GoogleToolboxForMac: event CantUseParams .*"]; - STAssertErr([handler_ handleEvent:nil handler:nil], - (long)eventNotHandledErr, nil); + XCTAssertErr([handler_ handleEvent:nil handler:nil], + (long)eventNotHandledErr); } - (void)testDelegate { [handler_ setDelegate:self]; - STAssertEqualObjects([handler_ delegate], self, nil); + XCTAssertEqualObjects([handler_ delegate], self); [handler_ setDelegate:nil]; - STAssertNil([handler_ delegate], nil); + XCTAssertNil([handler_ delegate]); } @@ -237,7 +234,7 @@ static const UInt32 kTestParameterValue = 'bam '; - (void)testEventHandler { GTMCarbonEventMonitorHandler *monitor = [GTMCarbonEventMonitorHandler sharedEventMonitorHandler]; - STAssertEquals([monitor eventTarget], GetEventMonitorTarget(), nil); + XCTAssertEqual([monitor eventTarget], GetEventMonitorTarget()); } @end @@ -253,7 +250,7 @@ extern EventTargetRef GetApplicationEventTarget(void); - (void)testEventHandler { GTMCarbonEventApplicationEventHandler *handler = [GTMCarbonEventApplicationEventHandler sharedApplicationEventHandler]; - STAssertEquals([handler eventTarget], GetApplicationEventTarget(), nil); + XCTAssertEqual([handler eventTarget], GetApplicationEventTarget()); } @end @@ -272,16 +269,16 @@ extern EventTargetRef GetApplicationEventTarget(void); - (void)testEventHandler { GTMCarbonEventDispatcherHandler *dispatcher = [GTMCarbonEventDispatcherHandler sharedEventDispatcherHandler]; - STAssertEquals([dispatcher eventTarget], GetEventDispatcherTarget(), nil); + XCTAssertEqual([dispatcher eventTarget], GetEventDispatcherTarget()); } - (void)hitHotKey:(GTMCarbonHotKey *)key { - STAssertEqualObjects([key userInfo], self, nil); + XCTAssertEqualObjects([key userInfo], self); [hotKeyHit_ setShouldStop:YES]; } - (void)hitExceptionalHotKey:(GTMCarbonHotKey *)key { - STAssertEqualObjects([key userInfo], self, nil); + XCTAssertEqualObjects([key userInfo], self); [hotKeyHit_ setShouldStop:YES]; [NSException raise:@"foo" format:@"bar"]; } @@ -293,32 +290,30 @@ extern EventTargetRef GetApplicationEventTarget(void); if (![GTMAppKitUnitTestingUtilities isScreenSaverActive]) { GTMCarbonEventDispatcherHandler *dispatcher = [GTMCarbonEventDispatcherHandler sharedEventDispatcherHandler]; - STAssertNotNil(dispatcher, @"Unable to acquire singleton"); + XCTAssertNotNil(dispatcher, @"Unable to acquire singleton"); UInt32 keyMods = (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask); - [GTMUnitTestDevLogDebug expectPattern:@"DebugAssert: GoogleToolboxForMac: " - @"newKey CantCreateKey .*"]; - STAssertNil([dispatcher registerHotKey:0x5 - modifiers:keyMods - target:nil - action:nil - userInfo:nil - whenPressed:YES], - @"Shouldn't have created hotkey"); + XCTAssertNil([dispatcher registerHotKey:0x5 + modifiers:keyMods + target:nil + action:nil + userInfo:nil + whenPressed:YES], + @"Shouldn't have created hotkey"); GTMCarbonHotKey *hotKey = [dispatcher registerHotKey:0x5 modifiers:keyMods target:self action:@selector(hitHotKey:) userInfo:self whenPressed:YES]; - STAssertNotNil(hotKey, @"Unable to create hotkey"); + XCTAssertNotNil(hotKey, @"Unable to create hotkey"); // Post the hotkey combo to the event queue. If everything is working // correctly hitHotKey: should get called, and hotKeyHit_ will be set for // us. We run the event loop for a set amount of time waiting for this to // happen. [GTMAppKitUnitTestingUtilities postTypeCharacterEvent:'g' modifiers:keyMods]; - STAssertTrue([NSApp gtm_runUpToSixtySecondsWithContext:hotKeyHit_], nil); + XCTAssertTrue([NSApp gtm_runUpToSixtySecondsWithContext:hotKeyHit_]); [dispatcher unregisterHotKey:hotKey]; } } @@ -330,7 +325,7 @@ extern EventTargetRef GetApplicationEventTarget(void); if (![GTMAppKitUnitTestingUtilities isScreenSaverActive]) { GTMCarbonEventDispatcherHandler *dispatcher = [GTMCarbonEventDispatcherHandler sharedEventDispatcherHandler]; - STAssertNotNil(dispatcher, @"Unable to acquire singleton"); + XCTAssertNotNil(dispatcher, @"Unable to acquire singleton"); UInt32 keyMods = (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask); GTMCarbonHotKey *hotKey @@ -340,15 +335,14 @@ extern EventTargetRef GetApplicationEventTarget(void); action:@selector(hitExceptionalHotKey:) userInfo:self whenPressed:YES]; - STAssertNotNil(hotKey, @"Unable to create hotkey"); + XCTAssertNotNil(hotKey, @"Unable to create hotkey"); // Post the hotkey combo to the event queue. If everything is working // correctly hitHotKey: should get called, and hotKeyHit_ will be set for // us. We run the event loop for a set amount of time waiting for this to // happen. [GTMAppKitUnitTestingUtilities postTypeCharacterEvent:'g' modifiers:keyMods]; - [GTMUnitTestDevLog expectString:@"Exception fired in hotkey: foo (bar)"]; - STAssertTrue([NSApp gtm_runUpToSixtySecondsWithContext:hotKeyHit_], nil); + XCTAssertTrue([NSApp gtm_runUpToSixtySecondsWithContext:hotKeyHit_]); [dispatcher unregisterHotKey:hotKey]; } } @@ -374,11 +368,9 @@ extern EventTargetRef GetApplicationEventTarget(void); carbonMods |= keyMap[j].carbonKey_; } } - STAssertEquals(GTMCocoaToCarbonKeyModifiers(cocoaMods), carbonMods, nil); - STAssertEquals(GTMCarbonToCocoaKeyModifiers(carbonMods), cocoaMods, nil); + XCTAssertEqual(GTMCocoaToCarbonKeyModifiers(cocoaMods), carbonMods); + XCTAssertEqual(GTMCarbonToCocoaKeyModifiers(carbonMods), cocoaMods); } } - @end - diff --git a/AppKit/GTMDelegatingTableColumn.h b/AppKit/GTMDelegatingTableColumn.h deleted file mode 100644 index 63abf20..0000000 --- a/AppKit/GTMDelegatingTableColumn.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// GTMDelegatingTableColumn.h -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Cocoa/Cocoa.h> -#import "GTMDefines.h" - -// NOTE: If you're using the 10.5 SDK, just use the new delegate method: -// tableView:dataCellForTableColumn:row: - -@interface GTMDelegatingTableColumn : NSTableColumn -// no instance state or new method, it will just invoke the tableview's delegate -// w/ the method below. -@end - -// the method delegated to -@interface NSObject (GTMDelegatingTableColumnDelegate) -- (id)gtm_tableView:(NSTableView *)tableView - dataCellForTableColumn:(NSTableColumn *)tableColumn - row:(NSInteger)row; -@end diff --git a/AppKit/GTMDelegatingTableColumn.m b/AppKit/GTMDelegatingTableColumn.m deleted file mode 100644 index 0bd2371..0000000 --- a/AppKit/GTMDelegatingTableColumn.m +++ /dev/null @@ -1,42 +0,0 @@ -// -// GTMDelegatingTableColumn.m -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMDelegatingTableColumn.h" - -@implementation GTMDelegatingTableColumn -- (id)dataCellForRow:(NSInteger)row { - id dataCell = nil; - id delegate = [[self tableView] delegate]; - BOOL sendSuper = YES; - if (delegate) { - if ([delegate respondsToSelector:@selector(gtm_tableView:dataCellForTableColumn:row:)]) { - - dataCell = [delegate gtm_tableView:[self tableView] - dataCellForTableColumn:self - row:row]; - sendSuper = NO; - } else { - _GTMDevLog(@"tableView delegate didn't implement gtm_tableView:dataCellForTableColumn:row:"); - } - } - if (sendSuper) { - dataCell = [super dataCellForRow:row]; - } - return dataCell; -} -@end diff --git a/AppKit/GTMFadeTruncatingTextFieldCellTest.m b/AppKit/GTMFadeTruncatingTextFieldCellTest.m index c201d27..a3098d8 100644 --- a/AppKit/GTMFadeTruncatingTextFieldCellTest.m +++ b/AppKit/GTMFadeTruncatingTextFieldCellTest.m @@ -20,7 +20,6 @@ #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 #import "GTMSenTestCase.h" -#import "GTMAppKit+UnitTesting.h" #import "GTMFadeTruncatingTextFieldCell.h" @interface GTMFadeTruncatingTextFieldCellTest : GTMTestCase @@ -35,14 +34,7 @@ autorelease]]; [field setStringValue:@"A very long string that won't fit"]; - GTMAssertObjectImageEqualToImageNamed(field, - @"GTMFadeTruncatingTextFieldCellTest1", - nil); - [field setStringValue:@"A short string"]; - GTMAssertObjectImageEqualToImageNamed(field, - @"GTMFadeTruncatingTextFieldCellTest2", - nil); // Dark background, light text (force the background to draw (which is odd // for a text cell), but this is to make sure the support for light on dark @@ -52,13 +44,7 @@ [field setBackgroundColor:[NSColor blackColor]]; [field setStringValue:@"A very long string that won't fit"]; - GTMAssertObjectImageEqualToImageNamed(field, - @"GTMFadeTruncatingTextFieldCellTest3", - nil); [field setStringValue:@"A short string"]; - GTMAssertObjectImageEqualToImageNamed(field, - @"GTMFadeTruncatingTextFieldCellTest4", - nil); } - (void)testFadeCellLeftAndRight { @@ -71,36 +57,17 @@ [field setCell:cell]; [field setStringValue:@"Fade on both left and right AAAA"]; - GTMAssertObjectImageEqualToImageNamed(field, - @"GTMFadeTruncatingTextFieldCellTest5", - nil); - [field setStringValue:@"Fade on left only A"]; - GTMAssertObjectImageEqualToImageNamed(field, - @"GTMFadeTruncatingTextFieldCellTest6", - nil); - [field setStringValue:@"A short string"]; - GTMAssertObjectImageEqualToImageNamed(field, - @"GTMFadeTruncatingTextFieldCellTest2", - nil); - // Test the case where the number of characters to truncate from head is not // specified. This should cause the string to be drawn centered. [cell setDesiredCharactersToTruncateFromHead:0]; [field setStringValue:@"Fade on both left and right AAAA"]; - GTMAssertObjectImageEqualToImageNamed(field, - @"GTMFadeTruncatingTextFieldCellTest7", - nil); - // Border with a solid background color. [field setTextColor:[NSColor whiteColor]]; [field setDrawsBackground:YES]; [field setBackgroundColor:[NSColor blackColor]]; [field setBordered:YES]; - GTMAssertObjectImageEqualToImageNamed(field, - @"GTMFadeTruncatingTextFieldCellTest8", - nil); } @end diff --git a/AppKit/GTMGetURLHandler.m b/AppKit/GTMGetURLHandler.m deleted file mode 100644 index a5f7c5d..0000000 --- a/AppKit/GTMGetURLHandler.m +++ /dev/null @@ -1,308 +0,0 @@ -// -// GTMGetURLHandler.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -// Add this class to your app to have get URL handled almost automatically for -// you. For each entry in your CFBundleURLTypes dictionaries, add a new -// key/object pair of GTMBundleURLClass/the name of the class you want -// to have handle the scheme(s). -// Then have that class respond to the class method: -// + (BOOL)gtm_openURL:(NSURL*)url -// and voila, it will just work. -// Note that in Debug mode we will do extensive testing to make sure that this -// is all hooked up correctly, and will spew out to the console if we -// find anything amiss. -// -// Example plist entry -// ... -// -// <key>CFBundleURLTypes</key> -// <array> -// <dict> -// <key>CFBundleURLName</key> -// <string>Google Suggestion URL</string> -// <key>GTMBundleURLClass</key> -// <string>GoogleSuggestURLHandler</string> -// <key>CFBundleURLSchemes</key> -// <array> -// <string>googlesuggest</string> -// <string>googlesuggestextreme</string> -// </array> -// </dict> -// </array> -// -// -// Example implementation -// @interface GoogleSuggestURLHandler -// @end -// @implementation GoogleSuggestURLHandler -// + (BOOL)gtm_openURL:(NSURL*)url { -// NSLog(@"%@", url); -// } -// @end - -#import <AppKit/AppKit.h> -#import "GTMNSAppleEventDescriptor+Foundation.h" -#import "GTMMethodCheck.h" - -static NSString *const kGTMBundleURLClassKey = @"GTMBundleURLClass"; -// A variety of constants Apple really should have defined somewhere to -// allow the compiler to find your typos. -static NSString *const kGTMCFBundleURLSchemesKey = @"CFBundleURLSchemes"; -static NSString *const kGTMCFBundleURLNameKey = @"CFBundleURLName"; -static NSString *const kGTMCFBundleTypeRoleKey = @"CFBundleTypeRole"; -static NSString *const kGTMCFBundleURLTypesKey = @"CFBundleURLTypes"; -static NSString *const kGTMCFBundleViewerRole = @"Viewer"; -static NSString *const kGTMCFBundleEditorRole = @"Editor"; - -// Set this macro elsewhere is you want to force the -// bundle checks on/off. They are nice for debugging -// problems, but shouldn't be required in a release version -// unless you are paranoid about your users messing with your -// Info.plist -#ifndef GTM_CHECK_BUNDLE_URL_CLASSES -#define GTM_CHECK_BUNDLE_URL_CLASSES DEBUG -#endif // GTM_CHECK_BUNDLE_URL_CLASSES - -@protocol GTMGetURLHandlerProtocol -+ (BOOL)gtm_openURL:(NSURL*)url; -@end - -@interface GTMGetURLHandler : NSObject { - NSArray *urlTypes_; -} -- (id)initWithTypes:(NSArray*)urlTypes; -- (void)getUrl:(NSAppleEventDescriptor *)event -withReplyEvent:(NSAppleEventDescriptor *)replyEvent; -- (void)addError:(OSStatus)error - withDescription:(NSString*)string - toDescriptor:(NSAppleEventDescriptor *)desc; -+ (id)handlerForBundle:(NSBundle *)bundle; -+ (void)getUrl:(NSAppleEventDescriptor *)event -withReplyEvent:(NSAppleEventDescriptor *)replyEvent; -@end - -@implementation GTMGetURLHandler -GTM_METHOD_CHECK(NSNumber, gtm_appleEventDescriptor); -GTM_METHOD_CHECK(NSString, gtm_appleEventDescriptor); - -+ (void)load { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSAppleEventManager *man = [NSAppleEventManager sharedAppleEventManager]; - [man setEventHandler:self - andSelector:@selector(getUrl:withReplyEvent:) - forEventClass:kInternetEventClass - andEventID:kAEGetURL]; - [pool drain]; -} - -+ (void)getUrl:(NSAppleEventDescriptor *)event -withReplyEvent:(NSAppleEventDescriptor *)replyEvent { - static GTMGetURLHandler *sHandler = nil; - if (!sHandler) { - NSBundle *bundle = [NSBundle mainBundle]; - sHandler = [GTMGetURLHandler handlerForBundle:bundle]; - if (sHandler) { - [sHandler retain]; - } - } - [sHandler getUrl:event withReplyEvent:replyEvent]; -} - -+ (id)handlerForBundle:(NSBundle *)bundle { - GTMGetURLHandler *handler = nil; - NSArray *urlTypes - = [bundle objectForInfoDictionaryKey:kGTMCFBundleURLTypesKey]; - if (urlTypes) { - handler = [[[GTMGetURLHandler alloc] initWithTypes:urlTypes] autorelease]; - } else { - // COV_NF_START - // Hard to test it if we don't have it. - _GTMDevLog(@"If you don't have CFBundleURLTypes in your plist, you may want" - @" to remove GTMGetURLHandler.m from your project"); - // COV_NF_END - } - return handler; -} - -- (id)initWithTypes:(NSArray*)urlTypes { - if ((self = [super init])) { - urlTypes_ = [urlTypes retain]; -#if GTM_CHECK_BUNDLE_URL_CLASSES - // Some debug handling to check to make sure we can handle the - // classes properly. We check here instead of at init in case some of the - // handlers are being handled by plugins or other imported code that are - // loaded after we have been initialized. - NSDictionary *urlType; - GTM_FOREACH_OBJECT(urlType, urlTypes_) { - NSString *className = [urlType objectForKey:kGTMBundleURLClassKey]; - if ([className length]) { - Class cls = NSClassFromString(className); - if (cls) { - if (![cls respondsToSelector:@selector(gtm_openURL:)]) { - _GTMDevLog(@"Class %@ for URL handler %@ " - @"(URL schemes: %@) doesn't respond to openURL:", - className, - [urlType objectForKey:kGTMCFBundleURLNameKey], - [urlType objectForKey:kGTMCFBundleURLSchemesKey]); - } - } else { - _GTMDevLog(@"Unable to get class %@ for URL handler %@ " - @"(URL schemes: %@)", - className, - [urlType objectForKey:kGTMCFBundleURLNameKey], - [urlType objectForKey:kGTMCFBundleURLSchemesKey]); - } - } else { - NSString *role = [urlType objectForKey:kGTMCFBundleTypeRoleKey]; - if ([role caseInsensitiveCompare:kGTMCFBundleViewerRole] == NSOrderedSame || - [role caseInsensitiveCompare:kGTMCFBundleEditorRole] == NSOrderedSame) { - _GTMDevLog(@"Missing %@ for URL handler %@ " - @"(URL schemes: %@)", - kGTMBundleURLClassKey, - [urlType objectForKey:kGTMCFBundleURLNameKey], - [urlType objectForKey:kGTMCFBundleURLSchemesKey]); - } - } - } -#endif // GTM_CHECK_BUNDLE_URL_CLASSES - } - return self; -} - -// COV_NF_START -// Singleton is never dealloc'd -- (void)dealloc { - [urlTypes_ release]; - [super dealloc]; -} -// COV_NF_END - - -- (NSURL*)extractURLFromEvent:(NSAppleEventDescriptor*)event - withReplyEvent:(NSAppleEventDescriptor *)replyEvent { - NSAppleEventDescriptor *desc - = [event paramDescriptorForKeyword:keyDirectObject]; - NSString *urlstring = [desc stringValue]; - NSURL *url = [NSURL URLWithString:urlstring]; - if (!url) { - // COV_NF_START - // Can't convince the OS to give me a bad URL - [self addError:errAECoercionFail - withDescription:@"Unable to extract url from key direct object." - toDescriptor:replyEvent]; - // COV_NF_END - } - return url; -} - -- (Class)getClassForScheme:(NSString *)scheme - withReplyEvent:(NSAppleEventDescriptor*)replyEvent { - NSDictionary *urlType; - Class cls = nil; - NSString *typeScheme = nil; - GTM_FOREACH_OBJECT(urlType, urlTypes_) { - NSArray *schemes = [urlType objectForKey:kGTMCFBundleURLSchemesKey]; - NSString *aScheme; - GTM_FOREACH_OBJECT(aScheme, schemes) { - if ([aScheme caseInsensitiveCompare:scheme] == NSOrderedSame) { - typeScheme = aScheme; - break; - } - } - if (typeScheme) { - break; - } - } - if (typeScheme) { - NSString *class = [urlType objectForKey:kGTMBundleURLClassKey]; - if (class) { - cls = NSClassFromString(class); - } - if (!cls) { - NSString *errorString - = [NSString stringWithFormat:@"Unable to instantiate class for " - @"%@:%@ for scheme:%@.", - kGTMBundleURLClassKey, class, typeScheme]; - [self addError:errAECorruptData - withDescription:errorString - toDescriptor:replyEvent]; - } else { - if (![cls respondsToSelector:@selector(gtm_openURL:)]) { - NSString *errorString - = [NSString stringWithFormat:@"Class %@:%@ for scheme:%@ does not" - @"respond to gtm_openURL:", - kGTMBundleURLClassKey, class, typeScheme]; - [self addError:errAECorruptData - withDescription:errorString - toDescriptor:replyEvent]; - cls = Nil; - } - } - } else { - // COV_NF_START - // Don't know how to force an URL that we don't respond to upon ourselves. - NSString *errorString - = [NSString stringWithFormat:@"Unable to find handler for scheme %@.", - scheme]; - [self addError:errAECorruptData - withDescription:errorString - toDescriptor:replyEvent]; - // COV_NF_END - - } - return cls; -} - -- (void)getUrl:(NSAppleEventDescriptor *)event -withReplyEvent:(NSAppleEventDescriptor *)replyEvent { - NSURL *url = [self extractURLFromEvent:event withReplyEvent:replyEvent]; - if (!url) { - return; - } - NSString *scheme = [url scheme]; - Class cls = [self getClassForScheme:scheme withReplyEvent:replyEvent]; - if (!cls) { - return; - } - BOOL wasGood = [cls gtm_openURL:url]; - if (!wasGood) { - NSString *errorString - = [NSString stringWithFormat:@"[%@ gtm_openURL:] failed to handle %@", - NSStringFromClass(cls), url]; - [self addError:errAEEventNotHandled - withDescription:errorString - toDescriptor:replyEvent]; - } -} - -- (void)addError:(OSStatus)error - withDescription:(NSString*)string - toDescriptor:(NSAppleEventDescriptor *)desc { - NSAppleEventDescriptor *errorDesc = nil; - if (error != noErr) { - NSNumber *errNum = [NSNumber numberWithLong:error]; - errorDesc = [errNum gtm_appleEventDescriptor]; - [desc setParamDescriptor:errorDesc forKeyword:keyErrorNumber]; - } - if (string) { - errorDesc = [string gtm_appleEventDescriptor]; - [desc setParamDescriptor:errorDesc forKeyword:keyErrorString]; - } -} -@end - diff --git a/AppKit/GTMGetURLHandlerTest.m b/AppKit/GTMGetURLHandlerTest.m deleted file mode 100644 index a639176..0000000 --- a/AppKit/GTMGetURLHandlerTest.m +++ /dev/null @@ -1,83 +0,0 @@ -// GTMGetURLHandlerTest.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMUnitTestDevLog.h" - -static BOOL sURLHandlerWasHit; - -@interface GTMGetURLHandlerBadClassWarning : NSObject -@end - -@implementation GTMGetURLHandlerBadClassWarning : NSObject -@end - -@interface GTMGetURLHandlerTest : GTMTestCase -@end - -@implementation GTMGetURLHandlerTest -- (BOOL)openURLString:(NSString *)url { - ProcessSerialNumber psn = { 0, kCurrentProcess }; - NSAppleEventDescriptor *currentProcess - = [NSAppleEventDescriptor descriptorWithDescriptorType:typeProcessSerialNumber - bytes:&psn - length:sizeof(ProcessSerialNumber)]; - NSAppleEventDescriptor *event - = [NSAppleEventDescriptor appleEventWithEventClass:kInternetEventClass - eventID:kAEGetURL - targetDescriptor:currentProcess - returnID:kAutoGenerateReturnID - transactionID:kAnyTransactionID]; - NSAppleEventDescriptor *keyDesc - = [NSAppleEventDescriptor descriptorWithString:url]; - [event setParamDescriptor:keyDesc forKeyword:keyDirectObject]; - OSStatus err = AESendMessage([event aeDesc], NULL, kAEWaitReply, 60); - return err == noErr ? YES : NO; -} - -+ (BOOL)gtm_openURL:(NSURL*)url { - sURLHandlerWasHit = !sURLHandlerWasHit; - return YES; -} - -- (void)testURLCall { - sURLHandlerWasHit = NO; - - [GTMUnitTestDevLogDebug expectPattern:@"Class GTMGetURLHandlerBadClassWarning " - @"for URL handler GTMGetURLHandlerBadClassURL .*"]; - [GTMUnitTestDevLogDebug expectPattern:@"Unable to get class " - @"GTMGetURLHandlerMissingClassWarning for URL handler " - @"GTMGetURLHandlerMissingClassURL .*"]; - [GTMUnitTestDevLogDebug expectPattern:@"Missing GTMBundleURLClass for URL handler " - @"GTMGetURLHandlerMissingHandlerURL .*"]; - STAssertTrue([self openURLString:@"gtmgeturlhandlertest://test.foo"], nil); - STAssertTrue(sURLHandlerWasHit, @"URL handler not called"); - - STAssertTrue([self openURLString:@"gtmgeturlhandlertest://test.foo"], nil); - STAssertFalse(sURLHandlerWasHit, @"URL handler not called 2"); - - // test the two URL schemes with bad entries - STAssertTrue([self openURLString:@"gtmgeturlhandlerbadclasstest://test.foo"], - nil); - - STAssertTrue([self openURLString:@"gtmgeturlhandlermissingclasstest://test.foo"], - nil); - - STAssertTrue([self openURLString:@"gtmgeturlhandlermissinghandlerurl://test.foo"], - nil); -} -@end diff --git a/AppKit/GTMGoogleSearch.h b/AppKit/GTMGoogleSearch.h deleted file mode 100644 index 06b8d51..0000000 --- a/AppKit/GTMGoogleSearch.h +++ /dev/null @@ -1,144 +0,0 @@ -// -// GTMGoogleSearch.h -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> - -// Key for Info.plist for default global search args -#define GTMGoogleSearchClientAppArgsKey @"GTMGoogleSearchClientAppArgs" - -// Types to pass in to searchForURL:ofType:arguments -// and performQuery:ofType:arguments -#define GTMGoogleSearchFroogle @"products" -#define GTMGoogleSearchGroups @"groups" -#define GTMGoogleSearchImages @"images" -#define GTMGoogleSearchLocal @"local" -#define GTMGoogleSearchNews @"news" -#define GTMGoogleSearchFinance @"finance" -#define GTMGoogleSearchBooks @"books" -#define GTMGoogleSearchWeb @"search" - -// iPhone doesn't support distributed notifications, so this controls whether -// or not we enable them in this class. -#define GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS GTM_MACOS_SDK - -// Composes URLs and searches for google properties in the correct language -// and domain. -@interface GTMGoogleSearch : NSObject { - // the cached values - NSString *allAppsCachedDomain_; - NSString *allAppsCachedLanguage_; - NSString *curAppCachedDomain_; - NSString *curAppCachedLanguage_; - NSDictionary *globalSearchArguments_; -} - -// -// +sharedInstance -// -// fetches the common shared object for accessing this users preference -// -+ (GTMGoogleSearch*)sharedInstance; - -// -// searchURLFor:ofType:arguments: -// -// creates a search url of type |type| for |queryText| using the user's -// preferred domain and language settings. |args| is a set of arguments -// that will be added into your query, and you can use it to complement -// or override settings stored in globalSearchArguments. -// example dictionary to do an I'm feeling lucky search would be: -// [NSDictionary dictionaryWithObject:@"1" key:@"btnI"]; -// If queryText is nil, no query will be put in. -// Arguments passed in in args must be properly URL escaped. -// If you want to remove one of the arguments that will be included in the -// global search arguments, set the object for the key you want to remove to -// [NSNull null]. -- (NSString*)searchURLFor:(NSString *)queryText - ofType:(NSString *)type - arguments:(NSDictionary *)args; - -// -// performQuery:ofType:arguments: -// -// Asks NSWorkspace to open up a query for an url created by passing -// the args to searchURLFor:ofType:arguments: above. -// -- (BOOL)performQuery:(NSString *)queryText - ofType:(NSString *)type - arguments:(NSDictionary *)localArgs; - -// Global search arguments are initially picked up from your main bundle -// info.plist if there is a dictionary entry at the top level with the key -// "GTMGoogleSearchClientAppArgs". This dictionary should be a map of strings -// to strings where they are the args you want passed to all Google searches. -// You can override these with your localArgs when you actually perform the -// search if you wish. -// This arguments will affect all searches. Arguments must be properly URL -// escaped. -- (void)setGlobalSearchArguments:(NSDictionary *)args; - -// Returns the global search arguments. -- (NSDictionary *)globalSearchArguments; - -// -// -preferredDomainAndLanguage:areCurrentAppOnly -// -// fetches the user's preferred domain and language, and whether the values -// that were grabbed were from the anyapplication domain, or from the current -// application domain. You may pass in nil for |language| if you don't want -// a language back, and you may pass in NULL for |currentAppOnly| if you don't -// care about where it came from. -// -- (void)preferredDomain:(NSString **)domain - language:(NSString **)language - areCurrentAppOnly:(BOOL*)currentAppOnly; - -// -// -updatePreferredDomain:language:currentApplicationOnly: -// -// updated the users preferred domain and language to copies of |domain| and -// |language| respectively. |domain| can't be nil or an empty string, but -// |language| can't be nil, but can be an empty string to signify no language -// pref. If |currentAppOnly| is YES, only updates the preferred settings for the -// current app, otherwise updates them for all apps. -// -- (void)updatePreferredDomain:(NSString *)domain - language:(NSString *)language - currentApplicationOnly:(BOOL)currentAppOnly; - -// -// -clearPreferredDomainAndLanguageForCurrentApplication -// -// clears the setting for the current applications preferred domain and -// language so future fetches will get the system level ones. -// -- (void)clearPreferredDomainAndLanguageForCurrentApplication; - -// -// -clearPreferredDomainAndLanguageForAllApps -// -// clears the "AllApps" setting for preferred domain and language so future -// fetches end up having to use the default. Odds are this is only -// used by the unittests. -// NOTE: this doesn't do anything to any setting that's set in an individual -// apps preferences, so those settings will still override inplace of the -// "all apps" value (or default). -// -- (void)clearPreferredDomainAndLanguageForAllApps; - -@end diff --git a/AppKit/GTMGoogleSearch.m b/AppKit/GTMGoogleSearch.m deleted file mode 100644 index 9384ade..0000000 --- a/AppKit/GTMGoogleSearch.m +++ /dev/null @@ -1,543 +0,0 @@ -// -// GTMGoogleSearch.m -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMGoogleSearch.h" -#import "GTMDefines.h" - -#if GTM_IPHONE_SDK -#import <UIKit/UIKit.h> -#else -#import <AppKit/AppKit.h> -#endif // GTM_IPHONE_SDK - -typedef struct { - NSString *language; - NSString *country; - // we don't include a language, we'll use what we get from the OS - NSString *defaultDomain; -} LanguageDefaultInfo; - -// -// this is a seed mapping from languages to domains for google search. -// this doesn't have to be complete, as it is just a seed. -// -// -static LanguageDefaultInfo kLanguageListDefaultMappingTable[] = { - // order is important, first match is taken - // if country is |nil|, then only language has to match - { @"en", @"US", @"com" }, // english - united states - { @"en", @"GB", @"co.uk" }, // english - united kingdom - { @"en", @"CA", @"ca" }, // english - canada - { @"en", @"AU", @"com.au" }, // english - australia - { @"en", @"NZ", @"com" }, // english - new zealand - { @"en", @"IE", @"ie" }, // english - ireland - { @"en", @"IN", @"co.in" }, // english - india - { @"en", @"PH", @"com.ph" }, // english - philippines - { @"en", @"SG", @"com.sg" }, // english - singapore - { @"en", @"ZA", @"co.za" }, // english - south africa - { @"en", @"IL", @"co.il" }, // english - israel - { @"en", nil , @"com" }, // english (catch all) - { @"fr", @"CA", @"ca" }, // french - canada - { @"fr", @"CH", @"ch" }, // french - switzerland - { @"fr", nil , @"fr" }, // france - { @"it", nil , @"it" }, // italy - { @"de", @"AT", @"at" }, // german - austria - { @"de", nil , @"de" }, // germany - { @"es", @"MX", @"com.mx" }, // spanish - mexico - { @"es", @"AR", @"com.ar" }, // spanish - argentina - { @"es", @"CL", @"cl" }, // spanish - chile - { @"es", @"CO", @"com.co" }, // spanish - colombia - { @"es", @"PE", @"com.pe" }, // spanish - peru - { @"es", @"VE", @"co.ve" }, // venezuela - { @"es", nil , @"es" }, // spain - { @"zh", @"TW", @"com.tw" }, // taiwan - { @"zh", @"HK", @"com.hk" }, // hong kong - { @"zh", nil , @"cn" }, // chinese (catch all) - { @"ja", nil , @"co.jp" }, // japan - { @"ko", nil , @"co.kr" }, // korea - { @"nl", @"BE", @"be" }, // dutch - belgium - { @"nl", nil , @"nl" }, // (dutch) netherlands - { @"ru", nil , @"ru" }, // russia - { @"pt", @"BZ", @"com.br"}, // portuguese - brazil - { @"pt", nil , @"pt" }, // portugal - { @"sv", nil , @"se" }, // sweden - { @"nn", nil , @"no" }, // norway (two variants) - { @"nb", nil , @"no" }, // norway (two variants) - { @"da", nil , @"dk" }, // denmark - { @"fi", nil , @"fi" }, // finland - { @"bg", nil , @"bg" }, // bulgaria - { @"hr", nil , @"hr" }, // croatia - { @"cx", nil , @"cz" }, // czech republic - { @"el", nil , @"gr" }, // greece - { @"hu", nil , @"co.hu" }, // hungary - { @"ro", nil , @"ro" }, // romania - { @"sk", nil , @"sk" }, // slovakia - { @"sl", nil , @"si" }, // slovenia - { @"tr", nil , @"com.tr" }, // turkey - { @"my", nil , @"com.my" }, // malaysia - { @"th", nil , @"co.th" }, // thailand - { @"uk", nil , @"com.ua" }, // ukraine - { @"vi", nil , @"com.vn" }, // vietnam - { @"af", nil , @"com.za" }, // south africa (afrikaans) - { @"hi", nil , @"co.in" }, // india (hindi) - { @"id", nil , @"co.id" }, // indonesia - { @"pl", nil , @"pl" }, // poland -}; - -// the notification we use for syncing up instances in different processes -#if GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS -static NSString *const kNotificationName - = @"com.google.GoogleSearchAllApps.prefsWritten"; -#endif - -// this is the bundle id we use for the pref file used for all apps -static CFStringRef const kAllAppsBuildIdentifier - = CFSTR("com.google.GoogleSearchAllApps"); - -static CFStringRef const kPreferredDomainPrefKey - = CFSTR("com.google.PreferredDomain"); -static CFStringRef const kPreferredLanguagePrefKey - = CFSTR("com.google.PreferredLanguage"); - -static NSString *const kDefaultDomain = @"com"; -static NSString *const kDefaultLanguage = @"en"; - -#define SEARCH_URL_TEMPLATE @"http://www.google.%@/%@?%@" - -@interface GTMGoogleSearch (PrivateMethods) -- (void)defaultDomain:(NSString**)preferedDomain - language:(NSString**)preferredLanguage; -- (void)reloadAllAppCachedValues:(NSNotification*)notification; -- (void)updateAllAppsDomain:(NSString*)domain language:(NSString*)language; -@end - - -@implementation GTMGoogleSearch - -+ (GTMGoogleSearch *)sharedInstance { - static GTMGoogleSearch *obj; - if (!obj) { - obj = [[self alloc] init]; - } - return obj; -} - -- (id)init { - self = [super init]; - if (self != nil) { -#if GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS - // register for the notification - NSDistributedNotificationCenter *distCenter = - [NSDistributedNotificationCenter defaultCenter]; - [distCenter addObserver:self - selector:@selector(reloadAllAppCachedValues:) - name:kNotificationName - object:nil]; -#endif // GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS - // load the allApps value - [self reloadAllAppCachedValues:nil]; - - // load the cur app value - CFStringRef domain - = CFPreferencesCopyValue(kPreferredDomainPrefKey, - kCFPreferencesCurrentApplication, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - CFStringRef lang = CFPreferencesCopyValue(kPreferredLanguagePrefKey, - kCFPreferencesCurrentApplication, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - - // make sure we got values for both and domain is not empty - if (domain && CFStringGetLength(domain) == 0) { - CFRelease(domain); - domain = nil; - if (lang) { - CFRelease(lang); - lang = nil; - } - } - - curAppCachedDomain_ = (NSString *)domain; - curAppCachedLanguage_ = (NSString *)lang; - - NSBundle *bundle = [NSBundle mainBundle]; - - NSDictionary *appArgs - = [bundle objectForInfoDictionaryKey:GTMGoogleSearchClientAppArgsKey]; - globalSearchArguments_ = [appArgs retain]; - } - return self; -} - -#if GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS -- (void)finalize { - [[NSDistributedNotificationCenter defaultCenter] removeObserver:self]; - [super finalize]; -} -#endif // GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS - -- (void)dealloc { -#if GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS - [[NSDistributedNotificationCenter defaultCenter] removeObserver:self]; -#endif // GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS - [allAppsCachedDomain_ release]; - [allAppsCachedLanguage_ release]; - [curAppCachedDomain_ release]; - [curAppCachedLanguage_ release]; - [globalSearchArguments_ release]; - [super dealloc]; -} - -- (void)preferredDomain:(NSString **)domain - language:(NSString**)language - areCurrentAppOnly:(BOOL*)currentAppOnly { - BOOL localCurrentAppOnly = YES; - NSString *localDomain = curAppCachedDomain_; - NSString *localLanguage = curAppCachedLanguage_; - - // if either one wasn't there, drop both, and use any app if we can - if (!localDomain || !localLanguage) { - localCurrentAppOnly = NO; - localDomain = allAppsCachedDomain_; - localLanguage = allAppsCachedLanguage_; - - // if we didn't get anything from the prefs, go with the defaults - if (!localDomain || !localLanguage) { - // if either one wasn't there, drop both, and use defaults - [self defaultDomain:&localDomain language:&localLanguage]; - } - } - if (!localDomain || !localLanguage) { - _GTMDevLog(@"GTMGoogleSearch: Failed to get the preferred domain/language " - @"from prefs or defaults"); - } - if (language) { - *language = [[localLanguage retain] autorelease]; - } - if (domain) { - *domain = [[localDomain retain] autorelease]; - } - if (currentAppOnly) { - *currentAppOnly = localCurrentAppOnly; - } -} - -- (void)updatePreferredDomain:(NSString*)domain - language:(NSString*)language - currentApplicationOnly:(BOOL)currentAppOnly { - // valid inputs? - if (!domain || ![domain length] || !language) { - return; - } - - if (currentAppOnly) { - // if they are the same, don't do anything - if ((domain == nil && curAppCachedDomain_ == nil && - language == nil && curAppCachedLanguage_ == nil) || - ([domain isEqualToString:curAppCachedDomain_] && - [language isEqualToString:curAppCachedLanguage_])) { - return; - } - - // save them out - CFPreferencesSetValue(kPreferredDomainPrefKey, - (CFStringRef)domain, - kCFPreferencesCurrentApplication, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - CFPreferencesSetValue(kPreferredLanguagePrefKey, - (CFStringRef)language, - kCFPreferencesCurrentApplication, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - CFPreferencesSynchronize(kCFPreferencesCurrentApplication, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - // update our locals - [curAppCachedDomain_ release]; - [curAppCachedLanguage_ release]; - curAppCachedDomain_ = [domain copy]; - curAppCachedLanguage_ = [language copy]; - } else { - // Set the "any application" values - [self updateAllAppsDomain:domain language:language]; - - // Clear the current application values (if there were any) - [self clearPreferredDomainAndLanguageForCurrentApplication]; - } -} - -- (void)clearPreferredDomainAndLanguageForCurrentApplication { - // flush what's in the file - CFPreferencesSetValue(kPreferredDomainPrefKey, - NULL, - kCFPreferencesCurrentApplication, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - CFPreferencesSetValue(kPreferredLanguagePrefKey, - NULL, - kCFPreferencesCurrentApplication, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - CFPreferencesSynchronize(kCFPreferencesCurrentApplication, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - // clear our locals - [curAppCachedDomain_ release]; - [curAppCachedLanguage_ release]; - curAppCachedDomain_ = nil; - curAppCachedLanguage_ = nil; -} - -- (void)clearPreferredDomainAndLanguageForAllApps { - // nil/nil to clear things out, this will also update our cached values. - [self updateAllAppsDomain:nil language:nil]; -} - -- (NSDictionary *)globalSearchArguments { - return globalSearchArguments_; -} - -- (void)setGlobalSearchArguments:(NSDictionary *)args { - [globalSearchArguments_ autorelease]; - globalSearchArguments_ = [args copy]; -} - -- (NSString*)searchURLFor:(NSString*)queryText - ofType:(NSString*)type - arguments:(NSDictionary *)localArgs { - if (!type) { - return nil; - } - - NSString *language; - NSString *domain; - [self preferredDomain:&domain - language:&language - areCurrentAppOnly:NULL]; - - NSMutableDictionary *args - = [NSMutableDictionary dictionaryWithObjectsAndKeys: - @"UTF-8", @"ie", - @"UTF-8", @"oe", - language, @"hl", - nil]; - if (queryText) { - [args setObject:queryText forKey:@"q"]; - } - - NSDictionary *globalSearchArgs = [self globalSearchArguments]; - if (globalSearchArgs) { - [args addEntriesFromDictionary:globalSearchArgs]; - } - if (localArgs) { - [args addEntriesFromDictionary:localArgs]; - } - - NSMutableArray *clientArgs = [NSMutableArray array]; - NSString *key; - NSNull *nsNull = [NSNull null]; - GTM_FOREACH_KEY(key, args) { - NSString *object = [args objectForKey:key]; - if (![object isEqual:nsNull]) { -#if DEBUG - // In debug we check key and object for things that should be escaped. - // Note that percent is not in there because escaped strings will have - // percents in them - NSCharacterSet *cs = [NSCharacterSet characterSetWithCharactersInString: - @"!*'();:@&=+$,/?#[] "]; - NSRange range = [key rangeOfCharacterFromSet:cs]; - if (range.location != NSNotFound) { - _GTMDevLog(@"Unescaped string %@ in argument pair {%@, %@} in -[%@ %@]", - key, key, object, [self class], NSStringFromSelector(_cmd)); - } - range = [object rangeOfCharacterFromSet:cs]; - if (range.location != NSNotFound) { - _GTMDevLog(@"Unescaped string %@ in argument pair {%@,%@ } in -[%@ %@]", - object, key, object, [self class], - NSStringFromSelector(_cmd)); - } -#endif // DEBUG - NSString *arg = [NSString stringWithFormat:@"%@=%@", key, object]; - [clientArgs addObject:arg]; - } - } - NSString *clientArg = [clientArgs componentsJoinedByString:@"&"]; - NSString *url = [NSString stringWithFormat:SEARCH_URL_TEMPLATE, - domain, type, clientArg]; - return url; -} - -- (BOOL)performQuery:(NSString*)queryText - ofType:(NSString *)type - arguments:(NSDictionary *)localArgs { - BOOL success = NO; - NSString *urlString = [self searchURLFor:queryText - ofType:type - arguments:localArgs]; - if (urlString) { - NSURL *url = [NSURL URLWithString:urlString]; - if (url) { -#if GTM_IPHONE_SDK - success = [[UIApplication sharedApplication] openURL:url]; -#else // GTM_IPHONE_SDK - success = [[NSWorkspace sharedWorkspace] openURL:url]; -#endif // GTM_IPHONE_SDK - } - } - return success; -} - -@end - - -@implementation GTMGoogleSearch (PrivateMethods) - -- (void)defaultDomain:(NSString**)preferredDomain - language:(NSString**)preferredLanguage { - // must have both - if (!preferredDomain || !preferredLanguage) { - return; - } - - // make sure they are clear to start - *preferredDomain = nil; - *preferredLanguage = nil; - - // loop over their language list trying to find something we have in - // out default table. - - NSUserDefaults* defs = [NSUserDefaults standardUserDefaults]; - NSArray* languages = [defs objectForKey:@"AppleLanguages"]; - // the current locale is only based on what languages the running apps is - // localized to, so we stick that at the end in case we weren't able to - // find anything else as a match, we'll match that. - languages = - [languages arrayByAddingObject:[[NSLocale currentLocale] localeIdentifier]]; - - NSEnumerator *enumerator = [languages objectEnumerator]; - NSString *localeIdentifier; - while ((localeIdentifier = [enumerator nextObject])) { - NSDictionary *localeParts - = [NSLocale componentsFromLocaleIdentifier:localeIdentifier]; - NSString *localeLanguage = [localeParts objectForKey:NSLocaleLanguageCode]; - // we don't use NSLocaleScriptCode for now - NSString *localeCountry = [localeParts objectForKey:NSLocaleCountryCode]; - - LanguageDefaultInfo *scan = kLanguageListDefaultMappingTable; - LanguageDefaultInfo *end = (scan + (sizeof(kLanguageListDefaultMappingTable) - / sizeof(LanguageDefaultInfo))); - // find a match - // check language, and if country is not nil, check that - for ( ; scan < end ; ++scan) { - if ([localeLanguage isEqualToString:scan->language] && - (!(scan->country) || [localeCountry isEqualToString:scan->country])) { - *preferredDomain = scan->defaultDomain; - *preferredLanguage = localeLanguage; - return; // out of here - } - } - } - - *preferredDomain = kDefaultDomain; - *preferredLanguage = kDefaultLanguage; -} - -// -reloadAllAppCachedValues: -// -- (void)reloadAllAppCachedValues:(NSNotification*)notification { - // drop the old... - [allAppsCachedDomain_ release]; - [allAppsCachedLanguage_ release]; - allAppsCachedDomain_ = nil; - allAppsCachedLanguage_ = nil; - - // load the new - CFPreferencesSynchronize(kAllAppsBuildIdentifier, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - CFStringRef domain = CFPreferencesCopyValue(kPreferredDomainPrefKey, - kAllAppsBuildIdentifier, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - CFStringRef lang = CFPreferencesCopyValue(kPreferredLanguagePrefKey, - kAllAppsBuildIdentifier, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - - // make sure we got values for both and domain is not empty - if (domain && CFStringGetLength(domain) == 0) { - CFRelease(domain); - domain = nil; - if (lang) { - CFRelease(lang); - lang = nil; - } - } - - allAppsCachedDomain_ = (NSString *)domain; - allAppsCachedLanguage_ = (NSString *)lang; -} - -// -updateAllAppsDomain:language: -// -- (void)updateAllAppsDomain:(NSString*)domain language:(NSString*)language { - // domain and language can be nil to clear the values - - // if they are the same, don't do anything - if ((domain == nil && allAppsCachedDomain_ == nil && - language == nil && allAppsCachedLanguage_ == nil) || - ([domain isEqualToString:allAppsCachedDomain_] && - [language isEqualToString:allAppsCachedLanguage_])) { - return; - } - - // write it to the file - CFPreferencesSetValue(kPreferredDomainPrefKey, - (CFStringRef)domain, - kAllAppsBuildIdentifier, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - CFPreferencesSetValue(kPreferredLanguagePrefKey, - (CFStringRef)language, - kAllAppsBuildIdentifier, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - CFPreferencesSynchronize(kAllAppsBuildIdentifier, - kCFPreferencesCurrentUser, - kCFPreferencesAnyHost); - - // update our values - [allAppsCachedDomain_ release]; - [allAppsCachedLanguage_ release]; - allAppsCachedDomain_ = [domain copy]; - allAppsCachedLanguage_ = [language copy]; - -#if GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS - // NOTE: we'll go ahead and reload when this comes back to ourselves since - // there is a race here if two folks wrote at about the same time. - NSDistributedNotificationCenter *distCenter = - [NSDistributedNotificationCenter defaultCenter]; - [distCenter postNotificationName:kNotificationName - object:nil - userInfo:nil]; -#endif // GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS -} - -@end diff --git a/AppKit/GTMGoogleSearchTest.m b/AppKit/GTMGoogleSearchTest.m deleted file mode 100644 index 45f7e66..0000000 --- a/AppKit/GTMGoogleSearchTest.m +++ /dev/null @@ -1,208 +0,0 @@ -// -// GTMGoogleSearchTest.m -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMGoogleSearch.h" -#import "GTMSenTestCase.h" -#import "GTMUnitTestDevLog.h" -#import <unistd.h> - -@interface GTMGoogleSearchTest : GTMTestCase -@end - -@implementation GTMGoogleSearchTest - -- (void)testSearches { - typedef struct { - NSString *type; - NSString *expectedPrefix; - } TestSearchDesc; - static TestSearchDesc testSearches[] = { - { GTMGoogleSearchFroogle, @"http://www.google.xxx/products?" }, - { GTMGoogleSearchGroups, @"http://www.google.xxx/groups?" }, - { GTMGoogleSearchImages, @"http://www.google.xxx/images?"}, - { GTMGoogleSearchLocal, @"http://www.google.xxx/local?"}, - { GTMGoogleSearchNews, @"http://www.google.xxx/news?"}, - { GTMGoogleSearchFinance, @"http://www.google.xxx/finance?"}, - { GTMGoogleSearchBooks, @"http://www.google.xxx/books?"}, - { GTMGoogleSearchWeb, @"http://www.google.xxx/search?"}, - }; - - GTMGoogleSearch *googleSearch = [GTMGoogleSearch sharedInstance]; - STAssertNotNil(googleSearch, nil); - - // force the current app values so we aren't at the mercy of the - // global setting the users locale. - [googleSearch updatePreferredDomain:@"xxx" - language:@"yyy" - currentApplicationOnly:TRUE]; - - size_t count = sizeof(testSearches) / sizeof(testSearches[0]); - NSDictionary *globalArgs - = [NSDictionary dictionaryWithObject:@"f" forKey:@"foo"]; - [googleSearch setGlobalSearchArguments:globalArgs]; - NSDictionary *args = [NSDictionary dictionaryWithObject:@"Baba" - forKey:@"BaR"]; - NSString *expectedStrings[] = { - @"oe=UTF-8", @"hl=yyy", @"q=Foobar", - @"foo=f", @"ie=UTF-8", @"BaR=Baba" - }; - for (size_t i = 0; i < count; i++) { - // test building the url - NSString *urlString = [googleSearch searchURLFor:@"Foobar" - ofType:testSearches[i].type - arguments:args]; - STAssertTrue([urlString hasPrefix:testSearches[i].expectedPrefix], - @"Bad URL? URL:%@ Expected Prefix:%@", - urlString, testSearches[i].expectedPrefix); - for (size_t j = 0; - j < sizeof(expectedStrings) / sizeof(expectedStrings[0]); - ++j) { - STAssertGreaterThan([urlString rangeOfString:expectedStrings[j]].length, - (NSUInteger)0, @"URL: %@ expectedString: %@", - urlString, expectedStrings[j]); - } - } - - // clear what we just set for this test - [googleSearch setGlobalSearchArguments:nil]; - [googleSearch clearPreferredDomainAndLanguageForCurrentApplication]; -} - -- (void)testBadInputs { - GTMGoogleSearch *googleSearch = [GTMGoogleSearch sharedInstance]; - STAssertNotNil(googleSearch, nil); - NSDictionary *args = [NSDictionary dictionaryWithObject:@"Ba!ba" - forKey:@"Ba=R"]; - [GTMUnitTestDevLogDebug expectString: - @"Unescaped string Foo bar in argument pair {q,Foo bar } " - @"in -[GTMGoogleSearch searchURLFor:ofType:arguments:]"]; - [GTMUnitTestDevLogDebug expectString: - @"Unescaped string Ba=R in argument pair {Ba=R, Ba!ba} " - @"in -[GTMGoogleSearch searchURLFor:ofType:arguments:]"]; - [GTMUnitTestDevLogDebug expectString: - @"Unescaped string Ba!ba in argument pair {Ba=R,Ba!ba } " - @"in -[GTMGoogleSearch searchURLFor:ofType:arguments:]"]; - NSString *urlString = [googleSearch searchURLFor:@"Foo bar" - ofType:GTMGoogleSearchFroogle - arguments:args]; - STAssertNotNil(urlString, nil); -} - -- (void)testPreferredDefaults { - GTMGoogleSearch *googleSearch = [GTMGoogleSearch sharedInstance]; - STAssertNotNil(googleSearch, nil); - - // hey, we're a unit test, so start by blowing away what we have at the - // app level. - [googleSearch clearPreferredDomainAndLanguageForCurrentApplication]; - - // in theory, we could fetch now and save off what we get to reset at the - // end of this, but we can't tell if that was an "all apps" setting, or if - // it was the default, so...hey, we're a unit test, we'll just stomp what's - // there and clear it out when done... - [googleSearch clearPreferredDomainAndLanguageForAllApps]; - - // make sure the individual accessors work... - - // since they system level default can be set by any app, we just have to - // check for non nil here (also the users locale could control what - // we get if nothing is set). - NSString *domain; - NSString *lang; - // now do a detailed check... - BOOL areCurrentAppOnly = YES; - [googleSearch preferredDomain:&domain - language:&lang - areCurrentAppOnly:&areCurrentAppOnly]; - // should get something for defaults... - STAssertNotNil(domain, nil); - STAssertNotNil(lang, nil); - STAssertFalse(areCurrentAppOnly, nil); - - // test it for "all apps"... - [googleSearch updatePreferredDomain:@"domain" - language:@"lang" - currentApplicationOnly:NO]; - [googleSearch preferredDomain:&domain - language:&lang - areCurrentAppOnly:&areCurrentAppOnly]; - STAssertEqualObjects(domain, @"domain", nil); - STAssertEqualObjects(lang, @"lang", nil); - STAssertFalse(areCurrentAppOnly, nil); - - // test it for this app... - [googleSearch updatePreferredDomain:@"domainThisApp" - language:@"langThisApp" - currentApplicationOnly:YES]; - [googleSearch preferredDomain:&domain - language:&lang - areCurrentAppOnly:&areCurrentAppOnly]; - STAssertEqualObjects(domain, @"domainThisApp", nil); - STAssertEqualObjects(lang, @"langThisApp", nil); - STAssertTrue(areCurrentAppOnly, nil); - - // clear what we just set for this app - [googleSearch clearPreferredDomainAndLanguageForCurrentApplication]; - - // should get back what we set for all apps - [googleSearch preferredDomain:&domain - language:&lang - areCurrentAppOnly:&areCurrentAppOnly]; - STAssertEqualObjects(domain, @"domain", nil); - STAssertEqualObjects(lang, @"lang", nil); - STAssertFalse(areCurrentAppOnly, nil); -#if GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS - // We don't test launching other tasks on the phone since this isn't a valid - // case until we can support real multiple tasks on the phone. - - // try changing the value directly in the plist file (as if another app had - // done it) and sending our notification. - [[NSTask launchedTaskWithLaunchPath:@"/usr/bin/defaults" - arguments:[NSArray arrayWithObjects:@"write", - @"com.google.GoogleSearchAllApps", - @"{ \"com.google.PreferredDomain\" = xxx;" - @"\"com.google.PreferredLanguage\" = yyy; }", - nil]] waitUntilExit]; - // Sleep for a moment to let things flush - // (seen rarely as a problem on aharper's machine). - sleep(1); - NSDistributedNotificationCenter *distCenter = - [NSDistributedNotificationCenter defaultCenter]; - [distCenter postNotificationName:@"com.google.GoogleSearchAllApps.prefsWritten" - object:nil - userInfo:nil - options:NSNotificationDeliverImmediately]; - - // Spin the runloop so the notifications fire. - NSRunLoop *currentLoop = [NSRunLoop currentRunLoop]; - [currentLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]]; - // did we get what we expected? - [googleSearch preferredDomain:&domain - language:&lang - areCurrentAppOnly:&areCurrentAppOnly]; - STAssertEqualObjects(domain, @"xxx", nil); - STAssertEqualObjects(lang, @"yyy", nil); - STAssertFalse(areCurrentAppOnly, nil); -#endif // GTM_GOOGLE_SEARCH_SUPPORTS_DISTRIBUTED_NOTIFICATIONS - - // lastly, clean up what we set for all apps to leave the system at the - // default. - [googleSearch clearPreferredDomainAndLanguageForAllApps]; -} - -@end diff --git a/AppKit/GTMHotKeyTextField.h b/AppKit/GTMHotKeyTextField.h deleted file mode 100644 index cdd7830..0000000 --- a/AppKit/GTMHotKeyTextField.h +++ /dev/null @@ -1,116 +0,0 @@ -// -// GTMHotKeyTextField.h -// -// Copyright 2006-2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -// Text field for capturing hot key entry. This is intended to be similar to the -// Apple key editor in their Keyboard pref pane. - -// NOTE: There are strings that need to be localized to use this field. See the -// code in stringForKeycode the the keys. The keys are all the English versions -// so you'll get reasonable things if you don't have a strings file. - -#import <Cocoa/Cocoa.h> -#import "GTMDefines.h" - -@interface GTMHotKey : NSObject <NSCopying> { - @private - NSUInteger modifiers_; - NSUInteger keyCode_; - BOOL doubledModifier_; -} - -+ (id)hotKeyWithKeyCode:(NSUInteger)keyCode - modifiers:(NSUInteger)modifiers - useDoubledModifier:(BOOL)doubledModifier; - -- (id)initWithKeyCode:(NSUInteger)keyCode - modifiers:(NSUInteger)modifiers - useDoubledModifier:(BOOL)doubledModifier; - -// Custom accessors (readonly, nonatomic) -- (NSUInteger)modifiers; -- (NSUInteger)keyCode; -- (BOOL)doubledModifier; - -@end - -// Notes: -// - Though you are free to implement control:textShouldEndEditing: in your -// delegate its return is always ignored. The field always accepts only -// one hotkey keystroke before editing ends. -// - The "value" binding of this control is to the dictionary describing the -// hotkey. -// - The field does not attempt to consume all hotkeys. Hotkeys which are -// already bound in Apple prefs or other applications will have their -// normal effect. -// - -@interface GTMHotKeyTextField : NSTextField -@end - -@interface GTMHotKeyTextFieldCell : NSTextFieldCell { - @private - GTMHotKey *hotKey_; -} - -// Convert Cocoa modifier flags (-[NSEvent modifierFlags]) into a string for -// display. Modifiers are represented in the string in the same order they would -// appear in the Menu Manager. -// -// Args: -// flags: -[NSEvent modifierFlags] -// -// Returns: -// Autoreleased NSString -// -+ (NSString *)stringForModifierFlags:(NSUInteger)flags; - -// Convert a keycode into a string that would result from typing the keycode in -// the current keyboard layout. This may be one or more characters. -// -// Args: -// keycode: Virtual keycode such as one obtained from NSEvent -// useGlyph: In many cases the glyphs are confusing, and a string is clearer. -// However, if you want to display in a menu item, use must -// have a glyph. Set useGlyph to FALSE to get localized strings -// which are better for UI display in places other than menus. -// bundle: Localization bundle to use for localizable key names -// -// Returns: -// Autoreleased NSString -// -+ (NSString *)stringForKeycode:(UInt16)keycode - useGlyph:(BOOL)useGlyph - resourceBundle:(NSBundle *)bundle; - -@end - -// Custom field editor for use with hotkey entry fields (GTMHotKeyTextField). -// See the GTMHotKeyTextField for instructions on using from the window -// delegate. -@interface GTMHotKeyFieldEditor : NSTextView { - @private - GTMHotKeyTextFieldCell *cell_; -} - -// Get the shared field editor for all hot key fields -+ (GTMHotKeyFieldEditor *)sharedHotKeyFieldEditor; - -// Custom accessors (retain, nonatomic) -- (GTMHotKeyTextFieldCell *)cell; - -@end diff --git a/AppKit/GTMHotKeyTextField.m b/AppKit/GTMHotKeyTextField.m deleted file mode 100644 index a33277a..0000000 --- a/AppKit/GTMHotKeyTextField.m +++ /dev/null @@ -1,781 +0,0 @@ -// GTMHotKeyTextField.m -// -// Copyright 2006-2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMHotKeyTextField.h" - -#import <Carbon/Carbon.h> - -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -#import "GTMSystemVersion.h" -typedef struct __TISInputSource* TISInputSourceRef; - -static TISInputSourceRef(*GTM_TISCopyCurrentKeyboardLayoutInputSource)(void) = NULL; -static void * (*GTM_TISGetInputSourceProperty)(TISInputSourceRef inputSource, - CFStringRef propertyKey) = NULL; -static CFStringRef kGTM_TISPropertyUnicodeKeyLayoutData = NULL; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - -@interface GTMHotKeyTextFieldCell (PrivateMethods) -- (void)setupBinding:(id)bound withPath:(NSString *)path; -- (void)updateDisplayedPrettyString; -+ (NSString *)displayStringForHotKey:(GTMHotKey *)hotKey; -+ (BOOL)doesKeyCodeRequireModifier:(UInt16)keycode; -@end - -@interface GTMHotKeyFieldEditor (PrivateMethods) -- (GTMHotKeyTextFieldCell *)cell; -- (void)setCell:(GTMHotKeyTextFieldCell *)cell; -- (BOOL)shouldBypassEvent:(NSEvent *)theEvent; -- (void)processEventToHotKeyAndString:(NSEvent *)theEvent; -- (void)windowResigned:(NSNotification *)notification; -- (GTMHotKey *)hotKeyForEvent:(NSEvent *)event; -@end - -@implementation GTMHotKey - -+ (id)hotKeyWithKeyCode:(NSUInteger)keyCode - modifiers:(NSUInteger)modifiers - useDoubledModifier:(BOOL)doubledModifier { - return [[[self alloc] initWithKeyCode:keyCode - modifiers:modifiers - useDoubledModifier:doubledModifier] autorelease]; -} - -- (id)initWithKeyCode:(NSUInteger)keyCode - modifiers:(NSUInteger)modifiers - useDoubledModifier:(BOOL)doubledModifier { - if ((self = [super init])) { - modifiers_ = modifiers; - keyCode_ = keyCode; - doubledModifier_ = doubledModifier; - } - return self; -} - -- (NSUInteger)modifiers { - return modifiers_; -} - -- (NSUInteger)keyCode { - return keyCode_; -} - -- (BOOL)doubledModifier { - return doubledModifier_; -} - -- (BOOL)isEqual:(id)object { - return [object isKindOfClass:[GTMHotKey class]] - && [object modifiers] == [self modifiers] - && [(GTMHotKey *)object keyCode] == [self keyCode] - && [object doubledModifier] == [self doubledModifier]; -} - -- (NSUInteger)hash { - return [self modifiers] + [self keyCode] + [self doubledModifier]; -} - -- (id)copyWithZone:(NSZone *)zone { - return NSCopyObject(self, 0, zone); -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@ %p> - %@", - [self class], self, - [GTMHotKeyTextFieldCell displayStringForHotKey:self]]; -} - -@end - -@implementation GTMHotKeyTextField - -+ (Class)cellClass { - return [GTMHotKeyTextFieldCell class]; -} - -@end - -@implementation GTMHotKeyTextFieldCell -- (void)dealloc { - [hotKey_ release]; - [super dealloc]; -} - -- (id)copyWithZone:(NSZone *)zone { - GTMHotKeyTextFieldCell *copy = [super copyWithZone:zone]; - copy->hotKey_ = nil; - [copy setObjectValue:[self objectValue]]; - return copy; -} - -#pragma mark Defeating NSCell - -- (void)logBadValueAccess { - _GTMDevLog(@"Hot key fields want hot key dictionaries as object values."); -} - -- (id)objectValue { - return hotKey_; -} - -- (void)setObjectValue:(id)object { - // Sanity only if set, nil is OK - if (object && ![object isKindOfClass:[GTMHotKey class]]) { - [self logBadValueAccess]; - return; - } - if (![hotKey_ isEqual:object]) { - // Otherwise we directly update ourself - [hotKey_ autorelease]; - hotKey_ = [object copy]; - [self updateDisplayedPrettyString]; - } -} - -- (NSString *)stringValue { - NSString *value = [[self class] displayStringForHotKey:hotKey_]; - if (!value) { - value = @""; - } - return value; -} - -- (void)setStringValue:(NSString *)string { - // Since we are a text cell, lots of AppKit objects will attempt to - // set out string value. Our Field editor should already have done - // that for us, so check to make sure what AppKit is setting us to is - // what we expect. - if (![string isEqual:[self stringValue]]) { - [self logBadValueAccess]; - } -} - -- (NSAttributedString *)attributedStringValue { - NSAttributedString *attrString = nil; - NSString *prettyString = [self stringValue]; - if (prettyString) { - attrString = [[[NSAttributedString alloc] - initWithString:prettyString] autorelease]; - } - return attrString; -} - -- (void)setAttributedStringValue:(NSAttributedString *)string { - [self logBadValueAccess]; -} - -- (id)formatter { - return nil; -} - -- (void)setFormatter:(NSFormatter *)newFormatter { - if (newFormatter) { - // Defeating NSCell - _GTMDevLog(@"Hot key fields don't accept formatters."); - } -} - -- (id)_fieldEditor { - GTMHotKeyFieldEditor *editor = [GTMHotKeyFieldEditor sharedHotKeyFieldEditor]; - [editor setCell:self]; - return editor; -} - -#pragma mark Hot Key Support - -// Private method to update the displayed text of the field with the -// user-readable representation. -- (void)updateDisplayedPrettyString { - // Pretty string - NSString *prettyString = [[self class] displayStringForHotKey:hotKey_]; - if (!prettyString) { - prettyString = @""; - } - [super setObjectValue:prettyString]; - -} - -+ (NSString *)displayStringForHotKey:(GTMHotKey *)hotKey { - if (!hotKey) return nil; - - NSBundle *bundle = [NSBundle bundleForClass:[self class]]; - - // Modifiers - NSUInteger modifiers = [hotKey modifiers]; - NSString *mods = [[self class] stringForModifierFlags:modifiers]; - if (modifiers && ![mods length]) return nil; - // Handle double modifier case - if ([hotKey doubledModifier]) { - return [NSString stringWithFormat:@"%@ + %@", mods, mods]; - } - // Keycode - NSUInteger keycode = [hotKey keyCode]; - NSString *keystroke = [[self class] stringForKeycode:keycode - useGlyph:NO - resourceBundle:bundle]; - if (!keystroke || ![keystroke length]) return nil; - if ([[self class] doesKeyCodeRequireModifier:keycode] - && ![mods length]) { - return nil; - } - - return [NSString stringWithFormat:@"%@%@", mods, keystroke]; -} - -#pragma mark Class methods building strings for use w/in the UI. - -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -+ (void)initialize { - if (!GTM_TISCopyCurrentKeyboardLayoutInputSource - && [GTMSystemVersion isLeopardOrGreater]) { - CFBundleRef hiToolbox - = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.HIToolbox")); - if (hiToolbox) { - kGTM_TISPropertyUnicodeKeyLayoutData - = *(CFStringRef*)CFBundleGetDataPointerForName(hiToolbox, - CFSTR("kTISPropertyUnicodeKeyLayoutData")); - GTM_TISCopyCurrentKeyboardLayoutInputSource - = CFBundleGetFunctionPointerForName(hiToolbox, - CFSTR("TISCopyCurrentKeyboardLayoutInputSource")); - GTM_TISGetInputSourceProperty - = CFBundleGetFunctionPointerForName(hiToolbox, - CFSTR("TISGetInputSourceProperty")); - } - } -} -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - -#pragma mark Useful String Class Methods - -+ (BOOL)doesKeyCodeRequireModifier:(UInt16)keycode { - BOOL doesRequire = YES; - switch(keycode) { - // These are the keycodes that map to the - //unichars in the associated comment. - case 122: // NSF1FunctionKey - case 120: // NSF2FunctionKey - case 99: // NSF3FunctionKey - case 118: // NSF4FunctionKey - case 96: // NSF5FunctionKey - case 97: // NSF6FunctionKey - case 98: // NSF7FunctionKey - case 100: // NSF8FunctionKey - case 101: // NSF9FunctionKey - case 109: // NSF10FunctionKey - case 103: // NSF11FunctionKey - case 111: // NSF12FunctionKey - case 105: // NSF13FunctionKey - case 107: // NSF14FunctionKey - case 113: // NSF15FunctionKey - case 106: // NSF16FunctionKey - doesRequire = NO; - break; - default: - doesRequire = YES; - break; - } - return doesRequire; -} - -// These are not in a category on NSString because this class could be used -// within multiple preference panes at the same time. If we put it in a category -// it would require setting up some magic so that the categories didn't conflict -// between the multiple pref panes. By putting it in the class, you can just -// #define the class name to something else, and then you won't have any -// conflicts. - -+ (NSString *)stringForModifierFlags:(NSUInteger)flags { - UniChar modChars[4]; // We only look for 4 flags - unsigned int charCount = 0; - // These are in the same order as the menu manager shows them - if (flags & NSControlKeyMask) modChars[charCount++] = kControlUnicode; - if (flags & NSAlternateKeyMask) modChars[charCount++] = kOptionUnicode; - if (flags & NSShiftKeyMask) modChars[charCount++] = kShiftUnicode; - if (flags & NSCommandKeyMask) modChars[charCount++] = kCommandUnicode; - if (charCount == 0) return @""; - return [NSString stringWithCharacters:modChars length:charCount]; -} - -+ (NSString *)stringForKeycode:(UInt16)keycode - useGlyph:(BOOL)useGlyph - resourceBundle:(NSBundle *)bundle { - // Some keys never move in any layout (to the best of our knowledge at least) - // so we can hard map them. - UniChar key = 0; - NSString *localizedKey = nil; - - switch (keycode) { - - // Of the hard mapped keys some can be represented with pretty and obvioous - // Unicode or simple strings without localization. - - // Arrow keys - case 123: key = NSLeftArrowFunctionKey; break; - case 124: key = NSRightArrowFunctionKey; break; - case 125: key = NSDownArrowFunctionKey; break; - case 126: key = NSUpArrowFunctionKey; break; - case 122: key = NSF1FunctionKey; localizedKey = @"F1"; break; - case 120: key = NSF2FunctionKey; localizedKey = @"F2"; break; - case 99: key = NSF3FunctionKey; localizedKey = @"F3"; break; - case 118: key = NSF4FunctionKey; localizedKey = @"F4"; break; - case 96: key = NSF5FunctionKey; localizedKey = @"F5"; break; - case 97: key = NSF6FunctionKey; localizedKey = @"F6"; break; - case 98: key = NSF7FunctionKey; localizedKey = @"F7"; break; - case 100: key = NSF8FunctionKey; localizedKey = @"F8"; break; - case 101: key = NSF9FunctionKey; localizedKey = @"F9"; break; - case 109: key = NSF10FunctionKey; localizedKey = @"F10"; break; - case 103: key = NSF11FunctionKey; localizedKey = @"F11"; break; - case 111: key = NSF12FunctionKey; localizedKey = @"F12"; break; - case 105: key = NSF13FunctionKey; localizedKey = @"F13"; break; - case 107: key = NSF14FunctionKey; localizedKey = @"F14"; break; - case 113: key = NSF15FunctionKey; localizedKey = @"F15"; break; - case 106: key = NSF16FunctionKey; localizedKey = @"F16"; break; - // Forward delete is a terrible name so we'll use the glyph Apple puts on - // their current keyboards - case 117: key = 0x2326; break; - - // Now we have keys that can be hard coded but don't have good glyph - // representations. Sure, the Apple menu manager has glyphs for them, but - // an informal poll of Google developers shows no one really knows what - // they mean, so its probably a good idea to use strings. Unfortunately - // this also means localization (*sigh*). We'll use the real English - // strings here as keys so that even if localization is missed we'll do OK - // in output. - - // Whitespace - case 36: key = '\r'; localizedKey = @"Return"; break; - case 76: key = 0x3; localizedKey = @"Enter"; break; - case 48: key = 0x9; localizedKey = @"Tab"; break; - // 0x2423 is the Open Box - case 49: key = 0x2423; localizedKey = @"Space"; break; - // Control keys - case 51: key = 0x8; localizedKey = @"Delete"; break; - case 71: key = NSClearDisplayFunctionKey; localizedKey = @"Clear"; break; - case 53: key = 0x1B; localizedKey = @"Esc"; break; - case 115: key = NSHomeFunctionKey; localizedKey = @"Home"; break; - case 116: key = NSPageUpFunctionKey; localizedKey = @"Page Up"; break; - case 119: key = NSEndFunctionKey; localizedKey = @"End"; break; - case 121: key = NSPageDownFunctionKey; localizedKey = @"Page Down"; break; - case 114: key = NSHelpFunctionKey; localizedKey = @"Help"; break; - // Keypad keys - // There is no good way we could find to glyph these. We tried a variety - // of Unicode glyphs, and the menu manager wouldn't take them. We tried - // subscript numbers, circled numbers and superscript numbers with no - // luck. It may be a bit confusing to the user, but we're happy to hear - // any suggestions. - case 65: key = '.'; localizedKey = @"Keypad ."; break; - case 67: key = '*'; localizedKey = @"Keypad *"; break; - case 69: key = '+'; localizedKey = @"Keypad +"; break; - case 75: key = '/'; localizedKey = @"Keypad /"; break; - case 78: key = '-'; localizedKey = @"Keypad -"; break; - case 81: key = '='; localizedKey = @"Keypad ="; break; - case 82: key = '0'; localizedKey = @"Keypad 0"; break; - case 83: key = '1'; localizedKey = @"Keypad 1"; break; - case 84: key = '2'; localizedKey = @"Keypad 2"; break; - case 85: key = '3'; localizedKey = @"Keypad 3"; break; - case 86: key = '4'; localizedKey = @"Keypad 4"; break; - case 87: key = '5'; localizedKey = @"Keypad 5"; break; - case 88: key = '6'; localizedKey = @"Keypad 6"; break; - case 89: key = '7'; localizedKey = @"Keypad 7"; break; - case 91: key = '8'; localizedKey = @"Keypad 8"; break; - case 92: key = '9'; localizedKey = @"Keypad 9"; break; - - } - - // If they asked for strings, and we have one return it. Otherwise, return - // any key we've picked. - if (!useGlyph && localizedKey) { - return NSLocalizedStringFromTableInBundle(localizedKey, - @"GTMHotKeyTextField", - bundle, - @""); - } else if (key != 0) { - return [NSString stringWithFormat:@"%C", key]; - } - - // Everything else should be printable so look it up in the current keyboard - UCKeyboardLayout *uchrData = NULL; - - OSStatus err = noErr; -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - // layout - KeyboardLayoutRef currentLayout = NULL; - // Get the layout kind - SInt32 currentLayoutKind = -1; - if ([GTMSystemVersion isLeopardOrGreater] - && kGTM_TISPropertyUnicodeKeyLayoutData - && GTM_TISGetInputSourceProperty - && GTM_TISCopyCurrentKeyboardLayoutInputSource) { - // On Leopard we use the new improved TIS interfaces which work for input - // sources as well as keyboard layouts. - TISInputSourceRef inputSource - = GTM_TISCopyCurrentKeyboardLayoutInputSource(); - if (inputSource) { - CFDataRef uchrDataRef - = GTM_TISGetInputSourceProperty(inputSource, - kGTM_TISPropertyUnicodeKeyLayoutData); - if(uchrDataRef) { - uchrData = (UCKeyboardLayout*)CFDataGetBytePtr(uchrDataRef); - } - CFRelease(inputSource); - } - } else { - // Tiger we use keyboard layouts as it's the best we can officially do. - err = KLGetCurrentKeyboardLayout(¤tLayout); - if (err != noErr) { // COV_NF_START - _GTMDevLog(@"failed to fetch the keyboard layout, err=%d", err); - return nil; - } // COV_NF_END - - err = KLGetKeyboardLayoutProperty(currentLayout, - kKLKind, - (const void **)¤tLayoutKind); - if (err != noErr) { // COV_NF_START - _GTMDevLog(@"failed to fetch the keyboard layout kind property, err=%d", - err); - return nil; - } // COV_NF_END - - if (currentLayoutKind != kKLKCHRKind) { - err = KLGetKeyboardLayoutProperty(currentLayout, - kKLuchrData, - (const void **)&uchrData); - if (err != noErr) { // COV_NF_START - _GTMDevLog(@"failed to fetch the keyboard layout uchar data, err=%d", - err); - return nil; - } // COV_NF_END - } - } -#else - TISInputSourceRef inputSource = TISCopyCurrentKeyboardLayoutInputSource(); - if (inputSource) { - CFDataRef uchrDataRef - = TISGetInputSourceProperty(inputSource, kTISPropertyUnicodeKeyLayoutData); - if(uchrDataRef) { - uchrData = (UCKeyboardLayout*)CFDataGetBytePtr(uchrDataRef); - } - CFRelease(inputSource); - } -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - - NSString *keystrokeString = nil; - if (uchrData) { - // uchr layout data is available, this is our preference - UniCharCount uchrCharLength = 0; - UniChar uchrChars[256] = { 0 }; - UInt32 uchrDeadKeyState = 0; - err = UCKeyTranslate(uchrData, - keycode, - kUCKeyActionDisplay, - 0, // No modifiers - LMGetKbdType(), - kUCKeyTranslateNoDeadKeysMask, - &uchrDeadKeyState, - sizeof(uchrChars) / sizeof(UniChar), - &uchrCharLength, - uchrChars); - if (err != noErr) { - // COV_NF_START - _GTMDevLog(@"failed to translate the keycode, err=%d", (int)err); - return nil; - // COV_NF_END - } - if (uchrCharLength < 1) return nil; - keystrokeString = [NSString stringWithCharacters:uchrChars - length:uchrCharLength]; - } -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - else if (currentLayoutKind == kKLKCHRKind) { - // Only KCHR layout data is available, go old school - void *KCHRData = NULL; - err = KLGetKeyboardLayoutProperty(currentLayout, kKLKCHRData, - (const void **)&KCHRData); - if (err != noErr) { // COV_NF_START - _GTMDevLog(@"failed to fetch the keyboard layout uchar data, err=%d", - err); - return nil; - } // COV_NF_END - // Turn into character code - UInt32 keyTranslateState = 0; - UInt32 twoKCHRChars = KeyTranslate(KCHRData, keycode, &keyTranslateState); - if (!twoKCHRChars) return nil; - // Unpack the fields - char firstChar = (char)((twoKCHRChars & 0x00FF0000) >> 16); - char secondChar = (char)(twoKCHRChars & 0x000000FF); - // May have one or two characters - if (firstChar && secondChar) { - NSString *str1 - = [[[NSString alloc] initWithBytes:&firstChar - length:1 - encoding:NSMacOSRomanStringEncoding] autorelease]; - NSString *str2 - = [[[NSString alloc] initWithBytes:&secondChar - length:1 - encoding:NSMacOSRomanStringEncoding] autorelease]; - keystrokeString = [NSString stringWithFormat:@"%@%@", - [str1 uppercaseString], - [str2 uppercaseString]]; - } else { - keystrokeString - = [[[NSString alloc] initWithBytes:&secondChar - length:1 - encoding:NSMacOSRomanStringEncoding] autorelease]; - [keystrokeString uppercaseString]; - } - } -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - - // Sanity we got a stroke - if (!keystrokeString || ![keystrokeString length]) return nil; - - // Sanity check the keystroke string for unprintable characters - NSMutableCharacterSet *validChars = - [[[NSMutableCharacterSet alloc] init] autorelease]; - - [validChars formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]]; - [validChars formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]]; - [validChars formUnionWithCharacterSet:[NSCharacterSet symbolCharacterSet]]; - for (unsigned int i = 0; i < [keystrokeString length]; i++) { - if (![validChars characterIsMember:[keystrokeString characterAtIndex:i]]) { - return nil; - } - } - - if (!useGlyph) { - // menus want glyphs in the original lowercase forms, so we only upper this - // if we aren't using it as a glyph. - keystrokeString = [keystrokeString uppercaseString]; - } - - return keystrokeString; -} - -@end - -@implementation GTMHotKeyFieldEditor - -+ (GTMHotKeyFieldEditor *)sharedHotKeyFieldEditor { - static GTMHotKeyFieldEditor *obj; - if (!obj) { - obj = [[self alloc] init]; - } - return obj; -} - -- (id)init { - if ((self = [super init])) { - [self setFieldEditor:YES]; // We are a field editor - } - return self; -} - -// COV_NF_START -// Singleton so never called. -- (void)dealloc { - [cell_ release]; - [super dealloc]; -} -// COV_NF_END - -- (GTMHotKeyTextFieldCell *)cell { - return cell_; -} - -- (void)setCell:(GTMHotKeyTextFieldCell *)cell { - [cell_ autorelease]; - cell_ = [cell retain]; -} - -- (NSArray *)acceptableDragTypes { - // Don't take drags - return [NSArray array]; -} - -- (NSArray *)readablePasteboardTypes { - // No pasting - return [NSArray array]; -} - -- (NSArray *)writablePasteboardTypes { - // No copying - return [NSArray array]; -} - -- (BOOL)becomeFirstResponder { - // We need to lose focus any time the window is not key - NSNotificationCenter *dc = [NSNotificationCenter defaultCenter]; - [dc addObserver:self - selector:@selector(windowResigned:) - name:NSWindowDidResignKeyNotification - object:[self window]]; - return [super becomeFirstResponder]; -} - -- (BOOL)resignFirstResponder { - // No longer interested in window resign - [[NSNotificationCenter defaultCenter] removeObserver:self]; - return [super resignFirstResponder]; -} - -// Private method we use to get out of global hotkey capture when the window -// is no longer front -- (void)windowResigned:(NSNotification *)notification { - // Lose our focus - NSWindow *window = [self window]; - [window makeFirstResponder:window]; - -} - -- (BOOL)shouldDrawInsertionPoint { - // Show an insertion point, because we'll kill our own focus after - // each entry - return YES; -} - -- (NSRange)selectionRangeForProposedRange:(NSRange)proposedSelRange - granularity:(NSSelectionGranularity)granularity { - // Always select everything - return NSMakeRange(0, [[self textStorage] length]); -} - -- (void)keyDown:(NSEvent *)theEvent { - if ([self shouldBypassEvent:theEvent]) { - [super keyDown:theEvent]; - } else { - // Try to eat the event - [self processEventToHotKeyAndString:theEvent]; - } -} - -- (BOOL)performKeyEquivalent:(NSEvent *)theEvent { - if ([self shouldBypassEvent:theEvent]) { - return [super performKeyEquivalent:theEvent]; - } else { - // We always eat these key strokes while we have focus - [self processEventToHotKeyAndString:theEvent]; - return YES; - } -} - -// Private do method that tell us to ignore certain events -- (BOOL)shouldBypassEvent:(NSEvent *)theEvent { - BOOL bypass = NO; - UInt16 keyCode = [theEvent keyCode]; - NSUInteger modifierFlags - = [theEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask; - - if (keyCode == 48) { // Tab - // Ignore all events that the dock cares about - // Just to be extra clear if the user is trying to use Dock hotkeys beep - // at them - if ((modifierFlags == NSCommandKeyMask) || - (modifierFlags == (NSCommandKeyMask | NSShiftKeyMask))) { - NSBeep(); - bypass = YES; - } else if (modifierFlags == 0 || modifierFlags == NSShiftKeyMask) { - // Probably attempting to tab around the dialog. - bypass = YES; - } - - } else if ((keyCode == 12) && (modifierFlags == NSCommandKeyMask)) { - // Don't eat Cmd-Q. Users could have it as a hotkey, but its more likely - // they're trying to quit - bypass = YES; - } else if ((keyCode == 13) && (modifierFlags == NSCommandKeyMask)) { - // Same for Cmd-W, user is probably trying to close the window - bypass = YES; - } - return bypass; -} - -// Private method that turns events into strings and dictionaries for our -// hotkey plumbing. -- (void)processEventToHotKeyAndString:(NSEvent *)theEvent { - // Construct a dictionary of the event as a hotkey pref - GTMHotKey *newHotKey = nil; - NSString *prettyString = @""; - // 51 is "the delete key" - const NSUInteger allModifiers = (NSCommandKeyMask | NSAlternateKeyMask | - NSControlKeyMask | NSShiftKeyMask); - if (!(([theEvent keyCode] == 51 ) - && (([theEvent modifierFlags] & allModifiers)== 0))) { - newHotKey = [self hotKeyForEvent:theEvent]; - if (!newHotKey) { - NSBeep(); - return; // No action, but don't give up focus - } - prettyString = [GTMHotKeyTextFieldCell displayStringForHotKey:newHotKey]; - if (!prettyString) { - NSBeep(); - return; - } - } - - // Replacement range - NSRange replaceRange = NSMakeRange(0, [[self textStorage] length]); - - // Ask for permission to replace - if (![self shouldChangeTextInRange:replaceRange - replacementString:prettyString]) { - // If replacement was disallowed, change nothing, including hotKeyDict_ - NSBeep(); - return; - } - - [[self cell] setObjectValue:newHotKey]; - - // Finish the change - [self didChangeText]; - - // Force editing to end. This sends focus off into space slightly, but - // its better than constantly capturing user events. This is exactly - // like the Apple editor in their Keyboard pref pane. - [[self window] makeFirstResponder:nil]; -} - -- (GTMHotKey *)hotKeyForEvent:(NSEvent *)event { - if (!event) return nil; - - // Check event - NSUInteger flags = [event modifierFlags]; - UInt16 keycode = [event keyCode]; - // If the event has no modifiers do nothing - NSUInteger allModifiers = (NSCommandKeyMask | NSAlternateKeyMask | - NSControlKeyMask | NSShiftKeyMask); - - BOOL requiresModifiers - = [GTMHotKeyTextFieldCell doesKeyCodeRequireModifier:keycode]; - if (requiresModifiers) { - // If we aren't a function key, and have no modifiers do nothing. - if (!(flags & allModifiers)) return nil; - // If the event has high bits in keycode do nothing - if (keycode & 0xFF00) return nil; - } - - // Clean the flags to only contain things we care about - UInt32 cleanFlags = 0; - if (flags & NSCommandKeyMask) cleanFlags |= NSCommandKeyMask; - if (flags & NSAlternateKeyMask) cleanFlags |= NSAlternateKeyMask; - if (flags & NSControlKeyMask) cleanFlags |= NSControlKeyMask; - if (flags & NSShiftKeyMask) cleanFlags |= NSShiftKeyMask; - return [GTMHotKey hotKeyWithKeyCode:keycode - modifiers:cleanFlags - useDoubledModifier:NO]; -} - -@end diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/da.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/da.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index 66be1af..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/da.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "Retur"; -"Enter" = "⌅"; -"Tab" = "Tabulator"; -"Space" = "Mellemrum"; -"Delete" = "⌫"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Hjælp"; - -"Keypad ." = "Keypad ."; -"Keypad *" = "Keypad *"; -"Keypad +" = "Keypad +"; -"Keypad /" = "Keypad /"; -"Keypad -" = "Keypad -"; -"Keypad =" = "Keypad ="; -"Keypad 0" = "Keypad 0"; -"Keypad 1" = "Keypad 1"; -"Keypad 2" = "Keypad 2"; -"Keypad 3" = "Keypad 3"; -"Keypad 4" = "Keypad 4"; -"Keypad 5" = "Keypad 5"; -"Keypad 6" = "Keypad 6"; -"Keypad 7" = "Keypad 7"; -"Keypad 8" = "Keypad 8"; -"Keypad 9" = "Keypad 9"; -"Keypad 0" = "Keypad 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/de.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/de.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index d80f699..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/de.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "Zeilenschalter"; -"Enter" = "⌅"; -"Tab" = "⇥"; -"Space" = "Leertaste"; -"Delete" = "Entf.-Taste"; -"Clear" = "⌦"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Hilfe-Taste"; - -"Keypad ." = "Tastenfeld ."; -"Keypad *" = "Tastenfeld *"; -"Keypad +" = "Tastenfeld +"; -"Keypad /" = "Tastenfeld /"; -"Keypad -" = "Tastenfeld -"; -"Keypad =" = "Tastenfeld ="; -"Keypad 0" = "Tastenfeld 0"; -"Keypad 1" = "Tastenfeld 1"; -"Keypad 2" = "Tastenfeld 2"; -"Keypad 3" = "Tastenfeld 3"; -"Keypad 4" = "Tastenfeld 4"; -"Keypad 5" = "Tastenfeld 5"; -"Keypad 6" = "Tastenfeld 6"; -"Keypad 7" = "Tastenfeld 7"; -"Keypad 8" = "Tastenfeld 8"; -"Keypad 9" = "Tastenfeld 9"; -"Keypad 0" = "Tastenfeld 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/en.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/en.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index d5c102c..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/en.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "Return"; -"Enter" = "Enter"; -"Tab" = "Tab"; -"Space" = "Space"; -"Delete" = "Delete"; -"Clear" = "Clear"; -"Esc" = "Esc"; -"Home" = "Home"; -"Page Up" = "Page Up"; -"End" = "End"; -"Page Down" = "Page Down"; -"Help" = "Help"; - -"Keypad ." = "Keypad ."; -"Keypad *" = "Keypad *"; -"Keypad +" = "Keypad +"; -"Keypad /" = "Keypad /"; -"Keypad -" = "Keypad -"; -"Keypad =" = "Keypad ="; -"Keypad 0" = "Keypad 0"; -"Keypad 1" = "Keypad 1"; -"Keypad 2" = "Keypad 2"; -"Keypad 3" = "Keypad 3"; -"Keypad 4" = "Keypad 4"; -"Keypad 5" = "Keypad 5"; -"Keypad 6" = "Keypad 6"; -"Keypad 7" = "Keypad 7"; -"Keypad 8" = "Keypad 8"; -"Keypad 9" = "Keypad 9"; -"Keypad 0" = "Keypad 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/es.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/es.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index fa26173..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/es.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "Retorno"; -"Enter" = "⌅"; -"Tab" = "Tabulación"; -"Space" = "Espacio"; -"Delete" = "Eliminar"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Ayuda"; - -"Keypad ." = "Teclado ."; -"Keypad *" = "Teclado *"; -"Keypad +" = "Teclado +"; -"Keypad /" = "Teclado /"; -"Keypad -" = "Teclado -"; -"Keypad =" = "Teclado ="; -"Keypad 0" = "Teclado 0"; -"Keypad 1" = "Teclado 1"; -"Keypad 2" = "Teclado 2"; -"Keypad 3" = "Teclado 3"; -"Keypad 4" = "Teclado 4"; -"Keypad 5" = "Teclado 5"; -"Keypad 6" = "Teclado 6"; -"Keypad 7" = "Teclado 7"; -"Keypad 8" = "Teclado 8"; -"Keypad 9" = "Teclado 9"; -"Keypad 0" = "Teclado 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/fi.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/fi.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index be5d106..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/fi.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "Rivinvaihto"; -"Enter" = "⌅"; -"Tab" = "Sarkain"; -"Space" = "Välilyönti"; -"Delete" = "Poisto"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Ohjeet"; - -"Keypad ." = "Näppäimet ."; -"Keypad *" = "Näppäimet *"; -"Keypad +" = "Näppäimet +"; -"Keypad /" = "Näppäimet /"; -"Keypad -" = "Näppäimet -"; -"Keypad =" = "Näppäimet ="; -"Keypad 0" = "Näppäimet 0"; -"Keypad 1" = "Näppäimet 1"; -"Keypad 2" = "Näppäimet 2"; -"Keypad 3" = "Näppäimet 3"; -"Keypad 4" = "Näppäimet 4"; -"Keypad 5" = "Näppäimet 5"; -"Keypad 6" = "Näppäimet 6"; -"Keypad 7" = "Näppäimet 7"; -"Keypad 8" = "Näppäimet 8"; -"Keypad 9" = "Näppäimet 9"; -"Keypad 0" = "Näppäimet 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/fr.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/fr.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index 38a0b81..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/fr.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "Retour"; -"Enter" = "⌅"; -"Tab" = "Tab"; -"Space" = "Espace"; -"Delete" = "Supprimer"; -"Clear" = "⌧"; -"Esc" = "Échap"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Aide"; - -"Keypad ." = "Clavier ."; -"Keypad *" = "Clavier *"; -"Keypad +" = "Clavier +"; -"Keypad /" = "Clavier /"; -"Keypad -" = "Clavier -"; -"Keypad =" = "Clavier ="; -"Keypad 0" = "Clavier 0"; -"Keypad 1" = "Clavier 1"; -"Keypad 2" = "Clavier 2"; -"Keypad 3" = "Clavier 3"; -"Keypad 4" = "Clavier 4"; -"Keypad 5" = "Clavier 5"; -"Keypad 6" = "Clavier 6"; -"Keypad 7" = "Clavier 7"; -"Keypad 8" = "Clavier 8"; -"Keypad 9" = "Clavier 9"; -"Keypad 0" = "Clavier 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/it.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/it.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index 1239fe6..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/it.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "A Capo"; -"Enter" = "⌅"; -"Tab" = "Tabulatore"; -"Space" = "Spazio"; -"Delete" = "Canc"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Aiuto"; - -"Keypad ." = "Tastiera ."; -"Keypad *" = "Tastiera *"; -"Keypad +" = "Tastiera +"; -"Keypad /" = "Tastiera /"; -"Keypad -" = "Tastiera -"; -"Keypad =" = "Tastiera ="; -"Keypad 0" = "Tastiera 0"; -"Keypad 1" = "Tastiera 1"; -"Keypad 2" = "Tastiera 2"; -"Keypad 3" = "Tastiera 3"; -"Keypad 4" = "Tastiera 4"; -"Keypad 5" = "Tastiera 5"; -"Keypad 6" = "Tastiera 6"; -"Keypad 7" = "Tastiera 7"; -"Keypad 8" = "Tastiera 8"; -"Keypad 9" = "Tastiera 9"; -"Keypad 0" = "Tastiera 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/ja.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/ja.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index f66a5b0..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/ja.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "↩"; -"Enter" = "⌅"; -"Tab" = "⇥"; -"Space" = "スペースキ"; -"Delete" = "⌫"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "ヘルプ"; - -"Keypad ." = "キーパッド ."; -"Keypad *" = "キーパッド *"; -"Keypad +" = "キーパッド +"; -"Keypad /" = "キーパッド /"; -"Keypad -" = "キーパッド -"; -"Keypad =" = "キーパッド ="; -"Keypad 0" = "キーパッド 0"; -"Keypad 1" = "キーパッド 1"; -"Keypad 2" = "キーパッド 2"; -"Keypad 3" = "キーパッド 3"; -"Keypad 4" = "キーパッド 4"; -"Keypad 5" = "キーパッド 5"; -"Keypad 6" = "キーパッド 6"; -"Keypad 7" = "キーパッド 7"; -"Keypad 8" = "キーパッド 8"; -"Keypad 9" = "キーパッド 9"; -"Keypad 0" = "キーパッド 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/ko.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/ko.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index c404ca4..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/ko.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "↩"; -"Enter" = "⌅"; -"Tab" = "⇥"; -"Space" = "스페이스"; -"Delete" = "⌫"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "도움말"; - -"Keypad ." = "키패드 ."; -"Keypad *" = "키패드 *"; -"Keypad +" = "키패드 +"; -"Keypad /" = "키패드 /"; -"Keypad -" = "키패드 -"; -"Keypad =" = "키패드 ="; -"Keypad 0" = "키패드 0"; -"Keypad 1" = "키패드 1"; -"Keypad 2" = "키패드 2"; -"Keypad 3" = "키패드 3"; -"Keypad 4" = "키패드 4"; -"Keypad 5" = "키패드 5"; -"Keypad 6" = "키패드 6"; -"Keypad 7" = "키패드 7"; -"Keypad 8" = "키패드 8"; -"Keypad 9" = "키패드 9"; -"Keypad 0" = "키패드 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/nl.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/nl.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index 79f642b..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/nl.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "↩"; -"Enter" = "⌅"; -"Tab" = "⇥"; -"Space" = "Spatiebalk"; -"Delete" = "⌫"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Help"; - -"Keypad ." = "Toetsen ."; -"Keypad *" = "Toetsen *"; -"Keypad +" = "Toetsen +"; -"Keypad /" = "Toetsen /"; -"Keypad -" = "Toetsen -"; -"Keypad =" = "Toetsen ="; -"Keypad 0" = "Toetsen 0"; -"Keypad 1" = "Toetsen 1"; -"Keypad 2" = "Toetsen 2"; -"Keypad 3" = "Toetsen 3"; -"Keypad 4" = "Toetsen 4"; -"Keypad 5" = "Toetsen 5"; -"Keypad 6" = "Toetsen 6"; -"Keypad 7" = "Toetsen 7"; -"Keypad 8" = "Toetsen 8"; -"Keypad 9" = "Toetsen 9"; -"Keypad 0" = "Toetsen 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/no.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/no.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index c564b23..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/no.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "Retur"; -"Enter" = "⌅"; -"Tab" = "⇥"; -"Space" = "Mellomrom"; -"Delete" = "Rettetast"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Hjelp"; - -"Keypad ." = "Tastatur ."; -"Keypad *" = "Tastatur *"; -"Keypad +" = "Tastatur +"; -"Keypad /" = "Tastatur /"; -"Keypad -" = "Tastatur -"; -"Keypad =" = "Tastatur ="; -"Keypad 0" = "Tastatur 0"; -"Keypad 1" = "Tastatur 1"; -"Keypad 2" = "Tastatur 2"; -"Keypad 3" = "Tastatur 3"; -"Keypad 4" = "Tastatur 4"; -"Keypad 5" = "Tastatur 5"; -"Keypad 6" = "Tastatur 6"; -"Keypad 7" = "Tastatur 7"; -"Keypad 8" = "Tastatur 8"; -"Keypad 9" = "Tastatur 9"; -"Keypad 0" = "Tastatur 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/pl.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/pl.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index a55c59e..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/pl.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "↩"; -"Enter" = "⌅"; -"Tab" = "⇥"; -"Space" = "Spacja"; -"Delete" = "Usuń"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Pomoc"; - -"Keypad ." = "Klawiatura ."; -"Keypad *" = "Klawiatura *"; -"Keypad +" = "Klawiatura +"; -"Keypad /" = "Klawiatura /"; -"Keypad -" = "Klawiatura -"; -"Keypad =" = "Klawiatura ="; -"Keypad 0" = "Klawiatura 0"; -"Keypad 1" = "Klawiatura 1"; -"Keypad 2" = "Klawiatura 2"; -"Keypad 3" = "Klawiatura 3"; -"Keypad 4" = "Klawiatura 4"; -"Keypad 5" = "Klawiatura 5"; -"Keypad 6" = "Klawiatura 6"; -"Keypad 7" = "Klawiatura 7"; -"Keypad 8" = "Klawiatura 8"; -"Keypad 9" = "Klawiatura 9"; -"Keypad 0" = "Klawiatura 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/pt.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/pt.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index e80fd87..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/pt.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "Retorno"; -"Enter" = "⌅"; -"Tab" = "Tabulação"; -"Space" = "Espaço"; -"Delete" = "Apagar"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Ajuda"; - -"Keypad ." = "Teclado ."; -"Keypad *" = "Teclado *"; -"Keypad +" = "Teclado +"; -"Keypad /" = "Teclado /"; -"Keypad -" = "Teclado -"; -"Keypad =" = "Teclado ="; -"Keypad 0" = "Teclado 0"; -"Keypad 1" = "Teclado 1"; -"Keypad 2" = "Teclado 2"; -"Keypad 3" = "Teclado 3"; -"Keypad 4" = "Teclado 4"; -"Keypad 5" = "Teclado 5"; -"Keypad 6" = "Teclado 6"; -"Keypad 7" = "Teclado 7"; -"Keypad 8" = "Teclado 8"; -"Keypad 9" = "Teclado 9"; -"Keypad 0" = "Teclado 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/ru.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/ru.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index 3bb1059..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/ru.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "↩"; -"Enter" = "⌅"; -"Tab" = "⇥"; -"Space" = "Пробел"; -"Delete" = "⌫"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Справка"; - -"Keypad ." = "Клавиатура ."; -"Keypad *" = "Клавиатура *"; -"Keypad +" = "Клавиатура +"; -"Keypad /" = "Клавиатура /"; -"Keypad -" = "Клавиатура -"; -"Keypad =" = "Клавиатура ="; -"Keypad 0" = "Клавиатура 0"; -"Keypad 1" = "Клавиатура 1"; -"Keypad 2" = "Клавиатура 2"; -"Keypad 3" = "Клавиатура 3"; -"Keypad 4" = "Клавиатура 4"; -"Keypad 5" = "Клавиатура 5"; -"Keypad 6" = "Клавиатура 6"; -"Keypad 7" = "Клавиатура 7"; -"Keypad 8" = "Клавиатура 8"; -"Keypad 9" = "Клавиатура 9"; -"Keypad 0" = "Клавиатура 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/sv.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/sv.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index eb97468..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/sv.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "Retur"; -"Enter" = "⌅"; -"Tab" = "Tabb"; -"Space" = "Mellanslag"; -"Delete" = "⌫"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "Hjälp"; - -"Keypad ." = "Knappsatsen ."; -"Keypad *" = "Knappsatsen *"; -"Keypad +" = "Knappsatsen +"; -"Keypad /" = "Knappsatsen /"; -"Keypad -" = "Knappsatsen -"; -"Keypad =" = "Knappsatsen ="; -"Keypad 0" = "Knappsatsen 0"; -"Keypad 1" = "Knappsatsen 1"; -"Keypad 2" = "Knappsatsen 2"; -"Keypad 3" = "Knappsatsen 3"; -"Keypad 4" = "Knappsatsen 4"; -"Keypad 5" = "Knappsatsen 5"; -"Keypad 6" = "Knappsatsen 6"; -"Keypad 7" = "Knappsatsen 7"; -"Keypad 8" = "Knappsatsen 8"; -"Keypad 9" = "Knappsatsen 9"; -"Keypad 0" = "Knappsatsen 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/zh_CN.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/zh_CN.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index 73f541c..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/zh_CN.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "↩"; -"Enter" = "⌅"; -"Tab" = "⇥"; -"Space" = "空白"; -"Delete" = "⌫"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "帮助"; - -"Keypad ." = "键盘 ."; -"Keypad *" = "键盘 *"; -"Keypad +" = "键盘 +"; -"Keypad /" = "键盘 /"; -"Keypad -" = "键盘 -"; -"Keypad =" = "键盘 ="; -"Keypad 0" = "键盘 0"; -"Keypad 1" = "键盘 1"; -"Keypad 2" = "键盘 2"; -"Keypad 3" = "键盘 3"; -"Keypad 4" = "键盘 4"; -"Keypad 5" = "键盘 5"; -"Keypad 6" = "键盘 6"; -"Keypad 7" = "键盘 7"; -"Keypad 8" = "键盘 8"; -"Keypad 9" = "键盘 9"; -"Keypad 0" = "键盘 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldLocalizations/zh_TW.lproj/GTMHotKeyTextField.strings b/AppKit/GTMHotKeyTextFieldLocalizations/zh_TW.lproj/GTMHotKeyTextField.strings deleted file mode 100644 index b5565bf..0000000 --- a/AppKit/GTMHotKeyTextFieldLocalizations/zh_TW.lproj/GTMHotKeyTextField.strings +++ /dev/null @@ -1,65 +0,0 @@ -/* - GTMHotKeyTextField.strings - - Copyright 2009 Google Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); you may not - use this file except in compliance with the License. You may obtain a copy - of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - License for the specific language governing permissions and limitations under - the License. -*/ - -"Return" = "↩"; -"Enter" = "⌅"; -"Tab" = "⇥"; -"Space" = "空白"; -"Delete" = "⌫"; -"Clear" = "⌧"; -"Esc" = "⎋"; -"Home" = "↖"; -"Page Up" = "⇡"; -"End" = "↘"; -"Page Down" = "⇣"; -"Help" = "輔助說明"; - -"Keypad ." = "鍵盤 ."; -"Keypad *" = "鍵盤 *"; -"Keypad +" = "鍵盤 +"; -"Keypad /" = "鍵盤 /"; -"Keypad -" = "鍵盤 -"; -"Keypad =" = "鍵盤 ="; -"Keypad 0" = "鍵盤 0"; -"Keypad 1" = "鍵盤 1"; -"Keypad 2" = "鍵盤 2"; -"Keypad 3" = "鍵盤 3"; -"Keypad 4" = "鍵盤 4"; -"Keypad 5" = "鍵盤 5"; -"Keypad 6" = "鍵盤 6"; -"Keypad 7" = "鍵盤 7"; -"Keypad 8" = "鍵盤 8"; -"Keypad 9" = "鍵盤 9"; -"Keypad 0" = "鍵盤 0"; - -"F1" = "F1"; -"F2" = "F2"; -"F3" = "F3"; -"F4" = "F4"; -"F5" = "F5"; -"F6" = "F6"; -"F7" = "F7"; -"F8" = "F8"; -"F9" = "F9"; -"F10" = "F10"; -"F11" = "F11"; -"F12" = "F12"; -"F13" = "F13"; -"F14" = "F14"; -"F15" = "F15"; -"F16" = "F16"; diff --git a/AppKit/GTMHotKeyTextFieldTest.h b/AppKit/GTMHotKeyTextFieldTest.h deleted file mode 100644 index 8cf05c2..0000000 --- a/AppKit/GTMHotKeyTextFieldTest.h +++ /dev/null @@ -1,31 +0,0 @@ -// GTMHotKeyTextFieldTest.h -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Cocoa/Cocoa.h> - -@class GTMHotKeyTextField; - -@interface GTMHotKeyTextFieldTestController : NSWindowController { - @private - IBOutlet GTMHotKeyTextField *view_; -} - -- (GTMHotKeyTextField *)view; -@end - -@interface GTMHotKeyTextFieldTestControllerWindowDelegate : NSObject -@end diff --git a/AppKit/GTMHotKeyTextFieldTest.m b/AppKit/GTMHotKeyTextFieldTest.m deleted file mode 100644 index 1bdc4cc..0000000 --- a/AppKit/GTMHotKeyTextFieldTest.m +++ /dev/null @@ -1,407 +0,0 @@ -// GTMHotKeyTextFieldTest.m -// -// Copyright 2006-2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMHotKeyTextFieldTest.h" -#import "GTMHotKeyTextField.h" -#import "GTMSenTestCase.h" -#import "GTMUnitTestDevLog.h" -#import <Carbon/Carbon.h> - -@interface GTMHotKeyTextFieldCell (PrivateMethods) -// Private methods which we want to access to test -+ (NSString *)displayStringForHotKey:(GTMHotKey *)hotKey; -@end - -@interface GTMHotKeyTextFieldTest : GTMTestCase { - @private - GTMHotKeyTextFieldTestController *controller_; - GTMHotKey *hotKey_; -} -- (GTMHotKey *)hotKey; -- (void)setHotKey:(GTMHotKey*)hotkey; -@end - -@implementation GTMHotKeyTextFieldTest - -- (void)setUp { - controller_ = [[GTMHotKeyTextFieldTestController alloc] init]; - hotKey_ = [[GTMHotKey alloc] initWithKeyCode:42 - modifiers:NSCommandKeyMask - useDoubledModifier:NO]; - STAssertNotNil(hotKey_, nil); - STAssertNotNil(controller_, nil); - STAssertNotNil([controller_ window], nil); -} - -- (void)tearDown { - [controller_ close]; - [controller_ release]; - [hotKey_ release]; -} - -- (GTMHotKey *)hotKey { - return hotKey_; -} - -- (void)setHotKey:(GTMHotKey*)hotKey { - [hotKey_ autorelease]; - hotKey_ = [hotKey retain]; -} - -- (void)testStringForModifierFlags { - - // Make sure only the flags we expect generate things in their strings - STAssertEquals([[GTMHotKeyTextFieldCell stringForModifierFlags:NSAlphaShiftKeyMask] length], - (NSUInteger)0, nil); - STAssertEquals([[GTMHotKeyTextFieldCell stringForModifierFlags:NSShiftKeyMask] length], - (NSUInteger)1, nil); - STAssertEquals([[GTMHotKeyTextFieldCell stringForModifierFlags:NSControlKeyMask] length], - (NSUInteger)1, nil); - STAssertEquals([[GTMHotKeyTextFieldCell stringForModifierFlags:NSAlternateKeyMask] length], - (NSUInteger)1, nil); - STAssertEquals([[GTMHotKeyTextFieldCell stringForModifierFlags:NSCommandKeyMask] length], - (NSUInteger)1, nil); - STAssertEquals([[GTMHotKeyTextFieldCell stringForModifierFlags:NSNumericPadKeyMask] length], - (NSUInteger)0, nil); - STAssertEquals([[GTMHotKeyTextFieldCell stringForModifierFlags:NSHelpKeyMask] length], - (NSUInteger)0, nil); - STAssertEquals([[GTMHotKeyTextFieldCell stringForModifierFlags:NSFunctionKeyMask] length], - (NSUInteger)0, nil); - - // And some quick checks combining flags to make sure the string gets longer - STAssertEquals([[GTMHotKeyTextFieldCell stringForModifierFlags:(NSShiftKeyMask | - NSAlternateKeyMask)] length], - (NSUInteger)2, nil); - STAssertEquals([[GTMHotKeyTextFieldCell stringForModifierFlags:(NSShiftKeyMask | - NSAlternateKeyMask | - NSCommandKeyMask)] length], - (NSUInteger)3, nil); - STAssertEquals([[GTMHotKeyTextFieldCell stringForModifierFlags:(NSShiftKeyMask | - NSAlternateKeyMask | - NSCommandKeyMask | - NSControlKeyMask)] length], - (NSUInteger)4, nil); - -} - -- (void)testStringForKeycode_useGlyph_resourceBundle { - NSBundle *bundle = [NSBundle bundleForClass:[self class]]; - STAssertNotNil(bundle, @"failed to get our bundle?"); - NSString *str; - - // We need a better test, but for now, we'll just loop through things we know - // we handle. - - // TODO: we need to force the pre leopard code path during tests. - - UInt16 testData[] = { - 123, 124, 125, 126, 122, 120, 99, 118, 96, 97, 98, 100, 101, 109, 103, 111, - 105, 107, 113, 106, 117, 36, 76, 48, 49, 51, 71, 53, 115, 116, 119, 121, - 114, 65, 67, 69, 75, 78, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, - }; - for (int useGlyph = 0 ; useGlyph < 2 ; ++useGlyph) { - for (size_t i = 0; i < (sizeof(testData) / sizeof(UInt16)); ++i) { - UInt16 keycode = testData[i]; - - str = [GTMHotKeyTextFieldCell stringForKeycode:keycode - useGlyph:useGlyph - resourceBundle:bundle]; - STAssertNotNil(str, - @"failed to get a string for keycode %u (useGlyph:%@)", - keycode, (useGlyph ? @"YES" : @"NO")); - STAssertGreaterThan([str length], (NSUInteger)0, - @"got an empty string for keycode %u (useGlyph:%@)", - keycode, (useGlyph ? @"YES" : @"NO")); - } - } -} - -- (void)testGTMHotKeyPrettyString { - GTMHotKey *hotKey = [GTMHotKey hotKeyWithKeyCode:114 - modifiers:NSCommandKeyMask - useDoubledModifier:NO]; - STAssertNotNil(hotKey, nil); - STAssertNotNil([GTMHotKeyTextFieldCell displayStringForHotKey:hotKey], nil); - - hotKey = [GTMHotKey hotKeyWithKeyCode:1 - modifiers:0 - useDoubledModifier:NO]; - - STAssertNotNil(hotKey, nil); - STAssertNil([GTMHotKeyTextFieldCell displayStringForHotKey:hotKey], nil); -} - -- (void)testFieldEditorSettersAndGetters { - NSWindow *window = [controller_ window]; - GTMHotKeyTextField *field = [controller_ view]; - STAssertNotNil(field, nil); - GTMHotKeyFieldEditor *editor - = (GTMHotKeyFieldEditor *)[window fieldEditor:YES forObject:field]; - STAssertTrue([editor isMemberOfClass:[GTMHotKeyFieldEditor class]], nil); - STAssertEqualObjects(editor, - [GTMHotKeyFieldEditor sharedHotKeyFieldEditor], - nil); - SEL selectors[] = - { - @selector(readablePasteboardTypes), - @selector(acceptableDragTypes), - @selector(writablePasteboardTypes) - }; - for (size_t i = 0; i < sizeof(selectors) / sizeof(selectors[0]); ++i) { - NSArray *array = [editor performSelector:selectors[i]]; - STAssertNotNil(array, nil); - STAssertEquals([array count], (NSUInteger)0, - @"Failed Selector: %@", NSStringFromSelector(selectors[i])); - } -} - -- (void)testTextFieldSettersAndGetters { - GTMHotKeyTextField *field = [controller_ view]; - STAssertNotNil(field, nil); - NSString *expectedString - = @"Hot key fields want hot key dictionaries as object values."; - [GTMUnitTestDevLog expect:3 casesOfString:@"%@", expectedString]; - [field setDoubleValue:2]; - [field setIntValue:-1]; - [field setFloatValue:0]; - STAssertEquals([field doubleValue], 0.0, nil); - STAssertEquals([field intValue], 0, nil); - STAssertEquals([field floatValue], 0.0f, nil); -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - [GTMUnitTestDevLog expectString:@"%@", expectedString]; - [field setIntegerValue:5]; - STAssertEquals([field integerValue], (NSInteger)0, nil); -#endif - SEL takeNumberSels[] = - { - @selector(takeDoubleValueFrom:), - @selector(takeFloatValueFrom:), - @selector(takeIntValueFrom:) - }; - for (size_t i = 0; - i < sizeof(takeNumberSels) / sizeof(takeNumberSels[0]); ++i) { - [GTMUnitTestDevLog expect:2 casesOfString:@"%@", expectedString]; - [field performSelector:takeNumberSels[i] withObject:self]; - [field performSelector:takeNumberSels[i] withObject:nil]; - } - - [GTMUnitTestDevLog expect:6 casesOfString:@"%@", expectedString]; - [field takeStringValueFrom:self]; - [field takeStringValueFrom:nil]; - [field setStringValue:nil]; - [field setStringValue:@"foo"]; - - NSAttributedString *attrString - = [[[NSAttributedString alloc] initWithString:@"foo"] autorelease]; - [field setAttributedStringValue:nil]; - [field setAttributedStringValue:attrString]; - - STAssertNil([field formatter], nil); - [field setFormatter:nil]; - NSFormatter *testFormatter = [[[NSFormatter alloc] init] autorelease]; - [GTMUnitTestDevLog expectString:@"Hot key fields don't accept formatters."]; - [field setFormatter:testFormatter]; - - [GTMUnitTestDevLog expectString:@"%@", expectedString]; - [field takeObjectValueFrom:self]; - - // Setting to nil is valid. - [field takeObjectValueFrom:nil]; -} - -- (void)pressKey:(NSString *)key code:(NSInteger)code - modifierFlags:(NSInteger)flags window:(NSWindow *)window { - NSInteger windNum = [window windowNumber]; - NSGraphicsContext *context = [NSGraphicsContext currentContext]; - EventTime evtTime = GetCurrentEventTime(); - NSPoint loc = [NSEvent mouseLocation]; - NSEvent *keyDownEvt = [NSEvent keyEventWithType:NSKeyDown - location:loc - modifierFlags:flags - timestamp:evtTime - windowNumber:windNum - context:context - characters:key - charactersIgnoringModifiers:key - isARepeat:NO - keyCode:code]; - NSEvent *keyUpEvt = [NSEvent keyEventWithType:NSKeyUp - location:loc - modifierFlags:flags - timestamp:evtTime - windowNumber:windNum - context:context - characters:key - charactersIgnoringModifiers:key - isARepeat:NO - keyCode:code]; - STAssertNotNil(keyDownEvt, nil); - STAssertNotNil(keyUpEvt, nil); - [window sendEvent:keyDownEvt]; - [window sendEvent:keyUpEvt]; -} - -- (void)testTextFieldBindings { - NSObjectController *controller - = [[[NSObjectController alloc] init] autorelease]; - [controller setObjectClass:[self class]]; - [controller bind:NSContentBinding - toObject:self - withKeyPath:@"self" - options:nil]; - STAssertNotNil(controller, nil); - GTMHotKeyTextField *field = [controller_ view]; - STAssertNotNil(field, nil); - [field bind:NSValueBinding - toObject:controller - withKeyPath:@"selection.hotKey" - options:nil]; - id value = [field objectValue]; - STAssertEqualObjects(value, hotKey_, nil); - NSString *stringValue = [field stringValue]; - STAssertEqualObjects(stringValue, @"⌘\\", nil); - NSAttributedString *attrStringValue = [field attributedStringValue]; - STAssertEqualObjects([attrStringValue string], stringValue, nil); - // Try changing some values - GTMHotKey *newHotKey = [GTMHotKey hotKeyWithKeyCode:43 - modifiers:NSCommandKeyMask - useDoubledModifier:NO]; - [self setHotKey:newHotKey]; - stringValue = [field stringValue]; - STAssertEqualObjects(stringValue, @"⌘,", nil); - - // Now try some typing - NSWindow *window = [controller_ window]; - STAssertTrue([window makeFirstResponder:field], nil); - [self pressKey:@"A" code:0 modifierFlags:NSShiftKeyMask window:window]; - stringValue = [field stringValue]; - STAssertEqualObjects(stringValue, @"⇧A", nil); - - // field is supposed to give up first responder when editing is done. - STAssertNotEqualObjects([window firstResponder], field, nil); - - // Do NOT attempt to set the key via pressKey to the same cmd-key combo - // as a menu item. This works fine on Leopard, but fails on Tiger (and fails - // on Leopard if you have linked to the Tiger libs). I hope control-shift-opt - // J won't be used in our simple test app. - STAssertTrue([window makeFirstResponder:field], nil); - int modifiers = NSAlternateKeyMask | NSShiftKeyMask | NSControlKeyMask; - [self pressKey:@"J" - code:38 - modifierFlags:modifiers - window:window]; - stringValue = [field stringValue]; - STAssertEqualObjects(stringValue, @"⌃⌥⇧J", nil); - GTMHotKey *cmdJHotKey = [GTMHotKey hotKeyWithKeyCode:38 - modifiers:modifiers - useDoubledModifier:NO]; - STAssertEqualObjects(cmdJHotKey, hotKey_, nil); - - // Try without a modifier. This should fail. - STAssertTrue([window makeFirstResponder:field], nil); - [self pressKey:@"j" code:38 modifierFlags:0 window:window]; - stringValue = [field stringValue]; - STAssertEqualObjects(stringValue, @"⌃⌥⇧J", nil); - - // Try cmd-q this should fail - STAssertTrue([window makeFirstResponder:field], nil); - [self pressKey:@"Q" code:12 modifierFlags:NSCommandKeyMask window:window]; - stringValue = [field stringValue]; - STAssertEqualObjects(stringValue, @"⌃⌥⇧J", nil); - - // Try cmd-w this should fail - STAssertTrue([window makeFirstResponder:field], nil); - [self pressKey:@"W" code:13 modifierFlags:NSCommandKeyMask window:window]; - stringValue = [field stringValue]; - STAssertEqualObjects(stringValue, @"⌃⌥⇧J", nil); - - // Try cmd-tab this should fail - STAssertTrue([window makeFirstResponder:field], nil); - [self pressKey:@"\t" code:48 modifierFlags:NSCommandKeyMask window:window]; - stringValue = [field stringValue]; - STAssertEqualObjects(stringValue, @"⌃⌥⇧J", nil); - - // Do it by hotkey - GTMHotKey *cmdSHotKey = [GTMHotKey hotKeyWithKeyCode:1 - modifiers:NSCommandKeyMask - useDoubledModifier:NO]; - [controller setValue:cmdSHotKey forKeyPath:@"selection.hotKey"]; - stringValue = [field stringValue]; - STAssertEqualObjects(stringValue, @"⌘S", nil); - - // Check to make sure the binding stuck - STAssertEqualObjects(cmdSHotKey, hotKey_, nil); - - // Check to make sure that programatic edits don't modify our model - [field setObjectValue:cmdJHotKey]; - STAssertEqualObjects(cmdSHotKey, hotKey_, nil); - - [field unbind:NSValueBinding]; - [controller unbind:NSContentBinding]; - - GTMHotKey *cmdDHotKey = [GTMHotKey hotKeyWithKeyCode:2 - modifiers:NSCommandKeyMask - useDoubledModifier:NO]; - [field setObjectValue:cmdDHotKey]; - stringValue = [field stringValue]; - STAssertEqualObjects(stringValue, @"⌘D", nil); -} - -- (int)intValue { - return 2; -} - -- (float)floatValue { - return [self intValue]; -} - -- (double)doubleValue { - return [self floatValue]; -} - -- (NSString *)stringValue { - return @"GTMHotKeyTextFieldTestStringValue"; -} - -- (id)objectValue { - return self; -} - -@end - -@implementation GTMHotKeyTextFieldTestController -- (id)init { - return [super initWithWindowNibName:@"GTMHotKeyTextFieldTest"]; -} - -- (GTMHotKeyTextField *)view { - return view_; -} - -@end - -@implementation GTMHotKeyTextFieldTestControllerWindowDelegate - --(id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)anObject { - id editor = nil; - if ([anObject isKindOfClass:[GTMHotKeyTextField class]]) { - editor = [GTMHotKeyFieldEditor sharedHotKeyFieldEditor]; - } - return editor; -} -@end - diff --git a/AppKit/GTMHotKeyTextFieldTest.xib b/AppKit/GTMHotKeyTextFieldTest.xib deleted file mode 100644 index c4d0726..0000000 --- a/AppKit/GTMHotKeyTextFieldTest.xib +++ /dev/null @@ -1,401 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9L31a</string> - <string key="IBDocument.InterfaceBuilderVersion">680</string> - <string key="IBDocument.AppKitVersion">949.54</string> - <string key="IBDocument.HIToolboxVersion">353.00</string> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="4"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMHotKeyTextFieldTestController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">1</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{196, 448}, {136, 62}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="972143176"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 20}, {96, 22}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="781959520"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <object class="NSFont" key="NSSupport"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.300000e+01</double> - <int key="NSfFlags">1044</int> - </object> - <reference key="NSControlView" ref="972143176"/> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSColor" key="NSBackgroundColor"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textBackgroundColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MAA</bytes> - </object> - </object> - </object> - </object> - </object> - <string key="NSFrameSize">{136, 62}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string> - <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> - </object> - <object class="NSCustomObject" id="421484812"> - <string key="NSClassName">GTMHotKeyTextFieldTestControllerWindowDelegate</string> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">3</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">view_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="972143176"/> - </object> - <int key="connectionID">7</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">initialFirstResponder</string> - <reference key="source" ref="1005"/> - <reference key="destination" ref="972143176"/> - </object> - <int key="connectionID">12</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">delegate</string> - <reference key="source" ref="1005"/> - <reference key="destination" ref="421484812"/> - </object> - <int key="connectionID">13</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <object class="NSArray" key="object" id="1002"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="1002"/> - <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="1002"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="1002"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - </object> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="972143176"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">4</int> - <reference key="object" ref="972143176"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="781959520"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">5</int> - <reference key="object" ref="781959520"/> - <reference key="parent" ref="972143176"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">10</int> - <reference key="object" ref="421484812"/> - <reference key="parent" ref="1002"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>10.IBPluginDependency</string> - <string>2.IBPluginDependency</string> - <string>4.CustomClassName</string> - <string>4.IBPluginDependency</string> - <string>5.CustomClassName</string> - <string>5.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{746, 673}, {136, 62}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{746, 673}, {136, 62}}</string> - <boolean value="NO"/> - <string>{196, 240}</string> - <string>{{357, 418}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>GTMHotKeyTextField</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>GTMHotKeyTextFieldCell</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">13</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMHotKeyTextField</string> - <string key="superclassName">NSTextField</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="554256206"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMHotKeyTextField.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMHotKeyTextFieldCell</string> - <string key="superclassName">NSTextFieldCell</string> - <reference key="sourceIdentifier" ref="554256206"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMHotKeyTextFieldTestController</string> - <string key="superclassName">NSWindowController</string> - <object class="NSMutableDictionary" key="outlets"> - <string key="NS.key.0">view_</string> - <string key="NS.object.0">GTMHotKeyTextField</string> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="690883007"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMHotKeyTextFieldTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMHotKeyTextFieldTestControllerWindowDelegate</string> - <string key="superclassName">NSObject</string> - <reference key="sourceIdentifier" ref="690883007"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="837783357"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKitUnitTestingUtilities.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="837783357"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="837783357"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="837783357"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <reference key="sourceIdentifier" ref="837783357"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="54851293"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMNSAnimatablePropertyContainer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="837783357"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="54851293"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="837783357"/> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - </data> -</archive> diff --git a/AppKit/GTMIBArrayTest.m b/AppKit/GTMIBArrayTest.m index a21ea11..0af328e 100644 --- a/AppKit/GTMIBArrayTest.m +++ b/AppKit/GTMIBArrayTest.m @@ -58,16 +58,16 @@ - (void)testEmpty { GTMIBArray *worker = [[[GTMIBArray alloc] init] autorelease]; - STAssertNotNil(worker, nil); - STAssertEquals([worker count], (NSUInteger)0, nil); + XCTAssertNotNil(worker); + XCTAssertEqual([worker count], (NSUInteger)0); worker = [[[IBArrayTestHelper alloc] initWithObj1:nil obj2:nil obj3:nil obj4:nil obj5:nil] autorelease]; - STAssertNotNil(worker, nil); - STAssertEquals([worker count], (NSUInteger)0, nil); + XCTAssertNotNil(worker); + XCTAssertEqual([worker count], (NSUInteger)0); } - (void)testSparse { @@ -103,17 +103,17 @@ obj3:data[i].obj3 obj4:data[i].obj4 obj5:data[i].obj5] autorelease]; - STAssertNotNil(worker, @"index %zu", i); + XCTAssertNotNil(worker, @"index %zu", i); NSUInteger count = 0; if (data[i].obj1) ++count; if (data[i].obj2) ++count; if (data[i].obj3) ++count; if (data[i].obj4) ++count; if (data[i].obj5) ++count; - STAssertEquals([worker count], count, @"index %zu", i); - STAssertEqualObjects([worker componentsJoinedByString:@""], - data[i].combined, - @"index %zu", i); + XCTAssertEqual([worker count], count, @"index %zu", i); + XCTAssertEqualObjects([worker componentsJoinedByString:@""], + data[i].combined, + @"index %zu", i); } } @@ -184,11 +184,11 @@ for (size_t i = 0; i < sizeof(data) / sizeof(data[0]); ++i) { NSArray *worker = data[i].ibArray; - STAssertNotNil(worker, @"index %zu", i); - STAssertEquals([worker count], data[i].count, @"index %zu", i); - STAssertEqualObjects([worker componentsJoinedByString:@""], - data[i].result, - @"index %zu", i); + XCTAssertNotNil(worker, @"index %zu", i); + XCTAssertEqual([worker count], data[i].count, @"index %zu", i); + XCTAssertEqualObjects([worker componentsJoinedByString:@""], + data[i].result, + @"index %zu", i); } } @@ -201,22 +201,22 @@ obj5:@"e"] autorelease]; NSEnumerator *enumerator = [worker objectEnumerator]; - STAssertNotNil(enumerator, nil); - STAssertEqualObjects([enumerator nextObject], @"a", nil); - STAssertEqualObjects([enumerator nextObject], @"b", nil); - STAssertEqualObjects([enumerator nextObject], @"c", nil); - STAssertEqualObjects([enumerator nextObject], @"d", nil); - STAssertEqualObjects([enumerator nextObject], @"e", nil); - STAssertNil([enumerator nextObject], nil); + XCTAssertNotNil(enumerator); + XCTAssertEqualObjects([enumerator nextObject], @"a"); + XCTAssertEqualObjects([enumerator nextObject], @"b"); + XCTAssertEqualObjects([enumerator nextObject], @"c"); + XCTAssertEqualObjects([enumerator nextObject], @"d"); + XCTAssertEqualObjects([enumerator nextObject], @"e"); + XCTAssertNil([enumerator nextObject]); enumerator = [worker reverseObjectEnumerator]; - STAssertNotNil(enumerator, nil); - STAssertEqualObjects([enumerator nextObject], @"e", nil); - STAssertEqualObjects([enumerator nextObject], @"d", nil); - STAssertEqualObjects([enumerator nextObject], @"c", nil); - STAssertEqualObjects([enumerator nextObject], @"b", nil); - STAssertEqualObjects([enumerator nextObject], @"a", nil); - STAssertNil([enumerator nextObject], nil); + XCTAssertNotNil(enumerator); + XCTAssertEqualObjects([enumerator nextObject], @"e"); + XCTAssertEqualObjects([enumerator nextObject], @"d"); + XCTAssertEqualObjects([enumerator nextObject], @"c"); + XCTAssertEqualObjects([enumerator nextObject], @"b"); + XCTAssertEqualObjects([enumerator nextObject], @"a"); + XCTAssertNil([enumerator nextObject]); } #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 @@ -233,22 +233,22 @@ for (id obj in worker) { switch (++idx) { case 1: - STAssertEqualObjects(obj, @"a", nil); + XCTAssertEqualObjects(obj, @"a"); break; case 2: - STAssertEqualObjects(obj, @"b", nil); + XCTAssertEqualObjects(obj, @"b"); break; case 3: - STAssertEqualObjects(obj, @"c", nil); + XCTAssertEqualObjects(obj, @"c"); break; case 4: - STAssertEqualObjects(obj, @"d", nil); + XCTAssertEqualObjects(obj, @"d"); break; case 5: - STAssertEqualObjects(obj, @"e", nil); + XCTAssertEqualObjects(obj, @"e"); break; default: - STFail(@"looping too many times: %zu", idx); + XCTFail(@"looping too many times: %ld", (unsigned long)idx); break; } } @@ -267,14 +267,14 @@ // Should get back a different object, but with the same contents. NSArray *aCopy = [[worker copy] autorelease]; - STAssertNotEquals(aCopy, worker, nil); - STAssertEqualObjects(aCopy, worker, nil); + XCTAssertNotEqual(aCopy, worker); + XCTAssertEqualObjects(aCopy, worker); NSArray *aMutableCopy = [[worker mutableCopy] autorelease]; - STAssertNotEquals(aMutableCopy, worker, nil); - STAssertNotEquals(aMutableCopy, aCopy, nil); - STAssertEqualObjects(aMutableCopy, worker, nil); - STAssertEqualObjects(aMutableCopy, aCopy, nil); + XCTAssertNotEqual(aMutableCopy, worker); + XCTAssertNotEqual(aMutableCopy, aCopy); + XCTAssertEqualObjects(aMutableCopy, worker); + XCTAssertEqualObjects(aMutableCopy, aCopy); } - (void)testFromNib { @@ -282,24 +282,24 @@ [[[GTMIBArrayTestWindowController alloc] initWithWindowNibName:@"GTMIBArrayTest"] autorelease]; NSWindow *window = [controller window]; - STAssertNotNil(window, nil); + XCTAssertNotNil(window); NSArray *labels = [controller labelsArray]; NSArray *fields = [controller fieldsArray]; NSArray *everything = [controller everythingArray]; - STAssertNotNil(labels, nil); - STAssertNotNil(fields, nil); - STAssertNotNil(everything, nil); + XCTAssertNotNil(labels); + XCTAssertNotNil(fields); + XCTAssertNotNil(everything); - STAssertEquals([labels count], (NSUInteger)3, nil); - STAssertEquals([fields count], (NSUInteger)3, nil); - STAssertEquals([everything count], (NSUInteger)8, nil); + XCTAssertEqual([labels count], (NSUInteger)3); + XCTAssertEqual([fields count], (NSUInteger)3); + XCTAssertEqual([everything count], (NSUInteger)8); NSSet *labelsSet = [NSSet setWithArray:labels]; NSSet *fieldsSet = [NSSet setWithArray:fields]; NSSet *everythingSet = [NSSet setWithArray:everything]; - STAssertTrue([labelsSet isSubsetOfSet:everythingSet], nil); - STAssertTrue([fieldsSet isSubsetOfSet:everythingSet], nil); + XCTAssertTrue([labelsSet isSubsetOfSet:everythingSet]); + XCTAssertTrue([fieldsSet isSubsetOfSet:everythingSet]); } - (void)testIsEqual { @@ -316,19 +316,19 @@ obj4:@"i" obj5:@"j"] autorelease]; - STAssertEquals([ibArray1 hash], [ibArray2 hash], nil); - STAssertNotEqualObjects(ibArray1, ibArray2, nil); + XCTAssertEqual([ibArray1 hash], [ibArray2 hash]); + XCTAssertNotEqualObjects(ibArray1, ibArray2); NSArray *ibArray1Prime = [[ibArray1 copy] autorelease]; NSArray *ibArray2Prime = [[ibArray2 copy] autorelease]; - STAssertTrue(ibArray1 != ibArray1Prime, nil); - STAssertTrue(ibArray2 != ibArray2Prime, nil); - STAssertNotEqualObjects(ibArray1Prime, ibArray2Prime, nil); - STAssertEqualObjects(ibArray1, ibArray1Prime, nil); - STAssertEqualObjects(ibArray2, ibArray2Prime, nil); + XCTAssertTrue(ibArray1 != ibArray1Prime); + XCTAssertTrue(ibArray2 != ibArray2Prime); + XCTAssertNotEqualObjects(ibArray1Prime, ibArray2Prime); + XCTAssertEqualObjects(ibArray1, ibArray1Prime); + XCTAssertEqualObjects(ibArray2, ibArray2Prime); } - + @end @implementation GTMIBArrayTestWindowController diff --git a/AppKit/GTMIBArrayTest.xib b/AppKit/GTMIBArrayTest.xib index f348fec..34d69e5 100644 --- a/AppKit/GTMIBArrayTest.xib +++ b/AppKit/GTMIBArrayTest.xib @@ -1,807 +1,129 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9L30</string> - <string key="IBDocument.InterfaceBuilderVersion">677</string> - <string key="IBDocument.AppKitVersion">949.54</string> - <string key="IBDocument.HIToolboxVersion">353.00</string> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="2"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMIBArrayTestWindowController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{71, 286}, {491, 166}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="32340604"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 126}, {100, 17}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="1064530732"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">71304192</int> - <string key="NSContents">First Name:</string> - <object class="NSFont" key="NSSupport" id="396891173"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.300000e+01</double> - <int key="NSfFlags">1044</int> - </object> - <reference key="NSControlView" ref="32340604"/> - <object class="NSColor" key="NSBackgroundColor" id="584893825"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor" id="215232119"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlTextColor</string> - <object class="NSColor" key="NSColor" id="960820016"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSTextField" id="499628444"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 62}, {100, 17}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="200889835"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">71304192</int> - <string key="NSContents">Last Name:</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="499628444"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - <object class="NSTextField" id="236725617"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 94}, {100, 17}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="65808262"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">71304192</int> - <string key="NSContents">Middle Name:</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="236725617"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - <object class="NSTextField" id="800844720"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{122, 92}, {349, 22}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="951606926"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="800844720"/> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSColor" key="NSBackgroundColor" id="763520216"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textBackgroundColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor" id="843269795"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textColor</string> - <reference key="NSColor" ref="960820016"/> - </object> - </object> - </object> - <object class="NSTextField" id="745022904"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{122, 60}, {349, 22}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="810828168"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="745022904"/> - <bool key="NSDrawsBackground">YES</bool> - <reference key="NSBackgroundColor" ref="763520216"/> - <reference key="NSTextColor" ref="843269795"/> - </object> - </object> - <object class="NSTextField" id="478979211"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{122, 124}, {349, 22}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="1044158630"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="478979211"/> - <bool key="NSDrawsBackground">YES</bool> - <reference key="NSBackgroundColor" ref="763520216"/> - <reference key="NSTextColor" ref="843269795"/> - </object> - </object> - <object class="NSButton" id="228116783"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">289</int> - <string key="NSFrame">{{381, 12}, {96, 32}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="394822725"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">OK</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="228116783"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="476526902"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">289</int> - <string key="NSFrame">{{285, 12}, {96, 32}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="615815"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">Cancel</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="476526902"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrameSize">{491, 166}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> - <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> - </object> - <object class="NSCustomObject" id="978135756"> - <string key="NSClassName">GTMIBArray</string> - </object> - <object class="NSCustomObject" id="202064574"> - <string key="NSClassName">GTMIBArray</string> - </object> - <object class="NSCustomObject" id="1042708171"> - <string key="NSClassName">GTMIBArray</string> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">119</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">object1_</string> - <reference key="source" ref="978135756"/> - <reference key="destination" ref="32340604"/> - </object> - <int key="connectionID">125</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">object2_</string> - <reference key="source" ref="978135756"/> - <reference key="destination" ref="236725617"/> - </object> - <int key="connectionID">126</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">object3_</string> - <reference key="source" ref="978135756"/> - <reference key="destination" ref="499628444"/> - </object> - <int key="connectionID">127</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">labels_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="978135756"/> - </object> - <int key="connectionID">128</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">object1_</string> - <reference key="source" ref="202064574"/> - <reference key="destination" ref="478979211"/> - </object> - <int key="connectionID">130</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">object2_</string> - <reference key="source" ref="202064574"/> - <reference key="destination" ref="800844720"/> - </object> - <int key="connectionID">131</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">object3_</string> - <reference key="source" ref="202064574"/> - <reference key="destination" ref="745022904"/> - </object> - <int key="connectionID">132</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">object1_</string> - <reference key="source" ref="1042708171"/> - <reference key="destination" ref="978135756"/> - </object> - <int key="connectionID">134</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">object2_</string> - <reference key="source" ref="1042708171"/> - <reference key="destination" ref="202064574"/> - </object> - <int key="connectionID">135</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">object3_</string> - <reference key="source" ref="1042708171"/> - <reference key="destination" ref="228116783"/> - </object> - <int key="connectionID">136</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">object4_</string> - <reference key="source" ref="1042708171"/> - <reference key="destination" ref="476526902"/> - </object> - <int key="connectionID">137</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">fields_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="202064574"/> - </object> - <int key="connectionID">138</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">everything_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1042708171"/> - </object> - <int key="connectionID">139</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <object class="NSArray" key="object" id="1002"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="1002"/> - <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="1002"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="1002"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - </object> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="32340604"/> - <reference ref="236725617"/> - <reference ref="800844720"/> - <reference ref="745022904"/> - <reference ref="478979211"/> - <reference ref="228116783"/> - <reference ref="476526902"/> - <reference ref="499628444"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">5</int> - <reference key="object" ref="32340604"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1064530732"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">6</int> - <reference key="object" ref="1064530732"/> - <reference key="parent" ref="32340604"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">9</int> - <reference key="object" ref="499628444"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="200889835"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">10</int> - <reference key="object" ref="200889835"/> - <reference key="parent" ref="499628444"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">7</int> - <reference key="object" ref="236725617"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="65808262"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">8</int> - <reference key="object" ref="65808262"/> - <reference key="parent" ref="236725617"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">13</int> - <reference key="object" ref="800844720"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="951606926"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">14</int> - <reference key="object" ref="951606926"/> - <reference key="parent" ref="800844720"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">15</int> - <reference key="object" ref="745022904"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="810828168"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">16</int> - <reference key="object" ref="810828168"/> - <reference key="parent" ref="745022904"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">11</int> - <reference key="object" ref="478979211"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1044158630"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">12</int> - <reference key="object" ref="1044158630"/> - <reference key="parent" ref="478979211"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">120</int> - <reference key="object" ref="228116783"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="394822725"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">121</int> - <reference key="object" ref="394822725"/> - <reference key="parent" ref="228116783"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">122</int> - <reference key="object" ref="476526902"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="615815"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">123</int> - <reference key="object" ref="615815"/> - <reference key="parent" ref="476526902"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">124</int> - <reference key="object" ref="978135756"/> - <reference key="parent" ref="1002"/> - <string key="objectName">Labels Array</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">129</int> - <reference key="object" ref="202064574"/> - <reference key="parent" ref="1002"/> - <string key="objectName">Fields Array</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">133</int> - <reference key="object" ref="1042708171"/> - <reference key="parent" ref="1002"/> - <string key="objectName">Everything Array</string> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>10.IBPluginDependency</string> - <string>11.IBPluginDependency</string> - <string>12.IBPluginDependency</string> - <string>120.IBPluginDependency</string> - <string>121.IBPluginDependency</string> - <string>122.IBPluginDependency</string> - <string>123.IBPluginDependency</string> - <string>124.IBPluginDependency</string> - <string>129.IBPluginDependency</string> - <string>13.IBPluginDependency</string> - <string>133.IBPluginDependency</string> - <string>14.IBPluginDependency</string> - <string>15.IBPluginDependency</string> - <string>16.IBPluginDependency</string> - <string>2.IBPluginDependency</string> - <string>5.IBPluginDependency</string> - <string>6.IBPluginDependency</string> - <string>7.IBPluginDependency</string> - <string>8.IBPluginDependency</string> - <string>9.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>{{636, 990}, {491, 166}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{636, 990}, {491, 166}}</string> - <boolean value="NO"/> - <string>{196, 240}</string> - <string>{{202, 428}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">140</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMIBArray</string> - <string key="superclassName">NSArray</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>object1_</string> - <string>object2_</string> - <string>object3_</string> - <string>object4_</string> - <string>object5_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>id</string> - <string>id</string> - <string>id</string> - <string>id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMIBArray.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMIBArrayTestWindowController</string> - <string key="superclassName">NSWindowController</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>everything_</string> - <string>fields_</string> - <string>labels_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSArray</string> - <string>NSArray</string> - <string>NSArray</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMIBArrayTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="925048441"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSArray</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMLogger.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSArray</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSArray+Merge.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMHTTPServer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="39542122"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMTheme.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="39542122"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - </data> -</archive> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G1004" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="GTMIBArrayTestWindowController"> + <connections> + <outlet property="everything_" destination="133" id="139"/> + <outlet property="fields_" destination="129" id="138"/> + <outlet property="labels_" destination="124" id="128"/> + <outlet property="window" destination="1" id="119"/> + </connections> + </customObject> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application"/> + <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" visibleAtLaunch="NO" animationBehavior="default" id="1"> + <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/> + <windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/> + <rect key="contentRect" x="71" y="286" width="491" height="166"/> + <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1178"/> + <view key="contentView" id="2"> + <rect key="frame" x="0.0" y="0.0" width="491" height="166"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <textField verticalHuggingPriority="750" id="5"> + <rect key="frame" x="17" y="126" width="100" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="First Name:" id="6"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="9"> + <rect key="frame" x="17" y="62" width="100" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Last Name:" id="10"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="7"> + <rect key="frame" x="17" y="94" width="100" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Middle Name:" id="8"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="13"> + <rect key="frame" x="122" y="92" width="349" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="14"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="15"> + <rect key="frame" x="122" y="60" width="349" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="16"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="11"> + <rect key="frame" x="122" y="124" width="349" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="12"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <button verticalHuggingPriority="750" id="120"> + <rect key="frame" x="381" y="12" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/> + <buttonCell key="cell" type="push" title="OK" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="121"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + <string key="keyEquivalent" base64-UTF8="YES"> +DQ +</string> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="122"> + <rect key="frame" x="285" y="12" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/> + <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="123"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + <string key="keyEquivalent" base64-UTF8="YES"> +Gw +</string> + </buttonCell> + </button> + </subviews> + </view> + </window> + <customObject id="124" userLabel="Labels Array" customClass="GTMIBArray"> + <connections> + <outlet property="object1_" destination="5" id="125"/> + <outlet property="object2_" destination="7" id="126"/> + <outlet property="object3_" destination="9" id="127"/> + </connections> + </customObject> + <customObject id="129" userLabel="Fields Array" customClass="GTMIBArray"> + <connections> + <outlet property="object1_" destination="11" id="130"/> + <outlet property="object2_" destination="13" id="131"/> + <outlet property="object3_" destination="15" id="132"/> + </connections> + </customObject> + <customObject id="133" userLabel="Everything Array" customClass="GTMIBArray"> + <connections> + <outlet property="object1_" destination="124" id="134"/> + <outlet property="object2_" destination="129" id="135"/> + <outlet property="object3_" destination="120" id="136"/> + <outlet property="object4_" destination="122" id="137"/> + </connections> + </customObject> + </objects> +</document> diff --git a/AppKit/GTMKeyValueAnimationTest.m b/AppKit/GTMKeyValueAnimationTest.m index 6b878df..aef262b 100644 --- a/AppKit/GTMKeyValueAnimationTest.m +++ b/AppKit/GTMKeyValueAnimationTest.m @@ -39,8 +39,8 @@ context_ = [GTMUnitTestingBooleanRunLoopContext context]; [[NSRunLoop currentRunLoop] gtm_runUpToSixtySecondsWithContext:context_]; [anim stopAnimation]; - STAssertTrue([context_ shouldStop], @"Animation value never got set"); - STAssertTrue(shouldStartHit_, @"animationShouldStart not called"); + XCTAssertTrue([context_ shouldStop], @"Animation value never got set"); + XCTAssertTrue(shouldStartHit_, @"animationShouldStart not called"); } - (BOOL)animationShouldStart:(NSAnimation*)animation { diff --git a/AppKit/GTMLargeTypeWindow.h b/AppKit/GTMLargeTypeWindow.h deleted file mode 100644 index 2b66a93..0000000 --- a/AppKit/GTMLargeTypeWindow.h +++ /dev/null @@ -1,70 +0,0 @@ -// -// GTMLargeTypeWindow.h -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Cocoa/Cocoa.h> - -// GTMLargeTypeWindow displays a block of text in a large panel window much -// like Address Book displays phone numbers. It will also display an image -// so you can pop up "alerts" similar to the way BBEdit does when you attempt -// to do a find and find nothing. It will fade in and out appropriately when -// ordered forward or backward. -// A typical fire-and-forget type usage would be: -// GTMLargeTypeWindow *window -// = [[[GTMLargeTypeWindow alloc] initWithString:@"Foo"] autorelease]; -// [window makeKeyAndOrderFront:nil]; - -// NB This class appears to have a problem with GC on 10.5.6 and below. -// Radar 6137322 CIFilter crashing when run with GC enabled -// This appears to be an Apple bug with GC. -// We do a copy animation that causes things to crash, but only with GC -// on. Currently I have left this enabled in GTMLargeTypeWindow pending -// info from Apple on the bug. It's hard to reproduce, and only appears -// at this time on our test machines. -// Dual-Core Intel Xeon with ATI Radeon X1300 - -@interface GTMLargeTypeWindow : NSPanel - -// Setter and getter for the copy animation duration. Default value is .5s. -// Note that this affects all windows. -+ (NSTimeInterval)copyAnimationDuration; -+ (void)setCopyAnimationDuration:(NSTimeInterval)duration; - -// Setter and getter for the fade animation duration. Default value is .3s. -// Note that this affects all windows. -+ (NSTimeInterval)fadeAnimationDuration; -+ (void)setFadeAnimationDuration:(NSTimeInterval)duration; - -// Creates a display window with |string| displayed. -// Formats |string| as best as possible to fill the screen. -- (id)initWithString:(NSString *)string; -// Creates a display window with |attrString| displayed. -// Expects you to format it as you want it to appear. -- (id)initWithAttributedString:(NSAttributedString *)attrString; -// Creates a display window with |image| displayed. -// Make sure you set the image size to what you want -- (id)initWithImage:(NSImage*)image; -// Creates a display window with |view| displayed. -- (id)initWithContentView:(NSView *)view; - -// Copy the text out of the window if appropriate. This is normally called -// as part of the responder chain so that the user can copy the displayed text -// using cmd-c. -- (void)copy:(id)sender; - - -@end diff --git a/AppKit/GTMLargeTypeWindow.m b/AppKit/GTMLargeTypeWindow.m deleted file mode 100644 index ab5cfec..0000000 --- a/AppKit/GTMLargeTypeWindow.m +++ /dev/null @@ -1,412 +0,0 @@ -// -// GTMLargeTypeWindow.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <QuartzCore/QuartzCore.h> - -#import "GTMLargeTypeWindow.h" -#import "GTMGeometryUtils.h" -#import "GTMNSBezierPath+RoundRect.h" -#import "GTMMethodCheck.h" -#import "GTMTypeCasting.h" - -// How far to inset the text from the edge of the window -static const CGFloat kEdgeInset = 16.0; - -// Give us an alpha value for our backing window -static const CGFloat kTwoThirdsAlpha = 0.66; - -// Amount of time to do copy animations -static NSTimeInterval gGTMLargeTypeWindowCopyAnimationDuration = 0.5; - -// Amount of time to do fade animations -static NSTimeInterval gGTMLargeTypeWindowFadeAnimationDuration = 0.333; - -@interface GTMLargeTypeCopyAnimation : NSAnimation { - @private - NSView *view_; -} -- (id)initWithView:(NSView *)view - duration:(NSTimeInterval)duration - animationCurve:(NSAnimationCurve)animationCurve; -@end - -@interface GTMLargeTypeBackgroundView : NSView <NSAnimationDelegate> { - CIFilter *transition_; - GTMLargeTypeCopyAnimation *animation_; -} -- (void)animateCopyWithDuration:(NSTimeInterval)duration; -@end - -@interface GTMLargeTypeWindow (GTMLargeTypeWindowPrivate) -+ (CGSize)displaySize; -- (void)animateWithEffect:(NSString*)effect; -@end - -@implementation GTMLargeTypeWindow - -- (id)initWithString:(NSString *)string { - if ([string length] == 0) { - _GTMDevLog(@"GTMLargeTypeWindow got an empty string"); - [self release]; - return nil; - } - CGSize displaySize = [[self class] displaySize]; - NSMutableAttributedString *attrString - = [[[NSMutableAttributedString alloc] initWithString:string] autorelease]; - - NSRange fullRange = NSMakeRange(0, [string length]); - [attrString addAttribute:NSForegroundColorAttributeName - value:[NSColor whiteColor] - range:fullRange]; - - NSMutableParagraphStyle *style - = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] autorelease]; - [style setAlignment:NSCenterTextAlignment]; - [attrString addAttribute:NSParagraphStyleAttributeName - value:style - range:fullRange]; - - NSShadow *textShadow = [[[NSShadow alloc] init] autorelease]; - [textShadow setShadowOffset:NSMakeSize( 5, -5 )]; - [textShadow setShadowBlurRadius:10]; - [textShadow setShadowColor:[NSColor colorWithCalibratedWhite:0 - alpha:kTwoThirdsAlpha]]; - [attrString addAttribute:NSShadowAttributeName - value:textShadow - range:fullRange]; - - // Try and find a size that fits without iterating too many times. - // We start going 50 pixels at a time, then 10, then 1 - int size = -26; // start at 24 (-26 + 50) - int offsets[] = { 50, 10, 1 }; - for (size_t i = 0; i < sizeof(offsets) / sizeof(int); ++i) { - for(size = size + offsets[i]; size >= 24 && size < 300; size += offsets[i]) { - NSFont *font = [NSFont boldSystemFontOfSize:size] ; - [attrString addAttribute:NSFontAttributeName - value:font - range:fullRange]; - NSSize textSize = [attrString size]; - NSSize maxAdvanceSize = [font maximumAdvancement]; - if (textSize.width + maxAdvanceSize.width > displaySize.width || - textSize.height > displaySize.height) { - size = size - offsets[i]; - break; - } - } - } - - // Bounds check our values - if (size > 300) { - size = 300; - } else if (size < 24) { - size = 24; - } - [attrString addAttribute:NSFontAttributeName - value:[NSFont boldSystemFontOfSize:size] - range:fullRange]; - return [self initWithAttributedString:attrString]; -} - -- (id)initWithAttributedString:(NSAttributedString *)attrString { - if ([attrString length] == 0) { - _GTMDevLog(@"GTMLargeTypeWindow got an empty string"); - [self release]; - return nil; - } - CGSize displaySize = [[self class] displaySize]; - NSRect frame = NSMakeRect(0, 0, displaySize.width, 0); - NSTextView *textView = [[[NSTextView alloc] initWithFrame:frame] autorelease]; - [textView setEditable:NO]; - [textView setSelectable:NO]; - [textView setDrawsBackground:NO]; - [[textView textStorage] setAttributedString:attrString]; - [textView sizeToFit]; - - return [self initWithContentView:textView]; -} - -- (id)initWithImage:(NSImage*)image { - if (!image) { - _GTMDevLog(@"GTMLargeTypeWindow got an empty image"); - [self release]; - return nil; - } - NSRect rect = GTMNSRectOfSize([image size]); - NSImageView *imageView - = [[[NSImageView alloc] initWithFrame:rect] autorelease]; - [imageView setImage:image]; - return [self initWithContentView:imageView]; -} - -- (id)initWithContentView:(NSView *)view { - NSRect bounds = NSZeroRect; - if (view) { - bounds = [view bounds]; - } - if (!view || bounds.size.height <= 0 || bounds.size.width <= 0) { - _GTMDevLog(@"GTMLargeTypeWindow got an empty view"); - [self release]; - return nil; - } - NSRect screenRect = [[NSScreen mainScreen] frame]; - NSRect windowRect = GTMNSAlignRectangles([view frame], - screenRect, - GTMRectAlignCenter); - windowRect = NSInsetRect(windowRect, -kEdgeInset, -kEdgeInset); - windowRect = NSIntegralRect(windowRect); - NSUInteger mask = NSBorderlessWindowMask | NSNonactivatingPanelMask; - self = [super initWithContentRect:windowRect - styleMask:mask - backing:NSBackingStoreBuffered - defer:NO]; - if (self) { - [self setFrame:GTMNSAlignRectangles(windowRect, - screenRect, - GTMRectAlignCenter) - display:YES]; - [self setBackgroundColor:[NSColor clearColor]]; - [self setOpaque:NO]; - [self setLevel:NSFloatingWindowLevel]; - [self setHidesOnDeactivate:NO]; - - GTMLargeTypeBackgroundView *content - = [[[GTMLargeTypeBackgroundView alloc] initWithFrame:NSZeroRect] - autorelease]; - [self setHasShadow:YES]; - [self setContentView:content]; - [self setAlphaValue:0]; - [self setIgnoresMouseEvents:YES]; - [view setFrame:GTMNSAlignRectangles([view frame], - [content frame], - GTMRectAlignCenter)]; - [content addSubview:view]; - [content setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; - [self setInitialFirstResponder:view]; - } - return self; -} - -+ (NSTimeInterval)copyAnimationDuration { - return gGTMLargeTypeWindowCopyAnimationDuration; -} - -+ (void)setCopyAnimationDuration:(NSTimeInterval)duration { - gGTMLargeTypeWindowCopyAnimationDuration = duration; -} - -+ (NSTimeInterval)fadeAnimationDuration { - return gGTMLargeTypeWindowFadeAnimationDuration; -} - -+ (void)setFadeAnimationDuration:(NSTimeInterval)duration { - gGTMLargeTypeWindowFadeAnimationDuration = duration; -} - -- (void)copy:(id)sender { - id firstResponder = [self initialFirstResponder]; - if ([firstResponder respondsToSelector:@selector(textStorage)]) { - NSPasteboard *pb = [NSPasteboard generalPasteboard]; - [pb declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self]; - [pb setString:[[firstResponder textStorage] string] - forType:NSStringPboardType]; - } - - // Give the user some feedback that a copy has occurred - NSTimeInterval dur = [[self class] copyAnimationDuration]; - GTMLargeTypeBackgroundView *view - = GTM_STATIC_CAST(GTMLargeTypeBackgroundView, [self contentView]); - [view animateCopyWithDuration:dur]; -} - -- (BOOL)canBecomeKeyWindow { - return YES; -} - -- (BOOL)performKeyEquivalent:(NSEvent *)theEvent { - NSString *chars = [theEvent charactersIgnoringModifiers]; - NSUInteger flags = ([theEvent modifierFlags] & - NSDeviceIndependentModifierFlagsMask); - BOOL isValid = (flags == NSCommandKeyMask) && [chars isEqualToString:@"c"]; - if (isValid) { - [self copy:self]; - } - return isValid; -} - -- (void)keyDown:(NSEvent *)theEvent { - [self close]; -} - -- (void)resignKeyWindow { - [super resignKeyWindow]; - if([self isVisible]) { - [self close]; - } -} - -- (void)makeKeyAndOrderFront:(id)sender { - [super makeKeyAndOrderFront:sender]; - [self animateWithEffect:NSViewAnimationFadeInEffect]; -} - -- (void)orderFront:(id)sender { - [super orderFront:sender]; - [self animateWithEffect:NSViewAnimationFadeInEffect]; -} - -- (void)orderOut:(id)sender { - [self animateWithEffect:NSViewAnimationFadeOutEffect]; - [super orderOut:sender]; -} - -+ (CGSize)displaySize { - NSRect screenRect = [[NSScreen mainScreen] frame]; - // This is just a rough calculation to make us fill a good proportion - // of the main screen. - CGFloat width = (NSWidth(screenRect) * 11.0 / 12.0) - (2.0 * kEdgeInset); - CGFloat height = (NSHeight(screenRect) * 11.0 / 12.0) - (2.0 * kEdgeInset); - return CGSizeMake(width, height); -} - -- (void)animateWithEffect:(NSString*)effect { - NSDictionary *fadeIn = [NSDictionary dictionaryWithObjectsAndKeys: - self, NSViewAnimationTargetKey, - effect, NSViewAnimationEffectKey, - nil]; - NSArray *animation = [NSArray arrayWithObject:fadeIn]; - NSViewAnimation *viewAnim - = [[[NSViewAnimation alloc] initWithViewAnimations:animation] autorelease]; - [viewAnim setDuration:[[self class] fadeAnimationDuration]]; - [viewAnim setAnimationBlockingMode:NSAnimationBlocking]; - [viewAnim startAnimation]; -} - -@end - -@implementation GTMLargeTypeBackgroundView -GTM_METHOD_CHECK(NSBezierPath, gtm_appendBezierPathWithRoundRect:cornerRadius:); - -- (void)dealloc { - // If we get released while animating, we'd better clean up. - [animation_ stopAnimation]; - [animation_ release]; - [transition_ release]; - [super dealloc]; -} - -- (BOOL)isOpaque { - return NO; -} - -- (void)drawRect:(NSRect)rect { - rect = [self bounds]; - NSBezierPath *roundRect = [NSBezierPath bezierPath]; - CGFloat minRadius = MIN(NSWidth(rect), NSHeight(rect)) * 0.5f; - - [roundRect gtm_appendBezierPathWithRoundRect:rect - cornerRadius:MIN(minRadius, 32)]; - [roundRect addClip]; - if (transition_) { - NSNumber *val = [NSNumber numberWithFloat:[animation_ currentValue]]; - [transition_ setValue:val forKey:@"inputTime"]; - CIImage *outputCIImage = [transition_ valueForKey:@"outputImage"]; - [outputCIImage drawInRect:rect - fromRect:rect - operation:NSCompositeSourceOver - fraction:1.0]; - } else { - [[NSColor colorWithDeviceWhite:0 alpha:kTwoThirdsAlpha] set]; - - NSRectFill(rect); - } -} - -- (void)animateCopyWithDuration:(NSTimeInterval)duration { - // This does a photocopy swipe to show folks that their copy has succceeded - // Store off a copy of our background - NSRect bounds = [self bounds]; - NSBitmapImageRep *rep = [self bitmapImageRepForCachingDisplayInRect:bounds]; - NSGraphicsContext *context = [NSGraphicsContext graphicsContextWithBitmapImageRep:rep]; - [NSGraphicsContext saveGraphicsState]; - [NSGraphicsContext setCurrentContext:context]; - [self drawRect:bounds]; - [NSGraphicsContext restoreGraphicsState]; - CIVector *extent = [CIVector vectorWithX:bounds.origin.x - Y:bounds.origin.y - Z:bounds.size.width - W:bounds.size.height]; - CIFilter *transition = [CIFilter filterWithName:@"CICopyMachineTransition"]; - [transition setDefaults]; - [transition setValue:extent - forKey:@"inputExtent"]; - CIImage *image = [[CIImage alloc] initWithBitmapImageRep:rep]; - - [transition setValue:image forKey:@"inputImage"]; - [transition setValue:image forKey:@"inputTargetImage"]; - [transition setValue:[NSNumber numberWithInt:0] - forKey:@"inputTime"]; - [transition valueForKey:@"outputImage"]; - [image release]; - transition_ = [transition retain]; - animation_ = [[GTMLargeTypeCopyAnimation alloc] initWithView:self - duration:duration - animationCurve:NSAnimationLinear]; - [animation_ setFrameRate:0.0f]; - [animation_ setDelegate:self]; - [animation_ setAnimationBlockingMode:NSAnimationBlocking]; - [animation_ startAnimation]; -} - -- (void)animationDidEnd:(NSAnimation*)animation { - [animation_ release]; - animation_ = nil; - [transition_ release]; - transition_ = nil; - [self display]; -} - -- (float)animation:(NSAnimation*)animation - valueForProgress:(NSAnimationProgress)progress { - // This gives us half the copy animation, so we don't swing back - // Don't want too much gratuitous effect - // 0.6 is required by experimentation. 0.5 doesn't do it - return progress * 0.6f; -} -@end - -@implementation GTMLargeTypeCopyAnimation -- (id)initWithView:(NSView *)view - duration:(NSTimeInterval)duration - animationCurve:(NSAnimationCurve)animationCurve { - if ((self = [super initWithDuration:duration - animationCurve:animationCurve])) { - view_ = [view retain]; - } - return self; -} - -- (void)dealloc { - [view_ release]; - [super dealloc]; -} - -- (void)setCurrentProgress:(NSAnimationProgress)progress { - [super setCurrentProgress:progress]; - [view_ display]; -} -@end diff --git a/AppKit/GTMLargeTypeWindowTest.m b/AppKit/GTMLargeTypeWindowTest.m deleted file mode 100644 index a60c791..0000000 --- a/AppKit/GTMLargeTypeWindowTest.m +++ /dev/null @@ -1,194 +0,0 @@ -// -// GTMLargeTypeWindowTest.m -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMLargeTypeWindow.h" -#import "GTMNSObject+UnitTesting.h" -#import "GTMUnitTestDevLog.h" -#import "GTMSystemVersion.h" - -NSString *const kLongTextBlock = - @"`Twas brillig, and the slithy toves " - "Did gyre and gimble in the wabe: " - "all mimsy were the borogoves, " - "and the mome raths outgrabe. " - "Beware the Jabberwock, my son! " - "The jaws that bite, the claws that catch! " - "Beware the Jubjub bird, and shun " - "the frumious Bandersnatch! " - "He took his vorpal sword in hand: " - "long time the manxome foe he sought -- " - "so rested he by the Tumtum tree, " - "and stood awhile in thought. " - "And, as in uffish thought he stood, " - "the Jabberwock, with eyes of flame, " - "came whiffling through the tulgey wood, " - "and burbled as it came! " - "One, two! One, two! And through and through " - "the vorpal blade went snicker-snack! " - "He left it dead, and with its head " - "he went galumphing back. " - "And, has thou slain the Jabberwock? " - "Come to my arms, my beamish boy! " - "O frabjous day! Callooh! Callay! " - "He chortled in his joy."; - -NSString *const kMediumTextBlock = @"For the Snark was a Boojum, you see."; - -NSString *const kShortTextBlock = @"Short"; - -@interface GTMLargeTypeWindowTest : GTMTestCase -@end - -@implementation GTMLargeTypeWindowTest -- (BOOL)shouldDoAnimateCopy { - // This method previously checked for incompatibilities with garbage collection. - return YES; -} - -- (void)setUp { - [GTMLargeTypeWindow setCopyAnimationDuration:0]; - [GTMLargeTypeWindow setFadeAnimationDuration:0]; -} - -- (void)tearDown { - [GTMLargeTypeWindow setCopyAnimationDuration:0.5]; - [GTMLargeTypeWindow setFadeAnimationDuration:0.333]; -} - -- (void)testLargeTypeWindowIllegalInits { - [GTMUnitTestDevLog expectString:@"GTMLargeTypeWindow got an empty string"]; - GTMLargeTypeWindow *window = [[[GTMLargeTypeWindow alloc] - initWithString:@""] autorelease]; - STAssertNil(window, nil); - - [GTMUnitTestDevLog expectString:@"GTMLargeTypeWindow got an empty string"]; - window = [[[GTMLargeTypeWindow alloc] initWithString:nil] autorelease]; - STAssertNil(window, nil); - - [GTMUnitTestDevLog expectString:@"GTMLargeTypeWindow got an empty string"]; - NSAttributedString *attrString = [[[NSAttributedString alloc] - initWithString:@""] autorelease]; - window = [[[GTMLargeTypeWindow alloc] - initWithAttributedString:attrString] autorelease]; - STAssertNil(window, nil); - - [GTMUnitTestDevLog expectString:@"GTMLargeTypeWindow got an empty string"]; - window = [[[GTMLargeTypeWindow alloc] - initWithAttributedString:nil] autorelease]; - STAssertNil(window, nil); - - [GTMUnitTestDevLog expectString:@"GTMLargeTypeWindow got an empty view"]; - window = [[[GTMLargeTypeWindow alloc] initWithContentView:nil] autorelease]; - STAssertNil(window, nil); - - [GTMUnitTestDevLog expectString:@"GTMLargeTypeWindow got an empty image"]; - window = [[[GTMLargeTypeWindow alloc] initWithImage:nil] autorelease]; - STAssertNil(window, nil); -} - -- (void)testLargeTypeWindowMediumText { - GTMLargeTypeWindow *window = [[[GTMLargeTypeWindow alloc] - initWithString:kMediumTextBlock] autorelease]; - STAssertNotNil(window, nil); - STAssertTrue([window canBecomeKeyWindow], nil); - [window makeKeyAndOrderFront:nil]; - NSDate *endDate - = [NSDate dateWithTimeIntervalSinceNow:.1]; - [[NSRunLoop currentRunLoop] runUntilDate:endDate]; - GTMAssertObjectStateEqualToStateNamed(window, - @"GTMLargeTypeWindowMediumTextTest", - nil); - if ([self shouldDoAnimateCopy]) { - [window copy:nil]; - NSPasteboard *pb = [NSPasteboard generalPasteboard]; - NSString *pbString = [pb stringForType:NSStringPboardType]; - STAssertEqualObjects(pbString, kMediumTextBlock, nil); - } - [window keyDown:nil]; -} - -- (void)testLargeTypeWindowShortText { - GTMLargeTypeWindow *window = [[[GTMLargeTypeWindow alloc] - initWithString:kShortTextBlock] autorelease]; - STAssertNotNil(window, nil); - STAssertTrue([window canBecomeKeyWindow], nil); - [window makeKeyAndOrderFront:nil]; - NSDate *endDate - = [NSDate dateWithTimeIntervalSinceNow:.1]; - [[NSRunLoop currentRunLoop] runUntilDate:endDate]; - GTMAssertObjectStateEqualToStateNamed(window, - @"GTMLargeTypeWindowShortTextTest", - nil); - if ([self shouldDoAnimateCopy]) { - [window copy:nil]; - NSPasteboard *pb = [NSPasteboard generalPasteboard]; - NSString *pbString = [pb stringForType:NSStringPboardType]; - STAssertEqualObjects(pbString, kShortTextBlock, nil); - } - [window resignKeyWindow]; -} - -- (void)testLargeTypeWindowLongText { - GTMLargeTypeWindow *window = [[[GTMLargeTypeWindow alloc] - initWithString:kLongTextBlock] autorelease]; - STAssertNotNil(window, nil); - [window orderFront:nil]; - NSDate *endDate - = [NSDate dateWithTimeIntervalSinceNow:.1]; - [[NSRunLoop currentRunLoop] runUntilDate:endDate]; - // Can't do state for long text as it will wrap differently on different - // sized screens. - GTMAssertObjectStateEqualToStateNamed(window, - @"GTMLargeTypeWindowLongTextTest", - nil); - if ([self shouldDoAnimateCopy]) { - [window copy:nil]; - NSPasteboard *pb = [NSPasteboard generalPasteboard]; - NSString *pbString = [pb stringForType:NSStringPboardType]; - STAssertEqualObjects(pbString, kLongTextBlock, nil); - } - [window keyDown:nil]; -} - -- (void)testLargeTypeWindowImageText { - NSImage *image = [NSApp applicationIconImage]; - GTMLargeTypeWindow *window = [[[GTMLargeTypeWindow alloc] - initWithImage:image] autorelease]; - STAssertNotNil(window, nil); - [window makeKeyAndOrderFront:nil]; - NSDate *endDate - = [NSDate dateWithTimeIntervalSinceNow:.1]; - [[NSRunLoop currentRunLoop] runUntilDate:endDate]; - GTMAssertObjectStateEqualToStateNamed(window, - @"GTMLargeTypeWindowImageTest", - nil); - NSString *testString = @"TestString"; - NSPasteboard *pb = [NSPasteboard generalPasteboard]; - [pb declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self]; - [pb setString:testString forType:NSStringPboardType]; - if ([self shouldDoAnimateCopy]) { - [window copy:nil]; - // Pasteboard should not change for an image - NSString *pbString = [pb stringForType:NSStringPboardType]; - STAssertEqualObjects(pbString, testString, nil); - } - [window resignKeyWindow]; -} - -@end diff --git a/AppKit/GTMLinearRGBShading.h b/AppKit/GTMLinearRGBShading.h deleted file mode 100644 index d85a4eb..0000000 --- a/AppKit/GTMLinearRGBShading.h +++ /dev/null @@ -1,76 +0,0 @@ -// -// GTMLinearRGBShading.h -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Cocoa/Cocoa.h> -#import "GTMShading.h" -#import "GTMCalculatedRange.h" - -/// A shading that does returns smooth linear values for RGB. -// -/// Thus if you create a shading from 0.0->red to 1.0->blue you will get -/// \verbatim -/// - 0.5->purple -/// - 0.75->eggplant -/// - 0.25->magenta -/// \endverbatim - -@interface GTMLinearRGBShading : GTMCalculatedRange <GTMShading> { -@private - CGFunctionRef function_; // function used to calculated shading (STRONG) - CGColorSpaceRef colorSpace_; // colorspace used for shading (STRONG) - BOOL isCalibrated_; // are we using calibrated or device RGB. - CGFloat colorValue_[4]; // the RGBA color values -} - -/// Generate a shading with color |begin| at position 0.0 and color |end| at 1.0. -// -// Args: -// begin: color at beginning of range -// end: color at end of range -// colorSpaceName: name of colorspace to draw into must be either -// NSCalibratedRGBColorSpace or NSDeviceRGBColorSpace -// -// Returns: -// a GTMLinearRGBShading -+ (id)shadingFromColor:(NSColor *)begin toColor:(NSColor *)end - fromSpaceNamed:(NSString*)colorSpaceName; - -/// Generate a shading with a collection of colors at various positions. -// -// Args: -// colors: a C style array containg the colors we are adding -// colorSpaceName: name of colorspace to draw into must be either -// NSCalibratedRGBColorSpace or NSDeviceRGBColorSpace -// positions: a C style array containg the positions we want to -// add the colors at -// numberOfColors: how many colors/positions we are adding -// -// Returns: -// a GTMLinearRGBShading -+ (id)shadingWithColors:(NSColor **)colors - fromSpaceNamed:(NSString*)colorSpaceName - atPositions:(CGFloat *)positions - count:(NSUInteger)numberOfColors; - -/// Designated initializer -// Args: -// colorSpaceName - name of the colorspace to use must be either -// NSCalibratedRGBColorSpace or NSDeviceRGBColorSpace -- (id)initWithColorSpaceName:(NSString*)colorSpaceName; - -@end diff --git a/AppKit/GTMLinearRGBShading.m b/AppKit/GTMLinearRGBShading.m deleted file mode 100644 index f605350..0000000 --- a/AppKit/GTMLinearRGBShading.m +++ /dev/null @@ -1,192 +0,0 @@ -// -// GTMLinearRGBShading.m -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMLinearRGBShading.h" -#import "GTMDefines.h" - -// Carbon callback function required for CoreGraphics -static void cShadeFunction(void *info, const CGFloat *inPos, CGFloat *outVals); - -@implementation GTMLinearRGBShading -+ (id)shadingFromColor:(NSColor *)begin toColor:(NSColor *)end - fromSpaceNamed:(NSString*)colorSpaceName { - NSColor *theColors[] = { begin, end }; - CGFloat thePositions[] = { 0.0, 1.0 }; - return [[self class] shadingWithColors:theColors - fromSpaceNamed:colorSpaceName - atPositions:thePositions - count:(sizeof(thePositions)/sizeof(CGFloat))]; -} - -+ (id)shadingWithColors:(NSColor **)colors fromSpaceNamed:(NSString*)colorSpaceName - atPositions:(CGFloat *)positions count:(NSUInteger)count { - - GTMLinearRGBShading *theShading = [[[self alloc] initWithColorSpaceName:colorSpaceName] autorelease]; - for (NSUInteger i = 0; i < count; ++i) { - [theShading insertStop:colors[i] atPosition:positions[i]]; - } - return theShading; -} - -- (id)initWithColorSpaceName:(NSString*)colorSpaceName { - if ((self = [super init])) { - if ([colorSpaceName isEqualToString:NSDeviceRGBColorSpace]) { - isCalibrated_ = NO; - } else if ([colorSpaceName isEqualToString:NSCalibratedRGBColorSpace]) { - isCalibrated_ = YES; - } - else { - [self release]; - self = nil; - } - } - return self; -} - -- (void)dealloc { - if (nil != function_) { - CGFunctionRelease(function_); - } - if (nil != colorSpace_) { - CGColorSpaceRelease(colorSpace_); - } - [super dealloc]; -} - - -- (void)insertStop:(id)item atPosition:(CGFloat)position { - NSString *colorSpaceName = isCalibrated_ ? NSCalibratedRGBColorSpace : NSDeviceRGBColorSpace; - NSColor *tempColor = [item colorUsingColorSpaceName: colorSpaceName]; - if (nil != tempColor) { - [super insertStop:tempColor atPosition:position]; - } -} - -// Calculate a linear value based on our stops -- (id)valueAtPosition:(CGFloat)position { - NSUInteger positionIndex = 0; - NSUInteger colorCount = [self stopCount]; - CGFloat stop1Position = 0.0; - NSColor *stop1Color = [self stopAtIndex:positionIndex position:&stop1Position]; - positionIndex += 1; - CGFloat stop2Position = 0.0; - NSColor *stop2Color = nil; - if (colorCount > 1) { - stop2Color = [self stopAtIndex:positionIndex position:&stop2Position]; - positionIndex += 1; - } else { - // if we only have one value, that's what we return - stop2Position = stop1Position; - stop2Color = stop1Color; - } - - while (positionIndex < colorCount && stop2Position < position) { - stop1Color = stop2Color; - stop1Position = stop2Position; - stop2Color = [self stopAtIndex:positionIndex position:&stop2Position]; - positionIndex += 1; - } - - if (position <= stop1Position) { - // if we are less than our lowest position, return our first color - [stop1Color getRed:&colorValue_[0] green:&colorValue_[1] - blue:&colorValue_[2] alpha:&colorValue_[3]]; - } else if (position >= stop2Position) { - // likewise if we are greater than our highest position, return the last color - [stop2Color getRed:&colorValue_[0] green:&colorValue_[1] - blue:&colorValue_[2] alpha:&colorValue_[3]]; - } else { - // otherwise interpolate between the two - position = (position - stop1Position) / (stop2Position - stop1Position); - CGFloat red1, red2, green1, green2, blue1, blue2, alpha1, alpha2; - [stop1Color getRed:&red1 green:&green1 blue:&blue1 alpha:&alpha1]; - [stop2Color getRed:&red2 green:&green2 blue:&blue2 alpha:&alpha2]; - - colorValue_[0] = (red2 - red1) * position + red1; - colorValue_[1] = (green2 - green1) * position + green1; - colorValue_[2] = (blue2 - blue1) * position + blue1; - colorValue_[3] = (alpha2 - alpha1) * position + alpha1; - } - - // Yes, I am casting a CGFloat[] to an id to pass it by the compiler. This - // significantly improves performance though as I avoid creating an NSColor - // for every scanline which later has to be cleaned up in an autorelease pool - // somewhere. Causes guardmalloc to run significantly faster. - return (id)colorValue_; -} - -// -// switch from C to obj-C. The callback to a shader is a c function -// but we want to call our objective c object to do all the -// calculations for us. We have passed our function our -// GTMLinearRGBShading as an obj-c object in the |info| so -// we just turn around and ask it to calculate our value based -// on |inPos| and then stick the results back in |outVals| -// -// Args: -// info: is the GTMLinearRGBShading as an -// obj-C object. -// inPos: the position to calculate values for. This is a pointer to -// a single float value -// outVals: where we store our return values. Since we are calculating -// an RGBA color, this is a pointer to an array of four float values -// ranging from 0.0 to 1.0 -// -// -static void cShadeFunction(void *info, const CGFloat *inPos, CGFloat *outVals) { - id object = (id)info; - CGFloat *colorValue = (CGFloat*)[object valueAtPosition:*inPos]; - outVals[0] = colorValue[0]; - outVals[1] = colorValue[1]; - outVals[2] = colorValue[2]; - outVals[3] = colorValue[3]; -} - -- (CGFunctionRef) shadeFunction { - // lazily create the function as necessary - if (nil == function_) { - // We have to go to carbon here, and create the CGFunction. Note that this - // diposed if necessary in the dealloc call. - const CGFunctionCallbacks shadeFunctionCallbacks = { 0, &cShadeFunction, NULL }; - - // TODO: this code assumes that we have a range from 0.0 to 1.0 - // which may not be true according to the stops that the user has given us. - // In general you have stops at 0.0 and 1.0, so this will do for right now - // but may be an issue in the future. - const CGFloat inRange[2] = { 0.0, 1.0 }; - const CGFloat outRange[8] = { 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0 }; - function_ = CGFunctionCreate(self, - sizeof(inRange) / (sizeof(CGFloat) * 2), inRange, - sizeof(outRange) / (sizeof(CGFloat) * 2), outRange, - &shadeFunctionCallbacks); - } - return function_; -} - -- (CGColorSpaceRef)colorSpace { - // lazily create the colorspace as necessary - if (nil == colorSpace_) { - if (isCalibrated_) { - colorSpace_ = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); - } else { - colorSpace_ = CGColorSpaceCreateDeviceRGB(); - } - } - return colorSpace_; -} -@end diff --git a/AppKit/GTMLinearRGBShadingTest.m b/AppKit/GTMLinearRGBShadingTest.m deleted file mode 100644 index 38802e6..0000000 --- a/AppKit/GTMLinearRGBShadingTest.m +++ /dev/null @@ -1,132 +0,0 @@ -// -// GTMLinearRGBShadingTest.m -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <SenTestingKit/SenTestingKit.h> -#import "GTMSenTestCase.h" -#import "GTMLinearRGBShading.h" - -@interface GTMLinearRGBShadingTest : GTMTestCase -@end - -@implementation GTMLinearRGBShadingTest -- (void)testShadingFrom { - // Create a shading from red to blue, and check if 50% is purple - NSColor *red = [NSColor redColor]; - NSColor *blue = [NSColor blueColor]; - NSColor *purple = [NSColor purpleColor]; - GTMLinearRGBShading *theShading = - [GTMLinearRGBShading shadingFromColor:red - toColor:blue - fromSpaceNamed:NSCalibratedRGBColorSpace]; - STAssertNotNil(theShading,nil); - STAssertEquals([theShading stopCount], (NSUInteger)2, nil); - CGFloat *theColor = (CGFloat*)[theShading valueAtPosition: 0.5]; - STAssertEqualsWithAccuracy(theColor[0], [purple redComponent], 0.001, nil); - STAssertEqualsWithAccuracy(theColor[1], [purple greenComponent], 0.001, nil); - STAssertEqualsWithAccuracy(theColor[2], [purple blueComponent], 0.001, nil); - STAssertEqualsWithAccuracy(theColor[3], [purple alphaComponent], 0.001, nil); -} - -- (void)testShadingWith { - // Create a shading with kColorCount colors and make sure all the values are there. - enum { kColorCount = 100 }; - NSColor *theColors[kColorCount]; - CGFloat thePositions[kColorCount]; - const CGFloat kColorIncrement = 1.0 / kColorCount; - for (NSUInteger i = 0; i < kColorCount; i++) { - CGFloat newValue = kColorIncrement * i; - thePositions[i] = newValue; - theColors[i] = [NSColor colorWithCalibratedRed:newValue - green:newValue - blue:newValue - alpha:newValue]; - } - GTMLinearRGBShading *theShading = - [GTMLinearRGBShading shadingWithColors:theColors - fromSpaceNamed:NSCalibratedRGBColorSpace - atPositions:thePositions - count:kColorCount]; - for (NSUInteger i = 0; i < kColorCount; i++) { - CGFloat newValue = kColorIncrement * i; - CGFloat *theColor = (CGFloat*)[theShading valueAtPosition:newValue]; - STAssertEqualsWithAccuracy(theColor[0], newValue, 0.001, nil); - STAssertEqualsWithAccuracy(theColor[1], newValue, 0.001, nil); - STAssertEqualsWithAccuracy(theColor[2], newValue, 0.001, nil); - STAssertEqualsWithAccuracy(theColor[3], newValue, 0.001, nil); - } - // Create a shading with 1 color to test that special handling - NSColor *purple = [NSColor purpleColor]; - NSColor *singleColor[1] = { purple }; - CGFloat singlePosition[1] = { 0.5 }; - theShading = - [GTMLinearRGBShading shadingWithColors:singleColor - fromSpaceNamed:NSCalibratedRGBColorSpace - atPositions:singlePosition - count:1]; - // test over a range to make sure we always get the same color - for (NSUInteger i = 0; i < kColorCount; i++) { - CGFloat newValue = kColorIncrement * i; - CGFloat *theColor = (CGFloat*)[theShading valueAtPosition:newValue]; - STAssertEqualsWithAccuracy(theColor[0], [purple redComponent], 0.001, nil); - STAssertEqualsWithAccuracy(theColor[1], [purple greenComponent], 0.001, nil); - STAssertEqualsWithAccuracy(theColor[2], [purple blueComponent], 0.001, nil); - STAssertEqualsWithAccuracy(theColor[3], [purple alphaComponent], 0.001, nil); - } -} - -- (void)testShadeFunction { - GTMLinearRGBShading *theShading = - [GTMLinearRGBShading shadingWithColors:nil - fromSpaceNamed:NSCalibratedRGBColorSpace - atPositions:nil - count:0]; - CGFunctionRef theFunction = [theShading shadeFunction]; - STAssertNotNULL(theFunction, nil); - STAssertEquals(CFGetTypeID(theFunction), CGFunctionGetTypeID(), nil); -} - -- (void)testColorSpace { - // Calibrated RGB - GTMLinearRGBShading *theShading = - [GTMLinearRGBShading shadingWithColors:nil - fromSpaceNamed:NSCalibratedRGBColorSpace - atPositions:nil - count:0]; - CGColorSpaceRef theColorSpace = [theShading colorSpace]; - STAssertNotNULL(theColorSpace, nil); - STAssertEquals(CFGetTypeID(theColorSpace), CGColorSpaceGetTypeID(), nil); - - // Device RGB - theShading = - [GTMLinearRGBShading shadingWithColors:nil - fromSpaceNamed:NSDeviceRGBColorSpace - atPositions:nil - count:0]; - theColorSpace = [theShading colorSpace]; - STAssertNotNULL(theColorSpace, nil); - STAssertEquals(CFGetTypeID(theColorSpace), CGColorSpaceGetTypeID(), nil); - - // Device CMYK (not supported) - theShading = - [GTMLinearRGBShading shadingWithColors:nil - fromSpaceNamed:NSDeviceCMYKColorSpace - atPositions:nil - count:0]; - STAssertNULL(theShading, nil); -} -@end diff --git a/AppKit/GTMLoginItems.m b/AppKit/GTMLoginItems.m index fc0029b..cd45418 100644 --- a/AppKit/GTMLoginItems.m +++ b/AppKit/GTMLoginItems.m @@ -56,7 +56,7 @@ static NSString * const kLSSharedFileListLoginItemHidden = if (!value || !key || !items) return NSNotFound; NSDictionary *item = nil; NSInteger found = -1; - GTM_FOREACH_OBJECT(item, items) { + for (item in items) { ++found; id itemValue = [item objectForKey:key]; if (itemValue && [itemValue isEqual:value]) { diff --git a/AppKit/GTMLoginItemsTest.m b/AppKit/GTMLoginItemsTest.m index 50b7482..3784edb 100644 --- a/AppKit/GTMLoginItemsTest.m +++ b/AppKit/GTMLoginItemsTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -16,7 +16,6 @@ // the License. // -#import <SenTestingKit/SenTestingKit.h> #import "GTMSenTestCase.h" #import "GTMLoginItems.h" @@ -31,7 +30,7 @@ static BOOL ItemsListHasPath(NSArray *items, NSString *path) { NSDictionary *item = nil; - GTM_FOREACH_OBJECT(item, items) { + for (item in items) { NSString *itemPath = [item objectForKey:kGTMLoginItemsPathKey]; if (itemPath && [itemPath isEqual:path]) { return YES; @@ -47,89 +46,91 @@ static BOOL ItemsListHasPath(NSArray *items, NSString *path) { NSError *error = nil; NSString *bogusAppPath = @"/Applications/AppThatDoesNotExist.app"; NSString *bogusAppName = @"AppThatDoesNotExist"; - + // fetch the starting values NSArray *initialItems = [GTMLoginItems loginItems:&error]; - STAssertNotNil(initialItems, @"shouldn't be nil (%@)", error); - STAssertFalse(ItemsListHasPath(initialItems, bogusAppPath), - @"bogusApp shouldn't be in list to start for test (%@)", initialItems); - + XCTAssertNotNil(initialItems, @"shouldn't be nil (%@)", error); + XCTAssertFalse(ItemsListHasPath(initialItems, bogusAppPath), + @"bogusApp shouldn't be in list to start for test (%@)", + initialItems); + // check by path - STAssertFalse([GTMLoginItems pathInLoginItems:bogusAppPath], nil); - + XCTAssertFalse([GTMLoginItems pathInLoginItems:bogusAppPath]); + // check by name - STAssertFalse([GTMLoginItems itemWithNameInLoginItems:bogusAppName], nil); - + XCTAssertFalse([GTMLoginItems itemWithNameInLoginItems:bogusAppName]); + // remove it by path [GTMLoginItems removePathFromLoginItems:bogusAppPath]; NSArray *curItems = [GTMLoginItems loginItems:nil]; - STAssertEqualObjects(initialItems, curItems, nil); - + XCTAssertEqualObjects(initialItems, curItems); + // remove it by name [GTMLoginItems removeItemWithNameFromLoginItems:bogusAppName]; curItems = [GTMLoginItems loginItems:nil]; - STAssertEqualObjects(initialItems, curItems, nil); + XCTAssertEqualObjects(initialItems, curItems); } - (void)testModification { #if MODIFICATION_TESTS_ENABLED - + NSError *error = nil; NSString *textEditPath = @"/Applications/TextEdit.app"; NSString *textEditName = @"TextEdit"; - + // fetch the starting values NSArray *initialItems = [GTMLoginItems loginItems:&error]; - STAssertNotNil(initialItems, @"shouldn't be nil (%@)", error); - STAssertFalse(ItemsListHasPath(initialItems, textEditPath), - @"textedit shouldn't be in list to start for test (%@)", initialItems); - + XCTAssertNotNil(initialItems, @"shouldn't be nil (%@)", error); + XCTAssertFalse(ItemsListHasPath(initialItems, textEditPath), + @"textedit shouldn't be in list to start for test (%@)", + initialItems); + // add textedit [GTMLoginItems addPathToLoginItems:textEditPath hide:NO]; NSArray *curItems = [GTMLoginItems loginItems:nil]; - STAssertNotEqualObjects(initialItems, curItems, nil); - + XCTAssertNotEqualObjects(initialItems, curItems); + // check by path - STAssertTrue([GTMLoginItems pathInLoginItems:textEditPath], nil); - + XCTAssertTrue([GTMLoginItems pathInLoginItems:textEditPath]); + // check by name - STAssertTrue([GTMLoginItems itemWithNameInLoginItems:textEditName], nil); - + XCTAssertTrue([GTMLoginItems itemWithNameInLoginItems:textEditName]); + // remove it by path [GTMLoginItems removePathFromLoginItems:textEditPath]; curItems = [GTMLoginItems loginItems:nil]; - STAssertEqualObjects(initialItems, curItems, nil); - + STAssertEqualObjects(initialItems, curItems); + // check by path - STAssertFalse([GTMLoginItems pathInLoginItems:textEditPath], nil); - + XCTAssertFalse([GTMLoginItems pathInLoginItems:textEditPath]); + // check by name - STAssertFalse([GTMLoginItems itemWithNameInLoginItems:textEditName], nil); - + XCTAssertFalse([GTMLoginItems itemWithNameInLoginItems:textEditName]); + // add textedit [GTMLoginItems addPathToLoginItems:textEditPath hide:NO]; curItems = [GTMLoginItems loginItems:nil]; - STAssertNotEqualObjects(initialItems, curItems, nil); - + STAssertNotEqualObjects(initialItems, curItems); + // check by path - STAssertTrue([GTMLoginItems pathInLoginItems:textEditPath], nil); - + XCTAssertTrue([GTMLoginItems pathInLoginItems:textEditPath]); + // check by name - STAssertTrue([GTMLoginItems itemWithNameInLoginItems:textEditName], nil); - + XCTAssertTrue([GTMLoginItems itemWithNameInLoginItems:textEditName]); + // remove it by name [GTMLoginItems removeItemWithNameFromLoginItems:textEditName]; curItems = [GTMLoginItems loginItems:nil]; - STAssertEqualObjects(initialItems, curItems, nil); - + XCTAssertEqualObjects(initialItems, curItems); + // check by path - STAssertFalse([GTMLoginItems pathInLoginItems:textEditPath], nil); - + XCTAssertFalse([GTMLoginItems pathInLoginItems:textEditPath]); + // check by name - STAssertFalse([GTMLoginItems itemWithNameInLoginItems:textEditName], nil); - + XCTAssertFalse([GTMLoginItems itemWithNameInLoginItems:textEditName]); + #endif // MODIFICATION_TESTS_ENABLED } diff --git a/AppKit/GTMNSAnimatablePropertyContainer.h b/AppKit/GTMNSAnimatablePropertyContainer.h deleted file mode 100644 index c98cabe..0000000 --- a/AppKit/GTMNSAnimatablePropertyContainer.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// GTMNSAnimatablePropertyContainer.h -// -// Copyright (c) 2010 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Cocoa/Cocoa.h> -#import "GTMDefines.h" - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 - -// There is a bug in 10.5 where you cannot stop an animation on a -// NSAnimatablePropertyContainer by just setting it's duration to 0.0. -// The work around is rather complex requiring you to NULL out animation -// dictionary entries temporarily (see the code for details). -// These categories are to make stopping animations simpler. -// When you want to stop an animation, you just call it like you would -// an animator. -// -// [[myWindow gtm_animatorStopper] setAlphaValue:0.0]; -// -// This will stop any current animations that are going on, and will immediately -// set the alpha value of the window to 0. -// If there is no animation, it will still set the alpha value to 0.0 for you. -@interface NSView (GTMNSAnimatablePropertyContainer) - -- (id)gtm_animatorStopper; - -@end - -@interface NSWindow (GTMNSAnimatablePropertyContainer) - -- (id)gtm_animatorStopper; - -@end - -#endif // MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 diff --git a/AppKit/GTMNSAnimatablePropertyContainer.m b/AppKit/GTMNSAnimatablePropertyContainer.m deleted file mode 100644 index a47ff65..0000000 --- a/AppKit/GTMNSAnimatablePropertyContainer.m +++ /dev/null @@ -1,124 +0,0 @@ -// -// GTMNSAnimatablePropertyContainer.m -// -// Copyright (c) 2010 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSAnimatablePropertyContainer.h" - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 - -@interface GTMAnimatorStopper : NSObject { - @private - NSObject<NSAnimatablePropertyContainer> *container_; -} -@end - -@implementation GTMAnimatorStopper -- (id)initWithAnimatablePropertyContainer:(NSObject<NSAnimatablePropertyContainer>*) container { - if ((self = [super init])) { - container_ = [container retain]; - } - return self; -} - -- (void)dealloc { - [container_ release]; - [super dealloc]; -} - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { - return [container_ methodSignatureForSelector:aSelector]; -} - -- (void)forwardInvocation:(NSInvocation *)anInvocation { - SEL selector = [anInvocation selector]; - NSString *selectorName = NSStringFromSelector(selector); - - // NSWindow animator handles setFrame:display: which is an odd case - // for animator. All other methods take just a key value, so we convert - // this to it's equivalent key value. - if ([selectorName isEqual:@"setFrame:display:"]) { - selectorName = @"setFrame:"; - } - - // Check to make sure our selector is valid (starts with set and has a - // single : at the end. - NSRange colonRange = [selectorName rangeOfString:@":"]; - NSUInteger selectorLength = [selectorName length]; - if ([selectorName hasPrefix:@"set"] - && colonRange.location == selectorLength - 1 - && selectorLength > 4) { - // transform our selector into a keyValue by removing the set - // and the colon and converting the first char down to lowercase. - NSString *keyValue = [selectorName substringFromIndex:3]; - NSString *firstChar = [[keyValue substringToIndex:1] lowercaseString]; - NSRange rest = NSMakeRange(1, [keyValue length] - 2); - NSString *restOfKey = [keyValue substringWithRange:rest]; - keyValue = [firstChar stringByAppendingString:restOfKey]; - - // Save a copy of our old animations. - NSDictionary *oldAnimations - = [[[container_ animations] copy] autorelease]; - - // For frame the animator doesn't actually animate the rect but gets - // animators for the size and the origin independently. In case this changes - // in the future (similar to bounds), we will stop the animations for the - // frame as well as the frameSize and frameOrigin. - NSDictionary *animations = nil; - NSNull *null = [NSNull null]; - if ([keyValue isEqual:@"frame"]) { - animations = [NSDictionary dictionaryWithObjectsAndKeys: - null, @"frame", - null, @"frameSize", - null, @"frameOrigin", nil]; - } else { - animations = [NSDictionary dictionaryWithObject:null forKey:keyValue]; - } - - // Set our animations to NULL which will force them to stop. - [container_ setAnimations:animations]; - // Call our original invocation on our animator. - [anInvocation setTarget:[container_ animator]]; - [anInvocation invoke]; - - // Reset the animations. - [container_ setAnimations:oldAnimations]; - } else { - [self doesNotRecognizeSelector:selector]; - } -} - -@end - -@implementation NSView(GTMNSAnimatablePropertyContainer) - -- (id)gtm_animatorStopper { - return [[[GTMAnimatorStopper alloc] initWithAnimatablePropertyContainer:self] - autorelease]; -} - -@end - -@implementation NSWindow(GTMNSAnimatablePropertyContainer) - -- (id)gtm_animatorStopper { - return [[[GTMAnimatorStopper alloc] initWithAnimatablePropertyContainer:self] - autorelease]; -} - -@end - -#endif // MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 diff --git a/AppKit/GTMNSAnimatablePropertyContainerTest.h b/AppKit/GTMNSAnimatablePropertyContainerTest.h deleted file mode 100644 index f873601..0000000 --- a/AppKit/GTMNSAnimatablePropertyContainerTest.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// GTMNSAnimatablePropertyContainerTest.h -// -// Copyright (c) 2010 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import <AppKit/AppKit.h> - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 - -@class GTMUnitTestingBooleanRunLoopContext; - -@interface GTMNSAnimatablePropertyContainerWindow : NSWindow -@end - -@interface GTMNSAnimatablePropertyContainerWindowBox : NSBox - -- (void)set:(NSInteger)value; - -@end - -@interface GTMNSAnimatablePropertyContainerWindowController : NSWindowController { - @private - IBOutlet NSBox *nonLayerBox_; - IBOutlet NSBox *layerBox_; -} - -@property (readonly, retain, nonatomic) NSBox *nonLayerBox; -@property (readonly, retain, nonatomic) NSBox *layerBox; - -@end - -@interface GTMNSAnimatablePropertyContainerTest : GTMTestCase { - @private - GTMNSAnimatablePropertyContainerWindowController *windowController_; - GTMUnitTestingBooleanRunLoopContext *timerCalled_; -} -@end - -#endif // MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 diff --git a/AppKit/GTMNSAnimatablePropertyContainerTest.m b/AppKit/GTMNSAnimatablePropertyContainerTest.m deleted file mode 100644 index 8cef089..0000000 --- a/AppKit/GTMNSAnimatablePropertyContainerTest.m +++ /dev/null @@ -1,237 +0,0 @@ -// -// GTMNSAnimatablePropertyContainerTest.m -// -// Copyright (c) 2010 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSAnimatablePropertyContainerTest.h" -#import "GTMNSAnimatablePropertyContainer.h" -#import "GTMTypeCasting.h" -#import "GTMFoundationUnitTestingUtilities.h" - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 - -@implementation GTMNSAnimatablePropertyContainerWindow - -#if 0 -// Some useful debugging code. Enabled to track animation keys. -- (id)animationForKey:(NSString *)key { - id value = [super animationForKey:key]; - NSLog(@"Value: %@ Key: %@", value, key); - return value; -} -#endif - -@end - -@implementation GTMNSAnimatablePropertyContainerWindowBox - -#if 0 -// Some useful debugging code. Enabled to track animation keys. -- (id)animationForKey:(NSString *)key { - id value = [super animationForKey:key]; - NSLog(@"Value: %@ Key: %@", value, key); - return value; -} -#endif - -- (void)set:(NSInteger)value { -#pragma unused(value) -} - -@end - -@implementation GTMNSAnimatablePropertyContainerWindowController - -@synthesize nonLayerBox = nonLayerBox_; -@synthesize layerBox = layerBox_; - -- (id)init { - return [super initWithWindowNibName:@"GTMNSAnimatablePropertyContainerTest"]; -} - -- (void)windowWillClose:(NSNotification *)notification { - if (![[notification object] isEqual:[self window]]) { - [[NSException exceptionWithName:SenTestFailureException - reason:@"Bad window in windowWillClose" - userInfo:nil] raise]; - } - [self autorelease]; -} - -@end - -@implementation GTMNSAnimatablePropertyContainerTest - -- (void)setUp { - windowController_ - = [[GTMNSAnimatablePropertyContainerWindowController alloc] init]; - STAssertNotNil(windowController_, nil); - NSWindow *window = [windowController_ window]; - STAssertNotNil(window, nil); - timerCalled_ = [[GTMUnitTestingBooleanRunLoopContext alloc] init]; -} - -- (void)tearDown { - [windowController_ close]; - windowController_ = nil; - [timerCalled_ release]; - timerCalled_ = nil; -} - -- (void)windowAlphaValueStopper:(NSTimer *)timer { - NSWindow *window = GTM_DYNAMIC_CAST(NSWindow, [timer userInfo]); - [timerCalled_ setShouldStop:YES]; - [[window gtm_animatorStopper] setAlphaValue:0.25]; - STAssertEquals([window alphaValue], (CGFloat)0.25, nil); -} - -- (void)windowFrameStopper:(NSTimer *)timer { - NSWindow *window = GTM_DYNAMIC_CAST(NSWindow, [timer userInfo]); - [timerCalled_ setShouldStop:YES]; - [[window gtm_animatorStopper] setFrame:NSMakeRect(300, 300, 150, 150) - display:YES]; - STAssertEquals([window frame], NSMakeRect(300, 300, 150, 150), nil); -} - -- (void)nonLayerFrameStopper:(NSTimer *)timer { - NSView *view = GTM_DYNAMIC_CAST(NSView, [timer userInfo]); - [timerCalled_ setShouldStop:YES]; - [[view gtm_animatorStopper] setFrame:NSMakeRect(200, 200, 200, 200)]; - STAssertEquals([view frame], NSMakeRect(200, 200, 200, 200), nil); -} - -- (void)layerFrameStopper:(NSTimer *)timer { - NSView *view = GTM_DYNAMIC_CAST(NSView, [timer userInfo]); - [timerCalled_ setShouldStop:YES]; - [[view gtm_animatorStopper] setFrame:NSMakeRect(200, 200, 200, 200)]; - STAssertEquals([view frame], NSMakeRect(200, 200, 200, 200), nil); -} - -- (void)testWindowAnimations { - NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; - - // Test Alpha - NSWindow *window = [windowController_ window]; - [window setAlphaValue:1.0]; - [timerCalled_ setShouldStop:NO]; - [NSAnimationContext beginGrouping]; - NSAnimationContext *currentContext = [NSAnimationContext currentContext]; - [currentContext setDuration:2]; - [[window animator] setAlphaValue:0.5]; - [NSAnimationContext endGrouping]; - [NSTimer scheduledTimerWithTimeInterval:0.1 - target:self - selector:@selector(windowAlphaValueStopper:) - userInfo:window - repeats:NO]; - STAssertTrue([runLoop gtm_runUpToSixtySecondsWithContext:timerCalled_], nil); - STAssertEquals([window alphaValue], (CGFloat)0.25, nil); - - // Test Frame - [window setFrame:NSMakeRect(100, 100, 100, 100) display:YES]; - [timerCalled_ setShouldStop:NO]; - [NSAnimationContext beginGrouping]; - currentContext = [NSAnimationContext currentContext]; - [currentContext setDuration:2]; - [[window animator] setFrame:NSMakeRect(200, 200, 200, 200) display:YES]; - [NSAnimationContext endGrouping]; - [NSTimer scheduledTimerWithTimeInterval:0.1 - target:self - selector:@selector(windowFrameStopper:) - userInfo:window - repeats:NO]; - STAssertTrue([runLoop gtm_runUpToSixtySecondsWithContext:timerCalled_], nil); - STAssertEquals([window frame], NSMakeRect(300, 300, 150, 150), nil); - - // Test non-animation value - [window setTitle:@"Foo"]; - [[window gtm_animatorStopper] setTitle:@"Bar"]; - STAssertEquals([window title], @"Bar", nil); - - // Test bad selector - STAssertThrows([[window gtm_animatorStopper] testWindowAnimations], nil); -} - -- (void)testNonLayerViewAnimations { - NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; - - NSBox *nonLayerBox = [windowController_ nonLayerBox]; - STAssertNotNil(nonLayerBox, nil); - - // Test frame - [nonLayerBox setFrame:NSMakeRect(50, 50, 50, 50)]; - [timerCalled_ setShouldStop:NO]; - [NSAnimationContext beginGrouping]; - NSAnimationContext *currentContext = [NSAnimationContext currentContext]; - [currentContext setDuration:2]; - [[nonLayerBox animator] setFrame:NSMakeRect(100, 100, 100, 100)]; - [NSAnimationContext endGrouping]; - [NSTimer scheduledTimerWithTimeInterval:0.1 - target:self - selector:@selector(nonLayerFrameStopper:) - userInfo:nonLayerBox - repeats:NO]; - STAssertTrue([runLoop gtm_runUpToSixtySecondsWithContext:timerCalled_], nil); - STAssertEquals([nonLayerBox frame], NSMakeRect(200, 200, 200, 200), nil); - - // Test non-animation value - [nonLayerBox setToolTip:@"Foo"]; - [[nonLayerBox gtm_animatorStopper] setToolTip:@"Bar"]; - STAssertEquals([nonLayerBox toolTip], @"Bar", nil); - - // Test bad selector - STAssertThrows([[nonLayerBox gtm_animatorStopper] testNonLayerViewAnimations], - nil); -} - -- (void)testLayerViewAnimations { - NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; - - NSBox *layerBox = [windowController_ layerBox]; - STAssertNotNil(layerBox, nil); - - // Test frame - [layerBox setFrame:NSMakeRect(50, 50, 50, 50)]; - [timerCalled_ setShouldStop:NO]; - [NSAnimationContext beginGrouping]; - NSAnimationContext *currentContext = [NSAnimationContext currentContext]; - [currentContext setDuration:2]; - [[layerBox animator] setFrame:NSMakeRect(100, 100, 100, 100)]; - [NSAnimationContext endGrouping]; - [NSTimer scheduledTimerWithTimeInterval:0.1 - target:self - selector:@selector(layerFrameStopper:) - userInfo:layerBox - repeats:NO]; - STAssertTrue([runLoop gtm_runUpToSixtySecondsWithContext:timerCalled_], nil); - STAssertEquals([layerBox frame], NSMakeRect(200, 200, 200, 200), nil); - - // Test non-animation value - [layerBox setToolTip:@"Foo"]; - [[layerBox gtm_animatorStopper] setToolTip:@"Bar"]; - STAssertEquals([layerBox toolTip], @"Bar", nil); - - // Test bad selector - STAssertThrows([[layerBox gtm_animatorStopper] testLayerViewAnimations], - nil); - - // Test Short Selector - STAssertThrows([[layerBox gtm_animatorStopper] set:1], nil); -} - -@end - -#endif // MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 diff --git a/AppKit/GTMNSAnimatablePropertyContainerTest.xib b/AppKit/GTMNSAnimatablePropertyContainerTest.xib deleted file mode 100644 index 3065ab5..0000000 --- a/AppKit/GTMNSAnimatablePropertyContainerTest.xib +++ /dev/null @@ -1,426 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9L31a</string> - <string key="IBDocument.InterfaceBuilderVersion">680</string> - <string key="IBDocument.AppKitVersion">949.54</string> - <string key="IBDocument.HIToolboxVersion">353.00</string> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="2"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMNSAnimatablePropertyContainerWindowController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{196, 240}, {480, 270}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window</string> - <string key="NSWindowClass">GTMNSAnimatablePropertyContainerWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSBox" id="356378161"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">12</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSView" id="518392398"> - <reference key="NSNextResponder" ref="356378161"/> - <int key="NSvFlags">256</int> - <string key="NSFrame">{{1, 1}, {120, 113}}</string> - <reference key="NSSuperview" ref="356378161"/> - </object> - </object> - <string key="NSFrame">{{36, 135}, {122, 115}}</string> - <reference key="NSSuperview" ref="1006"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">NonLayerBox</string> - <object class="NSFont" key="NSSupport" id="26"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.100000e+01</double> - <int key="NSfFlags">3100</int> - </object> - <object class="NSColor" key="NSBackgroundColor" id="152657423"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textBackgroundColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <reference key="NSContentView" ref="518392398"/> - <int key="NSBorderType">1</int> - <int key="NSBoxType">4</int> - <int key="NSTitlePosition">2</int> - <bool key="NSTransparent">NO</bool> - <object class="NSColor" key="NSFillColor2"> - <int key="NSColorSpace">1</int> - <bytes key="NSRGB">MCAwIDEAA</bytes> - </object> - </object> - <object class="NSBox" id="852370930"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">12</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSView" id="743292700"> - <reference key="NSNextResponder" ref="852370930"/> - <int key="NSvFlags">256</int> - <string key="NSFrame">{{1, 1}, {120, 113}}</string> - <reference key="NSSuperview" ref="852370930"/> - </object> - </object> - <string key="NSFrame">{{238, 135}, {122, 115}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSViewIsLayerTreeHost">YES</bool> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">LayerBox</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSBackgroundColor" ref="152657423"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <reference key="NSContentView" ref="743292700"/> - <int key="NSBorderType">1</int> - <int key="NSBoxType">4</int> - <int key="NSTitlePosition">2</int> - <bool key="NSTransparent">NO</bool> - <object class="NSColor" key="NSFillColor2"> - <int key="NSColorSpace">1</int> - <bytes key="NSRGB">MSAwIDEAA</bytes> - </object> - </object> - </object> - <string key="NSFrameSize">{480, 270}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string> - <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">nonLayerBox_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="356378161"/> - </object> - <int key="connectionID">6</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">layerBox_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="852370930"/> - </object> - <int key="connectionID">7</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">delegate</string> - <reference key="source" ref="1005"/> - <reference key="destination" ref="1001"/> - </object> - <int key="connectionID">8</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">9</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <object class="NSArray" key="object" id="1002"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="1002"/> - <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="1002"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="1002"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - </object> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="356378161"/> - <reference ref="852370930"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">3</int> - <reference key="object" ref="356378161"/> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">4</int> - <reference key="object" ref="852370930"/> - <reference key="parent" ref="1006"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>2.IBPluginDependency</string> - <string>3.CustomClassName</string> - <string>3.IBPluginDependency</string> - <string>4.CustomClassName</string> - <string>4.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>{{152, 488}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{152, 488}, {480, 270}}</string> - <integer value="1"/> - <string>{196, 240}</string> - <string>{{202, 428}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>GTMNSAnimatablePropertyContainerWindowBox</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>GTMNSAnimatablePropertyContainerWindowBox</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">9</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMNSAnimatablePropertyContainerWindow</string> - <string key="superclassName">NSWindow</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="304255356"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMNSAnimatablePropertyContainerTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMNSAnimatablePropertyContainerWindowBox</string> - <string key="superclassName">NSBox</string> - <reference key="sourceIdentifier" ref="304255356"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMNSAnimatablePropertyContainerWindowController</string> - <string key="superclassName">NSWindowController</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>layerBox_</string> - <string>nonLayerBox_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSBox</string> - <string>NSBox</string> - </object> - </object> - <reference key="sourceIdentifier" ref="304255356"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="712611361"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="712611361"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMHTTPServer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="774965103"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMNSAnimatablePropertyContainer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="712611361"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="774965103"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="712611361"/> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - </data> -</archive> diff --git a/AppKit/GTMNSBezierPath+CGPathTest.m b/AppKit/GTMNSBezierPath+CGPathTest.m index 3c99a19..d49e7a0 100644 --- a/AppKit/GTMNSBezierPath+CGPathTest.m +++ b/AppKit/GTMNSBezierPath+CGPathTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -18,29 +18,35 @@ #import <Cocoa/Cocoa.h> -#import <SenTestingKit/SenTestingKit.h> #import "GTMNSBezierPath+CGPath.h" -#import "GTMAppKit+UnitTesting.h" #import "GTMSenTestCase.h" -@interface GTMNSBezierPath_CGPathTest : GTMTestCase<GTMUnitTestViewDrawer> +@interface GTMNSBezierPath_CGPathTest : GTMTestCase @end @implementation GTMNSBezierPath_CGPathTest - (void)testCGPath { - GTMAssertDrawingEqualToImageNamed(self, - NSMakeSize(100, 100), - @"GTMNSBezierPath+CGPathTest", - nil, nil); -} - + NSBitmapImageRep *offscreenRep = [[[NSBitmapImageRep alloc] + initWithBitmapDataPlanes:NULL + pixelsWide:100 + pixelsHigh:100 + bitsPerSample:8 + samplesPerPixel:4 + hasAlpha:YES + isPlanar:NO + colorSpaceName:NSDeviceRGBColorSpace + bitmapFormat:NSAlphaFirstBitmapFormat + bytesPerRow:0 + bitsPerPixel:0] autorelease]; -// Draws all of our tests so that we can compare this to our stored image file. -- (void)gtm_unitTestViewDrawRect:(NSRect)rect contextInfo:(void*)contextInfo{ + // set offscreen context + NSGraphicsContext *nsContext = + [NSGraphicsContext graphicsContextWithBitmapImageRep:offscreenRep]; + [NSGraphicsContext setCurrentContext:nsContext]; NSBezierPath *thePath = [NSBezierPath bezierPath]; NSPoint theStart = NSMakePoint(20.0, 20.0); - + // Test moveto/lineto [thePath moveToPoint: theStart]; for (NSUInteger i = 0; i < 10; ++i) { @@ -49,7 +55,7 @@ theNewPoint = NSMakePoint(i * 2, i * 6); [thePath moveToPoint: theNewPoint]; } - + // Test moveto/curveto for (NSUInteger i = 0; i < 10; ++i) { NSPoint startPoint = NSMakePoint(5.0, 50.0); @@ -57,17 +63,19 @@ NSPoint controlPoint1 = NSMakePoint(17.5, 50.0 + 5.0 * i); NSPoint controlPoint2 = NSMakePoint(42.5, 50.0 - 5.0 * i); [thePath moveToPoint:startPoint]; - [thePath curveToPoint:endPoint controlPoint1:controlPoint1 controlPoint2:controlPoint2]; + [thePath curveToPoint:endPoint + controlPoint1:controlPoint1 + controlPoint2:controlPoint2]; } // test close [thePath closePath]; - + CGPathRef cgPath = [thePath gtm_CGPath]; - STAssertNotNULL(cgPath, @"Nil CGPath"); + XCTAssertNotNULL(cgPath, @"Nil CGPath"); + + CGContextRef cgContext = [nsContext graphicsPort]; + XCTAssertNotNULL(cgContext, @"Nil cgContext"); - CGContextRef cgContext = [[NSGraphicsContext currentContext] graphicsPort]; - STAssertNotNULL(cgContext, @"Nil cgContext"); - CGContextAddPath(cgContext, cgPath); CGContextStrokePath(cgContext); } diff --git a/AppKit/GTMNSBezierPath+RoundRectTest.m b/AppKit/GTMNSBezierPath+RoundRectTest.m index 69a0621..02cd87b 100644 --- a/AppKit/GTMNSBezierPath+RoundRectTest.m +++ b/AppKit/GTMNSBezierPath+RoundRectTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -18,23 +18,33 @@ #import <Cocoa/Cocoa.h> -#import <SenTestingKit/SenTestingKit.h> #import "GTMNSBezierPath+RoundRect.h" -#import "GTMAppKit+UnitTesting.h" +#import "GTMSenTestCase.h" -@interface GTMNSBezierPath_RoundRectTest : GTMTestCase<GTMUnitTestViewDrawer> +@interface GTMNSBezierPath_RoundRectTest : GTMTestCase @end @implementation GTMNSBezierPath_RoundRectTest - (void)testRoundRects { - GTMAssertDrawingEqualToImageNamed(self, NSMakeSize(490, 500), - @"GTMNSBezierPath+RoundRectTest", nil, nil); -} + NSBitmapImageRep *offscreenRep = [[[NSBitmapImageRep alloc] + initWithBitmapDataPlanes:NULL + pixelsWide:100 + pixelsHigh:100 + bitsPerSample:8 + samplesPerPixel:4 + hasAlpha:YES + isPlanar:NO + colorSpaceName:NSDeviceRGBColorSpace + bitmapFormat:NSAlphaFirstBitmapFormat + bytesPerRow:0 + bitsPerPixel:0] autorelease]; -// Draws all of our tests so that we can compare this to our stored TIFF file. -- (void)gtm_unitTestViewDrawRect:(NSRect)rect contextInfo:(void*)contextInfo{ - NSRect theRects[] = { + // set offscreen context + NSGraphicsContext *nsContext = + [NSGraphicsContext graphicsContextWithBitmapImageRep:offscreenRep]; + [NSGraphicsContext setCurrentContext:nsContext]; + NSRect theRects[] = { NSMakeRect(0.0, 10.0, 0.0, 0.0), //Empty Rect test NSMakeRect(50.0, 10.0, 30.0, 30.0), //Square Test NSMakeRect(100.0, 10.0, 1.0, 2.0), //Small Test @@ -43,16 +53,17 @@ NSMakeRect(300.0, 10.0, 150.0, 30.0) //Large Test 2 (for different radius) }; const NSUInteger theRectCount = sizeof(theRects) / sizeof(theRects[0]); - + // Line Width Tests CGFloat theLineWidths[] = { 0.5, 50.0, 2.0 }; - const NSUInteger theLineWidthCount = sizeof(theLineWidths) / sizeof(theLineWidths[0]); - NSUInteger i,j; - + const NSUInteger theLineWidthCount = + sizeof(theLineWidths) / sizeof(theLineWidths[0]); + NSUInteger i, j; + for (i = 0; i < theLineWidthCount; ++i) { for (j = 0; j < theRectCount; ++j) { CGFloat cornerRadius = ( (j < (theRectCount - 1)) ? 20.0 : 0.0 ); - NSBezierPath *roundRect = [NSBezierPath gtm_bezierPathWithRoundRect:theRects[j] + NSBezierPath *roundRect = [NSBezierPath gtm_bezierPathWithRoundRect:theRects[j] cornerRadius:cornerRadius]; [roundRect setLineWidth: theLineWidths[i]]; [roundRect stroke]; @@ -63,43 +74,43 @@ theRects[j].origin.y += newWidth; } } - + // Fill test - NSColor *theColors[] = { - [NSColor colorWithCalibratedRed:1.0 green:0.0 blue:0.0 alpha:1.0], + NSColor *theColors[] = { + [NSColor colorWithCalibratedRed:1.0 green:0.0 blue:0.0 alpha:1.0], [NSColor colorWithCalibratedRed:0.2 green:0.4 blue:0.6 alpha:0.4] }; const NSUInteger theColorCount = sizeof(theColors)/sizeof(theColors[0]); - + for (i = 0; i < theColorCount; ++i) { for (j = 0; j < theRectCount; ++j) { CGFloat cornerRadius = ( (j < (theRectCount - 1)) ? 10.0 : 0.0 ); - NSBezierPath *roundRect = [NSBezierPath gtm_bezierPathWithRoundRect:theRects[j] + NSBezierPath *roundRect = [NSBezierPath gtm_bezierPathWithRoundRect:theRects[j] cornerRadius:cornerRadius]; [theColors[i] setFill]; [roundRect fill]; theRects[j].origin.y += 35.0; } } - + // Flatness test CGFloat theFlatness[] = {0.0, 0.1, 1.0, 10.0}; const NSUInteger theFlatnessCount = sizeof(theFlatness)/sizeof(theFlatness[0]); - + for (i = 0; i < theFlatnessCount; i++) { for (j = 0; j < theRectCount; ++j) { CGFloat cornerRadius = ( (j < (theRectCount - 1)) ? 6.0 : 0.0 ); - NSBezierPath *roundRect = [NSBezierPath gtm_bezierPathWithRoundRect:theRects[j] + NSBezierPath *roundRect = [NSBezierPath gtm_bezierPathWithRoundRect:theRects[j] cornerRadius:cornerRadius]; [roundRect setFlatness:theFlatness[i]]; [roundRect stroke]; theRects[j].origin.y += 35.0; } } - + // Different radii NSRect bigRect = NSMakeRect(50, 440, 200, 40); - NSBezierPath *roundRect = [NSBezierPath gtm_bezierPathWithRoundRect:bigRect + NSBezierPath *roundRect = [NSBezierPath gtm_bezierPathWithRoundRect:bigRect topLeftCornerRadius:0.0 topRightCornerRadius:5.0 bottomLeftCornerRadius:10.0 diff --git a/AppKit/GTMNSBezierPath+Shading.h b/AppKit/GTMNSBezierPath+Shading.h deleted file mode 100644 index 5d68728..0000000 --- a/AppKit/GTMNSBezierPath+Shading.h +++ /dev/null @@ -1,121 +0,0 @@ -// -// GTMNSBezierPath+Shading.h -// -// Category for radial and axial stroke and fill functions for NSBezierPaths -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Cocoa/Cocoa.h> -#import "GTMDefines.h" - -@protocol GTMShading; - -// -/// Category for radial and axial stroke and fill functions for NSBezierPaths -// -@interface NSBezierPath (GTMBezierPathShadingAdditions) - -/// Stroke the path axially with a color blend defined by |shading|. -// -/// The fill will extend from |fromPoint| to |toPoint| and will extend -/// indefinitely perpendicular to the axis of the line defined by the -/// two points. You can extend beyond the |fromPoint|/|toPoint by setting -/// |extendingStart|/|extendingEnd| respectively. -// -// Args: -// fromPoint: point to start the shading at -// toPoint: point to end the shading at -// extendingStart: should we extend the shading before |fromPoint| using -// the first color in our shading? -// extendingEnd: should we extend the shading after |toPoint| using the -// last color in our shading? -// shading: the shading to use to take our colors from. -// -- (void)gtm_strokeAxiallyFrom:(NSPoint)fromPoint to:(NSPoint)toPoint - extendingStart:(BOOL)extendingStart extendingEnd:(BOOL)extendingEnd - shading:(id<GTMShading>)shading; - -/// Stroke the path radially with a color blend defined by |shading|. -// -/// The fill will extend from the circle with center |fromPoint| -/// and radius |fromRadius| to the circle with center |toPoint| -/// with radius |toRadius|. -/// You can extend beyond the |fromPoint|/|toPoint| by setting -/// |extendingStart|/|extendingEnd| respectively. -// -// Args: -// fromPoint: center of the circle to start the shading at -// fromRadius: radius of the circle to start the shading at -// toPoint: center of the circle to to end the shading at -// toRadius: raidus of the circle to end the shading at -// extendingStart: should we extend the shading before |fromPoint| using -// the first color in our shading? -// extendingEnd: should we extend the shading after |toPoint| using the -// last color in our shading? -// shading: the shading to use to take our colors from. -// -- (void)gtm_strokeRadiallyFrom:(NSPoint)fromPoint fromRadius:(CGFloat)fromRadius - to:(NSPoint)toPoint toRadius:(CGFloat)toRadius - extendingStart:(BOOL)extendingStart extendingEnd:(BOOL)extendingEnd - shading:(id<GTMShading>)shading; - -/// Fill the path radially with a color blend defined by |shading|. -// -/// The fill will extend from the circle with center |fromPoint| -/// and radius |fromRadius| to the circle with center |toPoint| -/// with radius |toRadius|. -/// You can extend beyond the |fromPoint|/|toPoint by setting -/// |extendingStart|/|extendingEnd| respectively. -// -// Args: -// fromPoint: center of the circle to start the shading at -// fromRadius: radius of the circle to start the shading at -// toPoint: center of the circle to to end the shading at -// toRadius: radius of the circle to end the shading at -// extendingStart: should we extend the shading before |fromPoint| using -// the first color in our shading? -// extendingEnd: should we extend the shading after |toPoint| using the -// last color in our shading? -// shading: the shading to use to take our colors from. -// -- (void)gtm_fillAxiallyFrom:(NSPoint)fromPoint to:(NSPoint)toPoint - extendingStart:(BOOL)extendingStart extendingEnd:(BOOL)extendingEnd - shading:(id<GTMShading>)shading; - -/// Fill the path radially with a color blend defined by |shading|. -// -/// The fill will extend from the circle with center |fromPoint| -/// and radius |fromRadius| to the circle with center |toPoint| -/// with radius |toRadius|. -/// You can extend beyond the |fromPoint|/|toPoint by setting -/// |extendingStart|/|extendingEnd| respectively. -// -// Args: -// fromPoint: center of the circle to start the shading at -// fromRadius: radius of the circle to start the shading at -// toPoint: center of the circle to to end the shading at -// toRadius: radius of the circle to end the shading at -// extendingStart: should we extend the shading before |fromPoint| using -// the first color in our shading? -// extendingEnd: should we extend the shading after |toPoint| using the -// last color in our shading? -// shading: the shading to use to take our colors from. -// -- (void)gtm_fillRadiallyFrom:(NSPoint)fromPoint fromRadius:(CGFloat)fromRadius - to:(NSPoint)toPoint toRadius:(CGFloat)toRadius - extendingStart:(BOOL)extendingStart extendingEnd:(BOOL)extendingEnd - shading:(id<GTMShading>)shading; -@end diff --git a/AppKit/GTMNSBezierPath+Shading.m b/AppKit/GTMNSBezierPath+Shading.m deleted file mode 100644 index 5e65b14..0000000 --- a/AppKit/GTMNSBezierPath+Shading.m +++ /dev/null @@ -1,216 +0,0 @@ -// -// GTMNSBezierPath+Shading.m -// -// Category for radial and axial stroke and fill functions for NSBezierPaths -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSBezierPath+Shading.h" -#import "GTMNSBezierPath+CGPath.h" -#import "GTMShading.h" -#import "GTMGeometryUtils.h" -#import "GTMMethodCheck.h" - -@interface NSBezierPath (GTMBezierPathShadingAdditionsPrivate) -// Fills a CGPathRef either axially or radially with the given shading. -// -// Args: -// path: path to fill -// axially: if YES fill axially, otherwise fill radially -// asStroke: if YES, clip to the stroke of the path, otherwise -// clip to the fill -// from: where to shade from -// fromRadius: in a radial fill, the radius of the from circle -// to: where to shade to -// toRadius: in a radial fill, the radius of the to circle -// extendingStart: if true, extend the fill with the first color of the shade -// beyond |from| away from |to| -// extendingEnd: if true, extend the fill with the last color of the shade -// beyond |to| away from |from| -// shading: the shading to use for the fill -// -- (void)gtm_fillCGPath:(CGPathRef)path - axially:(BOOL)axially - asStroke:(BOOL)asStroke - from:(NSPoint)fromPoint fromRadius:(CGFloat)fromRadius - to:(NSPoint)toPoint toRadius:(CGFloat)toRadius - extendingStart:(BOOL)extendingStart extendingEnd:(BOOL)extendingEnd - shading:(id<GTMShading>)shading; - -// Returns the point which is the projection of a line from point |pointA| -// to |pointB| by length -// -// Args: -// pointA: first point -// pointB: second point -// length: distance to project beyond |pointB| which is in line with -// |pointA| and |pointB| -// -// Returns: -// the projected point -- (NSPoint)gtm_projectLineFrom:(NSPoint)pointA - to:(NSPoint)pointB - by:(CGFloat)length; -@end - - -@implementation NSBezierPath (GTMBezierPathAdditionsPrivate) - -- (void)gtm_fillCGPath:(CGPathRef)path - axially:(BOOL)axially asStroke:(BOOL)asStroke - from:(NSPoint)fromPoint fromRadius:(CGFloat)fromRadius - to:(NSPoint)toPoint toRadius:(CGFloat)toRadius - extendingStart:(BOOL)extendingStart extendingEnd:(BOOL)extendingEnd - shading:(id<GTMShading>)shading { - CGFunctionRef shadingFunction = [shading shadeFunction]; - if (nil != shadingFunction) { - CGContextRef currentContext = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; - if (nil != currentContext) { - CGContextSaveGState(currentContext); - CGFloat lineWidth = [self lineWidth]; - CGContextSetLineWidth(currentContext, lineWidth); - if (asStroke) { - // if we are using the stroke, we offset the from and to points - // by half the stroke width away from the center of the stroke. - // Otherwise we tend to end up with fills that only cover half of the - // because users set the start and end points based on the center - // of the stroke. - CGFloat halfWidth = lineWidth * 0.5; - fromPoint = [self gtm_projectLineFrom:toPoint to:fromPoint by:halfWidth]; - toPoint = [self gtm_projectLineFrom:fromPoint to:toPoint by:-halfWidth]; - } - CGColorSpaceRef colorspace = [shading colorSpace]; - if (nil != colorspace) { - CGPoint toCGPoint = {.x = toPoint.x, .y = toPoint.y}; - CGPoint fromCGPoint = {.x = fromPoint.x, .y = fromPoint.y}; - CGShadingRef myCGShading; - if(axially) { - myCGShading = CGShadingCreateAxial(colorspace, fromCGPoint, - toCGPoint, shadingFunction, - extendingStart == YES, - extendingEnd == YES); - } - else { - myCGShading = CGShadingCreateRadial(colorspace, fromCGPoint, fromRadius, - toCGPoint, toRadius, shadingFunction, - extendingStart == YES, - extendingEnd == YES); - } - - if (nil != myCGShading) { - CGContextAddPath(currentContext,path); - if(asStroke) { - CGContextReplacePathWithStrokedPath(currentContext); - } - CGContextClip(currentContext); - CGContextDrawShading(currentContext, myCGShading); - CGShadingRelease(myCGShading); - } - } - CGContextRestoreGState(currentContext); - } - } -} - - -- (NSPoint)gtm_projectLineFrom:(NSPoint)pointA - to:(NSPoint)pointB - by:(CGFloat)length { - NSPoint newPoint = NSMakePoint(pointB.x, pointB.y); - CGFloat x = (pointB.x - pointA.x); - CGFloat y = (pointB.y - pointA.y); - if (fpclassify(x) == FP_ZERO) { - newPoint.y += length; - } else if (fpclassify(y) == FP_ZERO) { - newPoint.x += length; - } else { -#if CGFLOAT_IS_DOUBLE - CGFloat angle = atan(y / x); - newPoint.x += sin(angle) * length; - newPoint.y += cos(angle) * length; -#else - CGFloat angle = atanf(y / x); - newPoint.x += sinf(angle) * length; - newPoint.y += cosf(angle) * length; -#endif - } - return newPoint; -} - -@end - - -@implementation NSBezierPath (GTMBezierPathShadingAdditions) -GTM_METHOD_CHECK(NSBezierPath, gtm_CGPath); - -- (void)gtm_strokeAxiallyFrom:(NSPoint)fromPoint to:(NSPoint)toPoint - extendingStart:(BOOL)extendingStart extendingEnd:(BOOL)extendingEnd - shading:(id<GTMShading>)shading { - CGPathRef thePath = [self gtm_CGPath]; - if (nil != thePath) { - [self gtm_fillCGPath:thePath axially:YES asStroke:YES - from:fromPoint fromRadius:(CGFloat)0.0 - to:toPoint toRadius:(CGFloat)0.0 - extendingStart:extendingStart extendingEnd:extendingEnd - shading:shading]; - } -} - - -- (void)gtm_strokeRadiallyFrom:(NSPoint)fromPoint fromRadius:(CGFloat)fromRadius - to:(NSPoint)toPoint toRadius:(CGFloat)toRadius - extendingStart:(BOOL)extendingStart extendingEnd:(BOOL)extendingEnd - shading:(id<GTMShading>)shading { - CGPathRef thePath = [self gtm_CGPath]; - if (nil != thePath) { - [self gtm_fillCGPath:thePath axially:NO asStroke:YES - from:fromPoint fromRadius:fromRadius - to:toPoint toRadius:toRadius - extendingStart:extendingStart extendingEnd:extendingEnd - shading:shading]; - } -} - - -- (void)gtm_fillAxiallyFrom:(NSPoint)fromPoint to:(NSPoint)toPoint - extendingStart:(BOOL)extendingStart extendingEnd:(BOOL)extendingEnd - shading:(id<GTMShading>)shading { - CGPathRef thePath = [self gtm_CGPath]; - if (nil != thePath) { - [self gtm_fillCGPath:thePath axially:YES asStroke:NO - from:fromPoint fromRadius:(CGFloat)0.0 - to:toPoint toRadius:(CGFloat)0.0 - extendingStart:extendingStart extendingEnd:extendingEnd - shading:shading]; - } -} - - -- (void)gtm_fillRadiallyFrom:(NSPoint)fromPoint fromRadius:(CGFloat)fromRadius - to:(NSPoint)toPoint toRadius:(CGFloat)toRadius - extendingStart:(BOOL)extendingStart extendingEnd:(BOOL)extendingEnd - shading:(id<GTMShading>)shading { - CGPathRef thePath = [self gtm_CGPath]; - if (nil != thePath) { - [self gtm_fillCGPath:thePath axially:NO asStroke:NO - from:fromPoint fromRadius:fromRadius - to:toPoint toRadius:toRadius - extendingStart:extendingStart extendingEnd:extendingEnd - shading:shading]; - } -} - -@end diff --git a/AppKit/GTMNSBezierPath+ShadingTest.m b/AppKit/GTMNSBezierPath+ShadingTest.m deleted file mode 100644 index a9dfbef..0000000 --- a/AppKit/GTMNSBezierPath+ShadingTest.m +++ /dev/null @@ -1,177 +0,0 @@ -// -// GTMNSBezierPath+ShadingTest.m -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Cocoa/Cocoa.h> - -#import <SenTestingKit/SenTestingKit.h> - -#import "GTMLinearRGBShading.h" -#import "GTMAppKit+UnitTesting.h" -#import "GTMNSBezierPath+Shading.h" - -@interface GTMNSBezierPath_ShadingTest : GTMTestCase<GTMUnitTestViewDrawer> -@end - -@implementation GTMNSBezierPath_ShadingTest - -- (void)testShadings { - GTMAssertDrawingEqualToImageNamed(self, - NSMakeSize(310, 410), - @"GTMNSBezierPath+ShadingTest", nil, nil); -} - -- (void)gtm_unitTestViewDrawRect:(NSRect)rect contextInfo:(void*)contextInfo { - - NSColor *theColorArray[] = { [NSColor blueColor], - [NSColor redColor], [NSColor yellowColor], - [NSColor blueColor], [NSColor greenColor], - [NSColor redColor] }; - CGFloat theFloatArray[] = { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 }; - - GTMLinearRGBShading *shading = - [GTMLinearRGBShading shadingWithColors:theColorArray - fromSpaceNamed:NSCalibratedRGBColorSpace - atPositions:theFloatArray - count:sizeof(theFloatArray)/sizeof(CGFloat)]; - NSBezierPath *shadedPath; - - // axial stroke rect - diagonal fill - NSRect axialStrokeRect = NSMakeRect(10.0f, 10.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:axialStrokeRect]; - [shadedPath setLineWidth: 10.0f]; - NSPoint startPoint = NSMakePoint(axialStrokeRect.origin.x + 20.0f, - axialStrokeRect.origin.y + 20.0f); - NSPoint endPoint = NSMakePoint(axialStrokeRect.origin.x + axialStrokeRect.size.width - 20.0f, - axialStrokeRect.origin.y + axialStrokeRect.size.height - 20.0f); - [shadedPath gtm_strokeAxiallyFrom:startPoint to:endPoint extendingStart:YES extendingEnd:YES shading:shading]; - - // axial stroke rect - v line fill - axialStrokeRect = NSMakeRect(110.0f, 10.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:axialStrokeRect]; - [shadedPath setLineWidth: 10.0f]; - startPoint = NSMakePoint(axialStrokeRect.origin.x + axialStrokeRect.size.width / 2.0f, - axialStrokeRect.origin.y + 20.0f); - endPoint = NSMakePoint(axialStrokeRect.origin.x + axialStrokeRect.size.width / 2.0f, - axialStrokeRect.origin.y + axialStrokeRect.size.height - 20.0f); - [shadedPath gtm_strokeAxiallyFrom:startPoint to:endPoint extendingStart:YES extendingEnd:YES shading:shading]; - - // axial stroke rect - h line fill - axialStrokeRect = NSMakeRect(210.0f, 10.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:axialStrokeRect]; - [shadedPath setLineWidth: 10.0f]; - startPoint = NSMakePoint(axialStrokeRect.origin.x + 20.0f, - axialStrokeRect.origin.y + axialStrokeRect.size.height / 2.0f); - endPoint = NSMakePoint(axialStrokeRect.origin.x + axialStrokeRect.size.width - 20.0f, - axialStrokeRect.origin.y + axialStrokeRect.size.height / 2.0f); - [shadedPath gtm_strokeAxiallyFrom:startPoint to:endPoint extendingStart:YES extendingEnd:YES shading:shading]; - - // axial fill rect - diagonal fill - NSRect axialFillRect = NSMakeRect(10.0f, 110.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:axialFillRect]; - startPoint = NSMakePoint(axialFillRect.origin.x + 20.0f, - axialFillRect.origin.y + 20.0f); - endPoint = NSMakePoint(axialFillRect.origin.x + axialFillRect.size.width - 20.0f, - axialFillRect.origin.y + axialFillRect.size.height - 20.0f); - [shadedPath gtm_fillAxiallyFrom:startPoint to:endPoint extendingStart:YES extendingEnd:YES shading:shading]; - - // axial fill rect - v line fill - axialFillRect = NSMakeRect(110.0f, 110.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:axialFillRect]; - startPoint = NSMakePoint(axialFillRect.origin.x + axialFillRect.size.width / 2.0f, - axialFillRect.origin.y + 20.0f); - endPoint = NSMakePoint(axialFillRect.origin.x + axialFillRect.size.width / 2.0f, - axialFillRect.origin.y + axialFillRect.size.height - 20.0f); - [shadedPath gtm_fillAxiallyFrom:startPoint to:endPoint extendingStart:YES extendingEnd:YES shading:shading]; - - // axial fill rect - h line fill - axialFillRect = NSMakeRect(210.0f, 110.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:axialFillRect]; - startPoint = NSMakePoint(axialFillRect.origin.x + 20.0f, - axialFillRect.origin.y + axialFillRect.size.height / 2.0f); - endPoint = NSMakePoint(axialFillRect.origin.x + axialFillRect.size.width - 20.0f, - axialFillRect.origin.y + axialFillRect.size.height / 2.0f); - [shadedPath gtm_fillAxiallyFrom:startPoint to:endPoint extendingStart:YES extendingEnd:YES shading:shading]; - - // radial stroke rect - diagonal fill - NSRect radialStrokeRect = NSMakeRect(10.0f, 210.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:radialStrokeRect]; - startPoint = NSMakePoint(radialStrokeRect.origin.x + 20.0f, - radialStrokeRect.origin.y + 20.0f); - endPoint = NSMakePoint(radialStrokeRect.origin.x + radialStrokeRect.size.width - 20.0f, - radialStrokeRect.origin.y + radialStrokeRect.size.height - 20.0f); - [shadedPath gtm_strokeRadiallyFrom:startPoint fromRadius:60.0f - to:endPoint toRadius:20.0f - extendingStart:YES extendingEnd:YES shading:shading]; - - // radial stroke rect - v line fill - radialStrokeRect = NSMakeRect(110.0f, 210.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:radialStrokeRect]; - startPoint = NSMakePoint(radialStrokeRect.origin.x + radialStrokeRect.size.width / 2.0f, - radialStrokeRect.origin.y + 20.0f); - endPoint = NSMakePoint(radialStrokeRect.origin.x + radialStrokeRect.size.width / 2.0f, - radialStrokeRect.origin.y + radialStrokeRect.size.height - 20.0f); - [shadedPath gtm_strokeRadiallyFrom:startPoint fromRadius:60.0f - to:endPoint toRadius:20.0f - extendingStart:YES extendingEnd:YES shading:shading]; - - // radial stroke rect - h line fill - radialStrokeRect = NSMakeRect(210.0f, 210.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:radialStrokeRect]; - startPoint = NSMakePoint(radialStrokeRect.origin.x + 20.0f, - radialStrokeRect.origin.y + radialStrokeRect.size.height / 2.0f); - endPoint = NSMakePoint(radialStrokeRect.origin.x + radialStrokeRect.size.width - 20.0f, - radialStrokeRect.origin.y + radialStrokeRect.size.height / 2.0f); - [shadedPath gtm_strokeRadiallyFrom:startPoint fromRadius:60.0f - to:endPoint toRadius:20.0f - extendingStart:YES extendingEnd:YES shading:shading]; - - // radial fill rect - diagonal fill - NSRect radialFillRect = NSMakeRect(10.0f, 310.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:radialFillRect]; - startPoint = NSMakePoint(radialFillRect.origin.x + 20.0f, - radialFillRect.origin.y + 20.0f); - endPoint = NSMakePoint(radialFillRect.origin.x + radialFillRect.size.width - 20.0f, - radialFillRect.origin.y + radialFillRect.size.height - 20.0f); - [shadedPath gtm_fillRadiallyFrom:startPoint fromRadius:10.0f - to:endPoint toRadius:20.0f - extendingStart:YES extendingEnd:YES shading:shading]; - - // radial fill rect - v line fill - radialFillRect = NSMakeRect(110.0f, 310.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:radialFillRect]; - startPoint = NSMakePoint(radialFillRect.origin.x + radialFillRect.size.width / 2.0f, - radialFillRect.origin.y + 20.0f); - endPoint = NSMakePoint(radialFillRect.origin.x + radialFillRect.size.width / 2.0f, - radialFillRect.origin.y + radialFillRect.size.height - 20.0f); - [shadedPath gtm_fillRadiallyFrom:startPoint fromRadius:10.0f - to:endPoint toRadius:20.0f - extendingStart:YES extendingEnd:YES shading:shading]; - - // radial fill rect - h line fill - radialFillRect = NSMakeRect(210.0f, 310.0f, 90.0f, 90.0f); - shadedPath = [NSBezierPath bezierPathWithRect:radialFillRect]; - startPoint = NSMakePoint(radialFillRect.origin.x + 20.0f, - radialFillRect.origin.y + radialFillRect.size.height / 2.0f); - endPoint = NSMakePoint(radialFillRect.origin.x + radialFillRect.size.width - 20.0f, - radialFillRect.origin.y + radialFillRect.size.height / 2.0f); - [shadedPath gtm_fillRadiallyFrom:startPoint fromRadius:10.0f - to:endPoint toRadius:20.0f - extendingStart:YES extendingEnd:YES shading:shading]; -} - -@end diff --git a/AppKit/GTMNSColor+LuminanceTest.m b/AppKit/GTMNSColor+LuminanceTest.m index 82eb014..8907623 100644 --- a/AppKit/GTMNSColor+LuminanceTest.m +++ b/AppKit/GTMNSColor+LuminanceTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -25,7 +25,7 @@ @interface GTMNSColor_LuminanceTest : GTMTestCase @end - + @implementation GTMNSColor_LuminanceTest - (void)testLuminance { @@ -34,37 +34,31 @@ NSColor *lighter = [midtone gtm_colorAdjustedFor:GTMColorationBaseHighlight]; NSColor *lightest = [midtone gtm_colorAdjustedFor:GTMColorationLightHighlight]; NSColor *darkest = [midtone gtm_colorAdjustedFor:GTMColorationDarkShadow]; - + // The relationships of the other values are not set, so we don't test them yet - STAssertGreaterThanOrEqual([lightest gtm_luminance], - [lighter gtm_luminance], nil); - STAssertGreaterThanOrEqual([lighter gtm_luminance], - [midtone gtm_luminance], nil); - STAssertGreaterThanOrEqual([midtone gtm_luminance], - [darker gtm_luminance], nil); - STAssertGreaterThanOrEqual([darker gtm_luminance], - [darkest gtm_luminance], nil); - STAssertGreaterThanOrEqual([[NSColor whiteColor] gtm_luminance], - (CGFloat)0.95, nil); - STAssertGreaterThanOrEqual([[NSColor yellowColor] gtm_luminance], - (CGFloat)0.90, nil); - STAssertEqualsWithAccuracy([[NSColor blueColor] gtm_luminance], - (CGFloat)0.35, 0.10, nil); - STAssertEqualsWithAccuracy([[NSColor redColor] gtm_luminance], - (CGFloat)0.50, 0.10, nil); - STAssertLessThanOrEqual([[NSColor blackColor] gtm_luminance], - (CGFloat)0.30, nil); - STAssertTrue([[NSColor blackColor] gtm_isDarkColor], nil); - STAssertTrue([[NSColor blueColor] gtm_isDarkColor], nil); - STAssertTrue([[NSColor redColor] gtm_isDarkColor], nil); - STAssertTrue(![[NSColor whiteColor] gtm_isDarkColor], nil); - STAssertTrue(![[NSColor yellowColor] gtm_isDarkColor], nil); - STAssertGreaterThanOrEqual([[[NSColor blackColor] gtm_legibleTextColor] - gtm_luminance], - [[NSColor grayColor] gtm_luminance], nil); - STAssertLessThanOrEqual([[[NSColor whiteColor] gtm_legibleTextColor] - gtm_luminance], - [[NSColor grayColor] gtm_luminance], nil); + XCTAssertGreaterThanOrEqual([lightest gtm_luminance], [lighter gtm_luminance]); + XCTAssertGreaterThanOrEqual([lighter gtm_luminance], [midtone gtm_luminance]); + XCTAssertGreaterThanOrEqual([midtone gtm_luminance], [darker gtm_luminance]); + XCTAssertGreaterThanOrEqual([darker gtm_luminance], [darkest gtm_luminance]); + XCTAssertGreaterThanOrEqual([[NSColor whiteColor] gtm_luminance], (CGFloat)0.95); + XCTAssertGreaterThanOrEqual([[NSColor yellowColor] gtm_luminance], (CGFloat)0.90); + XCTAssertEqualWithAccuracy([[NSColor blueColor] gtm_luminance], + (CGFloat)0.35, 0.10); + XCTAssertEqualWithAccuracy([[NSColor redColor] gtm_luminance], + (CGFloat)0.50, 0.10); + XCTAssertLessThanOrEqual([[NSColor blackColor] gtm_luminance], + (CGFloat)0.30); + XCTAssertTrue([[NSColor blackColor] gtm_isDarkColor]); + XCTAssertTrue([[NSColor blueColor] gtm_isDarkColor]); + XCTAssertTrue([[NSColor redColor] gtm_isDarkColor]); + XCTAssertTrue(![[NSColor whiteColor] gtm_isDarkColor]); + XCTAssertTrue(![[NSColor yellowColor] gtm_isDarkColor]); + XCTAssertGreaterThanOrEqual([[[NSColor blackColor] gtm_legibleTextColor] + gtm_luminance], + [[NSColor grayColor] gtm_luminance]); + XCTAssertLessThanOrEqual([[[NSColor whiteColor] gtm_legibleTextColor] + gtm_luminance], + [[NSColor grayColor] gtm_luminance]); } @end diff --git a/AppKit/GTMNSImage+Scaling.h b/AppKit/GTMNSImage+Scaling.h deleted file mode 100644 index 0f87709..0000000 --- a/AppKit/GTMNSImage+Scaling.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// GTMNSImage+Scaling.h -// -// Scales NSImages to a variety of sizes for drawing -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - - -#import <AppKit/AppKit.h> -#import "GTMDefines.h" - -@interface NSImage (GTMNSImageScaling) - -// Return an existing representation of a size -- (NSImageRep *)gtm_representationOfSize:(NSSize)size; - -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6 -// Return the exact or next largest representation for a size -// If you are on SnowLeopard use -// -[NSImage bestRepresentationForRect:context:hints:] -// Also, please see http://openradar.appspot.com/radar?id=394401 -// and read notes in GTMNSImage+ScalingTest.m. Search for "8052200". -- (NSImageRep *)gtm_bestRepresentationForSize:(NSSize)size; -#endif - -// Create a new represetation for a given size -- (BOOL)gtm_createRepresentationOfSize:(NSSize)size; - -// Create 32 and 16px reps -- (BOOL)gtm_createIconRepresentations; - -// Remove reps larger than a given size and create a new rep if needed -- (void)gtm_shrinkToSize:(NSSize)size; - -// Remove reps larger than a given size -- (void)gtm_removeRepresentationsLargerThanSize:(NSSize)size; - -// Return a dup shrunk to a given size -- (NSImage *)gtm_duplicateOfSize:(NSSize)size; -@end diff --git a/AppKit/GTMNSImage+Scaling.m b/AppKit/GTMNSImage+Scaling.m deleted file mode 100644 index bb65afb..0000000 --- a/AppKit/GTMNSImage+Scaling.m +++ /dev/null @@ -1,192 +0,0 @@ -// -// GTMNSImage+Scaling.m -// -// Scales NSImages to a variety of sizes for drawing -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSImage+Scaling.h" -#import "GTMGeometryUtils.h" - -@implementation NSImage (GTMNSImageScaling) - -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6 -// If you are on SnowLeopard use -// -[NSImage bestRepresentationForRect:context:hints:] -- (NSImageRep *)gtm_bestRepresentationForSize:(NSSize)size { - NSImageRep *bestRep = [self gtm_representationOfSize:size]; - if (bestRep) { - return bestRep; - } - NSArray *reps = [self representations]; - - CGFloat repDistance = CGFLOAT_MAX; - - NSImageRep *thisRep; - GTM_FOREACH_OBJECT(thisRep, reps) { - CGFloat thisDistance; - thisDistance = MIN(size.width - [thisRep size].width, - size.height - [thisRep size].height); - - if (repDistance < 0 && thisDistance > 0) continue; - if (ABS(thisDistance) < ABS(repDistance) - || (thisDistance < 0 && repDistance > 0)) { - repDistance = thisDistance; - bestRep = thisRep; - } - } - - if (!bestRep) { - bestRep = [self bestRepresentationForDevice:nil]; - } - - return bestRep; -} -#endif // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6 - -- (NSImageRep *)gtm_representationOfSize:(NSSize)size { - NSArray *reps = [self representations]; - - NSImageRep *thisRep; - GTM_FOREACH_OBJECT(thisRep, reps) { - if (NSEqualSizes([thisRep size], size)) { - return thisRep; - } - } - return nil; -} - -- (BOOL)gtm_createIconRepresentations { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - [self setFlipped:NO]; - [self gtm_createRepresentationOfSize:NSMakeSize(16, 16)]; - [self gtm_createRepresentationOfSize:NSMakeSize(32, 32)]; - [self setScalesWhenResized:NO]; -#pragma clang diagnostic pop - return YES; -} - -- (BOOL)gtm_createRepresentationOfSize:(NSSize)size { - if ([self gtm_representationOfSize:size]) { - return NO; - } - - NSBitmapImageRep *bestRep; -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6 - bestRep = (NSBitmapImageRep *)[self gtm_bestRepresentationForSize:size]; -#else - bestRep - = (NSBitmapImageRep *)[self bestRepresentationForRect:GTMNSRectOfSize(size) - context:nil - hints:nil]; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6 - - NSRect drawRect = GTMNSScaleRectToRect(GTMNSRectOfSize([bestRep size]), - GTMNSRectOfSize(size), - GTMScaleProportionally, - GTMRectAlignCenter); - // Using NSSelectorFromString because CGImage isn't a declared selector - // on Tiger, and just using straight @selector(CGImage) will cause compile - // errors on a 10.4 SDK. - SEL cgImageSel = NSSelectorFromString(@"CGImage"); - if ([bestRep respondsToSelector:cgImageSel]) { - CGImageRef imageRef = (CGImageRef)[bestRep performSelector:cgImageSel]; - - CGColorSpaceRef cspace = CGColorSpaceCreateDeviceRGB(); - if (!cspace) return NO; - - CGContextRef smallContext = - CGBitmapContextCreate(NULL, - size.width, - size.height, - 8, // bits per component - size.width * 4, // bytes per pixel - cspace, - kCGBitmapByteOrder32Host - | kCGImageAlphaPremultipliedLast); - CFRelease(cspace); - - if (!smallContext) return NO; - - - CGContextDrawImage(smallContext, GTMNSRectToCGRect(drawRect), imageRef); - - CGImageRef smallImage = CGBitmapContextCreateImage(smallContext); - - if (smallImage) { - NSBitmapImageRep *cgRep = - [[[NSBitmapImageRep alloc] initWithCGImage:smallImage] autorelease]; - [self addRepresentation:cgRep]; - CGImageRelease(smallImage); - } else { - CGContextRelease(smallContext); - return NO; - } - CGContextRelease(smallContext); - return YES; - } else { - // This functionality is here to allow it to work under Tiger - // It can probably only be called safely from the main thread - NSImage* scaledImage = [[NSImage alloc] initWithSize:size]; - [scaledImage lockFocus]; - NSGraphicsContext *graphicsContext = [NSGraphicsContext currentContext]; - [graphicsContext setImageInterpolation:NSImageInterpolationHigh]; - [graphicsContext setShouldAntialias:YES]; - [bestRep drawInRect:drawRect]; - NSBitmapImageRep* iconRep = - [[[NSBitmapImageRep alloc] initWithFocusedViewRect: - NSMakeRect(0, 0, size.width, size.height)] autorelease]; - [scaledImage unlockFocus]; - [scaledImage release]; - [self addRepresentation:iconRep]; - return YES; - } - return NO; -} - -- (void)gtm_removeRepresentationsLargerThanSize:(NSSize)size { - NSMutableArray *repsToRemove = [NSMutableArray array]; - NSImageRep *thisRep; - // Remove them in a second loop so we don't change things will doing the - // initial loop. - GTM_FOREACH_OBJECT(thisRep, [self representations]) { - if ([thisRep size].width > size.width - && [thisRep size].height > size.height) { - [repsToRemove addObject:thisRep]; - } - } - GTM_FOREACH_OBJECT(thisRep, repsToRemove) { - [self removeRepresentation:thisRep]; - } -} - -- (NSImage *)gtm_duplicateOfSize:(NSSize)size { - NSImage *duplicate = [[self copy] autorelease]; - [duplicate gtm_shrinkToSize:size]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - [duplicate setFlipped:NO]; -#pragma clang diagnostic pop - return duplicate; -} - -- (void)gtm_shrinkToSize:(NSSize)size { - [self gtm_createRepresentationOfSize:size]; - [self setSize:size]; - [self gtm_removeRepresentationsLargerThanSize:size]; -} -@end diff --git a/AppKit/GTMNSImage+ScalingTest.m b/AppKit/GTMNSImage+ScalingTest.m deleted file mode 100644 index 426e21b..0000000 --- a/AppKit/GTMNSImage+ScalingTest.m +++ /dev/null @@ -1,83 +0,0 @@ -// -// GTMNSImage+ScalingTest.m -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Cocoa/Cocoa.h> - -#import "GTMSenTestCase.h" - -#import "GTMNSImage+Scaling.h" -#import "GTMGeometryUtils.h" - -@interface GTMNSImage_ScalingTest : GTMTestCase -@end - -@implementation GTMNSImage_ScalingTest - -- (void)testScaling { - NSImage *testImage = [NSImage imageNamed:@"NSApplicationIcon"]; - - NSImageRep *rep = nil; - NSRect bestRepRect = NSMakeRect(0, 0, 99, 99); - -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6 - rep = [testImage bestRepresentationForRect:bestRepRect - context:nil - hints:nil]; -#else - rep = [testImage gtm_bestRepresentationForSize:bestRepRect.size]; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6 - - STAssertTrue(NSEqualSizes([rep size], NSMakeSize(128, 128)), nil); - - [testImage gtm_createIconRepresentations]; - STAssertNotNil([testImage gtm_representationOfSize:NSMakeSize(16, 16)], nil); - STAssertNotNil([testImage gtm_representationOfSize:NSMakeSize(32, 32)], nil); - - NSImage *duplicate = [testImage gtm_duplicateOfSize:NSMakeSize(48, 48)]; - bestRepRect = NSMakeRect(0, 0, 48, 48); -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6 - rep = [duplicate bestRepresentationForRect:bestRepRect - context:nil - hints:nil]; -#else - rep = [duplicate gtm_bestRepresentationForSize:bestRepRect.size]; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6 - STAssertTrue(NSEqualSizes([rep size], NSMakeSize(48, 48)), - @"Size is %@", NSStringFromSize([rep size])); - - // This should IMHO return 48,48 on both 10.6 and 10.5. It makes no sense - // at all that it returns 32,32 on 10_6 when the above code works for 48,48. - // rdar://8052200 "NSImage bestRepresentationForRect:context:hints: doesn't - // return the best rep" - // http://openradar.appspot.com/radar?id=394401 - bestRepRect = NSMakeRect(0, 0, 50, 50); -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6 - rep = [duplicate bestRepresentationForRect:bestRepRect - context:nil - hints:nil]; - STAssertFalse(NSEqualSizes([rep size], NSMakeSize(48, 48)), - @"Size is %@", NSStringFromSize([rep size])); -#else - rep = [duplicate gtm_bestRepresentationForSize:bestRepRect.size]; - STAssertTrue(NSEqualSizes([rep size], NSMakeSize(48, 48)), - @"Size is %@", NSStringFromSize([rep size])); -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6 - -} - -@end diff --git a/AppKit/GTMNSImage+SearchCache.h b/AppKit/GTMNSImage+SearchCache.h deleted file mode 100644 index 4e3a10d..0000000 --- a/AppKit/GTMNSImage+SearchCache.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// GTMNSImage+SearchCache.h -// -// Finds NSImages using a variety of techniques -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -// This category provides convenience methods for image initialization based -// on creating an image by searching the following locations: -// -// * A specified bundle -// * Main bundle / +[NSImage imageNamed] -// * An exact path for an image -// * An exact path for any file (using the icon) -// * An app bundle id (using the icon) -// * A file type as .extension, 'OSTYPE' (in single quotes), or UTI -// * An icon in the system icon bundle -// -// TODO(alcor): this class should have basic MRU cache -// - -#import <AppKit/AppKit.h> - -@interface NSImage (GTMNSImageSearchCache) -+ (NSImage *)gtm_imageWithPath:(NSString *)path; -+ (NSImage *)gtm_imageNamed:(NSString *)name; -+ (NSImage *)gtm_imageNamed:(NSString *)name forBundle:(NSBundle *)bundle; -@end diff --git a/AppKit/GTMNSImage+SearchCache.m b/AppKit/GTMNSImage+SearchCache.m deleted file mode 100644 index 21f2ce8..0000000 --- a/AppKit/GTMNSImage+SearchCache.m +++ /dev/null @@ -1,90 +0,0 @@ -// -// GTMNSImage+SearchCache.m -// -// Finds NSImages using a variety of techniques -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSImage+SearchCache.h" -#import "GTMDefines.h" - -@implementation NSImage (GTMNSImageSearchCache) -+ (NSImage *)gtm_imageWithPath:(NSString *)path { - return [[[NSImage alloc] initWithContentsOfFile:path] autorelease]; -} - -+ (NSImage *)gtm_imageNamed:(NSString *)name { - return [self gtm_imageNamed:name forBundle:nil]; -} - -+ (NSImage *)gtm_imageNamed:(NSString *)name forBundle:(NSBundle *)bundle { - NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; - NSImage *image = nil; - - // Check our specified bundle first - if (!image) { - NSString *path = [bundle pathForImageResource:name]; - if (path) image = [self gtm_imageWithPath:path]; - } - - // Check the main bundle and the existing NSImage namespace - if (!image) { - image = [NSImage imageNamed:name]; - } - - // Search for an image with that path - if (!image && ([name isAbsolutePath] || [name hasPrefix:@"~"])) { - NSString *path = [name stringByStandardizingPath]; - if ([[NSFileManager defaultManager] - fileExistsAtPath:path]) { - image = [self gtm_imageWithPath:path]; - if (!image) { - image = [workspace iconForFile:path]; - } - } - } - // Search for a matching bundle id - if (!image) { - NSString *path = [workspace absolutePathForAppBundleWithIdentifier:name]; - if (path) image = [workspace iconForFile:path]; ; - } - - // Search for a file .extension or 'TYPE' - // TODO(alcor): This ALWAYS returns an image for items with ' or . as prefix - // We might not want this - if ([name hasPrefix:@"'"] || [name hasPrefix:@"."]) { - image = [workspace iconForFileType:name]; - } - - // Search for a UTI - if ([name rangeOfString:@"."].location != NSNotFound) { - NSDictionary *dict - = GTMCFAutorelease(UTTypeCopyDeclaration((CFStringRef)name)); - NSURL *url - = GTMCFAutorelease(UTTypeCopyDeclaringBundleURL((CFStringRef)name)); - NSString *iconName = [dict objectForKey:(NSString *)kUTTypeIconFileKey]; - - if (url && name) { - NSString *path - = [[NSBundle bundleWithPath:[url path]] pathForImageResource:iconName]; - if (path) - image = [[[NSImage alloc] initWithContentsOfFile:path] autorelease]; - } - } - - return image; -} -@end diff --git a/AppKit/GTMNSImage+SearchCacheTest.m b/AppKit/GTMNSImage+SearchCacheTest.m deleted file mode 100644 index f18b12a..0000000 --- a/AppKit/GTMNSImage+SearchCacheTest.m +++ /dev/null @@ -1,60 +0,0 @@ -// -// GTMNSImage+SearchCacheTest.m -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Cocoa/Cocoa.h> - -#import "GTMSenTestCase.h" - -#import "GTMNSImage+SearchCache.h" -#import "GTMGeometryUtils.h" - -@interface GTMNSImage_SearchCacheTest : GTMTestCase -@end - -@implementation GTMNSImage_SearchCacheTest - -- (void)testSearchCache { - NSImage *testImage = [NSImage gtm_imageNamed:@"NSApplicationIcon"]; - STAssertNotNil(testImage, nil); - - testImage = [NSImage gtm_imageNamed:@"com.apple.Xcode"]; - STAssertNotNil(testImage, nil); - -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - // The stencil images only exist on 10.5+ - testImage = [NSImage gtm_imageNamed:NSImageNameBonjour]; - STAssertNotNil(testImage, nil); -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - - testImage = [NSImage gtm_imageNamed:(NSString *)kUTTypeFolder]; - STAssertNotNil(testImage, nil); - - testImage = [NSImage gtm_imageNamed:@"~/Library"]; - STAssertNotNil(testImage, nil); - - testImage = [NSImage gtm_imageNamed:@"'APPL'"]; - STAssertNotNil(testImage, nil); - - testImage = [NSImage gtm_imageNamed:@"ponies for sale"]; - STAssertNil(testImage, nil); - - testImage = [NSImage gtm_imageNamed:@"/An/Invalid/Path"]; - STAssertNil(testImage, nil); -} - -@end diff --git a/AppKit/GTMNSWorkspace+Running.h b/AppKit/GTMNSWorkspace+Running.h deleted file mode 100644 index c077c57..0000000 --- a/AppKit/GTMNSWorkspace+Running.h +++ /dev/null @@ -1,99 +0,0 @@ -// -// GTMNSWorkspace+Running.h -// -// Copyright 2007-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <AppKit/AppKit.h> -#import "GTMDefines.h" - -// Process Dictionary keys -// -// NOTE: According to ProcessInformationCopyDictionary, the following may not be -// in the dictionary depending on the type of process: -// kGTMWorkspaceRunningParentPSN, kGTMWorkspaceRunningFileType, -// kGTMWorkspaceRunningFileCreator, kGTMWorkspaceRunningPID, -// kGTMWorkspaceRunningBundlePath, kGTMWorkspaceRunningBundleIdentifier, -// kGTMWorkspaceRunningBundleName, kGTMWorkspaceRunningBundleExecutable, -// And experience says the follow might also not be there: -// kGTMWorkspaceRunningIsHidden - -// Make sure to use numberToProcessSerialNumber: on the return values -// of these keys to get valid PSNs on both Leopard and Tiger. -// Numeric types come back as a NSNumber. -GTM_EXTERN NSString *const kGTMWorkspaceRunningPSN; // long long -GTM_EXTERN NSString *const kGTMWorkspaceRunningParentPSN; // long long - -GTM_EXTERN NSString *const kGTMWorkspaceRunningFlavor; // SInt32 -GTM_EXTERN NSString *const kGTMWorkspaceRunningAttributes; // SInt32 -GTM_EXTERN NSString *const kGTMWorkspaceRunningFileType; // NSString -GTM_EXTERN NSString *const kGTMWorkspaceRunningFileCreator; // NSString -GTM_EXTERN NSString *const kGTMWorkspaceRunningPID; // long -GTM_EXTERN NSString *const kGTMWorkspaceRunningLSBackgroundOnly; // bool -GTM_EXTERN NSString *const kGTMWorkspaceRunningLSUIElement; // bool -GTM_EXTERN NSString *const kGTMWorkspaceRunningIsHidden; // bool -GTM_EXTERN NSString *const kGTMWorkspaceRunningCheckedIn; // bool -GTM_EXTERN NSString *const kGTMWorkspaceRunningLSUIPresentationMode; // Short -GTM_EXTERN NSString *const kGTMWorkspaceRunningBundlePath; // NSString -GTM_EXTERN NSString *const kGTMWorkspaceRunningBundleVersion; // NSString -// The docs for ProcessInformationCopyDictionary say we should use the constants -// instead of the raw string values, so map our values to those keys. -#define kGTMWorkspaceRunningBundleIdentifier (NSString*)kCFBundleIdentifierKey // NSString -#define kGTMWorkspaceRunningBundleName (NSString*)kCFBundleNameKey // NSString -#define kGTMWorkspaceRunningBundleExecutable (NSString*)kCFBundleExecutableKey // NSString - -// A category for getting information about other running processes -@interface NSWorkspace (GTMWorkspaceRunningAdditions) - -// Returns a YES/NO if a process w/ the given identifier is running -- (BOOL)gtm_isAppWithIdentifierRunning:(NSString *)identifier; - -// Returns a dictionary with info for our process. -//See Process Dictionary Keys above for values -- (NSDictionary *)gtm_processInfoDictionary; - -// Returns a dictionary with info for the active process. -// See Process Dictionary Keys above for values -- (NSDictionary *)gtm_processInfoDictionaryForActiveApp; - -// Returns a dictionary with info for the process. -//See Process Dictionary Keys above for values -- (NSDictionary *)gtm_processInfoDictionaryForPID:(pid_t)pid; - -// Returns a dictionary with info for the process. -// See Process Dictionary Keys above for values -- (NSDictionary *)gtm_processInfoDictionaryForPSN:(const ProcessSerialNumberPtr)psn; - -// Returns true if we were launched as a login item. -- (BOOL)gtm_wasLaunchedAsLoginItem; - -// Returns true if we were launched by a given bundleid -- (BOOL)gtm_wasLaunchedByProcess:(NSString*)bundleid; - -// Returns true if the PSN was found for the running app with bundleID -- (BOOL)gtm_processSerialNumber:(ProcessSerialNumber*)outPSN - withBundleID:(NSString*)bundleID; - -// Converts PSNs stored in NSNumbers to real PSNs -- (ProcessSerialNumber)gtm_numberToProcessSerialNumber:(NSNumber*)number; - -// Returns a dictionary of launched applications like -// -[NSWorkspace launchedApplications], but does it much faster than the current -// version in Leopard which appears to regenerate the dictionary from scratch -// each time you request it. -// NB The main runloop has to run for this to stay up to date. -- (NSArray *)gtm_launchedApplications; - -@end diff --git a/AppKit/GTMNSWorkspace+Running.m b/AppKit/GTMNSWorkspace+Running.m deleted file mode 100644 index 7d6efff..0000000 --- a/AppKit/GTMNSWorkspace+Running.m +++ /dev/null @@ -1,291 +0,0 @@ -// -// GTMNSWorkspace+Running.m -// -// Copyright 2007-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSWorkspace+Running.h" -#import <Carbon/Carbon.h> -#import <unistd.h> -#import "GTMSystemVersion.h" - - -NSString *const kGTMWorkspaceRunningPSN = @"PSN"; -NSString *const kGTMWorkspaceRunningFlavor = @"Flavor"; -NSString *const kGTMWorkspaceRunningAttributes = @"Attributes"; -NSString *const kGTMWorkspaceRunningParentPSN = @"ParentPSN"; -NSString *const kGTMWorkspaceRunningFileType = @"FileType"; -NSString *const kGTMWorkspaceRunningFileCreator = @"FileCreator"; -NSString *const kGTMWorkspaceRunningPID = @"pid"; -NSString *const kGTMWorkspaceRunningLSBackgroundOnly = @"LSBackgroundOnly"; -NSString *const kGTMWorkspaceRunningLSUIElement = @"LSUIElement"; -NSString *const kGTMWorkspaceRunningIsHidden = @"IsHiddenAttr"; -NSString *const kGTMWorkspaceRunningCheckedIn = @"IsCheckedInAttr"; -NSString *const kGTMWorkspaceRunningLSUIPresentationMode - = @"LSUIPresentationMode"; -NSString *const kGTMWorkspaceRunningBundlePath = @"BundlePath"; -NSString *const kGTMWorkspaceRunningBundleVersion = @"CFBundleVersion"; - -@interface GTMWorkspaceRunningApplicationList : NSObject { - @private - NSArray *launchedApps_; -} -+ (GTMWorkspaceRunningApplicationList *)sharedApplicationList; -- (NSArray *)launchedApplications; -- (void)didLaunchOrTerminateApp:(NSNotification *)notification; -@end - -@implementation NSWorkspace (GTMWorkspaceRunningAdditions) - -/// Returns a YES/NO if a process w/ the given identifier is running -- (BOOL)gtm_isAppWithIdentifierRunning:(NSString *)identifier { - if ([identifier length] == 0) return NO; - NSArray *launchedApps = [self gtm_launchedApplications]; - NSArray *buildIDs - = [launchedApps valueForKey:@"NSApplicationBundleIdentifier"]; - return [buildIDs containsObject:identifier]; -} - -- (NSDictionary *)gtm_processInfoDictionaryForPID:(pid_t)pid { - NSDictionary *dict = nil; - ProcessSerialNumber psn; - if (GetProcessForPID(pid, &psn) == noErr) { - dict = [self gtm_processInfoDictionaryForPSN:&psn]; - } - return dict; -} - -- (NSDictionary *)gtm_processInfoDictionaryForPSN:(ProcessSerialNumberPtr const)psn { - NSDictionary *dict = nil; - if (psn) { - CFDictionaryRef cfDict - = ProcessInformationCopyDictionary(psn, - kProcessDictionaryIncludeAllInformationMask); - dict = GTMCFAutorelease(cfDict); - } - return dict; -} - -- (NSDictionary *)gtm_processInfoDictionary { - NSDictionary *dict = nil; - ProcessSerialNumber selfNumber; - if (MacGetCurrentProcess(&selfNumber) == noErr) { - dict = [self gtm_processInfoDictionaryForPSN:&selfNumber]; - } - return dict; -} - -- (NSDictionary *)gtm_processInfoDictionaryForActiveApp { - NSDictionary *processDict = nil; - ProcessSerialNumber psn; - OSStatus status = GetFrontProcess(&psn); - if (status == noErr) { - processDict = [self gtm_processInfoDictionaryForPSN:&psn]; - } - return processDict; -} - -- (BOOL)gtm_wasLaunchedAsLoginItem { - // If the launching process was 'loginwindow', we were launched as a login - // item - return [self gtm_wasLaunchedByProcess:@"com.apple.loginwindow"]; -} - -- (BOOL)gtm_wasLaunchedByProcess:(NSString*)bundleid { - BOOL wasLaunchedByProcess = NO; - NSDictionary *processInfo = [self gtm_processInfoDictionary]; - if (processInfo) { - NSNumber *processNumber - = [processInfo objectForKey:kGTMWorkspaceRunningParentPSN]; - ProcessSerialNumber parentPSN - = [self gtm_numberToProcessSerialNumber:processNumber]; - NSDictionary *parentProcessInfo - = [self gtm_processInfoDictionaryForPSN:&parentPSN]; - NSString *parentBundle - = [parentProcessInfo objectForKey:kGTMWorkspaceRunningBundleIdentifier]; - wasLaunchedByProcess - = [parentBundle isEqualToString:bundleid]; - } - return wasLaunchedByProcess; -} - -- (BOOL)gtm_processSerialNumber:(ProcessSerialNumber*)outPSN - withBundleID:(NSString*)bundleID { - if (!outPSN || [bundleID length] == 0) { - return NO; - } - - NSArray *apps = [self gtm_launchedApplications]; - - NSEnumerator *enumerator = [apps objectEnumerator]; - NSDictionary *dict; - - while ((dict = [enumerator nextObject])) { - NSString *nextID = [dict objectForKey:@"NSApplicationBundleIdentifier"]; - - if ([nextID isEqualToString:bundleID]) { - NSNumber *psn - = [dict objectForKey:@"NSApplicationProcessSerialNumberLow"]; - outPSN->lowLongOfPSN = [psn unsignedIntValue]; - - psn = [dict objectForKey:@"NSApplicationProcessSerialNumberHigh"]; - outPSN->highLongOfPSN = [psn unsignedIntValue]; - - return YES; - } - } - - return NO; -} - -- (ProcessSerialNumber)gtm_numberToProcessSerialNumber:(NSNumber*)number { - // There is a bug in Tiger where they were packing ProcessSerialNumbers - // incorrectly into the longlong that they stored in the dictionary. - // This fixes it. - ProcessSerialNumber outPSN = { kNoProcess, kNoProcess}; - if (number) { - long long temp = [number longLongValue]; - UInt32 hi = (UInt32)((temp >> 32) & 0x00000000FFFFFFFFLL); - UInt32 lo = (UInt32)((temp >> 0) & 0x00000000FFFFFFFFLL); -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - outPSN.highLongOfPSN = hi; - outPSN.lowLongOfPSN = lo; -#else // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - if ([GTMSystemVersion isLeopardOrGreater]) { - outPSN.highLongOfPSN = hi; - outPSN.lowLongOfPSN = lo; - } else { -#if TARGET_RT_BIG_ENDIAN - outPSN.highLongOfPSN = hi; - outPSN.lowLongOfPSN = lo; -#else - outPSN.highLongOfPSN = lo; - outPSN.lowLongOfPSN = hi; -#endif // TARGET_RT_BIG_ENDIAN - } -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - } - return outPSN; -} - -- (NSArray *)gtm_launchedApplications { - GTMWorkspaceRunningApplicationList *list - = [GTMWorkspaceRunningApplicationList sharedApplicationList]; - return [list launchedApplications]; -} -@end - -@implementation GTMWorkspaceRunningApplicationList - -+ (GTMWorkspaceRunningApplicationList *)sharedApplicationList { - static GTMWorkspaceRunningApplicationList *obj; - if (!obj) { - obj = [[self alloc] init]; - } - return obj; -} - -- (id)init { - if ((self = [super init])) { - [self didLaunchOrTerminateApp:nil]; - } - return self; -} - -- (void)finalize { - [self didLaunchOrTerminateApp:nil]; - [super finalize]; -} - -- (void)dealloc { - [self didLaunchOrTerminateApp:nil]; - [super dealloc]; -} - -- (void)didLaunchOrTerminateApp:(NSNotification *)notification { - @synchronized (self) { - [launchedApps_ release]; - NSNotificationCenter *workSpaceNC - = [[NSWorkspace sharedWorkspace] notificationCenter]; - [workSpaceNC removeObserver:self]; - launchedApps_ = nil; - } -} - -- (NSArray *)currentApps { - // Not using any NSWorkspace calls because they are not documented as being - // threadsafe. - ProcessSerialNumber psn = { kNoProcess, kNoProcess }; - NSMutableArray *launchedApps = [NSMutableArray array]; - while (GetNextProcess(&psn) == noErr) { - CFDictionaryRef cfDict - = ProcessInformationCopyDictionary(&psn, - kProcessDictionaryIncludeAllInformationMask); - NSDictionary *carbonDict = GTMCFAutorelease(cfDict); - // Check to make sure we actually have a dictionary. The process could - // have disappeared between the call to GetNextProcess and - // ProcessInformationCopyDictionary. - if (carbonDict) { - NSMutableDictionary *cocoaDict = [NSMutableDictionary dictionary]; - NSString *path = [carbonDict objectForKey:@"BundlePath"]; - if (path) { - [cocoaDict setObject:path forKey:@"NSApplicationPath"]; - } - NSString *name = [carbonDict objectForKey:(id)kCFBundleNameKey]; - if (name) { - [cocoaDict setObject:name forKey:@"NSApplicationName"]; - } - NSString *bundleID = [carbonDict objectForKey:(id)kCFBundleIdentifierKey]; - if (bundleID) { - [cocoaDict setObject:bundleID forKey:@"NSApplicationBundleIdentifier"]; - } - NSNumber *pid = [carbonDict objectForKey:@"pid"]; - if (pid) { - [cocoaDict setObject:pid forKey:@"NSApplicationProcessIdentifier"]; - } - [cocoaDict setObject:[NSNumber numberWithUnsignedLong:psn.highLongOfPSN] - forKey:@"NSApplicationProcessSerialNumberHigh"]; - [cocoaDict setObject:[NSNumber numberWithUnsignedLong:psn.lowLongOfPSN] - forKey:@"NSApplicationProcessSerialNumberLow"]; - [launchedApps addObject:cocoaDict]; - } - } - return launchedApps; -} - - -- (NSArray *)launchedApplications { - NSArray *localReturn = nil; - @synchronized (self) { - if (!launchedApps_) { - launchedApps_ = [[self currentApps] retain]; - NSWorkspace *ws = [NSWorkspace sharedWorkspace]; - NSNotificationCenter *workSpaceNC = [ws notificationCenter]; - [workSpaceNC addObserver:self - selector:@selector(didLaunchOrTerminateApp:) - name:NSWorkspaceDidLaunchApplicationNotification - object:nil]; - [workSpaceNC addObserver:self - selector:@selector(didLaunchOrTerminateApp:) - name:NSWorkspaceDidTerminateApplicationNotification - object:nil]; - } - // We want to keep launchedApps_ in the autoreleasepool of this thread - localReturn = [launchedApps_ retain]; - } - return [localReturn autorelease]; -} - -@end diff --git a/AppKit/GTMNSWorkspace+RunningTest.m b/AppKit/GTMNSWorkspace+RunningTest.m deleted file mode 100644 index 3872a98..0000000 --- a/AppKit/GTMNSWorkspace+RunningTest.m +++ /dev/null @@ -1,84 +0,0 @@ -// -// GTMNSWorkspace+RunningTest.m -// -// Copyright 2007-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMNSWorkspace+Running.h" -#import <unistd.h> - -@interface GTMNSWorkspace_RunningTest : GTMTestCase -@end - -@implementation GTMNSWorkspace_RunningTest - -- (void)testBasics { - NSWorkspace *ws = [NSWorkspace sharedWorkspace]; - - // Test an app that should be running - STAssertTrue([ws gtm_isAppWithIdentifierRunning:@"com.apple.finder"], nil); - - // Check to make sure that we are on the list - STAssertTrue([ws gtm_isAppWithIdentifierRunning: - @"com.google.GTMUIUnitTestingHarness"], nil); - STAssertFalse([ws gtm_isAppWithIdentifierRunning:@"com.google.nothing"], nil); - - NSDictionary *processInfo = [ws gtm_processInfoDictionary]; - STAssertNotNil(processInfo, nil); - - BOOL wasLaunchedAsLoginItem = [ws gtm_wasLaunchedAsLoginItem]; - STAssertFalse(wasLaunchedAsLoginItem, nil); - - pid_t pid = getpid(); - NSDictionary *processInfo2 = [ws gtm_processInfoDictionaryForPID:pid]; - STAssertNotNil(processInfo2, nil); - STAssertEqualObjects(processInfo, processInfo2, nil); - - ProcessSerialNumber num = { 0, 0 }; - BOOL gotPSN = [ws gtm_processSerialNumber:&num - withBundleID:@"com.apple.finder"]; - STAssertTrue(gotPSN, nil); - STAssertGreaterThan(num.highLongOfPSN + num.lowLongOfPSN, (UInt32)0, nil); - gotPSN = [ws gtm_processSerialNumber:&num - withBundleID:@"bad.bundle.id"]; - STAssertFalse(gotPSN, nil); - - gotPSN = [ws gtm_processSerialNumber:NULL - withBundleID:nil]; - STAssertFalse(gotPSN, nil); - - processInfo = [ws gtm_processInfoDictionaryForActiveApp]; - STAssertNotNil(processInfo, nil); - - // Only check the keys that have to be there - NSString *const keys[] = { - kGTMWorkspaceRunningPSN, - kGTMWorkspaceRunningFlavor, kGTMWorkspaceRunningAttributes, - kGTMWorkspaceRunningLSBackgroundOnly, - kGTMWorkspaceRunningLSUIElement, - kGTMWorkspaceRunningCheckedIn, - kGTMWorkspaceRunningBundleVersion, - kGTMWorkspaceRunningLSUIPresentationMode, - - }; - for (size_t i = 0; i < sizeof(keys) / sizeof(NSString *); ++i) { - NSString *const key = keys[i]; - STAssertNotNil([processInfo objectForKey:key], - @"Couldn't get %@ from %@", key, processInfo); - } -} - -@end diff --git a/AppKit/GTMShading.h b/AppKit/GTMShading.h deleted file mode 100644 index 27e163e..0000000 --- a/AppKit/GTMShading.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// GTMShading.h -// -// A protocol for an object that can be used as a shader. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -/// \cond Protocols - -@protocol GTMShading -// Returns the shadefunction for using in a shader. -// This shadefunction shoud never be released. It is owned by the implementor -// of the GTMShading protocol. -// -// Returns: -// a shading function. -- (CGFunctionRef)shadeFunction; - -// Returns the colorSpace for using in a shader. -// This colorSpace shoud never be released. It is owned by the implementor -// of the GTMShading protocol. -// -// Returns: -// a color space. -- (CGColorSpaceRef)colorSpace; -@end - -/// \endcond diff --git a/AppKit/GTMUILocalizer.m b/AppKit/GTMUILocalizer.m index 9f252e7..07f11e4 100644 --- a/AppKit/GTMUILocalizer.m +++ b/AppKit/GTMUILocalizer.m @@ -142,7 +142,7 @@ // which is usually the default items, if the toolbar supports customization // there is no way to fetch those possible items to tweak their contents. NSToolbarItem *item; - GTM_FOREACH_OBJECT(item, [toolbar items]) { + for (item in [toolbar items]) { NSString *label = [item label]; if (label) { label = [self localizedStringForString:label]; @@ -195,7 +195,7 @@ if (recursive) { NSArray *subviews = [view subviews]; NSView *subview = nil; - GTM_FOREACH_OBJECT(subview, subviews) { + for (subview in subviews) { [self localizeObject:subview recursively:recursive]; } } @@ -260,7 +260,7 @@ id cell = [matrix prototype]; [self localizeObject:cell recursively:recursive]; // Process the cells - GTM_FOREACH_OBJECT(cell, [matrix cells]) { + for (cell in [matrix cells]) { [self localizeObject:cell recursively:recursive]; // The tooltip isn't on a cell, so we do it via the matrix. NSString *toolTip = [matrix toolTipForCell:cell]; @@ -276,7 +276,7 @@ NSTableView *tableView = (NSTableView *)view; NSArray *columns = [tableView tableColumns]; NSTableColumn *column = nil; - GTM_FOREACH_OBJECT(column, columns) { + for (column in columns) { [self localizeObject:[column headerCell] recursively:recursive]; } } @@ -301,7 +301,7 @@ NSMutableArray *localizedValues = [NSMutableArray array]; BOOL replaceValues = NO; NSString *value; - GTM_FOREACH_OBJECT(value, [combobox objectValues]) { + for (value in [combobox objectValues]) { NSString *localizedValue = nil; if ([value isKindOfClass:[NSString class]]) { localizedValue = [self localizedStringForString:value]; @@ -330,7 +330,7 @@ } NSArray *menuItems = [menu itemArray]; NSMenuItem *menuItem = nil; - GTM_FOREACH_OBJECT(menuItem, menuItems) { + for (menuItem in menuItems) { title = [menuItem title]; localizedTitle = [self localizedStringForString:title]; if (localizedTitle) { @@ -369,7 +369,7 @@ }; Class stringClass = [NSString class]; NSString *exposedBinding; - GTM_FOREACH_OBJECT(exposedBinding, exposedBindings) { + for (exposedBinding in exposedBindings) { NSDictionary *bindingInfo = [object infoForBinding:exposedBinding]; if (bindingInfo) { id observedObject = [bindingInfo objectForKey:NSObservedObjectKey]; diff --git a/AppKit/GTMUILocalizerAndLayoutTweaker.m b/AppKit/GTMUILocalizerAndLayoutTweaker.m index 14876dc..be7b325 100644 --- a/AppKit/GTMUILocalizerAndLayoutTweaker.m +++ b/AppKit/GTMUILocalizerAndLayoutTweaker.m @@ -144,14 +144,14 @@ static const CGFloat kWrapperStringSlop = 0.9; } else if ([view isKindOfClass:[NSTabView class]]) { NSArray *tabViewItems = [(NSTabView *)view tabViewItems]; NSTabViewItem *item = nil; - GTM_FOREACH_OBJECT(item, tabViewItems) { + for (item in tabViewItems) { [self tweakView:[item view]]; } // Generically look for subviews... } else { NSArray *subviews = [view subviews]; NSView *subview = nil; - GTM_FOREACH_OBJECT(subview, subviews) { + for (subview in subviews) { [self tweakView:subview]; } } @@ -175,6 +175,10 @@ static const CGFloat kWrapperStringSlop = 0.9; // fragments to get the same wrapping as what the NSCell will do in the end. [textContainer setLineFragmentPadding:2.0f]; + if (font == NULL) { + // If the font is NULL, it is the System font. + font = [NSFont systemFontOfSize:[NSFont systemFontSize]]; + } // Apply the font. [textStorage setFont:font]; @@ -343,7 +347,7 @@ static const CGFloat kWrapperStringSlop = 0.9; NSFont *font = [radioGroup font]; NSCell *cell; - GTM_FOREACH_OBJECT(cell, [radioGroup cells]) { + for (cell in [radioGroup cells]) { NSRect titleFrame = [cell titleRectForBounds:tmpRect]; NSString* newTitle = [self wrapString:[cell title] width:NSWidth(titleFrame) @@ -437,7 +441,7 @@ static const CGFloat kWrapperStringSlop = 0.9; NSView *subView; CGFloat finalDelta = sumMode ? 0 : -CGFLOAT_MAX; NSPoint subViewOffset = NSZeroPoint; - GTM_FOREACH_OBJECT(subView, subviews) { + for (subView in subviews) { if (sumMode) { subViewOffset.x = finalDelta; } @@ -580,7 +584,7 @@ static NSSize SizeToFit(NSView *view, NSPoint offset) { NSMatrix *matrix = (NSMatrix *)view; // See note on kWrapperStringSlop for why this is done. NSCell *cell; - GTM_FOREACH_OBJECT(cell, [matrix cells]) { + for (cell in [matrix cells]) { if ([[cell title] rangeOfString:kForcedWrapString].location != NSNotFound) { newFrame.size.width += kWrapperStringSlop; diff --git a/AppKit/GTMUILocalizerAndLayoutTweakerTest.m b/AppKit/GTMUILocalizerAndLayoutTweakerTest.m index 8905e82..955637c 100644 --- a/AppKit/GTMUILocalizerAndLayoutTweakerTest.m +++ b/AppKit/GTMUILocalizerAndLayoutTweakerTest.m @@ -18,7 +18,6 @@ #import "GTMSenTestCase.h" #import "GTMUILocalizerAndLayoutTweakerTest.h" -#import "GTMNSObject+UnitTesting.h" #import "GTMUILocalizerAndLayoutTweaker.h" static NSUInteger gTestPass = 0; @@ -35,12 +34,7 @@ static NSUInteger gTestPass = 0; [[GTMUILocalizerAndLayoutTweakerTestWindowController alloc] initWithWindowNibName:@"GTMUILocalizerAndLayoutTweakerTest1"]; NSWindow *window = [controller window]; - STAssertNotNil(window, @"Pass %zu", gTestPass); - NSString *imageName = - [NSString stringWithFormat:@"GTMUILocalizerAndLayoutTweakerTest1-%ld", - (long)gTestPass]; - GTMAssertObjectImageEqualToImageNamed(window, imageName, - @"Pass %zu", gTestPass); + XCTAssertNotNil(window, @"Pass %tu", gTestPass); [controller release]; } // Test with nib 2 @@ -49,12 +43,7 @@ static NSUInteger gTestPass = 0; [[GTMUILocalizerAndLayoutTweakerTestWindowController alloc] initWithWindowNibName:@"GTMUILocalizerAndLayoutTweakerTest2"]; NSWindow *window = [controller window]; - STAssertNotNil(window, @"Pass %zu", gTestPass); - NSString *imageName = - [NSString stringWithFormat:@"GTMUILocalizerAndLayoutTweakerTest2-%ld", - (long)gTestPass]; - GTMAssertObjectImageEqualToImageNamed(window, imageName, - @"Pass %zu", gTestPass); + XCTAssertNotNil(window, @"Pass %tu", gTestPass); [controller release]; } } @@ -89,19 +78,14 @@ static NSUInteger gTestPass = 0; [[GTMUILocalizerAndLayoutTweakerTestWindowController alloc] initWithWindowNibName:@"GTMUILocalizerAndLayoutTweakerTest3"]; NSWindow *window = [controller window]; - STAssertNotNil(window, @"Pass %zu", lp); + XCTAssertNotNil(window, @"Pass %tu", lp); NSTextField *field; - GTM_FOREACH_OBJECT(field, [[window contentView] subviews]) { - STAssertTrue([field isMemberOfClass:[NSTextField class]], - @"Pass %zu", lp); + for (field in [[window contentView] subviews]) { + XCTAssertTrue([field isMemberOfClass:[NSTextField class]], + @"Pass %tu", lp); [field setStringValue:kTestStrings[lp]]; [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:field]; } - NSString *imageName = - [NSString stringWithFormat:@"GTMUILocalizerAndLayoutTweakerTest3-%ld", - (long)lp]; - GTMAssertObjectImageEqualToImageNamed(window, imageName, - @"Pass %zu", lp); [controller release]; } } @@ -119,12 +103,7 @@ static NSUInteger gTestPass = 0; [[GTMUILocalizerAndLayoutTweakerTestWindowController alloc] initWithWindowNibName:@"GTMUILocalizerAndLayoutTweakerTest4"]; NSWindow *window = [controller window]; - STAssertNotNil(window, @"Pass %zu", gTestPass); - NSString *imageName = - [NSString stringWithFormat:@"GTMUILocalizerAndLayoutTweakerTest4-%ld", - (long)gTestPass]; - GTMAssertObjectImageEqualToImageNamed(window, imageName, - @"Pass %zu", gTestPass); + XCTAssertNotNil(window, @"Pass %tu", gTestPass); [controller release]; } } @@ -144,20 +123,20 @@ static NSUInteger gTestPass = 0; [[GTMUILocalizerAndLayoutTweakerTestWindowController alloc] initWithWindowNibName:@"GTMUILocalizerAndLayoutTweakerTest5"]; NSWindow *window = [controller window]; - STAssertNotNil(window, @"Pass %zu", lp); + XCTAssertNotNil(window, @"Pass %tu", lp); NSView *view; - GTM_FOREACH_OBJECT(view, [[window contentView] subviews]) { + for (view in [[window contentView] subviews]) { if ([view isMemberOfClass:[NSButton class]]) { NSButton *btn = (id)view; [btn setTitle:kTestStrings[lp]]; [GTMUILocalizerAndLayoutTweaker wrapButtonTitleForWidth:btn]; } else { - STAssertTrue([view isMemberOfClass:[NSMatrix class]], - @"Pass %zu", lp); + XCTAssertTrue([view isMemberOfClass:[NSMatrix class]], + @"Pass %tu", lp); NSMatrix *mtx = (id)view; NSCell *cell; int i = 0; - GTM_FOREACH_OBJECT(cell, [mtx cells]) { + for (cell in [mtx cells]) { [cell setTitle:[NSString stringWithFormat:@"%d %@", ++i, kTestStrings[lp]]]; } @@ -165,11 +144,6 @@ static NSUInteger gTestPass = 0; } [GTMUILocalizerAndLayoutTweaker sizeToFitView:view]; } - NSString *imageName = - [NSString stringWithFormat:@"GTMUILocalizerAndLayoutTweakerTest5-%ld", - (long)lp]; - GTMAssertObjectImageEqualToImageNamed(window, imageName, - @"Pass %zu", lp); [controller release]; } } @@ -181,17 +155,11 @@ static NSUInteger gTestPass = 0; [[GTMUILocalizerAndLayoutTweakerTestWindowController alloc] initWithWindowNibName:@"GTMUILocalizerAndLayoutTweakerTest6"]; NSWindow *window = [controller window]; - STAssertNotNil(window, @"Pass %zu", gTestPass); + XCTAssertNotNil(window, @"Pass %tu", gTestPass); NSTabView *tabView = [controller tabView]; for (NSInteger tabIndex = 0; tabIndex < [tabView numberOfTabViewItems]; ++tabIndex) { [tabView selectTabViewItemAtIndex:tabIndex]; - NSString *imageName = - [NSString stringWithFormat: - @"GTMUILocalizerAndLayoutTweakerTest6-tab%ld-%ld", - (long)tabIndex, (long)gTestPass]; - GTMAssertObjectImageEqualToImageNamed(window, imageName, - @"Pass %zu", gTestPass); } [controller release]; } @@ -201,12 +169,7 @@ static NSUInteger gTestPass = 0; [[GTMUILocalizerAndLayoutTweakerTestWindowController alloc] initWithWindowNibName:@"GTMUILocalizerAndLayoutTweakerTest2"]; NSWindow *window = [controller window]; - STAssertNotNil(window, @"Pass %zu", gTestPass); - NSString *imageName = - [NSString stringWithFormat:@"GTMUILocalizerAndLayoutTweakerTest2-%ld", - (long)gTestPass]; - GTMAssertObjectImageEqualToImageNamed(window, imageName, - @"Pass %zu", gTestPass); + XCTAssertNotNil(window, @"Pass %tu", gTestPass); [controller release]; } } @@ -244,11 +207,11 @@ static NSUInteger gTestPass = 0; [[GTMUILocalizerAndLayoutTweakerTestWindowController alloc] initWithWindowNibName:@"GTMUILocalizerAndLayoutTweakerTest7"]; NSWindow *window = [controller window]; - STAssertNotNil(window, @"Pass %zu", lp); + XCTAssertNotNil(window, @"Pass %tu", lp); NSTextField *field; - GTM_FOREACH_OBJECT(field, [[window contentView] subviews]) { - STAssertTrue([field isMemberOfClass:[NSTextField class]], - @"Pass %zu", lp); + for (field in [[window contentView] subviews]) { + XCTAssertTrue([field isMemberOfClass:[NSTextField class]], + @"Pass %tu", lp); [field setStringValue:kTestStrings[lp]]; NSUInteger minWidth = kTestModes[modeLoop].minWidth; if (minWidth) { @@ -258,11 +221,6 @@ static NSUInteger gTestPass = 0; [GTMUILocalizerAndLayoutTweaker sizeToFitFixedHeightTextField:field]; } } - NSString *imageName = - [NSString stringWithFormat:@"GTMUILocalizerAndLayoutTweakerTest7-%s-%ld", - kTestModes[modeLoop].name, (long)lp]; - GTMAssertObjectImageEqualToImageNamed(window, imageName, - @"Pass %zu-%zu", modeLoop, lp); [controller release]; } } @@ -274,9 +232,8 @@ static NSUInteger gTestPass = 0; [textField setBezeled:NO]; [textField setStringValue:@"The quick brown fox jumps over the lazy dog."]; [GTMUILocalizerAndLayoutTweaker sizeToFitFixedHeightTextField:textField]; - STAssertTrue( - NSEqualRects([textField bounds], NSIntegralRect([textField bounds])), - nil); + XCTAssertTrue( + NSEqualRects([textField bounds], NSIntegralRect([textField bounds]))); [textField release]; } diff --git a/AppKit/GTMUILocalizerAndLayoutTweakerTest1.xib b/AppKit/GTMUILocalizerAndLayoutTweakerTest1.xib index 0002ff6..329981a 100644 --- a/AppKit/GTMUILocalizerAndLayoutTweakerTest1.xib +++ b/AppKit/GTMUILocalizerAndLayoutTweakerTest1.xib @@ -1,2322 +1,289 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">10D2063a</string> - <string key="IBDocument.InterfaceBuilderVersion">762</string> - <string key="IBDocument.AppKitVersion">1038.29</string> - <string key="IBDocument.HIToolboxVersion">460.00</string> - <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> - <string key="NS.object.0">762</string> - </object> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys" id="0"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{71, 48}, {532, 404}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSBox" id="13430988"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">266</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSView" id="180511442"> - <reference key="NSNextResponder" ref="13430988"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="800844720"> - <reference key="NSNextResponder" ref="180511442"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{3, 45}, {349, 22}}</string> - <reference key="NSSuperview" ref="180511442"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="951606926"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <object class="NSFont" key="NSSupport" id="396891173"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">13</double> - <int key="NSfFlags">1044</int> - </object> - <reference key="NSControlView" ref="800844720"/> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSColor" key="NSBackgroundColor" id="763520216"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textBackgroundColor</string> - <object class="NSColor" key="NSColor" id="644092534"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor" id="843269795"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textColor</string> - <object class="NSColor" key="NSColor" id="960820016"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSTextField" id="745022904"> - <reference key="NSNextResponder" ref="180511442"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{3, 13}, {349, 22}}</string> - <reference key="NSSuperview" ref="180511442"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="810828168"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="745022904"/> - <bool key="NSDrawsBackground">YES</bool> - <reference key="NSBackgroundColor" ref="763520216"/> - <reference key="NSTextColor" ref="843269795"/> - </object> - </object> - <object class="NSTextField" id="478979211"> - <reference key="NSNextResponder" ref="180511442"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{3, 77}, {349, 22}}</string> - <reference key="NSSuperview" ref="180511442"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="1044158630"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="478979211"/> - <bool key="NSDrawsBackground">YES</bool> - <reference key="NSBackgroundColor" ref="763520216"/> - <reference key="NSTextColor" ref="843269795"/> - </object> - </object> - </object> - <string key="NSFrameSize">{375, 109}</string> - <reference key="NSSuperview" ref="13430988"/> - <reference key="NSWindow"/> - </object> - </object> - <string key="NSFrame">{{158, 285}, {375, 109}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Box</string> - <object class="NSFont" key="NSSupport"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">11</double> - <int key="NSfFlags">3100</int> - </object> - <reference key="NSBackgroundColor" ref="763520216"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <reference key="NSContentView" ref="180511442"/> - <int key="NSBorderType">0</int> - <int key="NSBoxType">0</int> - <int key="NSTitlePosition">0</int> - <bool key="NSTransparent">NO</bool> - </object> - <object class="NSBox" id="588270165"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">10</int> - <string key="NSFrame">{{324, 173}, {188, 5}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Box</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSBackgroundColor" ref="763520216"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <int key="NSBorderType">3</int> - <int key="NSBoxType">2</int> - <int key="NSTitlePosition">0</int> - <bool key="NSTransparent">NO</bool> - </object> - <object class="NSBox" id="814378125"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">10</int> - <string key="NSFrame">{{374, 98}, {138, 5}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Box</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSBackgroundColor" ref="763520216"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <int key="NSBorderType">3</int> - <int key="NSBoxType">2</int> - <int key="NSTitlePosition">0</int> - <bool key="NSTransparent">NO</bool> - </object> - <object class="NSBox" id="876659295"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">10</int> - <string key="NSFrame">{{124, 38}, {388, 5}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Box</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSBackgroundColor" ref="763520216"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <int key="NSBorderType">3</int> - <int key="NSBoxType">2</int> - <int key="NSTitlePosition">0</int> - <bool key="NSTransparent">NO</bool> - </object> - <object class="NSBox" id="751672940"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">10</int> - <string key="NSFrame">{{20, 235}, {327, 5}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Box</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSBackgroundColor" ref="763520216"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <int key="NSBorderType">3</int> - <int key="NSBoxType">2</int> - <int key="NSTitlePosition">0</int> - <bool key="NSTransparent">NO</bool> - </object> - <object class="NSImageView" id="453085280"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <object class="NSMutableSet" key="NSDragTypes"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="set.sortedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>Apple PDF pasteboard type</string> - <string>Apple PICT pasteboard type</string> - <string>Apple PNG pasteboard type</string> - <string>NSFilenamesPboardType</string> - <string>NeXT Encapsulated PostScript v1.2 pasteboard type</string> - <string>NeXT TIFF v4.0 pasteboard type</string> - </object> - </object> - <string key="NSFrame">{{321, 77}, {48, 48}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSImageCell" key="NSCell" id="269363509"> - <int key="NSCellFlags">130560</int> - <int key="NSCellFlags2">33554432</int> - <int key="NSAlign">0</int> - <int key="NSScale">0</int> - <int key="NSStyle">2</int> - <bool key="NSAnimates">NO</bool> - </object> - <bool key="NSEditable">YES</bool> - </object> - <object class="NSImageView" id="125766055"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">265</int> - <object class="NSMutableSet" key="NSDragTypes"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="set.sortedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>Apple PDF pasteboard type</string> - <string>Apple PICT pasteboard type</string> - <string>Apple PNG pasteboard type</string> - <string>NSFilenamesPboardType</string> - <string>NeXT Encapsulated PostScript v1.2 pasteboard type</string> - <string>NeXT TIFF v4.0 pasteboard type</string> - </object> - </object> - <string key="NSFrame">{{352, 213}, {48, 48}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSImageCell" key="NSCell" id="709523694"> - <int key="NSCellFlags">130560</int> - <int key="NSCellFlags2">33554432</int> - <int key="NSAlign">0</int> - <int key="NSScale">0</int> - <int key="NSStyle">2</int> - <bool key="NSAnimates">NO</bool> - </object> - <bool key="NSEditable">YES</bool> - </object> - <object class="NSBox" id="359865555"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">12</int> - <string key="NSFrame">{{20, 201}, {275, 5}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Box</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSBackgroundColor" ref="763520216"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <int key="NSBorderType">3</int> - <int key="NSBoxType">2</int> - <int key="NSTitlePosition">0</int> - <bool key="NSTransparent">NO</bool> - </object> - <object class="NSCustomView" id="496672244"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMatrix" id="122653364"> - <reference key="NSNextResponder" ref="496672244"/> - <int key="NSvFlags">292</int> - <string key="NSFrame">{{20, 0}, {96, 38}}</string> - <reference key="NSSuperview" ref="496672244"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <int key="NSNumRows">2</int> - <int key="NSNumCols">1</int> - <object class="NSMutableArray" key="NSCells"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButtonCell" id="404368211"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">mumble :5:1</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="122653364"/> - <int key="NSTag">1</int> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSButtonImageSource" key="NSAlternateImage" id="520966901"> - <string key="NSImageName">NSRadioButton</string> - </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - <object class="NSButtonCell" id="491468307"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">blah :8:1</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="122653364"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw -cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA -AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA -BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA -AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA -AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 -cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD -AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH -SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF -hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8 -vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt -7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq -Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo -aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e -n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX -2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW -FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O -Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6 -ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt -rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA -AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA -AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl -A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq -DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU -HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8 -MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v -UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/ -eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj -rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn -5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh -AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK -CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY -GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95 -MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S -UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2 -d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV -pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK -0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf// -AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw -BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA -FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H -LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh -Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ -h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp -svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb -1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX -8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE -AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg -QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSColor" key="NSColor" id="83689519"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwAA</bytes> - </object> - </object> - <reference key="NSAlternateImage" ref="520966901"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <string key="NSCellSize">{96, 18}</string> - <string key="NSIntercellSpacing">{4, 2}</string> - <int key="NSMatrixFlags">1151868928</int> - <string key="NSCellClass">NSActionCell</string> - <object class="NSButtonCell" key="NSProtoCell" id="538341112"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="396891173"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> - </object> - </object> - </object> - </object> - <reference key="NSColor" ref="83689519"/> - </object> - <reference key="NSAlternateImage" ref="520966901"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - <reference key="NSSelectedCell" ref="404368211"/> - <object class="NSColor" key="NSBackgroundColor" id="584893825"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes> - </object> - </object> - <reference key="NSCellBackgroundColor" ref="644092534"/> - <reference key="NSFont" ref="396891173"/> - </object> - </object> - <string key="NSFrame">{{0, 20}, {116, 42}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - <object class="NSCustomView" id="583112334"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="936710330"> - <reference key="NSNextResponder" ref="583112334"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{14, 15}, {96, 32}}</string> - <reference key="NSSuperview" ref="583112334"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="183983727"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">w:10:2</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="936710330"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSCustomView" id="656888375"> - <reference key="NSNextResponder" ref="583112334"/> - <int key="NSvFlags">292</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="290463544"> - <reference key="NSNextResponder" ref="656888375"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 5}, {66, 17}}</string> - <reference key="NSSuperview" ref="656888375"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="612106675"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">w:2:6</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="290463544"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <object class="NSColor" key="NSTextColor" id="215232119"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlTextColor</string> - <reference key="NSColor" ref="960820016"/> - </object> - </object> - </object> - <object class="NSTextField" id="406015244"> - <reference key="NSNextResponder" ref="656888375"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 30}, {66, 17}}</string> - <reference key="NSSuperview" ref="656888375"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="535802230"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">j:10:23</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="406015244"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - </object> - <string key="NSFrame">{{112, 6}, {100, 54}}</string> - <reference key="NSSuperview" ref="583112334"/> - <reference key="NSWindow"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - <object class="NSButton" id="849868912"> - <reference key="NSNextResponder" ref="583112334"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{214, 15}, {96, 32}}</string> - <reference key="NSSuperview" ref="583112334"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="547252370"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">z:7:10</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="849868912"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{0, 70}, {316, 63}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - <object class="NSCustomView" id="797989996"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="900885236"> - <reference key="NSNextResponder" ref="797989996"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{206, 1}, {96, 32}}</string> - <reference key="NSSuperview" ref="797989996"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="356842314"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">no:1:2</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="900885236"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="1049850645"> - <reference key="NSNextResponder" ref="797989996"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{14, 1}, {96, 32}}</string> - <reference key="NSSuperview" ref="797989996"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="571145548"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">foo :4:1</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="1049850645"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="709832699"> - <reference key="NSNextResponder" ref="797989996"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{103, 1}, {111, 32}}</string> - <reference key="NSSuperview" ref="797989996"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="976017799"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">foobar :2:1</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="709832699"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{0, 157}, {316, 38}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - <object class="NSCustomView" id="273331462"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">265</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="718941270"> - <reference key="NSNextResponder" ref="273331462"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 24}, {91, 18}}</string> - <reference key="NSSuperview" ref="273331462"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="1051100744"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">i:26:4</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="718941270"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <object class="NSCustomResource" key="NSNormalImage" id="980015056"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSSwitch</string> - </object> - <object class="NSButtonImageSource" key="NSAlternateImage" id="644707509"> - <string key="NSImageName">NSSwitch</string> - </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="141065122"> - <reference key="NSNextResponder" ref="273331462"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 44}, {91, 18}}</string> - <reference key="NSSuperview" ref="273331462"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="959040643"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">y:25:2</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="141065122"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="980015056"/> - <reference key="NSAlternateImage" ref="644707509"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="320146273"> - <reference key="NSNextResponder" ref="273331462"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 4}, {91, 18}}</string> - <reference key="NSSuperview" ref="273331462"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="473788937"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">M:17:7</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="320146273"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="980015056"/> - <reference key="NSAlternateImage" ref="644707509"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{405, 203}, {127, 69}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - <object class="NSCustomView" id="450922667"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="32340604"> - <reference key="NSNextResponder" ref="450922667"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 84}, {139, 17}}</string> - <reference key="NSSuperview" ref="450922667"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="1064530732"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">ab:10:2</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="32340604"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - <object class="NSTextField" id="499628444"> - <reference key="NSNextResponder" ref="450922667"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 20}, {139, 17}}</string> - <reference key="NSSuperview" ref="450922667"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="200889835"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">l:12:3</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="499628444"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - <object class="NSTextField" id="236725617"> - <reference key="NSNextResponder" ref="450922667"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 52}, {139, 17}}</string> - <reference key="NSSuperview" ref="450922667"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="65808262"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">W:10:4</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="236725617"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - </object> - <string key="NSFrame">{{0, 280}, {153, 121}}</string> - <reference key="NSSuperview" ref="1006"/> - <reference key="NSWindow"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - </object> - <string key="NSFrameSize">{532, 404}</string> - <reference key="NSSuperview"/> - <reference key="NSWindow"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> - <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> - </object> - <object class="NSCustomObject" id="431527667"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweaker</string> - </object> - <object class="NSCustomObject" id="730292222"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweakerTestLocalizer</string> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">uiObject_</string> - <reference key="source" ref="431527667"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">84</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">viewToSlideAndResize_</string> - <reference key="source" ref="496672244"/> - <reference key="destination" ref="876659295"/> - </object> - <int key="connectionID">104</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">viewToSlide_</string> - <reference key="source" ref="583112334"/> - <reference key="destination" ref="453085280"/> - </object> - <int key="connectionID">107</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">viewToSlideAndResize_</string> - <reference key="source" ref="583112334"/> - <reference key="destination" ref="814378125"/> - </object> - <int key="connectionID">108</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">viewToResize_</string> - <reference key="source" ref="797989996"/> - <reference key="destination" ref="359865555"/> - </object> - <int key="connectionID">110</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">viewToSlideAndResize_</string> - <reference key="source" ref="797989996"/> - <reference key="destination" ref="588270165"/> - </object> - <int key="connectionID">111</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">viewToSlide_</string> - <reference key="source" ref="273331462"/> - <reference key="destination" ref="125766055"/> - </object> - <int key="connectionID">113</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">viewToSlideAndResize_</string> - <reference key="source" ref="273331462"/> - <reference key="destination" ref="751672940"/> - </object> - <int key="connectionID">114</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">viewToSlideAndResize_</string> - <reference key="source" ref="450922667"/> - <reference key="destination" ref="13430988"/> - </object> - <int key="connectionID">116</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">localizer_</string> - <reference key="source" ref="431527667"/> - <reference key="destination" ref="730292222"/> - </object> - <int key="connectionID">118</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">119</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <reference key="object" ref="0"/> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="0"/> - <string key="objectName">File's Owner</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="0"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="0"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="450922667"/> - <reference ref="13430988"/> - <reference ref="751672940"/> - <reference ref="125766055"/> - <reference ref="273331462"/> - <reference ref="797989996"/> - <reference ref="359865555"/> - <reference ref="588270165"/> - <reference ref="583112334"/> - <reference ref="453085280"/> - <reference ref="814378125"/> - <reference ref="876659295"/> - <reference ref="496672244"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">34</int> - <reference key="object" ref="13430988"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="800844720"/> - <reference ref="745022904"/> - <reference ref="478979211"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">13</int> - <reference key="object" ref="800844720"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="951606926"/> - </object> - <reference key="parent" ref="13430988"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">14</int> - <reference key="object" ref="951606926"/> - <reference key="parent" ref="800844720"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">15</int> - <reference key="object" ref="745022904"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="810828168"/> - </object> - <reference key="parent" ref="13430988"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">16</int> - <reference key="object" ref="810828168"/> - <reference key="parent" ref="745022904"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">11</int> - <reference key="object" ref="478979211"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1044158630"/> - </object> - <reference key="parent" ref="13430988"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">12</int> - <reference key="object" ref="1044158630"/> - <reference key="parent" ref="478979211"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">35</int> - <reference key="object" ref="431527667"/> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">115</int> - <reference key="object" ref="450922667"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="32340604"/> - <reference ref="499628444"/> - <reference ref="236725617"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">5</int> - <reference key="object" ref="32340604"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1064530732"/> - </object> - <reference key="parent" ref="450922667"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">6</int> - <reference key="object" ref="1064530732"/> - <reference key="parent" ref="32340604"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">9</int> - <reference key="object" ref="499628444"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="200889835"/> - </object> - <reference key="parent" ref="450922667"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">10</int> - <reference key="object" ref="200889835"/> - <reference key="parent" ref="499628444"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">7</int> - <reference key="object" ref="236725617"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="65808262"/> - </object> - <reference key="parent" ref="450922667"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">8</int> - <reference key="object" ref="65808262"/> - <reference key="parent" ref="236725617"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">79</int> - <reference key="object" ref="876659295"/> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">72</int> - <reference key="object" ref="453085280"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="269363509"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">73</int> - <reference key="object" ref="269363509"/> - <reference key="parent" ref="453085280"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">112</int> - <reference key="object" ref="273331462"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="320146273"/> - <reference ref="141065122"/> - <reference ref="718941270"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">21</int> - <reference key="object" ref="320146273"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="473788937"/> - </object> - <reference key="parent" ref="273331462"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">22</int> - <reference key="object" ref="473788937"/> - <reference key="parent" ref="320146273"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">17</int> - <reference key="object" ref="141065122"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="959040643"/> - </object> - <reference key="parent" ref="273331462"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">18</int> - <reference key="object" ref="959040643"/> - <reference key="parent" ref="141065122"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">19</int> - <reference key="object" ref="718941270"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1051100744"/> - </object> - <reference key="parent" ref="273331462"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">20</int> - <reference key="object" ref="1051100744"/> - <reference key="parent" ref="718941270"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">52</int> - <reference key="object" ref="751672940"/> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">82</int> - <reference key="object" ref="359865555"/> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">49</int> - <reference key="object" ref="588270165"/> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">102</int> - <reference key="object" ref="496672244"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="122653364"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">75</int> - <reference key="object" ref="122653364"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="404368211"/> - <reference ref="491468307"/> - <reference ref="538341112"/> - </object> - <reference key="parent" ref="496672244"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">76</int> - <reference key="object" ref="404368211"/> - <reference key="parent" ref="122653364"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">77</int> - <reference key="object" ref="491468307"/> - <reference key="parent" ref="122653364"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">78</int> - <reference key="object" ref="538341112"/> - <reference key="parent" ref="122653364"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">85</int> - <reference key="object" ref="125766055"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="709523694"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">86</int> - <reference key="object" ref="709523694"/> - <reference key="parent" ref="125766055"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">59</int> - <reference key="object" ref="814378125"/> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">109</int> - <reference key="object" ref="797989996"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="709832699"/> - <reference ref="1049850645"/> - <reference ref="900885236"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">42</int> - <reference key="object" ref="709832699"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="976017799"/> - </object> - <reference key="parent" ref="797989996"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">43</int> - <reference key="object" ref="976017799"/> - <reference key="parent" ref="709832699"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">40</int> - <reference key="object" ref="1049850645"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="571145548"/> - </object> - <reference key="parent" ref="797989996"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">41</int> - <reference key="object" ref="571145548"/> - <reference key="parent" ref="1049850645"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">44</int> - <reference key="object" ref="900885236"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="356842314"/> - </object> - <reference key="parent" ref="797989996"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">45</int> - <reference key="object" ref="356842314"/> - <reference key="parent" ref="900885236"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">106</int> - <reference key="object" ref="583112334"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="936710330"/> - <reference ref="656888375"/> - <reference ref="849868912"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">62</int> - <reference key="object" ref="849868912"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="547252370"/> - </object> - <reference key="parent" ref="583112334"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">63</int> - <reference key="object" ref="547252370"/> - <reference key="parent" ref="849868912"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">105</int> - <reference key="object" ref="656888375"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="406015244"/> - <reference ref="290463544"/> - </object> - <reference key="parent" ref="583112334"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">67</int> - <reference key="object" ref="406015244"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="535802230"/> - </object> - <reference key="parent" ref="656888375"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">70</int> - <reference key="object" ref="535802230"/> - <reference key="parent" ref="406015244"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">68</int> - <reference key="object" ref="290463544"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="612106675"/> - </object> - <reference key="parent" ref="656888375"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">69</int> - <reference key="object" ref="612106675"/> - <reference key="parent" ref="290463544"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">61</int> - <reference key="object" ref="936710330"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="183983727"/> - </object> - <reference key="parent" ref="583112334"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">64</int> - <reference key="object" ref="183983727"/> - <reference key="parent" ref="936710330"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">117</int> - <reference key="object" ref="730292222"/> - <reference key="parent" ref="0"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>10.IBPluginDependency</string> - <string>102.IBPluginDependency</string> - <string>105.IBPluginDependency</string> - <string>106.IBPluginDependency</string> - <string>109.IBPluginDependency</string> - <string>11.IBPluginDependency</string> - <string>112.IBPluginDependency</string> - <string>115.IBPluginDependency</string> - <string>12.IBPluginDependency</string> - <string>13.IBPluginDependency</string> - <string>14.IBPluginDependency</string> - <string>15.IBPluginDependency</string> - <string>16.IBPluginDependency</string> - <string>17.IBPluginDependency</string> - <string>18.IBPluginDependency</string> - <string>19.IBPluginDependency</string> - <string>2.IBPluginDependency</string> - <string>20.IBPluginDependency</string> - <string>21.IBPluginDependency</string> - <string>22.IBPluginDependency</string> - <string>34.IBPluginDependency</string> - <string>40.IBPluginDependency</string> - <string>41.IBPluginDependency</string> - <string>42.IBPluginDependency</string> - <string>43.IBPluginDependency</string> - <string>44.IBPluginDependency</string> - <string>45.IBPluginDependency</string> - <string>49.IBPluginDependency</string> - <string>5.IBPluginDependency</string> - <string>52.IBPluginDependency</string> - <string>59.IBPluginDependency</string> - <string>6.IBPluginDependency</string> - <string>61.IBPluginDependency</string> - <string>62.IBPluginDependency</string> - <string>63.IBPluginDependency</string> - <string>64.IBPluginDependency</string> - <string>67.IBPluginDependency</string> - <string>68.IBPluginDependency</string> - <string>69.IBPluginDependency</string> - <string>7.IBPluginDependency</string> - <string>70.IBPluginDependency</string> - <string>72.IBPluginDependency</string> - <string>73.IBPluginDependency</string> - <string>75.IBPluginDependency</string> - <string>76.IBPluginDependency</string> - <string>77.IBPluginDependency</string> - <string>78.IBPluginDependency</string> - <string>79.IBPluginDependency</string> - <string>8.IBPluginDependency</string> - <string>82.IBPluginDependency</string> - <string>85.IBPluginDependency</string> - <string>86.IBPluginDependency</string> - <string>9.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{636, 752}, {532, 404}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{636, 752}, {532, 404}}</string> - <boolean value="NO"/> - <string>{196, 240}</string> - <string>{{202, 428}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference key="dict.sortedKeys" ref="0"/> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference key="dict.sortedKeys" ref="0"/> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">119</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizer</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>otherObjectToLocalize_</string> - <string>owner_</string> - <string>yetAnotherObjectToLocalize_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>id</string> - <string>id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweaker</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>localizerOwner_</string> - <string>localizer_</string> - <string>uiObject_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>GTMUILocalizer</string> - <string>id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="606537230"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerAndLayoutTweaker.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweakerTestLocalizer</string> - <string key="superclassName">GTMUILocalizer</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="969035251"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerAndLayoutTweakerTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - <string key="superclassName">NSWindowController</string> - <object class="NSMutableDictionary" key="outlets"> - <string key="NS.key.0">tabView_</string> - <string key="NS.object.0">NSTabView</string> - </object> - <reference key="sourceIdentifier" ref="969035251"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMWidthBasedTweaker</string> - <string key="superclassName">NSView</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>viewToResize_</string> - <string>viewToSlideAndResize_</string> - <string>viewToSlide_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>NSView</string> - <string>NSView</string> - </object> - </object> - <reference key="sourceIdentifier" ref="606537230"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="925048441"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKitUnitTestingUtilities.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMatrix</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMHTTPServer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="907166154"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMNSAnimatablePropertyContainer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="907166154"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - </object> - <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">NSActionCell</string> - <string key="superclassName">NSCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <string key="superclassName">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="773683809"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="718191272"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="408763547"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSBox</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSBox.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSButton.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButtonCell</string> - <string key="superclassName">NSActionCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="688332791"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSControl.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSFormatter</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSImageCell</string> - <string key="superclassName">NSCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSImageCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSImageView</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSImageView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMatrix</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="553655062"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AddressBook.framework/Headers/ABActions.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="773683809"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="718191272"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="408763547"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="688332791"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="553655062"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="932879476"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSError.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSObject.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSThread.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURL.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">PrintCore.framework/Headers/PDEPluginInterface.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CIImageProvider.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSResponder</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTabView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTextField.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextFieldCell</string> - <string key="superclassName">NSActionCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <string key="superclassName">NSResponder</string> - <reference key="sourceIdentifier" ref="932879476"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <string key="superclassName">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindowController</string> - <string key="superclassName">NSResponder</string> - <object class="NSMutableDictionary" key="actions"> - <string key="NS.key.0">showWindow:</string> - <string key="NS.object.0">id</string> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string> - </object> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> - <integer value="1050" key="NS.object.0"/> - </object> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> - <integer value="1060" key="NS.object.0"/> - </object> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> - <integer value="3000" key="NS.object.0"/> - </object> - <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> - <string key="NS.key.0">NSSwitch</string> - <string key="NS.object.0">{15, 15}</string> - </object> - </data> -</archive> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/> + <capability name="box content view" minToolsVersion="7.0"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="GTMUILocalizerAndLayoutTweakerTestWindowController"> + <connections> + <outlet property="window" destination="1" id="119"/> + </connections> + </customObject> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application"/> + <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" visibleAtLaunch="NO" animationBehavior="default" id="1"> + <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/> + <windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/> + <rect key="contentRect" x="71" y="48" width="532" height="404"/> + <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1178"/> + <view key="contentView" id="2"> + <rect key="frame" x="0.0" y="0.0" width="532" height="404"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <box borderType="none" title="Box" titlePosition="noTitle" id="34"> + <rect key="frame" x="158" y="285" width="375" height="109"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <view key="contentView" id="kRB-5W-mf6"> + <rect key="frame" x="0.0" y="0.0" width="375" height="109"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField verticalHuggingPriority="750" id="13"> + <rect key="frame" x="3" y="45" width="349" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="14"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="15"> + <rect key="frame" x="3" y="13" width="349" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="16"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="11"> + <rect key="frame" x="3" y="77" width="349" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="12"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + </view> + </box> + <box verticalHuggingPriority="750" boxType="separator" id="49"> + <rect key="frame" x="324" y="173" width="188" height="5"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + </box> + <box verticalHuggingPriority="750" boxType="separator" id="59"> + <rect key="frame" x="374" y="98" width="138" height="5"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + </box> + <box verticalHuggingPriority="750" boxType="separator" id="79"> + <rect key="frame" x="124" y="38" width="388" height="5"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + </box> + <box verticalHuggingPriority="750" boxType="separator" id="52"> + <rect key="frame" x="20" y="235" width="327" height="5"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + </box> + <imageView id="72"> + <rect key="frame" x="321" y="77" width="48" height="48"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" imageFrameStyle="grayBezel" id="73"/> + </imageView> + <imageView id="85"> + <rect key="frame" x="352" y="213" width="48" height="48"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/> + <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" imageFrameStyle="grayBezel" id="86"/> + </imageView> + <box verticalHuggingPriority="750" boxType="separator" id="82"> + <rect key="frame" x="20" y="201" width="275" height="5"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + </box> + <customView id="102" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="0.0" y="20" width="116" height="42"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <matrix verticalHuggingPriority="750" allowsEmptySelection="NO" id="75"> + <rect key="frame" x="20" y="0.0" width="96" height="38"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + <size key="cellSize" width="96" height="18"/> + <size key="intercellSpacing" width="4" height="2"/> + <buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="78"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <cells> + <column> + <buttonCell type="radio" title="mumble :5:1" imagePosition="left" alignment="left" state="on" tag="1" inset="2" id="76"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <buttonCell type="radio" title="blah :8:1" imagePosition="left" alignment="left" inset="2" id="77"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </column> + </cells> + </matrix> + </subviews> + <connections> + <outlet property="viewToSlideAndResize_" destination="79" id="104"/> + </connections> + </customView> + <customView id="106" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="0.0" y="70" width="316" height="63"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <button verticalHuggingPriority="750" id="62"> + <rect key="frame" x="214" y="15" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="z:7:10" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="63"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <customView id="105" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="112" y="6" width="100" height="54"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <subviews> + <textField verticalHuggingPriority="750" id="67"> + <rect key="frame" x="17" y="30" width="66" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="j:10:23" id="70"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="68"> + <rect key="frame" x="17" y="5" width="66" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="w:2:6" id="69"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + </customView> + <button verticalHuggingPriority="750" id="61"> + <rect key="frame" x="14" y="15" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="w:10:2" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="64"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + </subviews> + <connections> + <outlet property="viewToSlideAndResize_" destination="59" id="108"/> + <outlet property="viewToSlide_" destination="72" id="107"/> + </connections> + </customView> + <customView id="109" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="0.0" y="157" width="316" height="38"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <button verticalHuggingPriority="750" id="42"> + <rect key="frame" x="103" y="1" width="111" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="foobar :2:1" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="43"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="40"> + <rect key="frame" x="14" y="1" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="foo :4:1" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="41"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="44"> + <rect key="frame" x="206" y="1" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="no:1:2" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="45"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + </subviews> + <connections> + <outlet property="viewToResize_" destination="82" id="110"/> + <outlet property="viewToSlideAndResize_" destination="49" id="111"/> + </connections> + </customView> + <customView id="112" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="405" y="203" width="127" height="69"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/> + <subviews> + <button id="21"> + <rect key="frame" x="18" y="4" width="91" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="M:17:7" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="22"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button id="17"> + <rect key="frame" x="18" y="44" width="91" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="y:25:2" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="18"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button id="19"> + <rect key="frame" x="18" y="24" width="91" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="i:26:4" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="20"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + </subviews> + <connections> + <outlet property="viewToSlideAndResize_" destination="52" id="114"/> + <outlet property="viewToSlide_" destination="85" id="113"/> + </connections> + </customView> + <customView id="115" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="0.0" y="280" width="153" height="121"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <textField verticalHuggingPriority="750" id="7"> + <rect key="frame" x="17" y="52" width="139" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="W:10:4" id="8"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="9"> + <rect key="frame" x="17" y="20" width="139" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="l:12:3" id="10"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="5"> + <rect key="frame" x="17" y="84" width="139" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="ab:10:2" id="6"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <connections> + <outlet property="viewToSlideAndResize_" destination="34" id="116"/> + </connections> + </customView> + </subviews> + </view> + </window> + <customObject id="35" customClass="GTMUILocalizerAndLayoutTweaker"> + <connections> + <outlet property="localizer_" destination="117" id="118"/> + <outlet property="uiObject_" destination="1" id="84"/> + </connections> + </customObject> + <customObject id="117" customClass="GTMUILocalizerAndLayoutTweakerTestLocalizer"/> + </objects> +</document> diff --git a/AppKit/GTMUILocalizerAndLayoutTweakerTest2.xib b/AppKit/GTMUILocalizerAndLayoutTweakerTest2.xib index b4c7c6f..c43cf26 100644 --- a/AppKit/GTMUILocalizerAndLayoutTweakerTest2.xib +++ b/AppKit/GTMUILocalizerAndLayoutTweakerTest2.xib @@ -1,862 +1,140 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9J61</string> - <string key="IBDocument.InterfaceBuilderVersion">677</string> - <string key="IBDocument.AppKitVersion">949.46</string> - <string key="IBDocument.HIToolboxVersion">353.00</string> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="1"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{123, 932}, {504, 183}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window2</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSBox" id="13430988"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">266</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSView" id="180511442"> - <reference key="NSNextResponder" ref="13430988"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="800844720"> - <reference key="NSNextResponder" ref="180511442"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{3, 45}, {336, 22}}</string> - <reference key="NSSuperview" ref="180511442"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="951606926"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <object class="NSFont" key="NSSupport" id="396891173"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.300000e+01</double> - <int key="NSfFlags">1044</int> - </object> - <reference key="NSControlView" ref="800844720"/> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSColor" key="NSBackgroundColor" id="763520216"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textBackgroundColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor" id="843269795"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textColor</string> - <object class="NSColor" key="NSColor" id="960820016"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSTextField" id="745022904"> - <reference key="NSNextResponder" ref="180511442"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{3, 13}, {336, 22}}</string> - <reference key="NSSuperview" ref="180511442"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="810828168"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="745022904"/> - <bool key="NSDrawsBackground">YES</bool> - <reference key="NSBackgroundColor" ref="763520216"/> - <reference key="NSTextColor" ref="843269795"/> - </object> - </object> - <object class="NSTextField" id="478979211"> - <reference key="NSNextResponder" ref="180511442"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{3, 77}, {336, 22}}</string> - <reference key="NSSuperview" ref="180511442"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="1044158630"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="478979211"/> - <bool key="NSDrawsBackground">YES</bool> - <reference key="NSBackgroundColor" ref="763520216"/> - <reference key="NSTextColor" ref="843269795"/> - </object> - </object> - </object> - <string key="NSFrameSize">{342, 109}</string> - <reference key="NSSuperview" ref="13430988"/> - </object> - </object> - <string key="NSFrame">{{145, 64}, {342, 109}}</string> - <reference key="NSSuperview" ref="1006"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Box</string> - <object class="NSFont" key="NSSupport"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.100000e+01</double> - <int key="NSfFlags">3100</int> - </object> - <reference key="NSBackgroundColor" ref="763520216"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <reference key="NSContentView" ref="180511442"/> - <int key="NSBorderType">0</int> - <int key="NSBoxType">0</int> - <int key="NSTitlePosition">0</int> - <bool key="NSTransparent">NO</bool> - </object> - <object class="NSCustomView" id="797989996"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">289</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="900885236"> - <reference key="NSNextResponder" ref="797989996"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{206, 12}, {96, 32}}</string> - <reference key="NSSuperview" ref="797989996"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="356842314"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">ok:8:1</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="900885236"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="1049850645"> - <reference key="NSNextResponder" ref="797989996"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{14, 12}, {96, 32}}</string> - <reference key="NSSuperview" ref="797989996"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="571145548"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">abc:3:1</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="1049850645"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="709832699"> - <reference key="NSNextResponder" ref="797989996"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{110, 12}, {96, 32}}</string> - <reference key="NSSuperview" ref="797989996"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="976017799"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">w:9:3</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="709832699"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{188, 0}, {316, 60}}</string> - <reference key="NSSuperview" ref="1006"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - <object class="NSCustomView" id="450922667"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="32340604"> - <reference key="NSNextResponder" ref="450922667"/> - <int key="NSvFlags">265</int> - <string key="NSFrame">{{17, 84}, {111, 17}}</string> - <reference key="NSSuperview" ref="450922667"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="1064530732"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">foo :8:2</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="32340604"/> - <object class="NSColor" key="NSBackgroundColor" id="584893825"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor" id="215232119"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlTextColor</string> - <reference key="NSColor" ref="960820016"/> - </object> - </object> - </object> - <object class="NSTextField" id="499628444"> - <reference key="NSNextResponder" ref="450922667"/> - <int key="NSvFlags">265</int> - <string key="NSFrame">{{17, 20}, {111, 17}}</string> - <reference key="NSSuperview" ref="450922667"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="200889835"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">w:12:6</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="499628444"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - <object class="NSTextField" id="236725617"> - <reference key="NSNextResponder" ref="450922667"/> - <int key="NSvFlags">265</int> - <string key="NSFrame">{{17, 52}, {111, 17}}</string> - <reference key="NSSuperview" ref="450922667"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="65808262"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">mumble :3:1</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="236725617"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - </object> - <string key="NSFrame">{{0, 59}, {140, 121}}</string> - <reference key="NSSuperview" ref="1006"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - </object> - <string key="NSFrameSize">{504, 183}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> - <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> - </object> - <object class="NSCustomObject" id="431527667"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweaker</string> - </object> - <object class="NSCustomObject" id="239437949"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweakerTestLocalizer</string> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">uiObject_</string> - <reference key="source" ref="431527667"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">84</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">viewToResize_</string> - <reference key="source" ref="450922667"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">118</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">viewToSlideAndResize_</string> - <reference key="source" ref="450922667"/> - <reference key="destination" ref="13430988"/> - </object> - <int key="connectionID">119</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">localizer_</string> - <reference key="source" ref="431527667"/> - <reference key="destination" ref="239437949"/> - </object> - <int key="connectionID">121</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">122</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <object class="NSArray" key="object" id="1002"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="1002"/> - <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="1002"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="1002"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - </object> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="450922667"/> - <reference ref="13430988"/> - <reference ref="797989996"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">34</int> - <reference key="object" ref="13430988"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="800844720"/> - <reference ref="745022904"/> - <reference ref="478979211"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">13</int> - <reference key="object" ref="800844720"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="951606926"/> - </object> - <reference key="parent" ref="13430988"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">14</int> - <reference key="object" ref="951606926"/> - <reference key="parent" ref="800844720"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">15</int> - <reference key="object" ref="745022904"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="810828168"/> - </object> - <reference key="parent" ref="13430988"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">16</int> - <reference key="object" ref="810828168"/> - <reference key="parent" ref="745022904"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">11</int> - <reference key="object" ref="478979211"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1044158630"/> - </object> - <reference key="parent" ref="13430988"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">12</int> - <reference key="object" ref="1044158630"/> - <reference key="parent" ref="478979211"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">35</int> - <reference key="object" ref="431527667"/> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">115</int> - <reference key="object" ref="450922667"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="32340604"/> - <reference ref="499628444"/> - <reference ref="236725617"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">5</int> - <reference key="object" ref="32340604"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1064530732"/> - </object> - <reference key="parent" ref="450922667"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">6</int> - <reference key="object" ref="1064530732"/> - <reference key="parent" ref="32340604"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">9</int> - <reference key="object" ref="499628444"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="200889835"/> - </object> - <reference key="parent" ref="450922667"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">10</int> - <reference key="object" ref="200889835"/> - <reference key="parent" ref="499628444"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">7</int> - <reference key="object" ref="236725617"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="65808262"/> - </object> - <reference key="parent" ref="450922667"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">8</int> - <reference key="object" ref="65808262"/> - <reference key="parent" ref="236725617"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">109</int> - <reference key="object" ref="797989996"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1049850645"/> - <reference ref="900885236"/> - <reference ref="709832699"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">42</int> - <reference key="object" ref="709832699"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="976017799"/> - </object> - <reference key="parent" ref="797989996"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">43</int> - <reference key="object" ref="976017799"/> - <reference key="parent" ref="709832699"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">40</int> - <reference key="object" ref="1049850645"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="571145548"/> - </object> - <reference key="parent" ref="797989996"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">41</int> - <reference key="object" ref="571145548"/> - <reference key="parent" ref="1049850645"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">44</int> - <reference key="object" ref="900885236"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="356842314"/> - </object> - <reference key="parent" ref="797989996"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">45</int> - <reference key="object" ref="356842314"/> - <reference key="parent" ref="900885236"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">120</int> - <reference key="object" ref="239437949"/> - <reference key="parent" ref="1002"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>10.IBPluginDependency</string> - <string>11.IBPluginDependency</string> - <string>12.IBPluginDependency</string> - <string>120.IBPluginDependency</string> - <string>13.IBPluginDependency</string> - <string>14.IBPluginDependency</string> - <string>15.IBPluginDependency</string> - <string>16.IBPluginDependency</string> - <string>2.IBPluginDependency</string> - <string>35.IBPluginDependency</string> - <string>40.IBPluginDependency</string> - <string>41.IBPluginDependency</string> - <string>42.IBPluginDependency</string> - <string>43.IBPluginDependency</string> - <string>44.IBPluginDependency</string> - <string>45.IBPluginDependency</string> - <string>5.IBPluginDependency</string> - <string>6.IBPluginDependency</string> - <string>7.IBPluginDependency</string> - <string>8.IBPluginDependency</string> - <string>9.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>{{632, 945}, {504, 183}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{632, 945}, {504, 183}}</string> - <boolean value="NO"/> - <string>{196, 240}</string> - <string>{{202, 428}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">122</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizer</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>otherObjectToLocalize_</string> - <string>owner_</string> - <string>yetAnotherObjectToLocalize_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>id</string> - <string>id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweaker</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>localizerOwner_</string> - <string>localizer_</string> - <string>uiObject_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>GTMUILocalizer</string> - <string>id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="832487978"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerAndLayoutTweaker.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweakerTestLocalizer</string> - <string key="superclassName">GTMUILocalizer</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="965049481"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerAndLayoutTweakerTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - <string key="superclassName">NSWindowController</string> - <reference key="sourceIdentifier" ref="965049481"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMWidthBasedTweaker</string> - <string key="superclassName">NSView</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>viewToResize_</string> - <string>viewToSlideAndResize_</string> - <string>viewToSlide_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>NSView</string> - <string>NSView</string> - </object> - </object> - <reference key="sourceIdentifier" ref="832487978"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="450080117"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMHTTPServer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="907434799"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMTheme.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="907434799"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - </data> -</archive> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/> + <capability name="box content view" minToolsVersion="7.0"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="GTMUILocalizerAndLayoutTweakerTestWindowController"> + <connections> + <outlet property="window" destination="1" id="122"/> + </connections> + </customObject> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application"/> + <window title="Window2" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" visibleAtLaunch="NO" animationBehavior="default" id="1"> + <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/> + <windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/> + <rect key="contentRect" x="123" y="932" width="504" height="183"/> + <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1178"/> + <view key="contentView" id="2"> + <rect key="frame" x="0.0" y="0.0" width="504" height="183"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <box borderType="none" title="Box" titlePosition="noTitle" id="34"> + <rect key="frame" x="145" y="64" width="342" height="109"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <view key="contentView" id="3OO-L7-9xJ"> + <rect key="frame" x="0.0" y="0.0" width="342" height="109"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField verticalHuggingPriority="750" id="13"> + <rect key="frame" x="3" y="45" width="336" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="14"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="15"> + <rect key="frame" x="3" y="13" width="336" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="16"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="11"> + <rect key="frame" x="3" y="77" width="336" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="12"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + </view> + </box> + <customView id="109" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="188" y="0.0" width="316" height="60"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/> + <subviews> + <button verticalHuggingPriority="750" id="42"> + <rect key="frame" x="110" y="12" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="w:9:3" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="43"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="40"> + <rect key="frame" x="14" y="12" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="abc:3:1" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="41"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="44"> + <rect key="frame" x="206" y="12" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="ok:8:1" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="45"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + </subviews> + </customView> + <customView id="115" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="0.0" y="59" width="140" height="121"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <textField verticalHuggingPriority="750" id="7"> + <rect key="frame" x="17" y="52" width="111" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="mumble :3:1" id="8"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="9"> + <rect key="frame" x="17" y="20" width="111" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="w:12:6" id="10"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="5"> + <rect key="frame" x="17" y="84" width="111" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="foo :8:2" id="6"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <connections> + <outlet property="viewToResize_" destination="1" id="118"/> + <outlet property="viewToSlideAndResize_" destination="34" id="119"/> + </connections> + </customView> + </subviews> + </view> + </window> + <customObject id="35" customClass="GTMUILocalizerAndLayoutTweaker"> + <connections> + <outlet property="localizer_" destination="120" id="121"/> + <outlet property="uiObject_" destination="1" id="84"/> + </connections> + </customObject> + <customObject id="120" customClass="GTMUILocalizerAndLayoutTweakerTestLocalizer"/> + </objects> +</document> diff --git a/AppKit/GTMUILocalizerAndLayoutTweakerTest3.xib b/AppKit/GTMUILocalizerAndLayoutTweakerTest3.xib index 36a6fc5..61ac5e5 100644 --- a/AppKit/GTMUILocalizerAndLayoutTweakerTest3.xib +++ b/AppKit/GTMUILocalizerAndLayoutTweakerTest3.xib @@ -1,376 +1,46 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9L30</string> - <string key="IBDocument.InterfaceBuilderVersion">677</string> - <string key="IBDocument.AppKitVersion">949.54</string> - <string key="IBDocument.HIToolboxVersion">353.00</string> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="2"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">3</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{123, 844}, {474, 271}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window3</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="374380249"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 20}, {219, 231}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="929792690"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">272891904</int> - <string key="NSContents">Multiline Label</string> - <object class="NSFont" key="NSSupport" id="554297525"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.300000e+01</double> - <int key="NSfFlags">16</int> - </object> - <reference key="NSControlView" ref="374380249"/> - <object class="NSColor" key="NSBackgroundColor" id="584893825"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor" id="215232119"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlTextColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSTextField" id="958773035"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{238, 20}, {219, 32}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="847317034"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">71565312</int> - <string key="NSContents">Multiline Label</string> - <reference key="NSSupport" ref="554297525"/> - <reference key="NSControlView" ref="958773035"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - </object> - <string key="NSFrameSize">{474, 271}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> - <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">122</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <object class="NSArray" key="object" id="1002"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="1002"/> - <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="1002"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="1002"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - </object> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="374380249"/> - <reference ref="958773035"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">123</int> - <reference key="object" ref="374380249"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="929792690"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">124</int> - <reference key="object" ref="929792690"/> - <reference key="parent" ref="374380249"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">125</int> - <reference key="object" ref="958773035"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="847317034"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">126</int> - <reference key="object" ref="847317034"/> - <reference key="parent" ref="958773035"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>123.IBPluginDependency</string> - <string>124.IBPluginDependency</string> - <string>125.IBPluginDependency</string> - <string>126.IBPluginDependency</string> - <string>2.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>{{632, 857}, {474, 271}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{632, 857}, {474, 271}}</string> - <boolean value="NO"/> - <string>{196, 240}</string> - <string>{{202, 428}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">128</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - <string key="superclassName">NSWindowController</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerAndLayoutTweakerTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="450080117"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMHTTPServer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="907434799"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMTheme.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="907434799"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - </data> -</archive> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G1004" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="GTMUILocalizerAndLayoutTweakerTestWindowController"> + <connections> + <outlet property="window" destination="1" id="122"/> + </connections> + </customObject> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application" customClass="NSObject"/> + <window title="Window3" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" visibleAtLaunch="NO" animationBehavior="default" id="1"> + <windowStyleMask key="styleMask" titled="YES" closable="YES"/> + <windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/> + <rect key="contentRect" x="123" y="844" width="474" height="271"/> + <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1178"/> + <view key="contentView" id="2"> + <rect key="frame" x="0.0" y="0.0" width="474" height="271"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <textField verticalHuggingPriority="750" id="123"> + <rect key="frame" x="17" y="20" width="219" height="231"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" borderStyle="border" title="Multiline Label" id="124"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="125"> + <rect key="frame" x="238" y="20" width="219" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" borderStyle="border" alignment="right" title="Multiline Label" id="126"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + </view> + </window> + </objects> +</document> diff --git a/AppKit/GTMUILocalizerAndLayoutTweakerTest4.xib b/AppKit/GTMUILocalizerAndLayoutTweakerTest4.xib index 1a77faf..e0a69ce 100644 --- a/AppKit/GTMUILocalizerAndLayoutTweakerTest4.xib +++ b/AppKit/GTMUILocalizerAndLayoutTweakerTest4.xib @@ -1,2005 +1,261 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">10D2063a</string> - <string key="IBDocument.InterfaceBuilderVersion">762</string> - <string key="IBDocument.AppKitVersion">1038.29</string> - <string key="IBDocument.HIToolboxVersion">460.00</string> - <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> - <string key="NS.object.0">762</string> - </object> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="180"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys" id="0"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{71, 158}, {734, 294}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomView" id="186508408"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="282236995"> - <reference key="NSNextResponder" ref="186508408"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 39}, {96, 18}}</string> - <reference key="NSSuperview" ref="186508408"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="915137544"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">W:4:12</string> - <object class="NSFont" key="NSSupport" id="396891173"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">13</double> - <int key="NSfFlags">1044</int> - </object> - <reference key="NSControlView" ref="282236995"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <object class="NSCustomResource" key="NSNormalImage" id="356175074"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSSwitch</string> - </object> - <object class="NSButtonImageSource" key="NSAlternateImage" id="644707509"> - <string key="NSImageName">NSSwitch</string> - </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="926864482"> - <reference key="NSNextResponder" ref="186508408"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 146}, {96, 19}}</string> - <reference key="NSSuperview" ref="186508408"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="30129164"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">W:4:12</string> - <object class="NSFont" key="NSSupport"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">12</double> - <int key="NSfFlags">16</int> - </object> - <reference key="NSControlView" ref="926864482"/> - <int key="NSButtonFlags">-2038152961</int> - <int key="NSButtonFlags2">164</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="901343433"> - <reference key="NSNextResponder" ref="186508408"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 121}, {96, 19}}</string> - <reference key="NSSuperview" ref="186508408"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="726270594"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">W:4:12</string> - <object class="NSFont" key="NSSupport" id="29"> - <string key="NSName">LucidaGrande-Bold</string> - <double key="NSSize">12</double> - <int key="NSfFlags">16</int> - </object> - <reference key="NSControlView" ref="901343433"/> - <int key="NSButtonFlags">-1232846593</int> - <int key="NSButtonFlags2">173</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="718453267"> - <reference key="NSNextResponder" ref="186508408"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 62}, {96, 25}}</string> - <reference key="NSSuperview" ref="186508408"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="768260201"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="718453267"/> - <int key="NSButtonFlags">-2038152961</int> - <int key="NSButtonFlags2">163</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="428327311"> - <reference key="NSNextResponder" ref="186508408"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 18}, {96, 18}}</string> - <reference key="NSSuperview" ref="186508408"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="931469600"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="428327311"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <object class="NSCustomResource" key="NSNormalImage" id="946414658"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSRadioButton</string> - </object> - <object class="NSButtonImageSource" key="NSAlternateImage" id="520966901"> - <string key="NSImageName">NSRadioButton</string> - </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="690891717"> - <reference key="NSNextResponder" ref="186508408"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{19, 89}, {96, 27}}</string> - <reference key="NSSuperview" ref="186508408"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="370980038"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="690891717"/> - <int key="NSButtonFlags">-2033434369</int> - <int key="NSButtonFlags2">160</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="976354130"> - <reference key="NSNextResponder" ref="186508408"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 172}, {96, 23}}</string> - <reference key="NSSuperview" ref="186508408"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="122843690"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="976354130"/> - <int key="NSButtonFlags">-2033434369</int> - <int key="NSButtonFlags2">162</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="766045322"> - <reference key="NSNextResponder" ref="186508408"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{14, 196}, {96, 32}}</string> - <reference key="NSSuperview" ref="186508408"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="937754903"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="766045322"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{0, 50}, {136, 244}}</string> - <reference key="NSSuperview" ref="1006"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - <object class="NSCustomView" id="845619860"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="367073018"> - <reference key="NSNextResponder" ref="845619860"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 62}, {96, 25}}</string> - <reference key="NSSuperview" ref="845619860"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="548617494"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134348800</int> - <string key="NSContents">W:4:12</string> - <object class="NSFont" key="NSSupport" id="26"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">11</double> - <int key="NSfFlags">3100</int> - </object> - <reference key="NSControlView" ref="367073018"/> - <int key="NSButtonFlags">-2038152961</int> - <int key="NSButtonFlags2">163</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="878016587"> - <reference key="NSNextResponder" ref="845619860"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{15, 200}, {96, 28}}</string> - <reference key="NSSuperview" ref="845619860"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="273592344"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134348800</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="878016587"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="884127310"> - <reference key="NSNextResponder" ref="845619860"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 98}, {96, 18}}</string> - <reference key="NSSuperview" ref="845619860"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="888888012"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134348800</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="884127310"/> - <int key="NSButtonFlags">-2033434369</int> - <int key="NSButtonFlags2">160</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="487675374"> - <reference key="NSNextResponder" ref="845619860"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 123}, {96, 17}}</string> - <reference key="NSSuperview" ref="845619860"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="320493531"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134348800</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="29"/> - <reference key="NSControlView" ref="487675374"/> - <int key="NSButtonFlags">-1232846593</int> - <int key="NSButtonFlags2">173</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="406151598"> - <reference key="NSNextResponder" ref="845619860"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 39}, {96, 18}}</string> - <reference key="NSSuperview" ref="845619860"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="640662364"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">131072</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="406151598"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="356175074"/> - <reference key="NSAlternateImage" ref="644707509"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="522534662"> - <reference key="NSNextResponder" ref="845619860"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 148}, {96, 17}}</string> - <reference key="NSSuperview" ref="845619860"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="693160776"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134348800</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="522534662"/> - <int key="NSButtonFlags">-2038152961</int> - <int key="NSButtonFlags2">164</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="905113063"> - <reference key="NSNextResponder" ref="845619860"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 172}, {96, 23}}</string> - <reference key="NSSuperview" ref="845619860"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="130877018"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134348800</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="905113063"/> - <int key="NSButtonFlags">-2033434369</int> - <int key="NSButtonFlags2">162</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="8663780"> - <reference key="NSNextResponder" ref="845619860"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 18}, {96, 18}}</string> - <reference key="NSSuperview" ref="845619860"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="54593915"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">131072</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="8663780"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="946414658"/> - <reference key="NSAlternateImage" ref="520966901"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{242, 50}, {137, 244}}</string> - <reference key="NSSuperview" ref="1006"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - <object class="NSCustomView" id="305521052"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="1060251717"> - <reference key="NSNextResponder" ref="305521052"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 170}, {96, 23}}</string> - <reference key="NSSuperview" ref="305521052"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="25568552"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134479872</int> - <string key="NSContents">W:4:12</string> - <object class="NSFont" key="NSSupport" id="22"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">9</double> - <int key="NSfFlags">3614</int> - </object> - <reference key="NSControlView" ref="1060251717"/> - <int key="NSButtonFlags">-2033434369</int> - <int key="NSButtonFlags2">162</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="487957489"> - <reference key="NSNextResponder" ref="305521052"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 121}, {96, 17}}</string> - <reference key="NSSuperview" ref="305521052"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="487051093"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134479872</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="22"/> - <reference key="NSControlView" ref="487957489"/> - <int key="NSButtonFlags">-1232846593</int> - <int key="NSButtonFlags2">173</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="440594617"> - <reference key="NSNextResponder" ref="305521052"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{16, 37}, {96, 18}}</string> - <reference key="NSSuperview" ref="305521052"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="577127578"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">262144</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="22"/> - <reference key="NSControlView" ref="440594617"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="356175074"/> - <reference key="NSAlternateImage" ref="644707509"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="969909786"> - <reference key="NSNextResponder" ref="305521052"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 60}, {96, 25}}</string> - <reference key="NSSuperview" ref="305521052"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="930680615"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134479872</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="22"/> - <reference key="NSControlView" ref="969909786"/> - <int key="NSButtonFlags">-2038152961</int> - <int key="NSButtonFlags2">163</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="71893445"> - <reference key="NSNextResponder" ref="305521052"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{19, 210}, {96, 16}}</string> - <reference key="NSSuperview" ref="305521052"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="495713873"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134479872</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="22"/> - <reference key="NSControlView" ref="71893445"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="401241950"> - <reference key="NSNextResponder" ref="305521052"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 146}, {96, 17}}</string> - <reference key="NSSuperview" ref="305521052"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="449798413"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134479872</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="22"/> - <reference key="NSControlView" ref="401241950"/> - <int key="NSButtonFlags">-2038152961</int> - <int key="NSButtonFlags2">164</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="159119224"> - <reference key="NSNextResponder" ref="305521052"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{19, 96}, {96, 18}}</string> - <reference key="NSSuperview" ref="305521052"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="162457844"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134479872</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="22"/> - <reference key="NSControlView" ref="159119224"/> - <int key="NSButtonFlags">-2033434369</int> - <int key="NSButtonFlags2">160</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="917362581"> - <reference key="NSNextResponder" ref="305521052"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{16, 16}, {96, 18}}</string> - <reference key="NSSuperview" ref="305521052"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="482221767"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">262144</int> - <string key="NSContents">W:4:12</string> - <reference key="NSSupport" ref="22"/> - <reference key="NSControlView" ref="917362581"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="946414658"/> - <reference key="NSAlternateImage" ref="520966901"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{475, 48}, {141, 246}}</string> - <reference key="NSSuperview" ref="1006"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - </object> - <string key="NSFrameSize">{734, 294}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> - <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> - </object> - <object class="NSCustomObject" id="431527667"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweaker</string> - </object> - <object class="NSCustomObject" id="730292222"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweakerTestLocalizer</string> - </object> - <object class="NSButton" id="870318376"> - <nil key="NSNextResponder"/> - <int key="NSvFlags">268</int> - <string key="NSFrameSize">{154, 17}</string> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="576384409"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134348800</int> - <string key="NSContents">Recessed Button</string> - <reference key="NSSupport" ref="29"/> - <reference key="NSControlView" ref="870318376"/> - <int key="NSButtonFlags">-1232846593</int> - <int key="NSButtonFlags2">173</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <object class="NSButton" id="587069052"> - <nil key="NSNextResponder"/> - <int key="NSvFlags">268</int> - <string key="NSFrameSize">{154, 17}</string> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="246372967"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">134348800</int> - <string key="NSContents">Recessed Button</string> - <reference key="NSSupport" ref="29"/> - <reference key="NSControlView" ref="587069052"/> - <int key="NSButtonFlags">-1232846593</int> - <int key="NSButtonFlags2">173</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">localizer_</string> - <reference key="source" ref="431527667"/> - <reference key="destination" ref="730292222"/> - </object> - <int key="connectionID">118</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">119</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">uiObject_</string> - <reference key="source" ref="431527667"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">193</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <reference key="object" ref="0"/> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="0"/> - <string key="objectName">File's Owner</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="0"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="0"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="186508408"/> - <reference ref="845619860"/> - <reference ref="305521052"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">35</int> - <reference key="object" ref="431527667"/> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">117</int> - <reference key="object" ref="730292222"/> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">188</int> - <reference key="object" ref="186508408"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="282236995"/> - <reference ref="926864482"/> - <reference ref="901343433"/> - <reference ref="718453267"/> - <reference ref="428327311"/> - <reference ref="690891717"/> - <reference ref="976354130"/> - <reference ref="766045322"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">176</int> - <reference key="object" ref="282236995"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="915137544"/> - </object> - <reference key="parent" ref="186508408"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">177</int> - <reference key="object" ref="915137544"/> - <reference key="parent" ref="282236995"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">124</int> - <reference key="object" ref="926864482"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="30129164"/> - </object> - <reference key="parent" ref="186508408"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">125</int> - <reference key="object" ref="30129164"/> - <reference key="parent" ref="926864482"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">128</int> - <reference key="object" ref="901343433"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="726270594"/> - </object> - <reference key="parent" ref="186508408"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">129</int> - <reference key="object" ref="726270594"/> - <reference key="parent" ref="901343433"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">136</int> - <reference key="object" ref="718453267"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="768260201"/> - </object> - <reference key="parent" ref="186508408"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">137</int> - <reference key="object" ref="768260201"/> - <reference key="parent" ref="718453267"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">182</int> - <reference key="object" ref="428327311"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="931469600"/> - </object> - <reference key="parent" ref="186508408"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">187</int> - <reference key="object" ref="931469600"/> - <reference key="parent" ref="428327311"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">132</int> - <reference key="object" ref="690891717"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="370980038"/> - </object> - <reference key="parent" ref="186508408"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">133</int> - <reference key="object" ref="370980038"/> - <reference key="parent" ref="690891717"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">120</int> - <reference key="object" ref="976354130"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="122843690"/> - </object> - <reference key="parent" ref="186508408"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">121</int> - <reference key="object" ref="122843690"/> - <reference key="parent" ref="976354130"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">189</int> - <reference key="object" ref="845619860"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="367073018"/> - <reference ref="884127310"/> - <reference ref="487675374"/> - <reference ref="406151598"/> - <reference ref="522534662"/> - <reference ref="905113063"/> - <reference ref="8663780"/> - <reference ref="878016587"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">157</int> - <reference key="object" ref="367073018"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="548617494"/> - </object> - <reference key="parent" ref="845619860"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">158</int> - <reference key="object" ref="548617494"/> - <reference key="parent" ref="367073018"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">152</int> - <reference key="object" ref="878016587"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="273592344"/> - </object> - <reference key="parent" ref="845619860"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">163</int> - <reference key="object" ref="273592344"/> - <reference key="parent" ref="878016587"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">156</int> - <reference key="object" ref="884127310"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="888888012"/> - </object> - <reference key="parent" ref="845619860"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">159</int> - <reference key="object" ref="888888012"/> - <reference key="parent" ref="884127310"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">155</int> - <reference key="object" ref="487675374"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="320493531"/> - </object> - <reference key="parent" ref="845619860"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">160</int> - <reference key="object" ref="320493531"/> - <reference key="parent" ref="487675374"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">178</int> - <reference key="object" ref="406151598"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="640662364"/> - </object> - <reference key="parent" ref="845619860"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">179</int> - <reference key="object" ref="640662364"/> - <reference key="parent" ref="406151598"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">154</int> - <reference key="object" ref="522534662"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="693160776"/> - </object> - <reference key="parent" ref="845619860"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">161</int> - <reference key="object" ref="693160776"/> - <reference key="parent" ref="522534662"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">153</int> - <reference key="object" ref="905113063"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="130877018"/> - </object> - <reference key="parent" ref="845619860"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">162</int> - <reference key="object" ref="130877018"/> - <reference key="parent" ref="905113063"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">183</int> - <reference key="object" ref="8663780"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="54593915"/> - </object> - <reference key="parent" ref="845619860"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">186</int> - <reference key="object" ref="54593915"/> - <reference key="parent" ref="8663780"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">190</int> - <reference key="object" ref="305521052"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1060251717"/> - <reference ref="487957489"/> - <reference ref="440594617"/> - <reference ref="969909786"/> - <reference ref="401241950"/> - <reference ref="159119224"/> - <reference ref="917362581"/> - <reference ref="71893445"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">165</int> - <reference key="object" ref="1060251717"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="25568552"/> - </object> - <reference key="parent" ref="305521052"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">174</int> - <reference key="object" ref="25568552"/> - <reference key="parent" ref="1060251717"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">167</int> - <reference key="object" ref="487957489"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="487051093"/> - </object> - <reference key="parent" ref="305521052"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">172</int> - <reference key="object" ref="487051093"/> - <reference key="parent" ref="487957489"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">180</int> - <reference key="object" ref="440594617"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="577127578"/> - </object> - <reference key="parent" ref="305521052"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">181</int> - <reference key="object" ref="577127578"/> - <reference key="parent" ref="440594617"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">169</int> - <reference key="object" ref="969909786"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="930680615"/> - </object> - <reference key="parent" ref="305521052"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">170</int> - <reference key="object" ref="930680615"/> - <reference key="parent" ref="969909786"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">164</int> - <reference key="object" ref="71893445"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="495713873"/> - </object> - <reference key="parent" ref="305521052"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">175</int> - <reference key="object" ref="495713873"/> - <reference key="parent" ref="71893445"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">166</int> - <reference key="object" ref="401241950"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="449798413"/> - </object> - <reference key="parent" ref="305521052"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">173</int> - <reference key="object" ref="449798413"/> - <reference key="parent" ref="401241950"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">168</int> - <reference key="object" ref="159119224"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="162457844"/> - </object> - <reference key="parent" ref="305521052"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">171</int> - <reference key="object" ref="162457844"/> - <reference key="parent" ref="159119224"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">184</int> - <reference key="object" ref="917362581"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="482221767"/> - </object> - <reference key="parent" ref="305521052"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">185</int> - <reference key="object" ref="482221767"/> - <reference key="parent" ref="917362581"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">191</int> - <reference key="object" ref="766045322"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="937754903"/> - </object> - <reference key="parent" ref="186508408"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">192</int> - <reference key="object" ref="937754903"/> - <reference key="parent" ref="766045322"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">210</int> - <reference key="object" ref="870318376"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="576384409"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">211</int> - <reference key="object" ref="576384409"/> - <reference key="parent" ref="870318376"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">212</int> - <reference key="object" ref="587069052"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="246372967"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">213</int> - <reference key="object" ref="246372967"/> - <reference key="parent" ref="587069052"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBViewEditorWindowController.showingBoundsRectangles</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>120.IBPluginDependency</string> - <string>121.IBPluginDependency</string> - <string>124.IBPluginDependency</string> - <string>125.IBPluginDependency</string> - <string>128.IBPluginDependency</string> - <string>129.IBPluginDependency</string> - <string>132.IBPluginDependency</string> - <string>133.IBPluginDependency</string> - <string>136.IBPluginDependency</string> - <string>137.IBPluginDependency</string> - <string>152.IBPluginDependency</string> - <string>153.IBPluginDependency</string> - <string>154.IBPluginDependency</string> - <string>155.IBPluginDependency</string> - <string>156.IBPluginDependency</string> - <string>157.IBPluginDependency</string> - <string>158.IBPluginDependency</string> - <string>159.IBPluginDependency</string> - <string>160.IBPluginDependency</string> - <string>161.IBPluginDependency</string> - <string>162.IBPluginDependency</string> - <string>163.IBPluginDependency</string> - <string>164.IBPluginDependency</string> - <string>165.IBPluginDependency</string> - <string>166.IBPluginDependency</string> - <string>167.IBPluginDependency</string> - <string>168.IBPluginDependency</string> - <string>169.IBPluginDependency</string> - <string>170.IBPluginDependency</string> - <string>171.IBPluginDependency</string> - <string>172.IBPluginDependency</string> - <string>173.IBPluginDependency</string> - <string>174.IBPluginDependency</string> - <string>175.IBPluginDependency</string> - <string>176.IBPluginDependency</string> - <string>177.IBPluginDependency</string> - <string>178.IBPluginDependency</string> - <string>179.IBPluginDependency</string> - <string>180.IBPluginDependency</string> - <string>181.IBPluginDependency</string> - <string>182.IBPluginDependency</string> - <string>183.IBPluginDependency</string> - <string>184.IBPluginDependency</string> - <string>185.IBPluginDependency</string> - <string>186.IBPluginDependency</string> - <string>187.IBPluginDependency</string> - <string>188.IBPluginDependency</string> - <string>189.IBPluginDependency</string> - <string>190.IBPluginDependency</string> - <string>191.IBPluginDependency</string> - <string>192.IBPluginDependency</string> - <string>2.IBPluginDependency</string> - <string>210.IBPluginDependency</string> - <string>211.IBPluginDependency</string> - <string>212.IBPluginDependency</string> - <string>213.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{636, 862}, {734, 294}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <boolean value="NO"/> - <string>{{636, 862}, {734, 294}}</string> - <boolean value="NO"/> - <string>{196, 240}</string> - <string>{{202, 428}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference key="dict.sortedKeys" ref="0"/> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference key="dict.sortedKeys" ref="0"/> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">213</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizer</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>otherObjectToLocalize_</string> - <string>owner_</string> - <string>yetAnotherObjectToLocalize_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>id</string> - <string>id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweaker</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>localizerOwner_</string> - <string>localizer_</string> - <string>uiObject_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>GTMUILocalizer</string> - <string>id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="606537230"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerAndLayoutTweaker.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweakerTestLocalizer</string> - <string key="superclassName">GTMUILocalizer</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="969035251"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerAndLayoutTweakerTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - <string key="superclassName">NSWindowController</string> - <object class="NSMutableDictionary" key="outlets"> - <string key="NS.key.0">tabView_</string> - <string key="NS.object.0">NSTabView</string> - </object> - <reference key="sourceIdentifier" ref="969035251"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMWidthBasedTweaker</string> - <string key="superclassName">NSView</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>viewToResize_</string> - <string>viewToSlideAndResize_</string> - <string>viewToSlide_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>NSView</string> - <string>NSView</string> - </object> - </object> - <reference key="sourceIdentifier" ref="606537230"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="925048441"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKitUnitTestingUtilities.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMHTTPServer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="837971773"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMNSAnimatablePropertyContainer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="837971773"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - </object> - <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">NSActionCell</string> - <string key="superclassName">NSCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <string key="superclassName">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="987675865"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="153145200"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="317885010"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSButton.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButtonCell</string> - <string key="superclassName">NSActionCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="846811518"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSControl.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSFormatter</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="51859795"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AddressBook.framework/Headers/ABActions.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="987675865"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="153145200"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="317885010"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="846811518"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="51859795"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="721142473"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSError.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSObject.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSThread.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURL.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">PrintCore.framework/Headers/PDEPluginInterface.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CIImageProvider.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSResponder</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTabView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <string key="superclassName">NSResponder</string> - <reference key="sourceIdentifier" ref="721142473"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <string key="superclassName">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindowController</string> - <string key="superclassName">NSResponder</string> - <object class="NSMutableDictionary" key="actions"> - <string key="NS.key.0">showWindow:</string> - <string key="NS.object.0">id</string> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string> - </object> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> - <integer value="1050" key="NS.object.0"/> - </object> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> - <integer value="1060" key="NS.object.0"/> - </object> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> - <integer value="3000" key="NS.object.0"/> - </object> - <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSRadioButton</string> - <string>NSSwitch</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>{16, 15}</string> - <string>{15, 15}</string> - </object> - </object> - </data> -</archive> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="GTMUILocalizerAndLayoutTweakerTestWindowController"> + <connections> + <outlet property="window" destination="1" id="119"/> + </connections> + </customObject> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application"/> + <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" visibleAtLaunch="NO" animationBehavior="default" id="1"> + <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/> + <windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/> + <rect key="contentRect" x="71" y="158" width="734" height="294"/> + <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1178"/> + <view key="contentView" id="2"> + <rect key="frame" x="0.0" y="0.0" width="734" height="294"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <customView id="188" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="0.0" y="50" width="136" height="244"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <button verticalHuggingPriority="750" id="191"> + <rect key="frame" x="14" y="196" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="W:4:12" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="192"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="120"> + <rect key="frame" x="20" y="172" width="96" height="23"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="smallSquare" title="W:4:12" bezelStyle="smallSquare" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="121"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="132"> + <rect key="frame" x="19" y="89" width="96" height="27"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="squareTextured" title="W:4:12" bezelStyle="texturedSquare" imagePosition="overlaps" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="133"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button id="182"> + <rect key="frame" x="18" y="18" width="96" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="radio" title="W:4:12" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="187"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="136"> + <rect key="frame" x="20" y="62" width="96" height="25"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="roundTextured" title="W:4:12" bezelStyle="texturedRounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="137"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="128"> + <rect key="frame" x="20" y="121" width="96" height="19"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="recessed" title="W:4:12" bezelStyle="recessed" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="129"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> + <font key="font" metaFont="systemBold" size="12"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="124"> + <rect key="frame" x="20" y="146" width="96" height="19"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="roundRect" title="W:4:12" bezelStyle="roundedRect" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="125"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="cellTitle"/> + </buttonCell> + </button> + <button id="176"> + <rect key="frame" x="18" y="39" width="96" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="W:4:12" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="177"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + </subviews> + </customView> + <customView id="189" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="242" y="50" width="137" height="244"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <button id="183"> + <rect key="frame" x="18" y="18" width="96" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="radio" title="W:4:12" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="186"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="153"> + <rect key="frame" x="20" y="172" width="96" height="23"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="smallSquare" title="W:4:12" bezelStyle="smallSquare" imagePosition="overlaps" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="162"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="154"> + <rect key="frame" x="20" y="148" width="96" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="roundRect" title="W:4:12" bezelStyle="roundedRect" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="161"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + </button> + <button id="178"> + <rect key="frame" x="17" y="39" width="96" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="W:4:12" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="179"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="155"> + <rect key="frame" x="20" y="123" width="96" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="recessed" title="W:4:12" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="160"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> + <font key="font" metaFont="systemBold" size="12"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="156"> + <rect key="frame" x="20" y="98" width="96" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="squareTextured" title="W:4:12" bezelStyle="texturedSquare" imagePosition="overlaps" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="159"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="152"> + <rect key="frame" x="15" y="200" width="96" height="28"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="W:4:12" bezelStyle="rounded" alignment="center" controlSize="small" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="163"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="157"> + <rect key="frame" x="20" y="62" width="96" height="25"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="roundTextured" title="W:4:12" bezelStyle="texturedRounded" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="158"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + </button> + </subviews> + </customView> + <customView id="190" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="475" y="48" width="141" height="246"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <button id="184"> + <rect key="frame" x="16" y="16" width="96" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="radio" title="W:4:12" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="mini" state="on" inset="2" id="185"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="miniSystem"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="168"> + <rect key="frame" x="19" y="96" width="96" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="squareTextured" title="W:4:12" bezelStyle="texturedSquare" imagePosition="overlaps" alignment="center" controlSize="mini" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="171"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="miniSystem"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="166"> + <rect key="frame" x="20" y="146" width="96" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="roundRect" title="W:4:12" bezelStyle="roundedRect" alignment="center" controlSize="mini" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="173"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="miniSystem"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="164"> + <rect key="frame" x="19" y="210" width="96" height="16"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="W:4:12" bezelStyle="rounded" alignment="center" controlSize="mini" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="175"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="miniSystem"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="169"> + <rect key="frame" x="20" y="60" width="96" height="25"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="roundTextured" title="W:4:12" bezelStyle="texturedRounded" alignment="center" controlSize="mini" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="170"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="miniSystem"/> + </buttonCell> + </button> + <button id="180"> + <rect key="frame" x="16" y="37" width="96" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="W:4:12" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="mini" state="on" inset="2" id="181"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="miniSystem"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="167"> + <rect key="frame" x="20" y="121" width="96" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="recessed" title="W:4:12" bezelStyle="recessed" alignment="center" controlSize="mini" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="172"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> + <font key="font" metaFont="miniSystem"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="165"> + <rect key="frame" x="20" y="170" width="96" height="23"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="smallSquare" title="W:4:12" bezelStyle="smallSquare" imagePosition="overlaps" alignment="center" controlSize="mini" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="174"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="miniSystem"/> + </buttonCell> + </button> + </subviews> + </customView> + </subviews> + </view> + </window> + <customObject id="35" customClass="GTMUILocalizerAndLayoutTweaker"> + <connections> + <outlet property="localizer_" destination="117" id="118"/> + <outlet property="uiObject_" destination="1" id="193"/> + </connections> + </customObject> + <customObject id="117" customClass="GTMUILocalizerAndLayoutTweakerTestLocalizer"/> + <button verticalHuggingPriority="750" id="210"> + <rect key="frame" x="0.0" y="0.0" width="154" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="recessed" title="Recessed Button" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="211"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> + <font key="font" metaFont="systemBold" size="12"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="212"> + <rect key="frame" x="0.0" y="0.0" width="154" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="recessed" title="Recessed Button" bezelStyle="recessed" alignment="center" controlSize="small" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="213"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/> + <font key="font" metaFont="systemBold" size="12"/> + </buttonCell> + </button> + </objects> +</document> diff --git a/AppKit/GTMUILocalizerAndLayoutTweakerTest5.xib b/AppKit/GTMUILocalizerAndLayoutTweakerTest5.xib index 0d6898c..6124ae3 100644 --- a/AppKit/GTMUILocalizerAndLayoutTweakerTest5.xib +++ b/AppKit/GTMUILocalizerAndLayoutTweakerTest5.xib @@ -1,1447 +1,106 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">10D2063a</string> - <string key="IBDocument.InterfaceBuilderVersion">762</string> - <string key="IBDocument.AppKitVersion">1038.29</string> - <string key="IBDocument.HIToolboxVersion">460.00</string> - <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> - <string key="NS.object.0">762</string> - </object> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="139"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys" id="0"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">3</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{123, 572}, {492, 543}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window5</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="213082738"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 404}, {226, 18}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="522207725"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Check</string> - <object class="NSFont" key="NSSupport" id="22765115"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">13</double> - <int key="NSfFlags">1044</int> - </object> - <reference key="NSControlView" ref="213082738"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <object class="NSCustomResource" key="NSNormalImage" id="466370005"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSSwitch</string> - </object> - <object class="NSButtonImageSource" key="NSAlternateImage" id="582903849"> - <string key="NSImageName">NSSwitch</string> - </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="765686094"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 271}, {226, 18}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="671820409"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="22765115"/> - <reference key="NSControlView" ref="765686094"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <object class="NSCustomResource" key="NSNormalImage" id="121562930"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSRadioButton</string> - </object> - <object class="NSButtonImageSource" key="NSAlternateImage" id="590728579"> - <string key="NSImageName">NSRadioButton</string> - </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="894189626"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{247, 270}, {226, 18}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="998598731"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">131072</int> - <string key="NSContents">Radio</string> - <object class="NSFont" key="NSSupport" id="26"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">11</double> - <int key="NSfFlags">3100</int> - </object> - <reference key="NSControlView" ref="894189626"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="121562930"/> - <reference key="NSAlternateImage" ref="590728579"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="874300306"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{247, 403}, {226, 18}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="91940682"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">131072</int> - <string key="NSContents">Check</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="874300306"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="466370005"/> - <reference key="NSAlternateImage" ref="582903849"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSMatrix" id="969519835"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 20}, {226, 38}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <int key="NSNumRows">2</int> - <int key="NSNumCols">1</int> - <object class="NSMutableArray" key="NSCells"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButtonCell" id="417033088"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="22765115"/> - <reference key="NSControlView" ref="969519835"/> - <int key="NSTag">1</int> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <reference key="NSAlternateImage" ref="590728579"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - <object class="NSButtonCell" id="80668055"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="22765115"/> - <reference key="NSControlView" ref="969519835"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw -cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA -AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA -BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA -AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA -AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 -cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD -AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH -SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF -hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8 -vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt -7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq -Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo -aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e -n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX -2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW -FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O -Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6 -ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt -rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA -AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA -AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl -A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq -DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU -HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8 -MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v -UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/ -eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj -rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn -5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh -AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK -CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY -GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95 -MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S -UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2 -d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV -pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK -0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf// -AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw -BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA -FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H -LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh -Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ -h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp -svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb -1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX -8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE -AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg -QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSColor" key="NSColor" id="461928263"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwAA</bytes> - </object> - </object> - <reference key="NSAlternateImage" ref="590728579"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <string key="NSCellSize">{226, 18}</string> - <string key="NSIntercellSpacing">{4, 2}</string> - <int key="NSMatrixFlags">1151868928</int> - <string key="NSCellClass">NSActionCell</string> - <object class="NSButtonCell" key="NSProtoCell" id="959380452"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="22765115"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> - </object> - </object> - </object> - </object> - <reference key="NSColor" ref="461928263"/> - </object> - <reference key="NSAlternateImage" ref="590728579"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - <reference key="NSSelectedCell" ref="417033088"/> - <object class="NSColor" key="NSBackgroundColor" id="584893825"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes> - </object> - </object> - <object class="NSColor" key="NSCellBackgroundColor" id="430389592"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MQA</bytes> - </object> - <reference key="NSFont" ref="22765115"/> - </object> - <object class="NSMatrix" id="434472828"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{245, 19}, {226, 38}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <int key="NSNumRows">2</int> - <int key="NSNumCols">1</int> - <object class="NSMutableArray" key="NSCells"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButtonCell" id="1054045097"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">131072</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="434472828"/> - <int key="NSTag">1</int> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <reference key="NSAlternateImage" ref="590728579"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - <object class="NSButtonCell" id="111521346"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">131072</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSControlView" ref="434472828"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw -cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA -AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA -BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA -AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA -AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 -cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD -AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH -SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF -hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8 -vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt -7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq -Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo -aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e -n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX -2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW -FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O -Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6 -ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt -rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA -AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA -AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl -A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq -DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU -HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8 -MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v -UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/ -eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj -rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn -5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh -AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK -CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY -GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95 -MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S -UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2 -d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV -pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK -0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf// -AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw -BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA -FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H -LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh -Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ -h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp -svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb -1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX -8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE -AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg -QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes> - </object> - </object> - </object> - </object> - <reference key="NSColor" ref="461928263"/> - </object> - <reference key="NSAlternateImage" ref="590728579"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <string key="NSCellSize">{226, 18}</string> - <string key="NSIntercellSpacing">{4, 2}</string> - <int key="NSMatrixFlags">1151868928</int> - <string key="NSCellClass">NSActionCell</string> - <object class="NSButtonCell" key="NSProtoCell" id="195914158"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">131072</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="26"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> - </object> - </object> - </object> - </object> - <reference key="NSColor" ref="461928263"/> - </object> - <reference key="NSAlternateImage" ref="590728579"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - <reference key="NSSelectedCell" ref="1054045097"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSCellBackgroundColor" ref="430389592"/> - <reference key="NSFont" ref="22765115"/> - </object> - </object> - <string key="NSFrameSize">{492, 543}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> - <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">122</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <reference key="object" ref="0"/> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="0"/> - <string key="objectName">File's Owner</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="0"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="0"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="765686094"/> - <reference ref="969519835"/> - <reference ref="894189626"/> - <reference ref="434472828"/> - <reference ref="213082738"/> - <reference ref="874300306"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">129</int> - <reference key="object" ref="213082738"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="522207725"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">130</int> - <reference key="object" ref="522207725"/> - <reference key="parent" ref="213082738"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">133</int> - <reference key="object" ref="894189626"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="998598731"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">134</int> - <reference key="object" ref="998598731"/> - <reference key="parent" ref="894189626"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">135</int> - <reference key="object" ref="765686094"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="671820409"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">136</int> - <reference key="object" ref="671820409"/> - <reference key="parent" ref="765686094"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">137</int> - <reference key="object" ref="874300306"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="91940682"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">138</int> - <reference key="object" ref="91940682"/> - <reference key="parent" ref="874300306"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">139</int> - <reference key="object" ref="969519835"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="417033088"/> - <reference ref="80668055"/> - <reference ref="959380452"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">140</int> - <reference key="object" ref="417033088"/> - <reference key="parent" ref="969519835"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">141</int> - <reference key="object" ref="80668055"/> - <reference key="parent" ref="969519835"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">142</int> - <reference key="object" ref="959380452"/> - <reference key="parent" ref="969519835"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">144</int> - <reference key="object" ref="434472828"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="195914158"/> - <reference ref="111521346"/> - <reference ref="1054045097"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">145</int> - <reference key="object" ref="195914158"/> - <reference key="parent" ref="434472828"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">146</int> - <reference key="object" ref="111521346"/> - <reference key="parent" ref="434472828"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">147</int> - <reference key="object" ref="1054045097"/> - <reference key="parent" ref="434472828"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>129.IBPluginDependency</string> - <string>130.IBPluginDependency</string> - <string>133.IBPluginDependency</string> - <string>134.IBPluginDependency</string> - <string>135.IBPluginDependency</string> - <string>136.IBPluginDependency</string> - <string>137.IBPluginDependency</string> - <string>138.IBPluginDependency</string> - <string>139.IBPluginDependency</string> - <string>140.IBPluginDependency</string> - <string>141.IBPluginDependency</string> - <string>142.IBPluginDependency</string> - <string>144.IBPluginDependency</string> - <string>145.IBPluginDependency</string> - <string>146.IBPluginDependency</string> - <string>147.IBPluginDependency</string> - <string>2.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{632, 585}, {492, 543}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{632, 585}, {492, 543}}</string> - <boolean value="NO"/> - <string>{196, 240}</string> - <string>{{202, 428}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference key="dict.sortedKeys" ref="0"/> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference key="dict.sortedKeys" ref="0"/> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">147</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - <string key="superclassName">NSWindowController</string> - <object class="NSMutableDictionary" key="outlets"> - <string key="NS.key.0">tabView_</string> - <string key="NS.object.0">NSTabView</string> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerAndLayoutTweakerTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="450080117"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKitUnitTestingUtilities.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMatrix</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMHTTPServer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="164091427"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMNSAnimatablePropertyContainer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="164091427"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="450080117"/> - </object> - </object> - <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">NSActionCell</string> - <string key="superclassName">NSCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <string key="superclassName">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="490700006"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="356999403"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="317235627"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSButton.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButtonCell</string> - <string key="superclassName">NSActionCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="808582018"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSControl.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSFormatter</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMatrix</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="130067098"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AddressBook.framework/Headers/ABActions.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="490700006"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="356999403"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="317235627"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="808582018"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="130067098"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="369094422"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSError.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSObject.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSThread.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURL.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">PrintCore.framework/Headers/PDEPluginInterface.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CIImageProvider.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSResponder</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTabView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <string key="superclassName">NSResponder</string> - <reference key="sourceIdentifier" ref="369094422"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <string key="superclassName">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindowController</string> - <string key="superclassName">NSResponder</string> - <object class="NSMutableDictionary" key="actions"> - <string key="NS.key.0">showWindow:</string> - <string key="NS.object.0">id</string> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string> - </object> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> - <integer value="1050" key="NS.object.0"/> - </object> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> - <integer value="1060" key="NS.object.0"/> - </object> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> - <integer value="3000" key="NS.object.0"/> - </object> - <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSRadioButton</string> - <string>NSSwitch</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>{16, 15}</string> - <string>{15, 15}</string> - </object> - </object> - </data> -</archive> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G1004" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="GTMUILocalizerAndLayoutTweakerTestWindowController"> + <connections> + <outlet property="window" destination="1" id="122"/> + </connections> + </customObject> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application" customClass="NSObject"/> + <window title="Window5" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" visibleAtLaunch="NO" animationBehavior="default" id="1"> + <windowStyleMask key="styleMask" titled="YES" closable="YES"/> + <windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/> + <rect key="contentRect" x="123" y="572" width="492" height="543"/> + <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1178"/> + <view key="contentView" id="2"> + <rect key="frame" x="0.0" y="0.0" width="492" height="543"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <button id="129"> + <rect key="frame" x="18" y="404" width="226" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="Check" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="130"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button id="135"> + <rect key="frame" x="18" y="271" width="226" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="radio" title="Radio" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="136"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button id="133"> + <rect key="frame" x="247" y="270" width="226" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="radio" title="Radio" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="134"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + </button> + <button id="137"> + <rect key="frame" x="247" y="403" width="226" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="Check" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="138"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + </button> + <matrix verticalHuggingPriority="750" allowsEmptySelection="NO" id="139"> + <rect key="frame" x="20" y="20" width="226" height="38"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + <size key="cellSize" width="226" height="18"/> + <size key="intercellSpacing" width="4" height="2"/> + <buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="142"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <cells> + <column> + <buttonCell type="radio" title="Radio" imagePosition="left" alignment="left" state="on" tag="1" inset="2" id="140"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <buttonCell type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="141"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </column> + </cells> + </matrix> + <matrix verticalHuggingPriority="750" allowsEmptySelection="NO" id="144"> + <rect key="frame" x="245" y="19" width="226" height="38"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + <size key="cellSize" width="226" height="18"/> + <size key="intercellSpacing" width="4" height="2"/> + <buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="145"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + <cells> + <column> + <buttonCell type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" state="on" tag="1" inset="2" id="147"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + <buttonCell type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="146"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + </column> + </cells> + </matrix> + </subviews> + </view> + </window> + </objects> +</document> diff --git a/AppKit/GTMUILocalizerAndLayoutTweakerTest6.xib b/AppKit/GTMUILocalizerAndLayoutTweakerTest6.xib index 6326164..5a40adb 100644 --- a/AppKit/GTMUILocalizerAndLayoutTweakerTest6.xib +++ b/AppKit/GTMUILocalizerAndLayoutTweakerTest6.xib @@ -1,976 +1,163 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9L30</string> - <string key="IBDocument.InterfaceBuilderVersion">680</string> - <string key="IBDocument.AppKitVersion">949.54</string> - <string key="IBDocument.HIToolboxVersion">353.00</string> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="124"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{71, 48}, {532, 250}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTabView" id="426324712"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">18</int> - <string key="NSFrame">{{13, 10}, {506, 234}}</string> - <reference key="NSSuperview" ref="1006"/> - <object class="NSMutableArray" key="NSTabViewItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTabViewItem" id="8716251"> - <string key="NSIdentifier">1</string> - <object class="NSView" key="NSView" id="429156130"> - <reference key="NSNextResponder" ref="426324712"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSBox" id="13430988"> - <reference key="NSNextResponder" ref="429156130"/> - <int key="NSvFlags">266</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSView" id="180511442"> - <reference key="NSNextResponder" ref="13430988"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="800844720"> - <reference key="NSNextResponder" ref="180511442"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{3, 45}, {311, 22}}</string> - <reference key="NSSuperview" ref="180511442"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="951606926"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <object class="NSFont" key="NSSupport" id="396891173"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.300000e+01</double> - <int key="NSfFlags">1044</int> - </object> - <reference key="NSControlView" ref="800844720"/> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSColor" key="NSBackgroundColor" id="763520216"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textBackgroundColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor" id="843269795"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textColor</string> - <object class="NSColor" key="NSColor" id="960820016"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSTextField" id="745022904"> - <reference key="NSNextResponder" ref="180511442"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{3, 13}, {311, 22}}</string> - <reference key="NSSuperview" ref="180511442"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="810828168"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="745022904"/> - <bool key="NSDrawsBackground">YES</bool> - <reference key="NSBackgroundColor" ref="763520216"/> - <reference key="NSTextColor" ref="843269795"/> - </object> - </object> - <object class="NSTextField" id="478979211"> - <reference key="NSNextResponder" ref="180511442"/> - <int key="NSvFlags">266</int> - <string key="NSFrame">{{3, 77}, {311, 22}}</string> - <reference key="NSSuperview" ref="180511442"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="1044158630"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="478979211"/> - <bool key="NSDrawsBackground">YES</bool> - <reference key="NSBackgroundColor" ref="763520216"/> - <reference key="NSTextColor" ref="843269795"/> - </object> - </object> - </object> - <string key="NSFrameSize">{337, 109}</string> - <reference key="NSSuperview" ref="13430988"/> - </object> - </object> - <string key="NSFrame">{{155, 52}, {337, 109}}</string> - <reference key="NSSuperview" ref="429156130"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Box</string> - <object class="NSFont" key="NSSupport"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.100000e+01</double> - <int key="NSfFlags">3100</int> - </object> - <reference key="NSBackgroundColor" ref="763520216"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <reference key="NSContentView" ref="180511442"/> - <int key="NSBorderType">0</int> - <int key="NSBoxType">0</int> - <int key="NSTitlePosition">0</int> - <bool key="NSTransparent">NO</bool> - </object> - <object class="NSCustomView" id="450922667"> - <reference key="NSNextResponder" ref="429156130"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="32340604"> - <reference key="NSNextResponder" ref="450922667"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 84}, {139, 17}}</string> - <reference key="NSSuperview" ref="450922667"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="1064530732"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">ab:10:2</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="32340604"/> - <object class="NSColor" key="NSBackgroundColor" id="584893825"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor" id="215232119"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlTextColor</string> - <reference key="NSColor" ref="960820016"/> - </object> - </object> - </object> - <object class="NSTextField" id="499628444"> - <reference key="NSNextResponder" ref="450922667"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 20}, {139, 17}}</string> - <reference key="NSSuperview" ref="450922667"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="200889835"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">l:12:3</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="499628444"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - <object class="NSTextField" id="236725617"> - <reference key="NSNextResponder" ref="450922667"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 52}, {139, 17}}</string> - <reference key="NSSuperview" ref="450922667"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="65808262"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">W:10:4</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="236725617"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - </object> - <string key="NSFrame">{{-3, 47}, {153, 121}}</string> - <reference key="NSSuperview" ref="429156130"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - </object> - <string key="NSFrame">{{10, 33}, {486, 188}}</string> - <reference key="NSSuperview" ref="426324712"/> - </object> - <string key="NSLabel">Tab1</string> - <reference key="NSColor" ref="584893825"/> - <reference key="NSTabView" ref="426324712"/> - </object> - <object class="NSTabViewItem" id="752465094"> - <string key="NSIdentifier">2</string> - <object class="NSView" key="NSView" id="368893180"> - <nil key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomView" id="425820745"> - <reference key="NSNextResponder" ref="368893180"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="451910975"> - <reference key="NSNextResponder" ref="425820745"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{14, 8}, {96, 32}}</string> - <reference key="NSSuperview" ref="425820745"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="699592511"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">no:1:2</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="451910975"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="33087012"> - <reference key="NSNextResponder" ref="425820745"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{14, 72}, {96, 32}}</string> - <reference key="NSSuperview" ref="425820745"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="724227221"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">foo :4:1</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="33087012"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="53135406"> - <reference key="NSNextResponder" ref="425820745"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{14, 40}, {111, 32}}</string> - <reference key="NSSuperview" ref="425820745"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="330872883"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">foobar :2:1</string> - <reference key="NSSupport" ref="396891173"/> - <reference key="NSControlView" ref="53135406"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{17, 76}, {135, 109}}</string> - <reference key="NSSuperview" ref="368893180"/> - <string key="NSClassName">GTMWidthBasedTweaker</string> - </object> - </object> - <string key="NSFrame">{{10, 33}, {486, 188}}</string> - </object> - <string key="NSLabel">Tab2</string> - <reference key="NSColor" ref="584893825"/> - <reference key="NSTabView" ref="426324712"/> - </object> - </object> - <reference key="NSSelectedTabViewItem" ref="8716251"/> - <reference key="NSFont" ref="396891173"/> - <int key="NSTvFlags">0</int> - <bool key="NSAllowTruncatedLabels">YES</bool> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="429156130"/> - </object> - </object> - </object> - <string key="NSFrameSize">{532, 250}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> - <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> - </object> - <object class="NSCustomObject" id="431527667"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweaker</string> - </object> - <object class="NSCustomObject" id="730292222"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweakerTestLocalizer</string> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">uiObject_</string> - <reference key="source" ref="431527667"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">84</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">viewToSlideAndResize_</string> - <reference key="source" ref="450922667"/> - <reference key="destination" ref="13430988"/> - </object> - <int key="connectionID">116</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">localizer_</string> - <reference key="source" ref="431527667"/> - <reference key="destination" ref="730292222"/> - </object> - <int key="connectionID">118</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">119</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">tabView_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="426324712"/> - </object> - <int key="connectionID">132</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <object class="NSArray" key="object" id="1002"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="1002"/> - <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="1002"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="1002"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - </object> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="426324712"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">35</int> - <reference key="object" ref="431527667"/> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">117</int> - <reference key="object" ref="730292222"/> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">120</int> - <reference key="object" ref="426324712"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="8716251"/> - <reference ref="752465094"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">121</int> - <reference key="object" ref="8716251"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="429156130"/> - </object> - <reference key="parent" ref="426324712"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">122</int> - <reference key="object" ref="752465094"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="368893180"/> - </object> - <reference key="parent" ref="426324712"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">123</int> - <reference key="object" ref="368893180"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="425820745"/> - </object> - <reference key="parent" ref="752465094"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">124</int> - <reference key="object" ref="429156130"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="450922667"/> - <reference ref="13430988"/> - </object> - <reference key="parent" ref="8716251"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">34</int> - <reference key="object" ref="13430988"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="478979211"/> - <reference ref="745022904"/> - <reference ref="800844720"/> - </object> - <reference key="parent" ref="429156130"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">11</int> - <reference key="object" ref="478979211"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1044158630"/> - </object> - <reference key="parent" ref="13430988"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">15</int> - <reference key="object" ref="745022904"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="810828168"/> - </object> - <reference key="parent" ref="13430988"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">13</int> - <reference key="object" ref="800844720"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="951606926"/> - </object> - <reference key="parent" ref="13430988"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">14</int> - <reference key="object" ref="951606926"/> - <reference key="parent" ref="800844720"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">16</int> - <reference key="object" ref="810828168"/> - <reference key="parent" ref="745022904"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">12</int> - <reference key="object" ref="1044158630"/> - <reference key="parent" ref="478979211"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">115</int> - <reference key="object" ref="450922667"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="236725617"/> - <reference ref="499628444"/> - <reference ref="32340604"/> - </object> - <reference key="parent" ref="429156130"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">7</int> - <reference key="object" ref="236725617"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="65808262"/> - </object> - <reference key="parent" ref="450922667"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">9</int> - <reference key="object" ref="499628444"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="200889835"/> - </object> - <reference key="parent" ref="450922667"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">5</int> - <reference key="object" ref="32340604"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1064530732"/> - </object> - <reference key="parent" ref="450922667"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">6</int> - <reference key="object" ref="1064530732"/> - <reference key="parent" ref="32340604"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">10</int> - <reference key="object" ref="200889835"/> - <reference key="parent" ref="499628444"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">8</int> - <reference key="object" ref="65808262"/> - <reference key="parent" ref="236725617"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">125</int> - <reference key="object" ref="425820745"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="33087012"/> - <reference ref="53135406"/> - <reference ref="451910975"/> - </object> - <reference key="parent" ref="368893180"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">126</int> - <reference key="object" ref="451910975"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="699592511"/> - </object> - <reference key="parent" ref="425820745"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">127</int> - <reference key="object" ref="33087012"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="724227221"/> - </object> - <reference key="parent" ref="425820745"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">128</int> - <reference key="object" ref="53135406"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="330872883"/> - </object> - <reference key="parent" ref="425820745"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">129</int> - <reference key="object" ref="330872883"/> - <reference key="parent" ref="53135406"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">130</int> - <reference key="object" ref="724227221"/> - <reference key="parent" ref="33087012"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">131</int> - <reference key="object" ref="699592511"/> - <reference key="parent" ref="451910975"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>10.IBPluginDependency</string> - <string>11.IBPluginDependency</string> - <string>117.IBPluginDependency</string> - <string>12.IBPluginDependency</string> - <string>120.IBPluginDependency</string> - <string>121.IBPluginDependency</string> - <string>122.IBPluginDependency</string> - <string>123.IBPluginDependency</string> - <string>124.IBPluginDependency</string> - <string>126.IBPluginDependency</string> - <string>127.IBPluginDependency</string> - <string>128.IBPluginDependency</string> - <string>129.IBPluginDependency</string> - <string>13.IBPluginDependency</string> - <string>130.IBPluginDependency</string> - <string>131.IBPluginDependency</string> - <string>14.IBPluginDependency</string> - <string>15.IBPluginDependency</string> - <string>16.IBPluginDependency</string> - <string>2.IBPluginDependency</string> - <string>35.IBPluginDependency</string> - <string>5.IBPluginDependency</string> - <string>6.IBPluginDependency</string> - <string>7.IBPluginDependency</string> - <string>8.IBPluginDependency</string> - <string>9.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>{{636, 906}, {532, 250}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{636, 906}, {532, 250}}</string> - <boolean value="NO"/> - <string>{196, 240}</string> - <string>{{202, 428}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">132</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizer</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>otherObjectToLocalize_</string> - <string>owner_</string> - <string>yetAnotherObjectToLocalize_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>id</string> - <string>id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweaker</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>localizerOwner_</string> - <string>localizer_</string> - <string>uiObject_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>GTMUILocalizer</string> - <string>id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="606537230"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerAndLayoutTweaker.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweakerTestLocalizer</string> - <string key="superclassName">GTMUILocalizer</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="969035251"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerAndLayoutTweakerTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - <string key="superclassName">NSWindowController</string> - <object class="NSMutableDictionary" key="outlets"> - <string key="NS.key.0">tabView_</string> - <string key="NS.object.0">NSTabView</string> - </object> - <reference key="sourceIdentifier" ref="969035251"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMWidthBasedTweaker</string> - <string key="superclassName">NSView</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>viewToResize_</string> - <string>viewToSlideAndResize_</string> - <string>viewToSlide_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>NSView</string> - <string>NSView</string> - </object> - </object> - <reference key="sourceIdentifier" ref="606537230"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="925048441"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMHTTPServer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabViewItem</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="39542122"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMTheme.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="39542122"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="925048441"/> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - </data> -</archive> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/> + <capability name="box content view" minToolsVersion="7.0"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="GTMUILocalizerAndLayoutTweakerTestWindowController"> + <connections> + <outlet property="tabView_" destination="120" id="132"/> + <outlet property="window" destination="1" id="119"/> + </connections> + </customObject> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application"/> + <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" visibleAtLaunch="NO" animationBehavior="default" id="1"> + <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/> + <windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/> + <rect key="contentRect" x="71" y="48" width="532" height="250"/> + <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1178"/> + <view key="contentView" id="2"> + <rect key="frame" x="0.0" y="0.0" width="532" height="250"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <tabView id="120"> + <rect key="frame" x="13" y="10" width="506" height="234"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <font key="font" metaFont="system"/> + <tabViewItems> + <tabViewItem label="Tab1" identifier="1" id="121"> + <view key="view" id="124"> + <rect key="frame" x="10" y="33" width="486" height="188"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <box borderType="none" title="Box" titlePosition="noTitle" id="34"> + <rect key="frame" x="155" y="52" width="337" height="109"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <view key="contentView" id="XFW-DT-2V1"> + <rect key="frame" x="0.0" y="0.0" width="337" height="109"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField verticalHuggingPriority="750" id="13"> + <rect key="frame" x="3" y="45" width="311" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="14"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="15"> + <rect key="frame" x="3" y="13" width="311" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="16"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="11"> + <rect key="frame" x="3" y="77" width="311" height="22"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="12"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + </view> + </box> + <customView id="115" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="-3" y="47" width="153" height="121"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <textField verticalHuggingPriority="750" id="7"> + <rect key="frame" x="17" y="52" width="139" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="W:10:4" id="8"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="9"> + <rect key="frame" x="17" y="20" width="139" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="l:12:3" id="10"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="5"> + <rect key="frame" x="17" y="84" width="139" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="ab:10:2" id="6"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + <connections> + <outlet property="viewToSlideAndResize_" destination="34" id="116"/> + </connections> + </customView> + </subviews> + </view> + </tabViewItem> + <tabViewItem label="Tab2" identifier="2" id="122"> + <view key="view" id="123"> + <rect key="frame" x="10" y="33" width="486" height="188"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <customView id="125" customClass="GTMWidthBasedTweaker"> + <rect key="frame" x="17" y="76" width="135" height="109"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <button verticalHuggingPriority="750" id="128"> + <rect key="frame" x="14" y="40" width="111" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="foobar :2:1" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="129"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="127"> + <rect key="frame" x="14" y="72" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="foo :4:1" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="130"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="126"> + <rect key="frame" x="14" y="8" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="no:1:2" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="131"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + </subviews> + </customView> + </subviews> + </view> + </tabViewItem> + </tabViewItems> + </tabView> + </subviews> + </view> + </window> + <customObject id="35" customClass="GTMUILocalizerAndLayoutTweaker"> + <connections> + <outlet property="localizer_" destination="117" id="118"/> + <outlet property="uiObject_" destination="1" id="84"/> + </connections> + </customObject> + <customObject id="117" customClass="GTMUILocalizerAndLayoutTweakerTestLocalizer"/> + </objects> +</document> diff --git a/AppKit/GTMUILocalizerAndLayoutTweakerTest7.xib b/AppKit/GTMUILocalizerAndLayoutTweakerTest7.xib index 04b30e4..77bdd2a 100644 --- a/AppKit/GTMUILocalizerAndLayoutTweakerTest7.xib +++ b/AppKit/GTMUILocalizerAndLayoutTweakerTest7.xib @@ -1,443 +1,64 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9L30</string> - <string key="IBDocument.InterfaceBuilderVersion">680</string> - <string key="IBDocument.AppKitVersion">949.54</string> - <string key="IBDocument.HIToolboxVersion">353.00</string> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="2"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">3</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{123, 807}, {475, 308}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window7</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="374380249"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 213}, {137, 38}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="929792690"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">272891904</int> - <string key="NSContents">Multiline Label</string> - <object class="NSFont" key="NSSupport" id="554297525"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.300000e+01</double> - <int key="NSfFlags">16</int> - </object> - <reference key="NSControlView" ref="374380249"/> - <object class="NSColor" key="NSBackgroundColor" id="584893825"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor" id="215232119"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlTextColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSTextField" id="616557491"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 259}, {137, 29}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="596183282"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">272891904</int> - <string key="NSContents">Multiline Label</string> - <reference key="NSSupport" ref="554297525"/> - <reference key="NSControlView" ref="616557491"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - <object class="NSTextField" id="617797386"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 132}, {137, 73}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="383941342"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">272891904</int> - <string key="NSContents">Multiline Label</string> - <reference key="NSSupport" ref="554297525"/> - <reference key="NSControlView" ref="617797386"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - <object class="NSTextField" id="1057400229"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 20}, {137, 104}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="399518885"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">272891904</int> - <string key="NSContents">Multiline Label</string> - <reference key="NSSupport" ref="554297525"/> - <reference key="NSControlView" ref="1057400229"/> - <reference key="NSBackgroundColor" ref="584893825"/> - <reference key="NSTextColor" ref="215232119"/> - </object> - </object> - </object> - <string key="NSFrameSize">{475, 308}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> - <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">122</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <object class="NSArray" key="object" id="1002"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="1002"/> - <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="1002"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="1002"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - </object> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="374380249"/> - <reference ref="617797386"/> - <reference ref="1057400229"/> - <reference ref="616557491"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">123</int> - <reference key="object" ref="374380249"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="929792690"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">124</int> - <reference key="object" ref="929792690"/> - <reference key="parent" ref="374380249"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">129</int> - <reference key="object" ref="617797386"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="383941342"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">130</int> - <reference key="object" ref="383941342"/> - <reference key="parent" ref="617797386"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">131</int> - <reference key="object" ref="1057400229"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="399518885"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">132</int> - <reference key="object" ref="399518885"/> - <reference key="parent" ref="1057400229"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">139</int> - <reference key="object" ref="616557491"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="596183282"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">140</int> - <reference key="object" ref="596183282"/> - <reference key="parent" ref="616557491"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>123.IBPluginDependency</string> - <string>124.IBPluginDependency</string> - <string>129.IBPluginDependency</string> - <string>130.IBPluginDependency</string> - <string>131.IBPluginDependency</string> - <string>132.IBPluginDependency</string> - <string>139.IBPluginDependency</string> - <string>140.IBPluginDependency</string> - <string>2.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>{{632, 820}, {475, 308}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{632, 820}, {475, 308}}</string> - <boolean value="NO"/> - <string>{196, 240}</string> - <string>{{202, 428}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">140</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerAndLayoutTweakerTestWindowController</string> - <string key="superclassName">NSWindowController</string> - <object class="NSMutableDictionary" key="outlets"> - <string key="NS.key.0">tabView_</string> - <string key="NS.object.0">NSTabView</string> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerAndLayoutTweakerTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="112385276"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="112385276"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="112385276"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="112385276"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMHTTPServer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <reference key="sourceIdentifier" ref="112385276"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <reference key="sourceIdentifier" ref="112385276"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="112385276"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="112385276"/> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - </data> -</archive> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G1004" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="GTMUILocalizerAndLayoutTweakerTestWindowController"> + <connections> + <outlet property="window" destination="1" id="122"/> + </connections> + </customObject> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application" customClass="NSObject"/> + <window title="Window7" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" visibleAtLaunch="NO" animationBehavior="default" id="1"> + <windowStyleMask key="styleMask" titled="YES" closable="YES"/> + <windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/> + <rect key="contentRect" x="123" y="807" width="475" height="308"/> + <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1178"/> + <view key="contentView" id="2"> + <rect key="frame" x="0.0" y="0.0" width="475" height="308"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <textField verticalHuggingPriority="750" id="123"> + <rect key="frame" x="17" y="213" width="137" height="38"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" borderStyle="border" title="Multiline Label" id="124"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="139"> + <rect key="frame" x="17" y="259" width="137" height="29"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" borderStyle="border" title="Multiline Label" id="140"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="129"> + <rect key="frame" x="17" y="132" width="137" height="73"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" borderStyle="border" title="Multiline Label" id="130"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="131"> + <rect key="frame" x="17" y="20" width="137" height="104"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" controlSize="mini" sendsActionOnEndEditing="YES" borderStyle="border" title="Multiline Label" id="132"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + </view> + </window> + </objects> +</document> diff --git a/AppKit/GTMUILocalizerTest.h b/AppKit/GTMUILocalizerTest.h index d1c1774..b89b99b 100644 --- a/AppKit/GTMUILocalizerTest.h +++ b/AppKit/GTMUILocalizerTest.h @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -17,27 +17,90 @@ // #import <Cocoa/Cocoa.h> -#import "GTMDefines.h" @interface GTMUILocalizerTestWindowController : NSWindowController { - IBOutlet NSWindow *otherWindow_; - IBOutlet NSWindow *anotherWindow_; - IBOutlet NSMenu *otherMenu_; - IBOutlet NSTextField *bindingsTextField_; - IBOutlet NSSearchField *bindingsSearchField_; + IBOutlet NSWindow *_anotherWindow; + IBOutlet NSMenu *_otherMenu; + + // Window Items + IBOutlet NSTextField *_bindingsTextField; + IBOutlet NSSearchField *_bindingsSearchField; + IBOutlet NSToolbarItem *_toolbarItem1; + IBOutlet NSToolbarItem *_toolbarItem2; + IBOutlet NSTabViewItem *_tabViewItem1; + IBOutlet NSTabViewItem *_tabViewItem2; + IBOutlet NSButton *_button1; + IBOutlet NSButton *_button2; + IBOutlet NSTextField *_textField1; + IBOutlet NSTextField *_textField2; + IBOutlet NSButton *_checkbox1; + IBOutlet NSButton *_checkbox2; + IBOutlet NSMenuItem *_menuItem1; + IBOutlet NSMenuItem *_menuItem2; + IBOutlet NSMenuItem *_menuItem3; + IBOutlet NSButtonCell *_radio1; + IBOutlet NSButtonCell *_radio2; + + // AnotherWindow Items + IBOutlet NSBox *_aBox; + IBOutlet NSButton *_aButton1; + IBOutlet NSButton *_aButton2; + IBOutlet NSButton *_aCheckbox1; + IBOutlet NSButton *_aCheckbox2; + IBOutlet NSButtonCell *_aRadio1; + IBOutlet NSButtonCell *_aRadio2; + IBOutlet NSTextField *_aTextField1; + IBOutlet NSTextField *_aTextField2; + IBOutlet NSSegmentedControl *_aSegmented; + IBOutlet NSComboBox *_aComboBox; } -- (NSWindow *)otherWindow; -- (NSWindow *)anotherWindow; -- (NSMenu *)otherMenu; -- (NSTextField *)bindingsTextField; -- (NSSearchField *)bindingsSearchField; + +@property (nonatomic, retain) NSWindow *anotherWindow; +@property (nonatomic, retain) NSMenu *otherMenu; + +// Window Items +@property (nonatomic, retain) NSTextField *bindingsTextField; +@property (nonatomic, retain) NSSearchField *bindingsSearchField; +@property (nonatomic, retain) NSToolbarItem *toolbarItem1; +@property (nonatomic, retain) NSToolbarItem *toolbarItem2; +@property (nonatomic, retain) NSTabViewItem *tabViewItem1; +@property (nonatomic, retain) NSTabViewItem *tabViewItem2; +@property (nonatomic, retain) NSButton *button1; +@property (nonatomic, retain) NSButton *button2; +@property (nonatomic, retain) NSTextField *textField1; +@property (nonatomic, retain) NSTextField *textField2; +@property (nonatomic, retain) NSButton *checkbox1; +@property (nonatomic, retain) NSButton *checkbox2; +@property (nonatomic, retain) NSMenuItem *menuItem1; +@property (nonatomic, retain) NSMenuItem *menuItem2; +@property (nonatomic, retain) NSMenuItem *menuItem3; +@property (nonatomic, retain) NSButtonCell *radio1; +@property (nonatomic, retain) NSButtonCell *radio2; + +// AnotherWindow Items +@property (nonatomic, retain) NSBox *aBox; +@property (nonatomic, retain) NSButton *aButton1; +@property (nonatomic, retain) NSButton *aButton2; +@property (nonatomic, retain) NSButton *aCheckbox1; +@property (nonatomic, retain) NSButton *aCheckbox2; +@property (nonatomic, retain) NSButtonCell *aRadio1; +@property (nonatomic, retain) NSButtonCell *aRadio2; +@property (nonatomic, retain) NSTextField *aTextField1; +@property (nonatomic, retain) NSTextField *aTextField2; +@property (nonatomic, retain) NSSegmentedControl *aSegmented; +@property (nonatomic, retain) NSComboBox *aComboBox; + @end -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 @interface GTMUILocalizerTestViewController : NSViewController { - IBOutlet NSView *otherView_; + IBOutlet NSView *_otherView; + IBOutlet NSButton *_otherButton; + IBOutlet NSButton *_viewButton; + IBOutlet NSTextField *_pollyTextField; } -- (NSView *)otherView; + +@property (nonatomic, retain) NSView *otherView; +@property (nonatomic, retain) NSButton *otherButton; +@property (nonatomic, retain) NSButton *viewButton; +@property (nonatomic, retain) NSTextField *pollyTextField; @end -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - diff --git a/AppKit/GTMUILocalizerTest.m b/AppKit/GTMUILocalizerTest.m index bc29099..451bd83 100644 --- a/AppKit/GTMUILocalizerTest.m +++ b/AppKit/GTMUILocalizerTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -19,7 +19,6 @@ #import "GTMSenTestCase.h" #import "GTMUILocalizerTest.h" -#import "GTMNSObject+UnitTesting.h" #import "GTMUILocalizer.h" @interface GTMUILocalizerTest : GTMTestCase @@ -29,125 +28,193 @@ // Utility method to verify that all the options for |binding| on |object| have // been localized. - (void)verifyBinding:(NSString *)binding forObject:(id)object { - NSDictionary *bindingInfo + NSDictionary *bindingInfo = [object infoForBinding:binding]; - STAssertNotNil(bindingInfo, - @"Can't get binding info for %@ from %@.\nExposed bindings: %@", - binding, object, [object exposedBindings]); + XCTAssertNotNil(bindingInfo, + @"Can't get binding info for %@ from %@.\nExposed bindings: %@", + binding, object, [object exposedBindings]); NSDictionary *bindingOptions = [bindingInfo objectForKey:NSOptionsKey]; - STAssertNotNil(bindingOptions, nil); + XCTAssertNotNil(bindingOptions); NSString *key = nil; GTM_FOREACH_KEY(key, bindingOptions) { id value = [bindingOptions objectForKey:key]; if ([value isKindOfClass:[NSString class]]) { - STAssertFalse([value hasPrefix:@"^"], - @"Binding option %@ not localized. Has value %@.", - key, value); + XCTAssertFalse([value hasPrefix:@"^"], + @"Binding option %@ not localized. Has value %@.", + key, value); } - } + } } - (void)testWindowLocalization { - GTMUILocalizerTestWindowController *controller + GTMUILocalizerTestWindowController *controller = [[GTMUILocalizerTestWindowController alloc] init]; - NSWindow *window = [controller window]; - STAssertNotNil(window, nil); - GTMAssertObjectStateEqualToStateNamed(window, - @"GTMUILocalizerWindow1State", nil); - + + // Window automatically localized on load + XCTAssertEqualObjects(controller.window.title, @"Window"); + XCTAssertEqualObjects(controller.tabViewItem1.label, @"Localized Tab"); + XCTAssertEqualObjects(controller.tabViewItem2.label, @"^Tab2"); + XCTAssertEqualObjects(controller.toolbarItem1.label, @"Localized Toolbar Item Label"); + XCTAssertEqualObjects(controller.toolbarItem1.paletteLabel, + @"Localized Toolbar Item Palette Label"); + XCTAssertEqualObjects(controller.toolbarItem2.label, @"ToolbarItemLabel"); + XCTAssertEqualObjects(controller.toolbarItem2.paletteLabel, @"ToolbarItemPaletteLabel"); + XCTAssertEqualObjects(controller.button1.title, @"Localized Button"); + XCTAssertEqualObjects(controller.button2.title, @"^Button2"); + XCTAssertEqualObjects(controller.textField1.stringValue, @"Localized Label"); + XCTAssertEqualObjects(controller.textField2.stringValue, @"^Label2"); + XCTAssertEqualObjects(controller.button1.title, @"Localized Button"); + XCTAssertEqualObjects(controller.button2.title, @"^Button2"); + XCTAssertEqualObjects(controller.checkbox1.title, @"Localized Checkbox 1"); + XCTAssertEqualObjects(controller.checkbox2.title, @"^Checkbox 2"); + XCTAssertEqualObjects(controller.menuItem1.title, @"Localized Item 1"); + XCTAssertEqualObjects(controller.menuItem2.title, @"Localized Item 2"); + XCTAssertEqualObjects(controller.menuItem3.title, @"^Item 3"); + XCTAssertEqualObjects(controller.radio1.title, @"Localized Radio 1"); + XCTAssertEqualObjects(controller.radio2.title, @"Localized Radio 2"); + + // Another Window Before Localization + XCTAssertEqualObjects(controller.anotherWindow.title, @"^WindowTest"); + XCTAssertEqualObjects(controller.aBox.title, @"^Box"); + XCTAssertEqualObjects(controller.aButton1.title, @"^Button1"); + XCTAssertEqualObjects(controller.aButton2.title, @"^Button2"); + XCTAssertEqualObjects(controller.aCheckbox1.title, @"^Checkbox 1"); + XCTAssertEqualObjects(controller.aCheckbox2.title, @"^Checkbox 2"); + XCTAssertEqualObjects(controller.aRadio1.title, @"^Radio 1"); + XCTAssertEqualObjects(controller.aRadio2.title, @"^Radio 2"); + XCTAssertEqualObjects(controller.aTextField1.stringValue, @"^Label1"); + XCTAssertEqualObjects(controller.aTextField2.stringValue, @"^Label2"); + NSSegmentedControl *segmented = controller.aSegmented; + XCTAssertEqualObjects([segmented labelForSegment:0], @"^Seg1"); + XCTAssertEqualObjects([segmented labelForSegment:1], @"^Seg2"); + XCTAssertEqualObjects([segmented labelForSegment:2], @"^Seg3"); + NSComboBox *comboBox = controller.aComboBox; + XCTAssertEqualObjects(comboBox.stringValue, @"^Label1"); + XCTAssertEqualObjects(comboBox.placeholderString, @"^Placeholder1"); + NSArray *objects = comboBox.objectValues; + NSArray *expectedObjects = [NSArray arrayWithObjects: + @"^Choice1", @"^Choice2", @"^Choice3", @"^Choice4", @"^Choice5", nil]; + XCTAssertEqualObjects(objects, expectedObjects); + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; GTMUILocalizer *localizer = [[GTMUILocalizer alloc] initWithBundle:bundle]; - window = [controller otherWindow]; - STAssertNotNil(window, nil); - [localizer localizeObject:window recursively:YES]; - GTMAssertObjectStateEqualToStateNamed(window, - @"GTMUILocalizerWindow2State", nil); - window = [controller anotherWindow]; - STAssertNotNil(window, nil); - [localizer localizeObject:window recursively:YES]; - GTMAssertObjectStateEqualToStateNamed(window, - @"GTMUILocalizerWindow3State", nil); - NSMenu *menu = [controller otherMenu]; - STAssertNotNil(menu, nil); + [localizer localizeObject:controller.anotherWindow recursively:YES]; + + XCTAssertEqualObjects(controller.anotherWindow.title, @"Localized Window"); + XCTAssertEqualObjects(controller.aBox.title, @"Localized Box"); + XCTAssertEqualObjects(controller.aButton1.title, @"Localized Button"); + XCTAssertEqualObjects(controller.aButton2.title, @"^Button2"); + XCTAssertEqualObjects(controller.aCheckbox1.title, @"Localized Checkbox 1"); + XCTAssertEqualObjects(controller.aCheckbox2.title, @"^Checkbox 2"); + XCTAssertEqualObjects(controller.aRadio1.title, @"Localized Radio 1"); + XCTAssertEqualObjects(controller.aRadio2.title, @"Localized Radio 2"); + XCTAssertEqualObjects(controller.aTextField1.stringValue, @"Localized Label"); + XCTAssertEqualObjects(controller.aTextField2.stringValue, @"^Label2"); + XCTAssertEqualObjects([segmented labelForSegment:0], @"Localized Segment 1"); + XCTAssertEqualObjects([segmented labelForSegment:1], @"Localized Segment 2"); + XCTAssertEqualObjects([segmented labelForSegment:2], @"^Seg3"); + XCTAssertEqualObjects(comboBox.stringValue, @"Localized Label"); + XCTAssertEqualObjects(comboBox.placeholderString, @"Localized Placeholder"); + objects = comboBox.objectValues; + expectedObjects = [NSArray arrayWithObjects: + @"Localized Choice 1", @"Localized Choice 2", @"Localized Choice 3", + @"^Choice4", @"^Choice5", nil]; + XCTAssertEqualObjects(objects, expectedObjects); + + NSMenu *menu = controller.otherMenu; + XCTAssertNotNil(menu); [localizer localizeObject:menu recursively:YES]; - GTMAssertObjectStateEqualToStateNamed(menu, - @"GTMUILocalizerMenuState", nil); - + XCTAssertEqualObjects(menu.title, @"Localized Menu"); + NSMenuItem *item = [menu itemAtIndex:0]; + XCTAssertEqualObjects(item.title, @"Localized Menu Item"); + + // Test binding localization. - NSTextField *textField = [controller bindingsTextField]; - STAssertNotNil(textField, nil); - NSString *displayPatternValue1Binding - = [NSString stringWithFormat:@"%@1", NSDisplayPatternValueBinding]; + NSTextField *textField = controller.bindingsTextField; + XCTAssertNotNil(textField); + NSString *displayPatternValue1Binding + = [NSString stringWithFormat:@"%@1", NSDisplayPatternValueBinding]; [self verifyBinding:displayPatternValue1Binding forObject:textField]; - - NSSearchField *searchField = [controller bindingsSearchField]; - STAssertNotNil(searchField, nil); + + NSSearchField *searchField = controller.bindingsSearchField; + XCTAssertNotNil(searchField); [self verifyBinding:NSPredicateBinding forObject:searchField]; - + [localizer release]; [controller release]; } -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - (void)testViewLocalization { - GTMUILocalizerTestViewController *controller - = [[GTMUILocalizerTestViewController alloc] init]; - NSView *view = [controller view]; - STAssertNotNil(view, nil); - GTMAssertObjectStateEqualToStateNamed(view, - @"GTMUILocalizerView1State", nil); - NSBundle *bundle = [NSBundle bundleForClass:[self class]]; GTMUILocalizer *localizer = [[GTMUILocalizer alloc] initWithBundle:bundle]; - view = [controller otherView]; - STAssertNotNil(view, nil); - [localizer localizeObject:view recursively:YES]; - GTMAssertObjectStateEqualToStateNamed(view, @"GTMUILocalizerView2State", nil); - [localizer release]; + XCTAssertNotNil(localizer); + + GTMUILocalizerTestViewController *controller + = [[GTMUILocalizerTestViewController alloc] init]; + NSView *view = controller.view; + XCTAssertNotNil(view); + XCTAssertEqualObjects(controller.viewButton.title, @"Localized Button"); + XCTAssertEqualObjects(controller.pollyTextField.stringValue, @"^Polly want a caret?"); + + // We don't expect otherView to be localized. + view = controller.otherView; + XCTAssertNotNil(view); + XCTAssertEqualObjects(controller.otherButton.title, @"^Button"); + [controller release]; } -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 @end @implementation GTMUILocalizerTestWindowController -- (id)init { -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - return [self initWithWindowNibName:@"GTMUILocalizerTestWindow"]; -#else - return [self initWithWindowNibName:@"GTMUILocalizerTestWindow_10_4"]; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 -} -- (NSWindow *)otherWindow { - return otherWindow_; -} +@synthesize anotherWindow = _anotherWindow; +@synthesize otherMenu = _otherMenu; -- (NSWindow *)anotherWindow { - return anotherWindow_; -} +// Window Items +@synthesize bindingsTextField = _bindingsTextField; +@synthesize bindingsSearchField = _bindingsSearchField; +@synthesize toolbarItem1 = _toolbarItem1; +@synthesize toolbarItem2 = _toolbarItem2; +@synthesize tabViewItem1 = _tabViewItem1; +@synthesize tabViewItem2 = _tabViewItem2; +@synthesize button1 = _button1; +@synthesize button2 = _button2; +@synthesize textField1 = _textField1; +@synthesize textField2 = _textField2; +@synthesize checkbox1 = _checkbox1; +@synthesize checkbox2 = _checkbox2; +@synthesize menuItem1 = _menuItem1; +@synthesize menuItem2 = _menuItem2; +@synthesize menuItem3 = _menuItem3; +@synthesize radio1 = _radio1; +@synthesize radio2 = _radio2; -- (NSMenu *)otherMenu { - return otherMenu_; -} +// Another Window Items +@synthesize aBox = _aBox; +@synthesize aButton1 = _aButton1; +@synthesize aButton2 = _aButton2; +@synthesize aCheckbox1 = _aCheckbox1; +@synthesize aCheckbox2 = _aCheckbox2; +@synthesize aRadio1 = _aRadio1; +@synthesize aRadio2 = _aRadio2; +@synthesize aTextField1 = _aTextField1; +@synthesize aTextField2 = _aTextField2; +@synthesize aSegmented = _aSegmented; +@synthesize aComboBox = _aComboBox; -- (NSTextField *)bindingsTextField { - return bindingsTextField_; -} - -- (NSSearchField *)bindingsSearchField { - return bindingsSearchField_; +- (id)init { + return [self initWithWindowNibName:@"GTMUILocalizerTestWindow"]; } @end -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 @implementation GTMUILocalizerTestViewController +@synthesize otherView = _otherView; +@synthesize otherButton = _otherButton; +@synthesize viewButton = _viewButton; +@synthesize pollyTextField = _pollyTextField; + - (id)init { NSBundle *bundle = [NSBundle bundleForClass:[self class]]; return [self initWithNibName:@"GTMUILocalizerTestView" bundle:bundle]; } - -- (NSView *)otherView { - return otherView_; -} @end -#endif diff --git a/AppKit/GTMUILocalizerTestView.xib b/AppKit/GTMUILocalizerTestView.xib index d1a9126..7ecb5c5 100644 --- a/AppKit/GTMUILocalizerTestView.xib +++ b/AppKit/GTMUILocalizerTestView.xib @@ -1,481 +1,63 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9G55</string> - <string key="IBDocument.InterfaceBuilderVersion">677</string> - <string key="IBDocument.AppKitVersion">949.43</string> - <string key="IBDocument.HIToolboxVersion">353.00</string> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="1"/> - <integer value="3"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMUILocalizerTestViewController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSCustomView" id="1005"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="68586906"> - <reference key="NSNextResponder" ref="1005"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{179, 180}, {96, 32}}</string> - <reference key="NSSuperview" ref="1005"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="53479329"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">^Button</string> - <object class="NSFont" key="NSSupport" id="887836340"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.300000e+01</double> - <int key="NSfFlags">1044</int> - </object> - <reference key="NSControlView" ref="68586906"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSTextField" id="326674882"> - <reference key="NSNextResponder" ref="1005"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{295, 132}, {129, 17}}</string> - <reference key="NSSuperview" ref="1005"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="1000174622"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^Polly want a caret?</string> - <reference key="NSSupport" ref="887836340"/> - <reference key="NSControlView" ref="326674882"/> - <object class="NSColor" key="NSBackgroundColor"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> - </object> - </object> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlTextColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MAA</bytes> - </object> - </object> - </object> - </object> - </object> - <string key="NSFrameSize">{480, 272}</string> - <reference key="NSSuperview"/> - <string key="NSClassName">NSView</string> - </object> - <object class="NSCustomView" id="1006142900"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="707802764"> - <reference key="NSNextResponder" ref="1006142900"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{48, 35}, {96, 32}}</string> - <reference key="NSSuperview" ref="1006142900"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="1059575151"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">^Button</string> - <reference key="NSSupport" ref="887836340"/> - <reference key="NSControlView" ref="707802764"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrameSize">{163, 96}</string> - <reference key="NSSuperview"/> - <string key="NSClassName">NSView</string> - </object> - <object class="NSCustomObject" id="10941456"> - <string key="NSClassName">GTMUILocalizer</string> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">view</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">11</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">otherView_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1006142900"/> - </object> - <int key="connectionID">12</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">owner_</string> - <reference key="source" ref="10941456"/> - <reference key="destination" ref="1001"/> - </object> - <int key="connectionID">14</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <object class="NSArray" key="object" id="1002"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="1002"/> - <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="1002"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="1002"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="68586906"/> - <reference ref="326674882"/> - </object> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">3</int> - <reference key="object" ref="1006142900"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="707802764"/> - </object> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">5</int> - <reference key="object" ref="707802764"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1059575151"/> - </object> - <reference key="parent" ref="1006142900"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">6</int> - <reference key="object" ref="1059575151"/> - <reference key="parent" ref="707802764"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">7</int> - <reference key="object" ref="68586906"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="53479329"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">8</int> - <reference key="object" ref="53479329"/> - <reference key="parent" ref="68586906"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">13</int> - <reference key="object" ref="10941456"/> - <reference key="parent" ref="1002"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">15</int> - <reference key="object" ref="326674882"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1000174622"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">16</int> - <reference key="object" ref="1000174622"/> - <reference key="parent" ref="326674882"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>13.IBPluginDependency</string> - <string>15.IBPluginDependency</string> - <string>16.IBPluginDependency</string> - <string>3.IBEditorWindowLastContentRect</string> - <string>3.IBPluginDependency</string> - <string>5.IBAttributePlaceholdersKey</string> - <string>5.IBPluginDependency</string> - <string>6.IBPluginDependency</string> - <string>7.IBPluginDependency</string> - <string>8.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{180, 852}, {480, 272}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{628, 654}</string> - <string>{{357, 416}, {480, 272}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{715, 1101}, {163, 96}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <object class="NSMutableDictionary"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>AccessibilityDescription</string> - <string>AccessibilityHelp</string> - <string>ToolTip</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBAccessibilityAttribute"> - <string key="name">AccessibilityDescription</string> - <reference key="object" ref="707802764"/> - <string key="accessibilityValue">^AccessibilityDescription</string> - </object> - <object class="IBAccessibilityAttribute"> - <string key="name">AccessibilityHelp</string> - <reference key="object" ref="707802764"/> - <string key="accessibilityValue">^AccessibilityHelp</string> - </object> - <object class="IBToolTipAttribute"> - <string key="name">ToolTip</string> - <reference key="object" ref="707802764"/> - <string key="toolTip">^ToolTip</string> - </object> - </object> - </object> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">16</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizer</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>otherObjectToLocalize_</string> - <string>owner_</string> - <string>yetAnotherObjectToLocalize_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>id</string> - <string>id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerTestViewController</string> - <string key="superclassName">NSViewController</string> - <object class="NSMutableDictionary" key="outlets"> - <string key="NS.key.0">otherView_</string> - <string key="NS.object.0">NSView</string> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="81743917"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="81743917"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="81743917"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="81743917"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMHTTPServer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <reference key="sourceIdentifier" ref="81743917"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="81743917"/> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - </data> -</archive> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="GTMUILocalizerTestViewController"> + <connections> + <outlet property="_otherButton" destination="5" id="499-qg-5S4"/> + <outlet property="_otherView" destination="3" id="FnK-dp-Ic4"/> + <outlet property="_pollyTextField" destination="15" id="A8K-zU-ica"/> + <outlet property="_viewButton" destination="7" id="59C-rR-EcH"/> + <outlet property="view" destination="1" id="11"/> + </connections> + </customObject> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application"/> + <customView id="1"> + <rect key="frame" x="0.0" y="0.0" width="480" height="272"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <textField verticalHuggingPriority="750" id="15"> + <rect key="frame" x="295" y="132" width="129" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="^Polly want a caret?" id="16"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <button verticalHuggingPriority="750" id="7"> + <rect key="frame" x="179" y="180" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="^Button" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="8"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + </subviews> + </customView> + <customView id="3"> + <rect key="frame" x="0.0" y="0.0" width="163" height="96"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <button toolTip="^ToolTip" verticalHuggingPriority="750" id="5"> + <rect key="frame" x="48" y="35" width="96" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="^Button" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="6"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <accessibility description="^AccessibilityDescription" help="^AccessibilityHelp"/> + </button> + </subviews> + </customView> + <customObject id="13" customClass="GTMUILocalizer"> + <connections> + <outlet property="owner_" destination="-2" id="14"/> + </connections> + </customObject> + </objects> +</document> diff --git a/AppKit/GTMUILocalizerTestWindow.xib b/AppKit/GTMUILocalizerTestWindow.xib index 8bb4172..c223b3b 100644 --- a/AppKit/GTMUILocalizerTestWindow.xib +++ b/AppKit/GTMUILocalizerTestWindow.xib @@ -1,3112 +1,400 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> - <data> - <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">10K549</string> - <string key="IBDocument.InterfaceBuilderVersion">851</string> - <string key="IBDocument.AppKitVersion">1038.36</string> - <string key="IBDocument.HIToolboxVersion">461.00</string> - <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> - <string key="NS.object.0">851</string> - </object> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="23"/> - <integer value="52"/> - <integer value="41"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys" id="0"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMUILocalizerTestWindowController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{196, 240}, {480, 270}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window</string> - <string key="NSWindowClass">NSWindow</string> - <object class="NSToolbar" key="NSViewClass" id="393184701"> - <object class="NSMutableString" key="NSToolbarIdentifier"> - <characters key="NS.bytes">13B554E3-53CB-4465-BDA3-4F9A8B406FD0</characters> - </object> - <nil key="NSToolbarDelegate"/> - <bool key="NSToolbarPrefersToBeShown">YES</bool> - <bool key="NSToolbarShowsBaselineSeparator">YES</bool> - <bool key="NSToolbarAllowsUserCustomization">YES</bool> - <bool key="NSToolbarAutosavesConfiguration">NO</bool> - <int key="NSToolbarDisplayMode">1</int> - <int key="NSToolbarSizeMode">1</int> - <object class="NSMutableDictionary" key="NSToolbarIBIdentifiedItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>44682372-574A-40F6-8822-35F014DDDD4B</string> - <string>927E93A7-3FD1-412D-9C0E-FB7F594FDEF2</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSToolbarItem" id="1052188774"> - <object class="NSMutableString" key="NSToolbarItemIdentifier"> - <characters key="NS.bytes">44682372-574A-40F6-8822-35F014DDDD4B</characters> - </object> - <string key="NSToolbarItemLabel">ToolbarItemLabel</string> - <string key="NSToolbarItemPaletteLabel">ToolbarItemPaletteLabel</string> - <string key="NSToolbarItemToolTip">ToolTip</string> - <nil key="NSToolbarItemView"/> - <object class="NSCustomResource" key="NSToolbarItemImage"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSUserAccounts</string> - </object> - <nil key="NSToolbarItemTarget"/> - <nil key="NSToolbarItemAction"/> - <string key="NSToolbarItemMinSize">{0, 0}</string> - <string key="NSToolbarItemMaxSize">{0, 0}</string> - <bool key="NSToolbarItemEnabled">YES</bool> - <bool key="NSToolbarItemAutovalidates">YES</bool> - <int key="NSToolbarItemTag">-1</int> - <bool key="NSToolbarIsUserRemovable">YES</bool> - <int key="NSToolbarItemVisibilityPriority">0</int> - </object> - <object class="NSToolbarItem" id="1041080587"> - <object class="NSMutableString" key="NSToolbarItemIdentifier"> - <characters key="NS.bytes">927E93A7-3FD1-412D-9C0E-FB7F594FDEF2</characters> - </object> - <string key="NSToolbarItemLabel">^ToolbarItemLabel</string> - <string key="NSToolbarItemPaletteLabel">^ToolbarItemPaletteLabel</string> - <string key="NSToolbarItemToolTip">^ToolTip</string> - <nil key="NSToolbarItemView"/> - <object class="NSCustomResource" key="NSToolbarItemImage"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSPreferencesGeneral</string> - </object> - <nil key="NSToolbarItemTarget"/> - <nil key="NSToolbarItemAction"/> - <string key="NSToolbarItemMinSize">{0, 0}</string> - <string key="NSToolbarItemMaxSize">{0, 0}</string> - <bool key="NSToolbarItemEnabled">YES</bool> - <bool key="NSToolbarItemAutovalidates">YES</bool> - <int key="NSToolbarItemTag">-1</int> - <bool key="NSToolbarIsUserRemovable">YES</bool> - <int key="NSToolbarItemVisibilityPriority">0</int> - </object> - </object> - </object> - <object class="NSArray" key="NSToolbarIBAllowedItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1041080587"/> - <reference ref="1052188774"/> - </object> - <object class="NSMutableArray" key="NSToolbarIBDefaultItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1041080587"/> - <reference ref="1052188774"/> - </object> - <object class="NSMutableArray" key="NSToolbarIBSelectableItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="934296854"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{30, 205}, {100, 32}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="768899742"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">^Button1</string> - <object class="NSFont" key="NSSupport" id="168773824"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">13</double> - <int key="NSfFlags">1044</int> - </object> - <reference key="NSControlView" ref="934296854"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="657027262"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{30, 173}, {100, 32}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="105732693"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">^Button2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="657027262"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSTabView" id="1054080138"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">12</int> - <string key="NSFrame">{{161, 115}, {177, 124}}</string> - <reference key="NSSuperview" ref="1006"/> - <object class="NSMutableArray" key="NSTabViewItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTabViewItem" id="567210703"> - <string key="NSIdentifier">1</string> - <object class="NSView" key="NSView" id="837485648"> - <nil key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <string key="NSFrame">{{10, 33}, {157, 78}}</string> - </object> - <string key="NSLabel">^Tab1</string> - <object class="NSColor" key="NSColor" id="1000162704"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlColor</string> - <object class="NSColor" key="NSColor" id="125228242"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes> - </object> - </object> - <reference key="NSTabView" ref="1054080138"/> - </object> - <object class="NSTabViewItem" id="786693096"> - <string key="NSIdentifier">2</string> - <object class="NSView" key="NSView" id="75519688"> - <reference key="NSNextResponder" ref="1054080138"/> - <int key="NSvFlags">256</int> - <string key="NSFrame">{{10, 33}, {157, 78}}</string> - <reference key="NSSuperview" ref="1054080138"/> - </object> - <string key="NSLabel">^Tab2</string> - <reference key="NSColor" ref="1000162704"/> - <reference key="NSTabView" ref="1054080138"/> - </object> - </object> - <reference key="NSSelectedTabViewItem" ref="786693096"/> - <reference key="NSFont" ref="168773824"/> - <int key="NSTvFlags">0</int> - <bool key="NSAllowTruncatedLabels">YES</bool> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="75519688"/> - </object> - </object> - <object class="NSTextField" id="39833761"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{71, 61}, {74, 17}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="569396622"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^Label1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="39833761"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <object class="NSColor" key="NSTextColor" id="50010148"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlTextColor</string> - <object class="NSColor" key="NSColor" id="720043000"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSTextField" id="18987080"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{153, 66}, {72, 17}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="851209037"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^Label2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="18987080"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <reference key="NSTextColor" ref="50010148"/> - </object> - </object> - <object class="NSPopUpButton" id="197597199"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{315, 67}, {100, 26}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSPopUpButtonCell" key="NSCell" id="1073502186"> - <int key="NSCellFlags">-2076049856</int> - <int key="NSCellFlags2">2048</int> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="197597199"/> - <int key="NSButtonFlags">109199615</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - <object class="NSMenuItem" key="NSMenuItem" id="180141984"> - <reference key="NSMenu" ref="768660937"/> - <string key="NSTitle">^Item 2</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <int key="NSState">1</int> - <object class="NSCustomResource" key="NSOnImage" id="149491055"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSMenuCheckmark</string> - </object> - <object class="NSCustomResource" key="NSMixedImage" id="291068490"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSMenuMixedState</string> - </object> - <string key="NSAction">_popUpItemAction:</string> - <reference key="NSTarget" ref="1073502186"/> - </object> - <bool key="NSMenuItemRespectAlignment">YES</bool> - <object class="NSMenu" key="NSMenu" id="768660937"> - <string key="NSTitle">OtherViews</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="662787728"> - <reference key="NSMenu" ref="768660937"/> - <string key="NSTitle">^Item 1</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="149491055"/> - <reference key="NSMixedImage" ref="291068490"/> - <string key="NSAction">_popUpItemAction:</string> - <reference key="NSTarget" ref="1073502186"/> - </object> - <reference ref="180141984"/> - </object> - </object> - <int key="NSSelectedIndex">1</int> - <int key="NSPreferredEdge">1</int> - <bool key="NSUsesItemFromMenu">YES</bool> - <bool key="NSAltersState">YES</bool> - <int key="NSArrowPosition">2</int> - </object> - </object> - <object class="NSButton" id="739084402"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{154, 33}, {106, 18}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="450501437"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Checkbox 1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="739084402"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <object class="NSCustomResource" key="NSNormalImage" id="437083559"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSSwitch</string> - </object> - <object class="NSButtonImageSource" key="NSAlternateImage" id="634128218"> - <string key="NSImageName">NSSwitch</string> - </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="484232841"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{291, 33}, {106, 18}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="468013402"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Checkbox 2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="484232841"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="437083559"/> - <reference key="NSAlternateImage" ref="634128218"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSMatrix" id="413705031"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{351, 172}, {87, 38}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <int key="NSNumRows">2</int> - <int key="NSNumCols">1</int> - <object class="NSMutableArray" key="NSCells"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButtonCell" id="232253570"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Radio 1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="413705031"/> - <int key="NSTag">1</int> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSButtonImageSource" key="NSAlternateImage" id="182487189"> - <string key="NSImageName">NSRadioButton</string> - </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - <object class="NSButtonCell" id="310759369"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Radio 2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="413705031"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw -cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA -AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA -BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA -AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA -AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 -cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD -AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH -SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF -hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8 -vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt -7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq -Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo -aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e -n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX -2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW -FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O -Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6 -ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt -rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA -AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA -AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl -A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq -DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU -HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8 -MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v -UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/ -eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj -rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn -5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh -AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK -CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY -GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95 -MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S -UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2 -d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV -pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK -0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf// -AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw -BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA -FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H -LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh -Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ -h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp -svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb -1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX -8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE -AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg -QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSColor" key="NSColor" id="1027339248"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwAA</bytes> - </object> - </object> - <reference key="NSAlternateImage" ref="182487189"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <string key="NSCellSize">{87, 18}</string> - <string key="NSIntercellSpacing">{4, 2}</string> - <int key="NSMatrixFlags">1151868928</int> - <string key="NSCellClass">NSActionCell</string> - <object class="NSButtonCell" key="NSProtoCell" id="819072791"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="168773824"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> - </object> - </object> - </object> - </object> - <reference key="NSColor" ref="1027339248"/> - </object> - <reference key="NSAlternateImage" ref="182487189"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - <reference key="NSSelectedCell" ref="232253570"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <object class="NSColor" key="NSCellBackgroundColor" id="695371698"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MQA</bytes> - </object> - <reference key="NSFont" ref="168773824"/> - </object> - <object class="NSBox" id="323309615"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">36</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSView" id="257999957"> - <reference key="NSNextResponder" ref="323309615"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="583665016"> - <reference key="NSNextResponder" ref="257999957"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 44}, {96, 22}}</string> - <reference key="NSSuperview" ref="257999957"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="601271137"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="583665016"/> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSColor" key="NSBackgroundColor" id="854948635"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textBackgroundColor</string> - <reference key="NSColor" ref="695371698"/> - </object> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textColor</string> - <reference key="NSColor" ref="720043000"/> - </object> - </object> - </object> - <object class="NSSearchField" id="207474363"> - <reference key="NSNextResponder" ref="257999957"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 14}, {96, 22}}</string> - <reference key="NSSuperview" ref="257999957"/> - <bool key="NSEnabled">YES</bool> - <object class="NSSearchFieldCell" key="NSCell" id="926559351"> - <int key="NSCellFlags">343014976</int> - <int key="NSCellFlags2">268436480</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="207474363"/> - <bool key="NSDrawsBackground">YES</bool> - <int key="NSTextBezelStyle">1</int> - <reference key="NSBackgroundColor" ref="854948635"/> - <reference key="NSTextColor" ref="50010148"/> - <object class="NSButtonCell" key="NSSearchButtonCell"> - <int key="NSCellFlags">130560</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">search</string> - <reference key="NSControlView" ref="207474363"/> - <string key="NSAction">_searchFieldSearch:</string> - <reference key="NSTarget" ref="926559351"/> - <int key="NSButtonFlags">138690815</int> - <int key="NSButtonFlags2">0</int> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - <object class="NSButtonCell" key="NSCancelButtonCell"> - <int key="NSCellFlags">130560</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">clear</string> - <object class="NSMutableArray" key="NSAccessibilityOverriddenAttributes"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableDictionary"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>AXDescription</string> - <string>NSAccessibilityEncodedAttributesValueType</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>cancel</string> - <integer value="1"/> - </object> - </object> - </object> - <reference key="NSControlView" ref="207474363"/> - <string key="NSAction">_searchFieldCancel:</string> - <reference key="NSTarget" ref="926559351"/> - <int key="NSButtonFlags">138690815</int> - <int key="NSButtonFlags2">0</int> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - <int key="NSMaximumRecents">255</int> - </object> - </object> - </object> - <string key="NSFrame">{{1, 1}, {132, 76}}</string> - <reference key="NSSuperview" ref="323309615"/> - </object> - </object> - <string key="NSFrame">{{13, 80}, {134, 92}}</string> - <reference key="NSSuperview" ref="1006"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Bindings Tests</string> - <object class="NSFont" key="NSSupport" id="26"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">11</double> - <int key="NSfFlags">3100</int> - </object> - <reference key="NSBackgroundColor" ref="854948635"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <reference key="NSContentView" ref="257999957"/> - <int key="NSBorderType">1</int> - <int key="NSBoxType">0</int> - <int key="NSTitlePosition">2</int> - <bool key="NSTransparent">NO</bool> - </object> - </object> - <string key="NSFrameSize">{480, 270}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string> - <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> - </object> - <object class="NSWindowTemplate" id="655734033"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{196, 240}, {480, 270}}</string> - <int key="NSWTFlags">603979776</int> - <string key="NSWindowTitle">^WindowTest</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> - <object class="NSView" key="NSWindowView" id="769884725"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <string key="NSFrameSize">{480, 270}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {2560, 1578}}</string> - <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> - </object> - <object class="NSMenu" id="526087585"> - <string key="NSTitle">^MenuTest</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="383489140"> - <reference key="NSMenu" ref="526087585"/> - <string key="NSTitle">^MenuItemTest</string> - <string key="NSKeyEquiv"/> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="149491055"/> - <reference key="NSMixedImage" ref="291068490"/> - </object> - </object> - </object> - <object class="NSCustomObject" id="92471218"> - <string key="NSClassName">GTMUILocalizer</string> - </object> - <object class="NSWindowTemplate" id="158765462"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{196, 240}, {480, 270}}</string> - <int key="NSWTFlags">603979776</int> - <string key="NSWindowTitle">^WindowTest</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> - <object class="NSView" key="NSWindowView" id="405137086"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSBox" id="735149545"> - <reference key="NSNextResponder" ref="405137086"/> - <int key="NSvFlags">36</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSView" id="866377256"> - <reference key="NSNextResponder" ref="735149545"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="459731495"> - <reference key="NSNextResponder" ref="866377256"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{12, 38}, {100, 32}}</string> - <reference key="NSSuperview" ref="866377256"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="168106569"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">^Button1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="459731495"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="668934682"> - <reference key="NSNextResponder" ref="866377256"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{12, 6}, {100, 32}}</string> - <reference key="NSSuperview" ref="866377256"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="1004837764"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">^Button2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="668934682"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">129</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{1, 1}, {124, 76}}</string> - <reference key="NSSuperview" ref="735149545"/> - </object> - </object> - <string key="NSFrame">{{32, 158}, {126, 92}}</string> - <reference key="NSSuperview" ref="405137086"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Box</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSBackgroundColor" ref="854948635"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <reference key="NSContentView" ref="866377256"/> - <int key="NSBorderType">1</int> - <int key="NSBoxType">0</int> - <int key="NSTitlePosition">2</int> - <bool key="NSTransparent">NO</bool> - </object> - <object class="NSScrollView" id="846591189"> - <reference key="NSNextResponder" ref="405137086"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSClipView" id="864274176"> - <reference key="NSNextResponder" ref="846591189"/> - <int key="NSvFlags">2304</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomView" id="1048920215"> - <reference key="NSNextResponder" ref="864274176"/> - <int key="NSvFlags">274</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="771041486"> - <reference key="NSNextResponder" ref="1048920215"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 20}, {72, 17}}</string> - <reference key="NSSuperview" ref="1048920215"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="138037384"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^Label2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="771041486"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <reference key="NSTextColor" ref="50010148"/> - </object> - </object> - <object class="NSMatrix" id="44026604"> - <reference key="NSNextResponder" ref="1048920215"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 45}, {87, 38}}</string> - <reference key="NSSuperview" ref="1048920215"/> - <bool key="NSEnabled">YES</bool> - <int key="NSNumRows">2</int> - <int key="NSNumCols">1</int> - <object class="NSMutableArray" key="NSCells"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButtonCell" id="370153045"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Radio 1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="44026604"/> - <int key="NSTag">1</int> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <reference key="NSAlternateImage" ref="182487189"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - <object class="NSButtonCell" id="54210161"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Radio 2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="44026604"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw -cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA -AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA -BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA -AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA -AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 -cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD -AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH -SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF -hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8 -vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt -7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq -Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo -aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e -n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX -2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW -FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O -Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6 -ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt -rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA -AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA -AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl -A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq -DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU -HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8 -MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v -UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/ -eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj -rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn -5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh -AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK -CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY -GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95 -MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S -UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2 -d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV -pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK -0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf// -AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw -BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA -FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H -LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh -Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ -h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp -svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb -1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX -8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE -AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg -QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes> - </object> - </object> - </object> - </object> - <reference key="NSColor" ref="1027339248"/> - </object> - <reference key="NSAlternateImage" ref="182487189"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <string key="NSCellSize">{87, 18}</string> - <string key="NSIntercellSpacing">{4, 2}</string> - <int key="NSMatrixFlags">1151868928</int> - <string key="NSCellClass">NSActionCell</string> - <object class="NSButtonCell" key="NSProtoCell" id="773257705"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="168773824"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> - </object> - </object> - </object> - </object> - <reference key="NSColor" ref="1027339248"/> - </object> - <reference key="NSAlternateImage" ref="182487189"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - <reference key="NSSelectedCell" ref="370153045"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <reference key="NSCellBackgroundColor" ref="695371698"/> - <reference key="NSFont" ref="168773824"/> - </object> - <object class="NSTextField" id="213996513"> - <reference key="NSNextResponder" ref="1048920215"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 91}, {74, 17}}</string> - <reference key="NSSuperview" ref="1048920215"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="279566570"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^Label1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="213996513"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <reference key="NSTextColor" ref="50010148"/> - </object> - </object> - </object> - <string key="NSFrameSize">{127, 128}</string> - <reference key="NSSuperview" ref="864274176"/> - <string key="NSClassName">NSView</string> - </object> - </object> - <string key="NSFrame">{{1, 1}, {127, 128}}</string> - <reference key="NSSuperview" ref="846591189"/> - <reference key="NSNextKeyView" ref="1048920215"/> - <reference key="NSDocView" ref="1048920215"/> - <reference key="NSBGColor" ref="1000162704"/> - <int key="NScvFlags">4</int> - </object> - <object class="NSScroller" id="282042269"> - <reference key="NSNextResponder" ref="846591189"/> - <int key="NSvFlags">256</int> - <string key="NSFrame">{{128, 1}, {15, 128}}</string> - <reference key="NSSuperview" ref="846591189"/> - <reference key="NSTarget" ref="846591189"/> - <string key="NSAction">_doScroller:</string> - <double key="NSCurValue">1</double> - <double key="NSPercent">0.9636363</double> - </object> - <object class="NSScroller" id="383137617"> - <reference key="NSNextResponder" ref="846591189"/> - <int key="NSvFlags">256</int> - <string key="NSFrame">{{1, 129}, {127, 15}}</string> - <reference key="NSSuperview" ref="846591189"/> - <int key="NSsFlags">1</int> - <reference key="NSTarget" ref="846591189"/> - <string key="NSAction">_doScroller:</string> - <double key="NSPercent">0.50602409999999998</double> - </object> - </object> - <string key="NSFrame">{{219, 101}, {144, 145}}</string> - <reference key="NSSuperview" ref="405137086"/> - <reference key="NSNextKeyView" ref="864274176"/> - <int key="NSsFlags">50</int> - <reference key="NSVScroller" ref="282042269"/> - <reference key="NSHScroller" ref="383137617"/> - <reference key="NSContentView" ref="864274176"/> - </object> - <object class="NSSplitView" id="161950549"> - <reference key="NSNextResponder" ref="405137086"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="485121564"> - <reference key="NSNextResponder" ref="161950549"/> - <int key="NSvFlags">268</int> - <string key="NSFrameSize">{106, 18}</string> - <reference key="NSSuperview" ref="161950549"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="62569003"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Checkbox 1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="485121564"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="437083559"/> - <reference key="NSAlternateImage" ref="634128218"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="300872861"> - <reference key="NSNextResponder" ref="161950549"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{0, 27}, {106, 18}}</string> - <reference key="NSSuperview" ref="161950549"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="241630681"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Checkbox 2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="300872861"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="437083559"/> - <reference key="NSAlternateImage" ref="634128218"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{42, 66}, {106, 45}}</string> - <reference key="NSSuperview" ref="405137086"/> - </object> - <object class="NSSegmentedControl" id="632547328"> - <reference key="NSNextResponder" ref="405137086"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{198, 38}, {185, 24}}</string> - <reference key="NSSuperview" ref="405137086"/> - <bool key="NSEnabled">YES</bool> - <object class="NSSegmentedCell" key="NSCell" id="907223470"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <object class="NSFont" key="NSSupport"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">13</double> - <int key="NSfFlags">16</int> - </object> - <reference key="NSControlView" ref="632547328"/> - <object class="NSMutableArray" key="NSSegmentImages"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSSegmentItem"> - <string key="NSSegmentItemLabel">^Seg1</string> - <int key="NSSegmentItemImageScaling">0</int> - </object> - <object class="NSSegmentItem"> - <string key="NSSegmentItemLabel">^Seg2</string> - <int key="NSSegmentItemTag">1</int> - <bool key="NSSegmentItemSelected">YES</bool> - <int key="NSSegmentItemImageScaling">0</int> - </object> - <object class="NSSegmentItem"> - <string key="NSSegmentItemLabel">^Seg3</string> - <int key="NSSegmentItemImageScaling">0</int> - </object> - </object> - <int key="NSSelectedSegment">1</int> - <int key="NSSegmentStyle">1</int> - </object> - </object> - <object class="NSComboBox" id="931776629"> - <reference key="NSNextResponder" ref="405137086"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{371, 180}, {92, 26}}</string> - <reference key="NSSuperview" ref="405137086"/> - <bool key="NSEnabled">YES</bool> - <object class="NSComboBoxCell" key="NSCell" id="763797856"> - <int key="NSCellFlags">343014976</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^Label1</string> - <reference key="NSSupport" ref="168773824"/> - <string key="NSPlaceholderString">^Placeholder1</string> - <reference key="NSControlView" ref="931776629"/> - <bool key="NSDrawsBackground">YES</bool> - <reference key="NSBackgroundColor" ref="854948635"/> - <reference key="NSTextColor" ref="50010148"/> - <int key="NSVisibleItemCount">4</int> - <bool key="NSHasVerticalScroller">YES</bool> - <object class="NSMutableArray" key="NSPopUpListData"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>^Choice1</string> - <string>^Choice2</string> - <string>^Choice3</string> - <string>^Choice4</string> - <string>^Choice5</string> - </object> - <reference key="NSDelegate" ref="931776629"/> - <object class="NSComboTableView" key="NSTableView" id="452420746"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">274</int> - <string key="NSFrameSize">{13, 105}</string> - <reference key="NSSuperview"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSMutableArray" key="NSTableColumns"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTableColumn"> - <integer value="0" key="NSIdentifier"/> - <double key="NSWidth">10</double> - <double key="NSMinWidth">10</double> - <double key="NSMaxWidth">1000</double> - <object class="NSTableHeaderCell" key="NSHeaderCell"> - <int key="NSCellFlags">75628032</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents"/> - <object class="NSFont" key="NSSupport"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">12</double> - <int key="NSfFlags">16</int> - </object> - <object class="NSColor" key="NSBackgroundColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes> - </object> - <reference key="NSTextColor" ref="695371698"/> - </object> - <object class="NSTextFieldCell" key="NSDataCell"> - <int key="NSCellFlags">338820672</int> - <int key="NSCellFlags2">1024</int> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="452420746"/> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSColor" key="NSBackgroundColor" id="156860821"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlBackgroundColor</string> - <reference key="NSColor" ref="125228242"/> - </object> - <reference key="NSTextColor" ref="50010148"/> - </object> - <int key="NSResizingMask">3</int> - <bool key="NSIsResizeable">YES</bool> - <reference key="NSTableView" ref="452420746"/> - </object> - </object> - <double key="NSIntercellSpacingWidth">3</double> - <double key="NSIntercellSpacingHeight">2</double> - <reference key="NSBackgroundColor" ref="156860821"/> - <object class="NSColor" key="NSGridColor"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">gridColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC41AA</bytes> - </object> - </object> - <double key="NSRowHeight">19</double> - <string key="NSAction">tableViewAction:</string> - <int key="NSTvFlags">-765427712</int> - <reference key="NSDelegate" ref="763797856"/> - <reference key="NSDataSource" ref="763797856"/> - <reference key="NSTarget" ref="763797856"/> - <int key="NSColumnAutoresizingStyle">1</int> - <int key="NSDraggingSourceMaskForLocal">15</int> - <int key="NSDraggingSourceMaskForNonLocal">0</int> - <bool key="NSAllowsTypeSelect">YES</bool> - <int key="NSTableViewDraggingDestinationStyle">0</int> - </object> - </object> - </object> - </object> - <string key="NSFrameSize">{480, 270}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {2560, 1578}}</string> - <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> - </object> - <object class="NSUserDefaultsController" id="193974147"> - <bool key="NSSharedInstance">YES</bool> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">3</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">owner_</string> - <reference key="source" ref="92471218"/> - <reference key="destination" ref="1001"/> - </object> - <int key="connectionID">32</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">otherWindow_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="655734033"/> - </object> - <int key="connectionID">33</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">otherMenu_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="526087585"/> - </object> - <int key="connectionID">34</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">anotherWindow_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="158765462"/> - </object> - <int key="connectionID">53</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBBindingConnection" key="connection"> - <string key="label">displayPatternValue1: values.foo</string> - <reference key="source" ref="583665016"/> - <reference key="destination" ref="193974147"/> - <object class="NSNibBindingConnector" key="connector"> - <reference key="NSSource" ref="583665016"/> - <reference key="NSDestination" ref="193974147"/> - <string key="NSLabel">displayPatternValue1: values.foo</string> - <string key="NSBinding">displayPatternValue1</string> - <string key="NSKeyPath">values.foo</string> - <object class="NSDictionary" key="NSOptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSDisplayPattern</string> - <string>NSMultipleValuesPlaceholder</string> - <string>NSNoSelectionPlaceholder</string> - <string>NSNotApplicablePlaceholder</string> - <string>NSNullPlaceholder</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>^DisplayPattern</string> - <string>^MultipleValuesPlaceholder</string> - <string>^NoSelectionPlaceholder</string> - <string>^NotApplicablePlaceholder</string> - <string>^NullPlaceholder</string> - </object> - </object> - <int key="NSNibBindingConnectorVersion">2</int> - </object> - </object> - <int key="connectionID">161</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBBindingConnection" key="connection"> - <string key="label">predicate: values.foo</string> - <reference key="source" ref="207474363"/> - <reference key="destination" ref="193974147"/> - <object class="NSNibBindingConnector" key="connector"> - <reference key="NSSource" ref="207474363"/> - <reference key="NSDestination" ref="193974147"/> - <string key="NSLabel">predicate: values.foo</string> - <string key="NSBinding">predicate</string> - <string key="NSKeyPath">values.foo</string> - <object class="NSDictionary" key="NSOptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSDisplayName</string> - <string>NSPredicateFormat</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>^DisplayName</string> - <string>keyPath contains $value</string> - </object> - </object> - <int key="NSNibBindingConnectorVersion">2</int> - </object> - </object> - <int key="connectionID">163</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">bindingsTextField_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="583665016"/> - </object> - <int key="connectionID">167</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">bindingsSearchField_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="207474363"/> - </object> - <int key="connectionID">168</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <reference key="object" ref="0"/> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="0"/> - <string key="objectName">File's Owner</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="0"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="0"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - <reference ref="393184701"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="934296854"/> - <reference ref="657027262"/> - <reference ref="1054080138"/> - <reference ref="18987080"/> - <reference ref="39833761"/> - <reference ref="197597199"/> - <reference ref="739084402"/> - <reference ref="484232841"/> - <reference ref="413705031"/> - <reference ref="323309615"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">4</int> - <reference key="object" ref="934296854"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="768899742"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">5</int> - <reference key="object" ref="768899742"/> - <reference key="parent" ref="934296854"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">6</int> - <reference key="object" ref="657027262"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="105732693"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">7</int> - <reference key="object" ref="105732693"/> - <reference key="parent" ref="657027262"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">8</int> - <reference key="object" ref="1054080138"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="567210703"/> - <reference ref="786693096"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">9</int> - <reference key="object" ref="567210703"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="837485648"/> - </object> - <reference key="parent" ref="1054080138"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">10</int> - <reference key="object" ref="786693096"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="75519688"/> - </object> - <reference key="parent" ref="1054080138"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">11</int> - <reference key="object" ref="75519688"/> - <reference key="parent" ref="786693096"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">12</int> - <reference key="object" ref="837485648"/> - <reference key="parent" ref="567210703"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">13</int> - <reference key="object" ref="39833761"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="569396622"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">14</int> - <reference key="object" ref="569396622"/> - <reference key="parent" ref="39833761"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">15</int> - <reference key="object" ref="18987080"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="851209037"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">16</int> - <reference key="object" ref="851209037"/> - <reference key="parent" ref="18987080"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">22</int> - <reference key="object" ref="655734033"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="769884725"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">23</int> - <reference key="object" ref="769884725"/> - <reference key="parent" ref="655734033"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">24</int> - <reference key="object" ref="526087585"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="383489140"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">25</int> - <reference key="object" ref="383489140"/> - <reference key="parent" ref="526087585"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">30</int> - <reference key="object" ref="92471218"/> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">35</int> - <reference key="object" ref="197597199"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1073502186"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">36</int> - <reference key="object" ref="1073502186"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="768660937"/> - </object> - <reference key="parent" ref="197597199"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">37</int> - <reference key="object" ref="768660937"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="662787728"/> - <reference ref="180141984"/> - </object> - <reference key="parent" ref="1073502186"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">38</int> - <reference key="object" ref="662787728"/> - <reference key="parent" ref="768660937"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">39</int> - <reference key="object" ref="180141984"/> - <reference key="parent" ref="768660937"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">41</int> - <reference key="object" ref="739084402"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="450501437"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">42</int> - <reference key="object" ref="450501437"/> - <reference key="parent" ref="739084402"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">45</int> - <reference key="object" ref="484232841"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="468013402"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">46</int> - <reference key="object" ref="468013402"/> - <reference key="parent" ref="484232841"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">47</int> - <reference key="object" ref="413705031"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="232253570"/> - <reference ref="310759369"/> - <reference ref="819072791"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">48</int> - <reference key="object" ref="232253570"/> - <reference key="parent" ref="413705031"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">49</int> - <reference key="object" ref="310759369"/> - <reference key="parent" ref="413705031"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">50</int> - <reference key="object" ref="819072791"/> - <reference key="parent" ref="413705031"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">51</int> - <reference key="object" ref="158765462"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="405137086"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">52</int> - <reference key="object" ref="405137086"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="735149545"/> - <reference ref="846591189"/> - <reference ref="161950549"/> - <reference ref="632547328"/> - <reference ref="931776629"/> - </object> - <reference key="parent" ref="158765462"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">70</int> - <reference key="object" ref="735149545"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="459731495"/> - <reference ref="668934682"/> - </object> - <reference key="parent" ref="405137086"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">54</int> - <reference key="object" ref="459731495"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="168106569"/> - </object> - <reference key="parent" ref="735149545"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">57</int> - <reference key="object" ref="168106569"/> - <reference key="parent" ref="459731495"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">55</int> - <reference key="object" ref="668934682"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1004837764"/> - </object> - <reference key="parent" ref="735149545"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">56</int> - <reference key="object" ref="1004837764"/> - <reference key="parent" ref="668934682"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">72</int> - <reference key="object" ref="846591189"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="282042269"/> - <reference ref="383137617"/> - <reference ref="1048920215"/> - </object> - <reference key="parent" ref="405137086"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">73</int> - <reference key="object" ref="282042269"/> - <reference key="parent" ref="846591189"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">74</int> - <reference key="object" ref="383137617"/> - <reference key="parent" ref="846591189"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">71</int> - <reference key="object" ref="1048920215"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="213996513"/> - <reference ref="44026604"/> - <reference ref="771041486"/> - </object> - <reference key="parent" ref="846591189"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">62</int> - <reference key="object" ref="213996513"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="279566570"/> - </object> - <reference key="parent" ref="1048920215"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">58</int> - <reference key="object" ref="44026604"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="773257705"/> - <reference ref="54210161"/> - <reference ref="370153045"/> - </object> - <reference key="parent" ref="1048920215"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">63</int> - <reference key="object" ref="771041486"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="138037384"/> - </object> - <reference key="parent" ref="1048920215"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">68</int> - <reference key="object" ref="138037384"/> - <reference key="parent" ref="771041486"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">59</int> - <reference key="object" ref="773257705"/> - <reference key="parent" ref="44026604"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">60</int> - <reference key="object" ref="54210161"/> - <reference key="parent" ref="44026604"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">61</int> - <reference key="object" ref="370153045"/> - <reference key="parent" ref="44026604"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">69</int> - <reference key="object" ref="279566570"/> - <reference key="parent" ref="213996513"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">76</int> - <reference key="object" ref="161950549"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="485121564"/> - <reference ref="300872861"/> - </object> - <reference key="parent" ref="405137086"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">64</int> - <reference key="object" ref="485121564"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="62569003"/> - </object> - <reference key="parent" ref="161950549"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">67</int> - <reference key="object" ref="62569003"/> - <reference key="parent" ref="485121564"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">65</int> - <reference key="object" ref="300872861"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="241630681"/> - </object> - <reference key="parent" ref="161950549"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">66</int> - <reference key="object" ref="241630681"/> - <reference key="parent" ref="300872861"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">88</int> - <reference key="object" ref="393184701"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1041080587"/> - <reference ref="1052188774"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">96</int> - <reference key="object" ref="1041080587"/> - <reference key="parent" ref="393184701"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">97</int> - <reference key="object" ref="1052188774"/> - <reference key="parent" ref="393184701"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">101</int> - <reference key="object" ref="193974147"/> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">165</int> - <reference key="object" ref="323309615"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="583665016"/> - <reference ref="207474363"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">99</int> - <reference key="object" ref="583665016"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="601271137"/> - </object> - <reference key="parent" ref="323309615"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">100</int> - <reference key="object" ref="601271137"/> - <reference key="parent" ref="583665016"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">151</int> - <reference key="object" ref="207474363"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="926559351"/> - </object> - <reference key="parent" ref="323309615"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">152</int> - <reference key="object" ref="926559351"/> - <reference key="parent" ref="207474363"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">169</int> - <reference key="object" ref="632547328"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="907223470"/> - </object> - <reference key="parent" ref="405137086"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">170</int> - <reference key="object" ref="907223470"/> - <reference key="parent" ref="632547328"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">173</int> - <reference key="object" ref="931776629"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="763797856"/> - </object> - <reference key="parent" ref="405137086"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">174</int> - <reference key="object" ref="763797856"/> - <reference key="parent" ref="931776629"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>10.IBPluginDependency</string> - <string>100.IBPluginDependency</string> - <string>11.IBPluginDependency</string> - <string>12.IBPluginDependency</string> - <string>13.IBPluginDependency</string> - <string>14.IBPluginDependency</string> - <string>15.IBPluginDependency</string> - <string>151.IBPluginDependency</string> - <string>152.IBPluginDependency</string> - <string>16.IBPluginDependency</string> - <string>169.IBPluginDependency</string> - <string>170.IBPluginDependency</string> - <string>173.IBPluginDependency</string> - <string>173.IBViewBoundsToFrameTransform</string> - <string>174.IBPluginDependency</string> - <string>2.IBPluginDependency</string> - <string>22.IBEditorWindowLastContentRect</string> - <string>22.IBPluginDependency</string> - <string>22.IBWindowTemplateEditedContentRect</string> - <string>22.NSWindowTemplate.visibleAtLaunch</string> - <string>23.IBPluginDependency</string> - <string>24.IBEditorWindowLastContentRect</string> - <string>24.IBPluginDependency</string> - <string>25.IBPluginDependency</string> - <string>30.IBPluginDependency</string> - <string>35.IBPluginDependency</string> - <string>36.IBPluginDependency</string> - <string>37.IBEditorWindowLastContentRect</string> - <string>37.IBPluginDependency</string> - <string>38.IBPluginDependency</string> - <string>39.IBPluginDependency</string> - <string>4.IBPluginDependency</string> - <string>41.IBPluginDependency</string> - <string>42.IBPluginDependency</string> - <string>45.IBPluginDependency</string> - <string>46.IBPluginDependency</string> - <string>47.IBPluginDependency</string> - <string>48.IBPluginDependency</string> - <string>49.IBPluginDependency</string> - <string>5.IBPluginDependency</string> - <string>50.IBPluginDependency</string> - <string>51.IBEditorWindowLastContentRect</string> - <string>51.IBPluginDependency</string> - <string>51.IBWindowTemplateEditedContentRect</string> - <string>51.NSWindowTemplate.visibleAtLaunch</string> - <string>52.IBPluginDependency</string> - <string>54.IBPluginDependency</string> - <string>55.IBPluginDependency</string> - <string>56.IBPluginDependency</string> - <string>57.IBPluginDependency</string> - <string>58.IBPluginDependency</string> - <string>59.IBPluginDependency</string> - <string>6.IBPluginDependency</string> - <string>60.IBPluginDependency</string> - <string>61.IBPluginDependency</string> - <string>62.IBPluginDependency</string> - <string>63.IBPluginDependency</string> - <string>64.IBPluginDependency</string> - <string>65.IBPluginDependency</string> - <string>66.IBPluginDependency</string> - <string>67.IBPluginDependency</string> - <string>68.IBPluginDependency</string> - <string>69.IBPluginDependency</string> - <string>7.IBPluginDependency</string> - <string>8.IBPluginDependency</string> - <string>88.IBEditorWindowLastContentRect</string> - <string>88.IBPluginDependency</string> - <string>9.IBPluginDependency</string> - <string>96.IBPluginDependency</string> - <string>97.IBPluginDependency</string> - <string>99.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{387, 451}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{387, 451}, {480, 270}}</string> - <boolean value="NO"/> - <string>{196, 240}</string> - <string>{{357, 418}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <object class="NSAffineTransform"> - <bytes key="NSTransformStruct">P4AAAL+AAABDuYAAw0wAAA</bytes> - </object> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{948, 629}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{948, 629}, {480, 270}}</string> - <boolean value="NO"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{126, 673}, {161, 23}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{478, 980}, {122, 43}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{960, 285}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{960, 285}, {480, 270}}</string> - <boolean value="NO"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{-6, 737}, {616, 0}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference key="dict.sortedKeys" ref="0"/> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference key="dict.sortedKeys" ref="0"/> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">174</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizer</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>otherObjectToLocalize_</string> - <string>owner_</string> - <string>yetAnotherObjectToLocalize_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>id</string> - <string>id</string> - </object> - </object> - <object class="NSMutableDictionary" key="toOneOutletInfosByName"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>otherObjectToLocalize_</string> - <string>owner_</string> - <string>yetAnotherObjectToLocalize_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBToOneOutletInfo"> - <string key="name">otherObjectToLocalize_</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">owner_</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">yetAnotherObjectToLocalize_</string> - <string key="candidateClassName">id</string> - </object> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerTestWindowController</string> - <string key="superclassName">NSWindowController</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>anotherWindow_</string> - <string>bindingsSearchField_</string> - <string>bindingsTextField_</string> - <string>otherMenu_</string> - <string>otherWindow_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSWindow</string> - <string>NSSearchField</string> - <string>NSTextField</string> - <string>NSMenu</string> - <string>NSWindow</string> - </object> - </object> - <object class="NSMutableDictionary" key="toOneOutletInfosByName"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>anotherWindow_</string> - <string>bindingsSearchField_</string> - <string>bindingsTextField_</string> - <string>otherMenu_</string> - <string>otherWindow_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBToOneOutletInfo"> - <string key="name">anotherWindow_</string> - <string key="candidateClassName">NSWindow</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">bindingsSearchField_</string> - <string key="candidateClassName">NSSearchField</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">bindingsTextField_</string> - <string key="candidateClassName">NSTextField</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">otherMenu_</string> - <string key="candidateClassName">NSMenu</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">otherWindow_</string> - <string key="candidateClassName">NSWindow</string> - </object> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="485269976"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKitUnitTestingUtilities.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSBox</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSComboBox</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMatrix</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenuItem</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSSegmentedControl</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabViewItem</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSToolbar</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSToolbarItem</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="308904550"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMNSAnimatablePropertyContainer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="308904550"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - </object> - <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">NSActionCell</string> - <string key="superclassName">NSCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <string key="superclassName">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="1034859396"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="656766238"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="878436355"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSBox</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSBox.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSButton.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButtonCell</string> - <string key="superclassName">NSActionCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSComboBox</string> - <string key="superclassName">NSTextField</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSComboBox.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSComboBoxCell</string> - <string key="superclassName">NSTextFieldCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSComboBoxCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="498926182"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSControl.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSController</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSFormatter</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMatrix</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="11882073"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenuItem</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="340398278"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenuItemCell</string> - <string key="superclassName">NSButtonCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenuItemCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AddressBook.framework/Headers/ABActions.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="1034859396"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="656766238"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="878436355"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="498926182"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="11882073"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="742004913"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="570483478"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSError.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSObject.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSThread.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURL.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">PrintCore.framework/Headers/PDEPluginInterface.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CIImageProvider.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSPopUpButton</string> - <string key="superclassName">NSButton</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPopUpButton.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSPopUpButtonCell</string> - <string key="superclassName">NSMenuItemCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPopUpButtonCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSResponder</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSScrollView</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSScrollView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSScroller</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSScroller.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSSearchField</string> - <string key="superclassName">NSTextField</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSearchField.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSSearchFieldCell</string> - <string key="superclassName">NSTextFieldCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSearchFieldCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSSegmentedCell</string> - <string key="superclassName">NSActionCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSegmentedCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSSegmentedControl</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSegmentedControl.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSSplitView</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSplitView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTabView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabViewItem</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTabViewItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTextField.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextFieldCell</string> - <string key="superclassName">NSActionCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSToolbar</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSToolbar.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSToolbarItem</string> - <string key="superclassName">NSObject</string> - <reference key="sourceIdentifier" ref="742004913"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSUserDefaultsController</string> - <string key="superclassName">NSController</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSUserDefaultsController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="340398278"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <string key="superclassName">NSResponder</string> - <reference key="sourceIdentifier" ref="570483478"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <string key="superclassName">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindowController</string> - <string key="superclassName">NSResponder</string> - <object class="NSMutableDictionary" key="actions"> - <string key="NS.key.0">showWindow:</string> - <string key="NS.object.0">id</string> - </object> - <object class="NSMutableDictionary" key="actionInfosByName"> - <string key="NS.key.0">showWindow:</string> - <object class="IBActionInfo" key="NS.object.0"> - <string key="name">showWindow:</string> - <string key="candidateClassName">id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string> - </object> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> - <integer value="1050" key="NS.object.0"/> - </object> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> - <integer value="1050" key="NS.object.0"/> - </object> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> - <integer value="3000" key="NS.object.0"/> - </object> - <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSMenuCheckmark</string> - <string>NSMenuMixedState</string> - <string>NSPreferencesGeneral</string> - <string>NSSwitch</string> - <string>NSUserAccounts</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>{9, 8}</string> - <string>{7, 2}</string> - <string>{32, 32}</string> - <string>{15, 15}</string> - <string>{32, 32}</string> - </object> - </object> - </data> -</archive> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G1004" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/> + <capability name="box content view" minToolsVersion="7.0"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="GTMUILocalizerTestWindowController"> + <connections> + <outlet property="_aBox" destination="70" id="DY4-jb-GGU"/> + <outlet property="_aButton1" destination="54" id="Ugp-uF-Z7I"/> + <outlet property="_aButton2" destination="55" id="3rs-oA-bKx"/> + <outlet property="_aCheckbox1" destination="64" id="6zb-jT-coj"/> + <outlet property="_aCheckbox2" destination="65" id="4BO-kN-V5H"/> + <outlet property="_aComboBox" destination="173" id="lzx-oE-yyJ"/> + <outlet property="_aRadio1" destination="61" id="5jN-Rj-MP9"/> + <outlet property="_aRadio2" destination="60" id="5LH-uI-QXq"/> + <outlet property="_aSegmented" destination="169" id="zAV-Ak-0zy"/> + <outlet property="_aTextField1" destination="62" id="E5A-U4-yUF"/> + <outlet property="_aTextField2" destination="63" id="euW-U2-ZPk"/> + <outlet property="_anotherWindow" destination="51" id="g9Q-68-4Lq"/> + <outlet property="_bindingsSearchField" destination="151" id="d04-Qy-Omt"/> + <outlet property="_bindingsTextField" destination="99" id="b1u-KQ-66G"/> + <outlet property="_button1" destination="4" id="Rtc-Xu-uZA"/> + <outlet property="_button2" destination="6" id="84Q-c9-TFl"/> + <outlet property="_checkbox1" destination="41" id="89X-pT-2pU"/> + <outlet property="_checkbox2" destination="45" id="1jk-cG-El7"/> + <outlet property="_otherMenu" destination="24" id="i2e-1m-IFN"/> + <outlet property="_radio1" destination="48" id="fDX-DK-1jH"/> + <outlet property="_radio2" destination="49" id="meL-Wl-Xo2"/> + <outlet property="_tabViewItem1" destination="9" id="dGv-iG-1ax"/> + <outlet property="_tabViewItem2" destination="10" id="6wN-Re-m4M"/> + <outlet property="_textField1" destination="13" id="aTh-H8-Ppj"/> + <outlet property="_textField2" destination="15" id="f4a-e4-4Ih"/> + <outlet property="_toolbarItem1" destination="96" id="1TD-AV-La4"/> + <outlet property="_toolbarItem2" destination="97" id="v8R-Ax-tR9"/> + <outlet property="menuItem1" destination="38" id="u3S-5p-hhh"/> + <outlet property="menuItem2" destination="39" id="pib-lI-79A"/> + <outlet property="menuItem3" destination="Y3l-JE-3Yv" id="Sfv-80-tdR"/> + <outlet property="window" destination="1" id="tHI-7l-T7s"/> + </connections> + </customObject> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application" customClass="NSObject"/> + <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" visibleAtLaunch="NO" animationBehavior="default" id="1"> + <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/> + <windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/> + <rect key="contentRect" x="196" y="240" width="480" height="270"/> + <rect key="screenRect" x="0.0" y="0.0" width="1680" height="1028"/> + <view key="contentView" id="2"> + <rect key="frame" x="0.0" y="0.0" width="480" height="270"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <button verticalHuggingPriority="750" id="4"> + <rect key="frame" x="30" y="205" width="100" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="^Button1" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="5"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="6"> + <rect key="frame" x="30" y="173" width="100" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="^Button2" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="7"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <tabView id="8"> + <rect key="frame" x="161" y="115" width="177" height="124"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <font key="font" metaFont="system"/> + <tabViewItems> + <tabViewItem label="^Tab1" identifier="1" id="9"> + <view key="view" id="12"> + <rect key="frame" x="10" y="33" width="157" height="78"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + </view> + </tabViewItem> + <tabViewItem label="^Tab2" identifier="2" id="10"> + <view key="view" id="11"> + <rect key="frame" x="10" y="33" width="157" height="78"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + </view> + </tabViewItem> + </tabViewItems> + </tabView> + <textField verticalHuggingPriority="750" id="13"> + <rect key="frame" x="71" y="61" width="74" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="^Label1" id="14"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <textField verticalHuggingPriority="750" id="15"> + <rect key="frame" x="153" y="66" width="72" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="^Label2" id="16"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <popUpButton verticalHuggingPriority="750" id="35"> + <rect key="frame" x="315" y="67" width="100" height="26"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <popUpButtonCell key="cell" type="push" title="^Item 1" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="38" id="36"> + <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="menu"/> + <menu key="menu" title="OtherViews" id="37"> + <items> + <menuItem title="^Item 1" state="on" id="38"/> + <menuItem title="^Item 2" id="39"/> + <menuItem title="^Item 3" id="Y3l-JE-3Yv" userLabel="^Item 3"> + <modifierMask key="keyEquivalentModifierMask"/> + </menuItem> + </items> + </menu> + </popUpButtonCell> + </popUpButton> + <button id="41"> + <rect key="frame" x="154" y="33" width="106" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="^Checkbox 1" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="42"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button id="45"> + <rect key="frame" x="291" y="33" width="106" height="18"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="^Checkbox 2" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="46"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <matrix verticalHuggingPriority="750" allowsEmptySelection="NO" id="47"> + <rect key="frame" x="351" y="172" width="87" height="38"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + <size key="cellSize" width="87" height="18"/> + <size key="intercellSpacing" width="4" height="2"/> + <buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="50"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <cells> + <column> + <buttonCell type="radio" title="^Radio 1" imagePosition="left" alignment="left" state="on" tag="1" inset="2" id="48"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <buttonCell type="radio" title="^Radio 2" imagePosition="left" alignment="left" inset="2" id="49"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </column> + </cells> + </matrix> + <box autoresizesSubviews="NO" borderType="line" title="Bindings Tests" id="165"> + <rect key="frame" x="13" y="80" width="134" height="92"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <view key="contentView" id="JdY-LY-sn5"> + <rect key="frame" x="1" y="1" width="132" height="76"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField verticalHuggingPriority="750" id="99"> + <rect key="frame" x="18" y="44" width="96" height="22"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="100"> + <font key="font" metaFont="system"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + <connections> + <binding destination="101" name="displayPatternValue1" keyPath="values.foo" id="161"> + <dictionary key="options"> + <string key="NSDisplayPattern">^DisplayPattern</string> + <string key="NSMultipleValuesPlaceholder">^MultipleValuesPlaceholder</string> + <string key="NSNoSelectionPlaceholder">^NoSelectionPlaceholder</string> + <string key="NSNotApplicablePlaceholder">^NotApplicablePlaceholder</string> + <string key="NSNullPlaceholder">^NullPlaceholder</string> + </dictionary> + </binding> + </connections> + </textField> + <searchField wantsLayer="YES" verticalHuggingPriority="750" id="151"> + <rect key="frame" x="18" y="14" width="96" height="22"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" borderStyle="bezel" bezelStyle="round" id="152"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </searchFieldCell> + <connections> + <binding destination="101" name="predicate" keyPath="values.foo" id="163"> + <dictionary key="options"> + <string key="NSDisplayName">^DisplayName</string> + <string key="NSPredicateFormat">keyPath contains $value</string> + </dictionary> + </binding> + </connections> + </searchField> + </subviews> + </view> + </box> + </subviews> + </view> + <toolbar key="toolbar" implicitIdentifier="13B554E3-53CB-4465-BDA3-4F9A8B406FD0" autosavesConfiguration="NO" displayMode="iconAndLabel" sizeMode="regular" id="88"> + <allowedToolbarItems> + <toolbarItem implicitItemIdentifier="927E93A7-3FD1-412D-9C0E-FB7F594FDEF2" label="^ToolbarItemLabel" paletteLabel="^ToolbarItemPaletteLabel" toolTip="^ToolTip" tag="-1" image="NSPreferencesGeneral" id="96"/> + <toolbarItem implicitItemIdentifier="44682372-574A-40F6-8822-35F014DDDD4B" label="ToolbarItemLabel" paletteLabel="ToolbarItemPaletteLabel" toolTip="ToolTip" tag="-1" image="NSUserAccounts" id="97"/> + </allowedToolbarItems> + <defaultToolbarItems> + <toolbarItem reference="96"/> + <toolbarItem reference="97"/> + </defaultToolbarItems> + </toolbar> + </window> + <menu title="^MenuTest" id="24"> + <items> + <menuItem title="^MenuItemTest" id="25"> + <modifierMask key="keyEquivalentModifierMask"/> + </menuItem> + </items> + </menu> + <customObject id="30" customClass="GTMUILocalizer"> + <connections> + <outlet property="owner_" destination="-2" id="32"/> + </connections> + </customObject> + <window title="^WindowTest" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" visibleAtLaunch="NO" animationBehavior="default" id="51"> + <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/> + <windowPositionMask key="initialPositionMask" leftStrut="YES" bottomStrut="YES"/> + <rect key="contentRect" x="196" y="240" width="480" height="270"/> + <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1578"/> + <view key="contentView" id="52"> + <rect key="frame" x="0.0" y="0.0" width="480" height="270"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <box autoresizesSubviews="NO" borderType="line" title="^Box" id="70"> + <rect key="frame" x="32" y="158" width="126" height="92"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> + <view key="contentView" id="pui-tM-1Td"> + <rect key="frame" x="1" y="1" width="124" height="76"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <button verticalHuggingPriority="750" id="54"> + <rect key="frame" x="12" y="38" width="100" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="^Button1" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="57"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button verticalHuggingPriority="750" id="55"> + <rect key="frame" x="12" y="6" width="100" height="32"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="push" title="^Button2" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="56"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + </subviews> + </view> + </box> + <scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" usesPredominantAxisScrolling="NO" id="72"> + <rect key="frame" x="219" y="101" width="144" height="145"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <clipView key="contentView" id="Wgx-mP-QIl"> + <rect key="frame" x="1" y="1" width="142" height="143"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <customView id="71"> + <rect key="frame" x="0.0" y="0.0" width="142" height="143"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <textField verticalHuggingPriority="750" id="62"> + <rect key="frame" x="17" y="106" width="74" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="^Label1" id="69"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + <matrix verticalHuggingPriority="750" allowsEmptySelection="NO" id="58"> + <rect key="frame" x="20" y="60" width="87" height="38"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + <size key="cellSize" width="87" height="18"/> + <size key="intercellSpacing" width="4" height="2"/> + <buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="59"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <cells> + <column> + <buttonCell type="radio" title="^Radio 1" imagePosition="left" alignment="left" state="on" tag="1" inset="2" id="61"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <buttonCell type="radio" title="^Radio 2" imagePosition="left" alignment="left" inset="2" id="60"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </column> + </cells> + </matrix> + <textField verticalHuggingPriority="750" id="63"> + <rect key="frame" x="17" y="35" width="72" height="17"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="^Label2" id="68"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + </textField> + </subviews> + </customView> + </subviews> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </clipView> + <scroller key="horizontalScroller" verticalHuggingPriority="750" horizontal="YES" id="74"> + <rect key="frame" x="1" y="128" width="142" height="16"/> + <autoresizingMask key="autoresizingMask"/> + </scroller> + <scroller key="verticalScroller" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="73"> + <rect key="frame" x="127" y="1" width="16" height="143"/> + <autoresizingMask key="autoresizingMask"/> + </scroller> + </scrollView> + <splitView id="76"> + <rect key="frame" x="42" y="66" width="106" height="45"/> + <autoresizingMask key="autoresizingMask"/> + <subviews> + <button id="64"> + <rect key="frame" x="-2" y="-2" width="110" height="22"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="^Checkbox 1" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="67"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + <button id="65"> + <rect key="frame" x="-2" y="25" width="110" height="22"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="^Checkbox 2" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="66"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + </button> + </subviews> + <holdingPriorities> + <real value="250"/> + <real value="250"/> + </holdingPriorities> + </splitView> + <segmentedControl verticalHuggingPriority="750" id="169"> + <rect key="frame" x="198" y="38" width="185" height="24"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="170"> + <font key="font" metaFont="system"/> + <segments> + <segment label="^Seg1"/> + <segment label="^Seg2" selected="YES" tag="1"/> + <segment label="^Seg3"/> + </segments> + </segmentedCell> + </segmentedControl> + <comboBox verticalHuggingPriority="750" id="173"> + <rect key="frame" x="371" y="180" width="92" height="26"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" title="^Label1" placeholderString="^Placeholder1" drawsBackground="YES" completes="NO" numberOfVisibleItems="4" id="174"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + <objectValues> + <string>^Choice1</string> + <string>^Choice2</string> + <string>^Choice3</string> + <string>^Choice4</string> + <string>^Choice5</string> + </objectValues> + </comboBoxCell> + </comboBox> + </subviews> + </view> + </window> + <userDefaultsController representsSharedInstance="YES" id="101"/> + </objects> + <resources> + <image name="NSPreferencesGeneral" width="32" height="32"/> + <image name="NSUserAccounts" width="32" height="32"/> + </resources> +</document> diff --git a/AppKit/GTMUILocalizerTestWindow_10_4.xib b/AppKit/GTMUILocalizerTestWindow_10_4.xib deleted file mode 100644 index 6316e33..0000000 --- a/AppKit/GTMUILocalizerTestWindow_10_4.xib +++ /dev/null @@ -1,2939 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> - <data> - <int key="IBDocument.SystemTarget">1040</int> - <string key="IBDocument.SystemVersion">10K549</string> - <string key="IBDocument.InterfaceBuilderVersion">851</string> - <string key="IBDocument.AppKitVersion">1038.36</string> - <string key="IBDocument.HIToolboxVersion">461.00</string> - <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> - <string key="NS.object.0">851</string> - </object> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="35"/> - <integer value="120"/> - <integer value="22"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys" id="0"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1001"> - <string key="NSClassName">GTMUILocalizerTestWindowController</string> - </object> - <object class="NSCustomObject" id="1003"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1004"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSWindowTemplate" id="1005"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{196, 240}, {480, 270}}</string> - <int key="NSWTFlags">536870912</int> - <string key="NSWindowTitle">Window</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> - <object class="NSView" key="NSWindowView" id="1006"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="934296854"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{30, 205}, {100, 32}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="768899742"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">^Button1</string> - <object class="NSFont" key="NSSupport" id="168773824"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">13</double> - <int key="NSfFlags">1044</int> - </object> - <reference key="NSControlView" ref="934296854"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">1</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="657027262"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{30, 173}, {100, 32}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="105732693"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">^Button2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="657027262"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">1</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSTabView" id="1054080138"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">12</int> - <string key="NSFrame">{{161, 115}, {177, 124}}</string> - <reference key="NSSuperview" ref="1006"/> - <object class="NSMutableArray" key="NSTabViewItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTabViewItem" id="567210703"> - <string key="NSIdentifier">1</string> - <object class="NSView" key="NSView" id="837485648"> - <nil key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <string key="NSFrame">{{10, 33}, {157, 78}}</string> - </object> - <string key="NSLabel">^Tab1</string> - <object class="NSColor" key="NSColor" id="1000162704"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlColor</string> - <object class="NSColor" key="NSColor" id="792644860"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes> - </object> - </object> - <reference key="NSTabView" ref="1054080138"/> - </object> - <object class="NSTabViewItem" id="786693096"> - <string key="NSIdentifier">2</string> - <object class="NSView" key="NSView" id="75519688"> - <reference key="NSNextResponder" ref="1054080138"/> - <int key="NSvFlags">256</int> - <string key="NSFrame">{{10, 33}, {157, 78}}</string> - <reference key="NSSuperview" ref="1054080138"/> - </object> - <string key="NSLabel">^Tab2</string> - <reference key="NSColor" ref="1000162704"/> - <reference key="NSTabView" ref="1054080138"/> - </object> - </object> - <reference key="NSSelectedTabViewItem" ref="786693096"/> - <reference key="NSFont" ref="168773824"/> - <int key="NSTvFlags">0</int> - <bool key="NSAllowTruncatedLabels">YES</bool> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="75519688"/> - </object> - </object> - <object class="NSTextField" id="39833761"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{71, 61}, {74, 17}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="569396622"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^Label1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="39833761"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <object class="NSColor" key="NSTextColor" id="50010148"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlTextColor</string> - <object class="NSColor" key="NSColor" id="41421868"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSTextField" id="18987080"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{153, 66}, {72, 17}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="851209037"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^Label2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="18987080"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <reference key="NSTextColor" ref="50010148"/> - </object> - </object> - <object class="NSPopUpButton" id="197597199"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{315, 67}, {100, 26}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSPopUpButtonCell" key="NSCell" id="1073502186"> - <int key="NSCellFlags">-2076049856</int> - <int key="NSCellFlags2">2048</int> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="197597199"/> - <int key="NSButtonFlags">109199615</int> - <int key="NSButtonFlags2">1</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - <object class="NSMenuItem" key="NSMenuItem" id="180141984"> - <reference key="NSMenu" ref="768660937"/> - <string key="NSTitle">^Item 2</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <int key="NSState">1</int> - <object class="NSCustomResource" key="NSOnImage" id="149491055"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSMenuCheckmark</string> - </object> - <object class="NSCustomResource" key="NSMixedImage" id="291068490"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSMenuMixedState</string> - </object> - <string key="NSAction">_popUpItemAction:</string> - <reference key="NSTarget" ref="1073502186"/> - </object> - <bool key="NSMenuItemRespectAlignment">YES</bool> - <object class="NSMenu" key="NSMenu" id="768660937"> - <string key="NSTitle">OtherViews</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="662787728"> - <reference key="NSMenu" ref="768660937"/> - <string key="NSTitle">^Item 1</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="149491055"/> - <reference key="NSMixedImage" ref="291068490"/> - <string key="NSAction">_popUpItemAction:</string> - <reference key="NSTarget" ref="1073502186"/> - </object> - <reference ref="180141984"/> - </object> - </object> - <int key="NSSelectedIndex">1</int> - <int key="NSPreferredEdge">1</int> - <bool key="NSUsesItemFromMenu">YES</bool> - <bool key="NSAltersState">YES</bool> - <int key="NSArrowPosition">2</int> - </object> - </object> - <object class="NSButton" id="739084402"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{154, 33}, {106, 18}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="450501437"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Checkbox 1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="739084402"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <object class="NSCustomResource" key="NSNormalImage" id="437083559"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSSwitch</string> - </object> - <object class="NSButtonImageSource" key="NSAlternateImage" id="634128218"> - <string key="NSImageName">NSSwitch</string> - </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="484232841"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{291, 33}, {106, 18}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="468013402"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Checkbox 2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="484232841"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="437083559"/> - <reference key="NSAlternateImage" ref="634128218"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSMatrix" id="413705031"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{351, 172}, {87, 38}}</string> - <reference key="NSSuperview" ref="1006"/> - <bool key="NSEnabled">YES</bool> - <int key="NSNumRows">2</int> - <int key="NSNumCols">1</int> - <object class="NSMutableArray" key="NSCells"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButtonCell" id="232253570"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Radio 1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="413705031"/> - <int key="NSTag">1</int> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSButtonImageSource" key="NSAlternateImage" id="182487189"> - <string key="NSImageName">NSRadioButton</string> - </object> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - <object class="NSButtonCell" id="310759369"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Radio 2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="413705031"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw -cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA -AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA -BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA -AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA -AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 -cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD -AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH -SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF -hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8 -vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt -7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq -Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo -aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e -n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX -2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW -FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O -Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6 -ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt -rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA -AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA -AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl -A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq -DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU -HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8 -MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v -UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/ -eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj -rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn -5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh -AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK -CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY -GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95 -MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S -UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2 -d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV -pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK -0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf// -AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw -BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA -FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H -LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh -Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ -h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp -svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb -1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX -8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE -AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg -QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes> - </object> - </object> - </object> - </object> - <object class="NSColor" key="NSColor" id="1027339248"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwAA</bytes> - </object> - </object> - <reference key="NSAlternateImage" ref="182487189"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <string key="NSCellSize">{87, 18}</string> - <string key="NSIntercellSpacing">{4, 2}</string> - <int key="NSMatrixFlags">1151868928</int> - <string key="NSCellClass">NSActionCell</string> - <object class="NSButtonCell" key="NSProtoCell" id="819072791"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="168773824"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> - </object> - </object> - </object> - </object> - <reference key="NSColor" ref="1027339248"/> - </object> - <reference key="NSAlternateImage" ref="182487189"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - <reference key="NSSelectedCell" ref="232253570"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <object class="NSColor" key="NSCellBackgroundColor" id="695371698"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MQA</bytes> - </object> - <reference key="NSFont" ref="168773824"/> - </object> - <object class="NSBox" id="984598066"> - <reference key="NSNextResponder" ref="1006"/> - <int key="NSvFlags">36</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSView" id="100149852"> - <reference key="NSNextResponder" ref="984598066"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="4735680"> - <reference key="NSNextResponder" ref="100149852"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 44}, {96, 22}}</string> - <reference key="NSSuperview" ref="100149852"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="1038573138"> - <int key="NSCellFlags">-1804468671</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="4735680"/> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSColor" key="NSBackgroundColor" id="407928047"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textBackgroundColor</string> - <reference key="NSColor" ref="695371698"/> - </object> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">textColor</string> - <reference key="NSColor" ref="41421868"/> - </object> - </object> - </object> - <object class="NSSearchField" id="774093761"> - <reference key="NSNextResponder" ref="100149852"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{18, 14}, {96, 22}}</string> - <reference key="NSSuperview" ref="100149852"/> - <bool key="NSEnabled">YES</bool> - <object class="NSSearchFieldCell" key="NSCell" id="685372699"> - <int key="NSCellFlags">343014976</int> - <int key="NSCellFlags2">268436480</int> - <string key="NSContents"/> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="774093761"/> - <bool key="NSDrawsBackground">YES</bool> - <int key="NSTextBezelStyle">1</int> - <reference key="NSBackgroundColor" ref="407928047"/> - <reference key="NSTextColor" ref="50010148"/> - <object class="NSButtonCell" key="NSSearchButtonCell"> - <int key="NSCellFlags">130560</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">search</string> - <reference key="NSControlView" ref="774093761"/> - <string key="NSAction">_searchFieldSearch:</string> - <reference key="NSTarget" ref="685372699"/> - <int key="NSButtonFlags">138690815</int> - <int key="NSButtonFlags2">0</int> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - <object class="NSButtonCell" key="NSCancelButtonCell"> - <int key="NSCellFlags">130560</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">clear</string> - <object class="NSMutableArray" key="NSAccessibilityOverriddenAttributes"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableDictionary"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>AXDescription</string> - <string>NSAccessibilityEncodedAttributesValueType</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>cancel</string> - <integer value="1"/> - </object> - </object> - </object> - <reference key="NSControlView" ref="774093761"/> - <string key="NSAction">_searchFieldCancel:</string> - <reference key="NSTarget" ref="685372699"/> - <int key="NSButtonFlags">138690815</int> - <int key="NSButtonFlags2">0</int> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - <int key="NSMaximumRecents">255</int> - </object> - </object> - </object> - <string key="NSFrame">{{1, 1}, {132, 76}}</string> - <reference key="NSSuperview" ref="984598066"/> - </object> - </object> - <string key="NSFrame">{{17, 82}, {134, 92}}</string> - <reference key="NSSuperview" ref="1006"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Bindings Tests</string> - <object class="NSFont" key="NSSupport" id="26"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">11</double> - <int key="NSfFlags">3100</int> - </object> - <reference key="NSBackgroundColor" ref="407928047"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <reference key="NSContentView" ref="100149852"/> - <int key="NSBorderType">1</int> - <int key="NSBoxType">0</int> - <int key="NSTitlePosition">2</int> - <bool key="NSTransparent">NO</bool> - </object> - </object> - <string key="NSFrameSize">{480, 270}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string> - <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> - </object> - <object class="NSWindowTemplate" id="655734033"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{196, 240}, {480, 270}}</string> - <int key="NSWTFlags">603979776</int> - <string key="NSWindowTitle">^WindowTest</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> - <object class="NSView" key="NSWindowView" id="769884725"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <string key="NSFrameSize">{480, 270}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {2560, 1578}}</string> - <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> - </object> - <object class="NSMenu" id="526087585"> - <string key="NSTitle">^MenuTest</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="383489140"> - <reference key="NSMenu" ref="526087585"/> - <string key="NSTitle">^MenuItemTest</string> - <string key="NSKeyEquiv"/> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="149491055"/> - <reference key="NSMixedImage" ref="291068490"/> - </object> - </object> - </object> - <object class="NSCustomObject" id="92471218"> - <string key="NSClassName">GTMUILocalizer</string> - </object> - <object class="NSWindowTemplate" id="158765462"> - <int key="NSWindowStyleMask">15</int> - <int key="NSWindowBacking">2</int> - <string key="NSWindowRect">{{196, 240}, {480, 270}}</string> - <int key="NSWTFlags">603979776</int> - <string key="NSWindowTitle">^WindowTest</string> - <string key="NSWindowClass">NSWindow</string> - <nil key="NSViewClass"/> - <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> - <object class="NSView" key="NSWindowView" id="405137086"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSBox" id="735149545"> - <reference key="NSNextResponder" ref="405137086"/> - <int key="NSvFlags">36</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSView" id="866377256"> - <reference key="NSNextResponder" ref="735149545"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="459731495"> - <reference key="NSNextResponder" ref="866377256"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{12, 38}, {100, 32}}</string> - <reference key="NSSuperview" ref="866377256"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="168106569"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">^Button1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="459731495"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">1</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="668934682"> - <reference key="NSNextResponder" ref="866377256"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{12, 6}, {100, 32}}</string> - <reference key="NSSuperview" ref="866377256"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="1004837764"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> - <string key="NSContents">^Button2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="668934682"/> - <int key="NSButtonFlags">-2038284033</int> - <int key="NSButtonFlags2">1</int> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{1, 1}, {124, 76}}</string> - <reference key="NSSuperview" ref="735149545"/> - </object> - </object> - <string key="NSFrame">{{32, 158}, {126, 92}}</string> - <reference key="NSSuperview" ref="405137086"/> - <string key="NSOffsets">{0, 0}</string> - <object class="NSTextFieldCell" key="NSTitleCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Box</string> - <reference key="NSSupport" ref="26"/> - <reference key="NSBackgroundColor" ref="407928047"/> - <object class="NSColor" key="NSTextColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes> - </object> - </object> - <reference key="NSContentView" ref="866377256"/> - <int key="NSBorderType">1</int> - <int key="NSBoxType">0</int> - <int key="NSTitlePosition">2</int> - <bool key="NSTransparent">NO</bool> - </object> - <object class="NSScrollView" id="846591189"> - <reference key="NSNextResponder" ref="405137086"/> - <int key="NSvFlags">268</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSClipView" id="864274176"> - <reference key="NSNextResponder" ref="846591189"/> - <int key="NSvFlags">2304</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomView" id="1048920215"> - <reference key="NSNextResponder" ref="864274176"/> - <int key="NSvFlags">274</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTextField" id="771041486"> - <reference key="NSNextResponder" ref="1048920215"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 20}, {72, 17}}</string> - <reference key="NSSuperview" ref="1048920215"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="138037384"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^Label2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="771041486"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <reference key="NSTextColor" ref="50010148"/> - </object> - </object> - <object class="NSMatrix" id="44026604"> - <reference key="NSNextResponder" ref="1048920215"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{20, 45}, {87, 38}}</string> - <reference key="NSSuperview" ref="1048920215"/> - <bool key="NSEnabled">YES</bool> - <int key="NSNumRows">2</int> - <int key="NSNumCols">1</int> - <object class="NSMutableArray" key="NSCells"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButtonCell" id="370153045"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Radio 1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="44026604"/> - <int key="NSTag">1</int> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <reference key="NSAlternateImage" ref="182487189"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - <object class="NSButtonCell" id="54210161"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Radio 2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="44026604"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw -cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA -AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA -BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA -AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA -AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 -cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD -AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH -SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF -hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8 -vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt -7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq -Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo -aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e -n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX -2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW -FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O -Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6 -ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt -rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA -AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA -AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl -A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq -DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU -HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8 -MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v -UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/ -eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj -rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn -5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh -AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK -CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY -GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95 -MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S -UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2 -d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV -pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK -0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf// -AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw -BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA -FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H -LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh -Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ -h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp -svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb -1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX -8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE -AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg -QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA</bytes> - </object> - </object> - </object> - </object> - <reference key="NSColor" ref="1027339248"/> - </object> - <reference key="NSAlternateImage" ref="182487189"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - </object> - <string key="NSCellSize">{87, 18}</string> - <string key="NSIntercellSpacing">{4, 2}</string> - <int key="NSMatrixFlags">1151868928</int> - <string key="NSCellClass">NSActionCell</string> - <object class="NSButtonCell" key="NSProtoCell" id="773257705"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">Radio</string> - <reference key="NSSupport" ref="168773824"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">0</int> - <object class="NSImage" key="NSNormalImage"> - <int key="NSImageFlags">549453824</int> - <string key="NSSize">{18, 18}</string> - <object class="NSMutableArray" key="NSReps"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="0"/> - <object class="NSBitmapImageRep"> - <object class="NSData" key="NSTIFFRepresentation"> - <bytes key="NS.bytes">TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA</bytes> - </object> - </object> - </object> - </object> - <reference key="NSColor" ref="1027339248"/> - </object> - <reference key="NSAlternateImage" ref="182487189"/> - <int key="NSPeriodicDelay">400</int> - <int key="NSPeriodicInterval">75</int> - </object> - <reference key="NSSelectedCell" ref="370153045"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <reference key="NSCellBackgroundColor" ref="695371698"/> - <reference key="NSFont" ref="168773824"/> - </object> - <object class="NSTextField" id="213996513"> - <reference key="NSNextResponder" ref="1048920215"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{17, 91}, {74, 17}}</string> - <reference key="NSSuperview" ref="1048920215"/> - <bool key="NSEnabled">YES</bool> - <object class="NSTextFieldCell" key="NSCell" id="279566570"> - <int key="NSCellFlags">68288064</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^Label1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="213996513"/> - <reference key="NSBackgroundColor" ref="1000162704"/> - <reference key="NSTextColor" ref="50010148"/> - </object> - </object> - </object> - <string key="NSFrameSize">{127, 128}</string> - <reference key="NSSuperview" ref="864274176"/> - <string key="NSClassName">NSView</string> - </object> - </object> - <string key="NSFrame">{{1, 1}, {127, 128}}</string> - <reference key="NSSuperview" ref="846591189"/> - <reference key="NSNextKeyView" ref="1048920215"/> - <reference key="NSDocView" ref="1048920215"/> - <reference key="NSBGColor" ref="1000162704"/> - <int key="NScvFlags">4</int> - </object> - <object class="NSScroller" id="282042269"> - <reference key="NSNextResponder" ref="846591189"/> - <int key="NSvFlags">256</int> - <string key="NSFrame">{{128, 1}, {15, 128}}</string> - <reference key="NSSuperview" ref="846591189"/> - <reference key="NSTarget" ref="846591189"/> - <string key="NSAction">_doScroller:</string> - <double key="NSCurValue">1</double> - <double key="NSPercent">0.9636363</double> - </object> - <object class="NSScroller" id="383137617"> - <reference key="NSNextResponder" ref="846591189"/> - <int key="NSvFlags">256</int> - <string key="NSFrame">{{1, 129}, {127, 15}}</string> - <reference key="NSSuperview" ref="846591189"/> - <int key="NSsFlags">1</int> - <reference key="NSTarget" ref="846591189"/> - <string key="NSAction">_doScroller:</string> - <double key="NSPercent">0.50602409999999998</double> - </object> - </object> - <string key="NSFrame">{{219, 101}, {144, 145}}</string> - <reference key="NSSuperview" ref="405137086"/> - <reference key="NSNextKeyView" ref="864274176"/> - <int key="NSsFlags">50</int> - <reference key="NSVScroller" ref="282042269"/> - <reference key="NSHScroller" ref="383137617"/> - <reference key="NSContentView" ref="864274176"/> - </object> - <object class="NSSplitView" id="161950549"> - <reference key="NSNextResponder" ref="405137086"/> - <int key="NSvFlags">256</int> - <object class="NSMutableArray" key="NSSubviews"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSButton" id="485121564"> - <reference key="NSNextResponder" ref="161950549"/> - <int key="NSvFlags">268</int> - <string key="NSFrameSize">{106, 18}</string> - <reference key="NSSuperview" ref="161950549"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="62569003"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Checkbox 1</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="485121564"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="437083559"/> - <reference key="NSAlternateImage" ref="634128218"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - <object class="NSButton" id="300872861"> - <reference key="NSNextResponder" ref="161950549"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{0, 27}, {106, 18}}</string> - <reference key="NSSuperview" ref="161950549"/> - <bool key="NSEnabled">YES</bool> - <object class="NSButtonCell" key="NSCell" id="241630681"> - <int key="NSCellFlags">-2080244224</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents">^Checkbox 2</string> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="300872861"/> - <int key="NSButtonFlags">1211912703</int> - <int key="NSButtonFlags2">2</int> - <reference key="NSNormalImage" ref="437083559"/> - <reference key="NSAlternateImage" ref="634128218"/> - <string key="NSAlternateContents"/> - <string key="NSKeyEquivalent"/> - <int key="NSPeriodicDelay">200</int> - <int key="NSPeriodicInterval">25</int> - </object> - </object> - </object> - <string key="NSFrame">{{42, 66}, {106, 45}}</string> - <reference key="NSSuperview" ref="405137086"/> - </object> - <object class="NSComboBox" id="311378109"> - <reference key="NSNextResponder" ref="405137086"/> - <int key="NSvFlags">268</int> - <string key="NSFrame">{{371, 180}, {92, 26}}</string> - <reference key="NSSuperview" ref="405137086"/> - <bool key="NSEnabled">YES</bool> - <object class="NSComboBoxCell" key="NSCell" id="693732256"> - <int key="NSCellFlags">343014976</int> - <int key="NSCellFlags2">272630784</int> - <string key="NSContents">^Label1</string> - <reference key="NSSupport" ref="168773824"/> - <string key="NSPlaceholderString">^Placeholder1</string> - <reference key="NSControlView" ref="311378109"/> - <bool key="NSDrawsBackground">YES</bool> - <reference key="NSBackgroundColor" ref="407928047"/> - <reference key="NSTextColor" ref="50010148"/> - <int key="NSVisibleItemCount">4</int> - <bool key="NSHasVerticalScroller">YES</bool> - <object class="NSMutableArray" key="NSPopUpListData"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>^Choice1</string> - <string>^Choice2</string> - <string>^Choice3</string> - <string>^Choice4</string> - <string>^Choice5</string> - </object> - <reference key="NSDelegate" ref="311378109"/> - <object class="NSComboTableView" key="NSTableView" id="743163681"> - <reference key="NSNextResponder"/> - <int key="NSvFlags">274</int> - <string key="NSFrameSize">{13, 105}</string> - <reference key="NSSuperview"/> - <reference key="NSWindow"/> - <bool key="NSEnabled">YES</bool> - <object class="NSMutableArray" key="NSTableColumns"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSTableColumn"> - <integer value="0" key="NSIdentifier"/> - <double key="NSWidth">10</double> - <double key="NSMinWidth">10</double> - <double key="NSMaxWidth">1000</double> - <object class="NSTableHeaderCell" key="NSHeaderCell"> - <int key="NSCellFlags">75628032</int> - <int key="NSCellFlags2">0</int> - <string key="NSContents"/> - <object class="NSFont" key="NSSupport"> - <string key="NSName">LucidaGrande</string> - <double key="NSSize">12</double> - <int key="NSfFlags">16</int> - </object> - <object class="NSColor" key="NSBackgroundColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC4zMzMzMzI5ODU2AA</bytes> - </object> - <reference key="NSTextColor" ref="695371698"/> - </object> - <object class="NSTextFieldCell" key="NSDataCell"> - <int key="NSCellFlags">338820672</int> - <int key="NSCellFlags2">1024</int> - <reference key="NSSupport" ref="168773824"/> - <reference key="NSControlView" ref="743163681"/> - <bool key="NSDrawsBackground">YES</bool> - <object class="NSColor" key="NSBackgroundColor" id="619521113"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">controlBackgroundColor</string> - <reference key="NSColor" ref="792644860"/> - </object> - <reference key="NSTextColor" ref="50010148"/> - </object> - <int key="NSResizingMask">3</int> - <bool key="NSIsResizeable">YES</bool> - <reference key="NSTableView" ref="743163681"/> - </object> - </object> - <double key="NSIntercellSpacingWidth">3</double> - <double key="NSIntercellSpacingHeight">2</double> - <reference key="NSBackgroundColor" ref="619521113"/> - <object class="NSColor" key="NSGridColor"> - <int key="NSColorSpace">6</int> - <string key="NSCatalogName">System</string> - <string key="NSColorName">gridColor</string> - <object class="NSColor" key="NSColor"> - <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC41AA</bytes> - </object> - </object> - <double key="NSRowHeight">19</double> - <string key="NSAction">tableViewAction:</string> - <int key="NSTvFlags">-765427712</int> - <reference key="NSDelegate" ref="693732256"/> - <reference key="NSDataSource" ref="693732256"/> - <reference key="NSTarget" ref="693732256"/> - <int key="NSColumnAutoresizingStyle">1</int> - <int key="NSDraggingSourceMaskForLocal">15</int> - <int key="NSDraggingSourceMaskForNonLocal">0</int> - <bool key="NSAllowsTypeSelect">YES</bool> - <int key="NSTableViewDraggingDestinationStyle">0</int> - </object> - </object> - </object> - </object> - <string key="NSFrameSize">{480, 270}</string> - <reference key="NSSuperview"/> - </object> - <string key="NSScreenRect">{{0, 0}, {2560, 1578}}</string> - <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> - </object> - <object class="NSUserDefaultsController" id="129694561"> - <bool key="NSSharedInstance">YES</bool> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">window</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="1005"/> - </object> - <int key="connectionID">3</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">owner_</string> - <reference key="source" ref="92471218"/> - <reference key="destination" ref="1001"/> - </object> - <int key="connectionID">32</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">otherWindow_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="655734033"/> - </object> - <int key="connectionID">33</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">otherMenu_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="526087585"/> - </object> - <int key="connectionID">34</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">anotherWindow_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="158765462"/> - </object> - <int key="connectionID">53</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">bindingsSearchField_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="774093761"/> - </object> - <int key="connectionID">102</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">bindingsTextField_</string> - <reference key="source" ref="1001"/> - <reference key="destination" ref="4735680"/> - </object> - <int key="connectionID">103</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBBindingConnection" key="connection"> - <string key="label">displayPatternValue1: values.foo</string> - <reference key="source" ref="1038573138"/> - <reference key="destination" ref="129694561"/> - <object class="NSNibBindingConnector" key="connector"> - <reference key="NSSource" ref="1038573138"/> - <reference key="NSDestination" ref="129694561"/> - <string key="NSLabel">displayPatternValue1: values.foo</string> - <string key="NSBinding">displayPatternValue1</string> - <string key="NSKeyPath">values.foo</string> - <object class="NSDictionary" key="NSOptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSDisplayPattern</string> - <string>NSMultipleValuesPlaceholder</string> - <string>NSNoSelectionPlaceholder</string> - <string>NSNotApplicablePlaceholder</string> - <string>NSNullPlaceholder</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>^DisplayPattern</string> - <string>^MultipleValuesPlaceholder</string> - <string>^NoSelectionPlaceholder</string> - <string>^NotApplicablePlaceholder</string> - <string>^NullPlaceholder</string> - </object> - </object> - <int key="NSNibBindingConnectorVersion">2</int> - </object> - </object> - <int key="connectionID">111</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBBindingConnection" key="connection"> - <string key="label">predicate: values.foo</string> - <reference key="source" ref="774093761"/> - <reference key="destination" ref="129694561"/> - <object class="NSNibBindingConnector" key="connector"> - <reference key="NSSource" ref="774093761"/> - <reference key="NSDestination" ref="129694561"/> - <string key="NSLabel">predicate: values.foo</string> - <string key="NSBinding">predicate</string> - <string key="NSKeyPath">values.foo</string> - <object class="NSDictionary" key="NSOptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSDisplayName</string> - <string>NSPredicateFormat</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>^DisplayName</string> - <string>keyPath contains $value</string> - </object> - </object> - <int key="NSNibBindingConnectorVersion">2</int> - </object> - </object> - <int key="connectionID">114</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBBindingConnection" key="connection"> - <string key="label">displayPatternValue1: values</string> - <reference key="source" ref="4735680"/> - <reference key="destination" ref="129694561"/> - <object class="NSNibBindingConnector" key="connector"> - <reference key="NSSource" ref="4735680"/> - <reference key="NSDestination" ref="129694561"/> - <string key="NSLabel">displayPatternValue1: values</string> - <string key="NSBinding">displayPatternValue1</string> - <string key="NSKeyPath">values</string> - <object class="NSDictionary" key="NSOptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSDisplayPattern</string> - <string>NSMultipleValuesPlaceholder</string> - <string>NSNoSelectionPlaceholder</string> - <string>NSNotApplicablePlaceholder</string> - <string>NSNullPlaceholder</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>^DisplayPattern</string> - <string>^MultipleValuesPlaceholder</string> - <string>^NoSelectionPlaceholder</string> - <string>^NotApplicablePlaceholder</string> - <string>^NullPlaceholder</string> - </object> - </object> - <int key="NSNibBindingConnectorVersion">2</int> - </object> - </object> - <int key="connectionID">119</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <reference key="object" ref="0"/> - <reference key="children" ref="1000"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1001"/> - <reference key="parent" ref="0"/> - <string key="objectName">File's Owner</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1003"/> - <reference key="parent" ref="0"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1004"/> - <reference key="parent" ref="0"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">1</int> - <reference key="object" ref="1005"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1006"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">2</int> - <reference key="object" ref="1006"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="934296854"/> - <reference ref="657027262"/> - <reference ref="1054080138"/> - <reference ref="18987080"/> - <reference ref="39833761"/> - <reference ref="197597199"/> - <reference ref="739084402"/> - <reference ref="484232841"/> - <reference ref="413705031"/> - <reference ref="984598066"/> - </object> - <reference key="parent" ref="1005"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">4</int> - <reference key="object" ref="934296854"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="768899742"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">5</int> - <reference key="object" ref="768899742"/> - <reference key="parent" ref="934296854"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">6</int> - <reference key="object" ref="657027262"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="105732693"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">7</int> - <reference key="object" ref="105732693"/> - <reference key="parent" ref="657027262"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">8</int> - <reference key="object" ref="1054080138"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="567210703"/> - <reference ref="786693096"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">9</int> - <reference key="object" ref="567210703"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="837485648"/> - </object> - <reference key="parent" ref="1054080138"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">10</int> - <reference key="object" ref="786693096"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="75519688"/> - </object> - <reference key="parent" ref="1054080138"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">11</int> - <reference key="object" ref="75519688"/> - <reference key="parent" ref="786693096"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">12</int> - <reference key="object" ref="837485648"/> - <reference key="parent" ref="567210703"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">13</int> - <reference key="object" ref="39833761"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="569396622"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">14</int> - <reference key="object" ref="569396622"/> - <reference key="parent" ref="39833761"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">15</int> - <reference key="object" ref="18987080"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="851209037"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">16</int> - <reference key="object" ref="851209037"/> - <reference key="parent" ref="18987080"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">22</int> - <reference key="object" ref="655734033"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="769884725"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">23</int> - <reference key="object" ref="769884725"/> - <reference key="parent" ref="655734033"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">24</int> - <reference key="object" ref="526087585"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="383489140"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">25</int> - <reference key="object" ref="383489140"/> - <reference key="parent" ref="526087585"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">30</int> - <reference key="object" ref="92471218"/> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">35</int> - <reference key="object" ref="197597199"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1073502186"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">36</int> - <reference key="object" ref="1073502186"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="768660937"/> - </object> - <reference key="parent" ref="197597199"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">37</int> - <reference key="object" ref="768660937"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="662787728"/> - <reference ref="180141984"/> - </object> - <reference key="parent" ref="1073502186"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">38</int> - <reference key="object" ref="662787728"/> - <reference key="parent" ref="768660937"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">39</int> - <reference key="object" ref="180141984"/> - <reference key="parent" ref="768660937"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">41</int> - <reference key="object" ref="739084402"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="450501437"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">42</int> - <reference key="object" ref="450501437"/> - <reference key="parent" ref="739084402"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">45</int> - <reference key="object" ref="484232841"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="468013402"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">46</int> - <reference key="object" ref="468013402"/> - <reference key="parent" ref="484232841"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">47</int> - <reference key="object" ref="413705031"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="232253570"/> - <reference ref="310759369"/> - <reference ref="819072791"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">48</int> - <reference key="object" ref="232253570"/> - <reference key="parent" ref="413705031"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">49</int> - <reference key="object" ref="310759369"/> - <reference key="parent" ref="413705031"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">50</int> - <reference key="object" ref="819072791"/> - <reference key="parent" ref="413705031"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">51</int> - <reference key="object" ref="158765462"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="405137086"/> - </object> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">52</int> - <reference key="object" ref="405137086"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="735149545"/> - <reference ref="846591189"/> - <reference ref="161950549"/> - <reference ref="311378109"/> - </object> - <reference key="parent" ref="158765462"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">70</int> - <reference key="object" ref="735149545"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="459731495"/> - <reference ref="668934682"/> - </object> - <reference key="parent" ref="405137086"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">54</int> - <reference key="object" ref="459731495"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="168106569"/> - </object> - <reference key="parent" ref="735149545"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">57</int> - <reference key="object" ref="168106569"/> - <reference key="parent" ref="459731495"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">55</int> - <reference key="object" ref="668934682"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1004837764"/> - </object> - <reference key="parent" ref="735149545"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">56</int> - <reference key="object" ref="1004837764"/> - <reference key="parent" ref="668934682"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">72</int> - <reference key="object" ref="846591189"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="282042269"/> - <reference ref="383137617"/> - <reference ref="1048920215"/> - </object> - <reference key="parent" ref="405137086"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">73</int> - <reference key="object" ref="282042269"/> - <reference key="parent" ref="846591189"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">74</int> - <reference key="object" ref="383137617"/> - <reference key="parent" ref="846591189"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">71</int> - <reference key="object" ref="1048920215"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="213996513"/> - <reference ref="44026604"/> - <reference ref="771041486"/> - </object> - <reference key="parent" ref="846591189"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">62</int> - <reference key="object" ref="213996513"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="279566570"/> - </object> - <reference key="parent" ref="1048920215"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">58</int> - <reference key="object" ref="44026604"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="773257705"/> - <reference ref="54210161"/> - <reference ref="370153045"/> - </object> - <reference key="parent" ref="1048920215"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">63</int> - <reference key="object" ref="771041486"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="138037384"/> - </object> - <reference key="parent" ref="1048920215"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">68</int> - <reference key="object" ref="138037384"/> - <reference key="parent" ref="771041486"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">59</int> - <reference key="object" ref="773257705"/> - <reference key="parent" ref="44026604"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">60</int> - <reference key="object" ref="54210161"/> - <reference key="parent" ref="44026604"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">61</int> - <reference key="object" ref="370153045"/> - <reference key="parent" ref="44026604"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">69</int> - <reference key="object" ref="279566570"/> - <reference key="parent" ref="213996513"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">76</int> - <reference key="object" ref="161950549"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="485121564"/> - <reference ref="300872861"/> - </object> - <reference key="parent" ref="405137086"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">64</int> - <reference key="object" ref="485121564"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="62569003"/> - </object> - <reference key="parent" ref="161950549"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">67</int> - <reference key="object" ref="62569003"/> - <reference key="parent" ref="485121564"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">65</int> - <reference key="object" ref="300872861"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="241630681"/> - </object> - <reference key="parent" ref="161950549"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">66</int> - <reference key="object" ref="241630681"/> - <reference key="parent" ref="300872861"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">97</int> - <reference key="object" ref="984598066"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="774093761"/> - <reference ref="4735680"/> - </object> - <reference key="parent" ref="1006"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">98</int> - <reference key="object" ref="774093761"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="685372699"/> - </object> - <reference key="parent" ref="984598066"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">99</int> - <reference key="object" ref="4735680"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1038573138"/> - </object> - <reference key="parent" ref="984598066"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">100</int> - <reference key="object" ref="1038573138"/> - <reference key="parent" ref="4735680"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">101</int> - <reference key="object" ref="685372699"/> - <reference key="parent" ref="774093761"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">104</int> - <reference key="object" ref="129694561"/> - <reference key="parent" ref="0"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">120</int> - <reference key="object" ref="311378109"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="693732256"/> - </object> - <reference key="parent" ref="405137086"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">121</int> - <reference key="object" ref="693732256"/> - <reference key="parent" ref="311378109"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> - <string>-3.IBPluginDependency</string> - <string>1.IBEditorWindowLastContentRect</string> - <string>1.IBPluginDependency</string> - <string>1.IBWindowTemplateEditedContentRect</string> - <string>1.NSWindowTemplate.visibleAtLaunch</string> - <string>1.WindowOrigin</string> - <string>1.editorWindowContentRectSynchronizationRect</string> - <string>10.IBPluginDependency</string> - <string>100.IBPluginDependency</string> - <string>101.IBPluginDependency</string> - <string>11.IBPluginDependency</string> - <string>12.IBPluginDependency</string> - <string>120.IBPluginDependency</string> - <string>120.IBViewBoundsToFrameTransform</string> - <string>121.IBPluginDependency</string> - <string>13.IBPluginDependency</string> - <string>14.IBPluginDependency</string> - <string>15.IBPluginDependency</string> - <string>16.IBPluginDependency</string> - <string>2.IBPluginDependency</string> - <string>22.IBEditorWindowLastContentRect</string> - <string>22.IBPluginDependency</string> - <string>22.IBWindowTemplateEditedContentRect</string> - <string>22.NSWindowTemplate.visibleAtLaunch</string> - <string>23.IBPluginDependency</string> - <string>24.IBEditorWindowLastContentRect</string> - <string>24.IBPluginDependency</string> - <string>25.IBPluginDependency</string> - <string>30.IBPluginDependency</string> - <string>35.IBPluginDependency</string> - <string>36.IBPluginDependency</string> - <string>37.IBEditorWindowLastContentRect</string> - <string>37.IBPluginDependency</string> - <string>38.IBPluginDependency</string> - <string>39.IBPluginDependency</string> - <string>4.IBPluginDependency</string> - <string>41.IBPluginDependency</string> - <string>42.IBPluginDependency</string> - <string>45.IBPluginDependency</string> - <string>46.IBPluginDependency</string> - <string>47.IBPluginDependency</string> - <string>48.IBPluginDependency</string> - <string>49.IBPluginDependency</string> - <string>5.IBPluginDependency</string> - <string>50.IBPluginDependency</string> - <string>51.IBEditorWindowLastContentRect</string> - <string>51.IBPluginDependency</string> - <string>51.IBWindowTemplateEditedContentRect</string> - <string>51.NSWindowTemplate.visibleAtLaunch</string> - <string>52.IBPluginDependency</string> - <string>54.IBPluginDependency</string> - <string>55.IBPluginDependency</string> - <string>56.IBPluginDependency</string> - <string>57.IBPluginDependency</string> - <string>58.IBPluginDependency</string> - <string>59.IBPluginDependency</string> - <string>6.IBPluginDependency</string> - <string>60.IBPluginDependency</string> - <string>61.IBPluginDependency</string> - <string>62.IBPluginDependency</string> - <string>63.IBPluginDependency</string> - <string>64.IBPluginDependency</string> - <string>65.IBPluginDependency</string> - <string>66.IBPluginDependency</string> - <string>67.IBPluginDependency</string> - <string>68.IBPluginDependency</string> - <string>69.IBPluginDependency</string> - <string>7.IBPluginDependency</string> - <string>8.IBPluginDependency</string> - <string>9.IBPluginDependency</string> - <string>98.IBPluginDependency</string> - <string>99.IBPluginDependency</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{174, 328}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{174, 328}, {480, 270}}</string> - <boolean value="NO"/> - <string>{196, 240}</string> - <string>{{357, 418}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <object class="NSAffineTransform"> - <bytes key="NSTransformStruct">P4AAAL+AAABDuYAAw0wAAA</bytes> - </object> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{387, 479}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{387, 479}, {480, 270}}</string> - <boolean value="NO"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{126, 673}, {161, 23}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{478, 980}, {122, 43}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{324, 285}, {480, 270}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{324, 285}, {480, 270}}</string> - <boolean value="NO"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference key="dict.sortedKeys" ref="0"/> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference key="dict.sortedKeys" ref="0"/> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">121</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizer</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>otherObjectToLocalize_</string> - <string>owner_</string> - <string>yetAnotherObjectToLocalize_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>id</string> - <string>id</string> - </object> - </object> - <object class="NSMutableDictionary" key="toOneOutletInfosByName"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>otherObjectToLocalize_</string> - <string>owner_</string> - <string>yetAnotherObjectToLocalize_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBToOneOutletInfo"> - <string key="name">otherObjectToLocalize_</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">owner_</string> - <string key="candidateClassName">id</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">yetAnotherObjectToLocalize_</string> - <string key="candidateClassName">id</string> - </object> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizerTestWindowController</string> - <string key="superclassName">NSWindowController</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>anotherWindow_</string> - <string>bindingsSearchField_</string> - <string>bindingsTextField_</string> - <string>otherMenu_</string> - <string>otherWindow_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSWindow</string> - <string>NSSearchField</string> - <string>NSTextField</string> - <string>NSMenu</string> - <string>NSWindow</string> - </object> - </object> - <object class="NSMutableDictionary" key="toOneOutletInfosByName"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>anotherWindow_</string> - <string>bindingsSearchField_</string> - <string>bindingsTextField_</string> - <string>otherMenu_</string> - <string>otherWindow_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBToOneOutletInfo"> - <string key="name">anotherWindow_</string> - <string key="candidateClassName">NSWindow</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">bindingsSearchField_</string> - <string key="candidateClassName">NSSearchField</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">bindingsTextField_</string> - <string key="candidateClassName">NSTextField</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">otherMenu_</string> - <string key="candidateClassName">NSMenu</string> - </object> - <object class="IBToOneOutletInfo"> - <string key="name">otherWindow_</string> - <string key="candidateClassName">NSWindow</string> - </object> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizerTest.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="485269976"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKitUnitTestingUtilities.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSBox</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSComboBox</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMatrix</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenuItem</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabViewItem</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="185574222"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMNSAnimatablePropertyContainer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="185574222"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="485269976"/> - </object> - </object> - <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">NSActionCell</string> - <string key="superclassName">NSCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <string key="superclassName">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="565747449"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="925504769"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="651790410"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSBox</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSBox.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButton</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSButton.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSButtonCell</string> - <string key="superclassName">NSActionCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSCell</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSComboBox</string> - <string key="superclassName">NSTextField</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSComboBox.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSComboBoxCell</string> - <string key="superclassName">NSTextFieldCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSComboBoxCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="187673849"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSControl.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSController</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSFormatter</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMatrix</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="117596544"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenuItem</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="384663051"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenuItemCell</string> - <string key="superclassName">NSButtonCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSMenuItemCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AddressBook.framework/Headers/ABActions.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="565747449"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="925504769"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="651790410"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="187673849"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <reference key="sourceIdentifier" ref="117596544"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="380080729"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSError.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSObject.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSThread.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURL.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">PrintCore.framework/Headers/PDEPluginInterface.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">QuartzCore.framework/Headers/CIImageProvider.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSPopUpButton</string> - <string key="superclassName">NSButton</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPopUpButton.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSPopUpButtonCell</string> - <string key="superclassName">NSMenuItemCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSPopUpButtonCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSResponder</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSScrollView</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSScrollView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSScroller</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSScroller.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSSearchField</string> - <string key="superclassName">NSTextField</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSearchField.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSSearchFieldCell</string> - <string key="superclassName">NSTextFieldCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSearchFieldCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSSplitView</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSSplitView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabView</string> - <string key="superclassName">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTabView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTabViewItem</string> - <string key="superclassName">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTabViewItem.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextField</string> - <string key="superclassName">NSControl</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTextField.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSTextFieldCell</string> - <string key="superclassName">NSActionCell</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSUserDefaultsController</string> - <string key="superclassName">NSController</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSUserDefaultsController.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="384663051"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <string key="superclassName">NSResponder</string> - <reference key="sourceIdentifier" ref="380080729"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <string key="superclassName">NSResponder</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindowController</string> - <string key="superclassName">NSResponder</string> - <object class="NSMutableDictionary" key="actions"> - <string key="NS.key.0">showWindow:</string> - <string key="NS.object.0">id</string> - </object> - <object class="NSMutableDictionary" key="actionInfosByName"> - <string key="NS.key.0">showWindow:</string> - <object class="IBActionInfo" key="NS.object.0"> - <string key="name">showWindow:</string> - <string key="candidateClassName">id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBFrameworkSource</string> - <string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string> - </object> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> - <integer value="1040" key="NS.object.0"/> - </object> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> - <integer value="1050" key="NS.object.0"/> - </object> - <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> - <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> - <integer value="3000" key="NS.object.0"/> - </object> - <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> - <string key="IBDocument.LastKnownRelativeProjectPath">../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>NSMenuCheckmark</string> - <string>NSMenuMixedState</string> - <string>NSSwitch</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>{9, 8}</string> - <string>{7, 2}</string> - <string>{15, 15}</string> - </object> - </object> - </data> -</archive> diff --git a/AppKit/GTMWindowSheetControllerTest.m b/AppKit/GTMWindowSheetControllerTest.m index 65ef084..6117371 100644 --- a/AppKit/GTMWindowSheetControllerTest.m +++ b/AppKit/GTMWindowSheetControllerTest.m @@ -18,7 +18,6 @@ #import "GTMSenTestCase.h" #import "GTMWindowSheetController.h" -#import "GTMNSObject+UnitTesting.h" @interface GTMWindowSheetControllerTest : GTMTestCase <GTMWindowSheetControllerDelegate, @@ -49,11 +48,11 @@ styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO] autorelease]; - STAssertNotNil(window, @"Could not allocate window"); + XCTAssertNotNil(window, @"Could not allocate window"); NSTabView *tabView = [[[NSTabView alloc] initWithFrame:NSMakeRect(10, 10, 580, 580)] autorelease]; - STAssertNotNil(tabView, @"Could not allocate tab view"); + XCTAssertNotNil(tabView, @"Could not allocate tab view"); [[window contentView] addSubview:tabView]; [tabView setDelegate:self]; @@ -70,10 +69,10 @@ [[[GTMWindowSheetController alloc] initWithWindow:window delegate:self] autorelease]; - STAssertFalse([sheetController_ isSheetAttachedToView: - [[tabView selectedTabViewItem] view]], - @"Sheet should not be attached to current view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertFalse([sheetController_ isSheetAttachedToView: + [[tabView selectedTabViewItem] view]], + @"Sheet should not be attached to current view"); + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)0, @"Should have no views with sheets"); @@ -98,19 +97,19 @@ nil]]; didAlertClose_ = NO; - STAssertTrue([sheetController_ isSheetAttachedToView: - [[tabView selectedTabViewItem] view]], - @"Sheet should be attached to current view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertTrue([sheetController_ isSheetAttachedToView: + [[tabView selectedTabViewItem] view]], + @"Sheet should be attached to current view"); + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)1, @"Should have one view with sheets"); [tabView selectTabViewItem:item2]; - STAssertFalse([sheetController_ isSheetAttachedToView: - [[tabView selectedTabViewItem] view]], - @"Sheet should not be attached to current view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertFalse([sheetController_ isSheetAttachedToView: + [[tabView selectedTabViewItem] view]], + @"Sheet should not be attached to current view"); + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)1, @"Should have one view with sheets"); @@ -128,52 +127,52 @@ contextInfo:nil]; didSheetClose_ = NO; - STAssertTrue([sheetController_ isSheetAttachedToView: - [[tabView selectedTabViewItem] view]], - @"Sheet should be attached to current view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertTrue([sheetController_ isSheetAttachedToView: + [[tabView selectedTabViewItem] view]], + @"Sheet should be attached to current view"); + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)2, @"Should have two views with sheets"); [tabView selectTabViewItem:item1]; - STAssertTrue([sheetController_ isSheetAttachedToView: - [[tabView selectedTabViewItem] view]], - @"Sheet should be attached to current view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertTrue([sheetController_ isSheetAttachedToView: + [[tabView selectedTabViewItem] view]], + @"Sheet should be attached to current view"); + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)2, @"Should have two views with sheets"); // Close alert [alertButton performClick:self]; - STAssertFalse([sheetController_ isSheetAttachedToView: - [[tabView selectedTabViewItem] view]], - @"Sheet should not be attached to current view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertFalse([sheetController_ isSheetAttachedToView: + [[tabView selectedTabViewItem] view]], + @"Sheet should not be attached to current view"); + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)1, @"Should have one view with sheets"); - STAssertTrue(didAlertClose_, @"Alert should have closed"); + XCTAssertTrue(didAlertClose_, @"Alert should have closed"); [tabView selectTabViewItem:item2]; - STAssertTrue([sheetController_ isSheetAttachedToView: - [[tabView selectedTabViewItem] view]], - @"Sheet should be attached to current view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertTrue([sheetController_ isSheetAttachedToView: + [[tabView selectedTabViewItem] view]], + @"Sheet should be attached to current view"); + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)1, @"Should have one view with sheets"); // Close sheet [[NSApplication sharedApplication] endSheet:sheet returnCode:NSOKButton]; - STAssertFalse([sheetController_ isSheetAttachedToView: - [[tabView selectedTabViewItem] view]], - @"Sheet should not be attached to current view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertFalse([sheetController_ isSheetAttachedToView: + [[tabView selectedTabViewItem] view]], + @"Sheet should not be attached to current view"); + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)0, @"Should have no views with sheets"); - STAssertTrue(didSheetClose_, @"Sheet should have closed"); + XCTAssertTrue(didSheetClose_, @"Sheet should have closed"); } - (void)testOpenSheetAfterFirst { @@ -183,16 +182,15 @@ styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO] autorelease]; - STAssertNotNil(window_, @"Could not allocate window"); + XCTAssertNotNil(window_, @"Could not allocate window"); sheetController_ = [[[GTMWindowSheetController alloc] initWithWindow:window_ delegate:self] autorelease]; - STAssertFalse([sheetController_ isSheetAttachedToView: - [window_ contentView]], - @"Sheet should not be attached to current view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertFalse([sheetController_ isSheetAttachedToView:[window_ contentView]], + @"Sheet should not be attached to current view"); + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)0, @"Should have no views with sheets"); @@ -225,34 +223,31 @@ didAlertClose_ = NO; didSheetClose_ = NO; - STAssertTrue([sheetController_ isSheetAttachedToView: - [window_ contentView]], + XCTAssertTrue([sheetController_ isSheetAttachedToView:[window_ contentView]], @"Sheet should be attached to view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)1, @"Should have one view with sheets"); // Close alert [alertButton performClick:self]; - STAssertTrue([sheetController_ isSheetAttachedToView: - [window_ contentView]], + XCTAssertTrue([sheetController_ isSheetAttachedToView:[window_ contentView]], @"Second sheet should be attached to view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)1, @"Should have one view with sheets"); - STAssertTrue(didAlertClose_, @"Alert should have closed"); + XCTAssertTrue(didAlertClose_, @"Alert should have closed"); // Close sheet [[NSApplication sharedApplication] endSheet:sheet returnCode:NSOKButton]; - STAssertFalse([sheetController_ isSheetAttachedToView: - [window_ contentView]], - @"Sheet should not be attached to current view"); - STAssertEquals([[sheetController_ viewsWithAttachedSheets] count], + XCTAssertFalse([sheetController_ isSheetAttachedToView:[window_ contentView]], + @"Sheet should not be attached to current view"); + XCTAssertEqual([[sheetController_ viewsWithAttachedSheets] count], (NSUInteger)0, @"Should have no views with sheets"); - STAssertTrue(didSheetClose_, @"Sheet should have closed"); + XCTAssertTrue(didSheetClose_, @"Sheet should have closed"); } - (void)alertDidEnd:(NSAlert *)alert @@ -283,13 +278,13 @@ } - (void)tabView:(NSTabView *)tabView -didSelectTabViewItem:(NSTabViewItem *)tabViewItem { + didSelectTabViewItem:(NSTabViewItem *)tabViewItem { NSView* view = [tabViewItem view]; [sheetController_ setActiveView:view]; } - (void)gtm_systemRequestsVisibilityForView:(NSView*)view { - STAssertTrue(false, @"Shouldn't be called"); + XCTAssertTrue(false, @"Shouldn't be called"); } @end diff --git a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest1.tiff b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest1.tiff Binary files differdeleted file mode 100644 index 8c81e1d..0000000 --- a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest1.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest2.tiff b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest2.tiff Binary files differdeleted file mode 100644 index d163833..0000000 --- a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest2.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest3.tiff b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest3.tiff Binary files differdeleted file mode 100644 index 6d7563a..0000000 --- a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest3.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest4.tiff b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest4.tiff Binary files differdeleted file mode 100644 index 77c03de..0000000 --- a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest4.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest5.tiff b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest5.tiff Binary files differdeleted file mode 100644 index 4d4635f..0000000 --- a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest5.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest6.tiff b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest6.tiff Binary files differdeleted file mode 100644 index c8b435d..0000000 --- a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest7.tiff b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest7.tiff Binary files differdeleted file mode 100644 index ac1dca6..0000000 --- a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest7.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest8.tiff b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest8.tiff Binary files differdeleted file mode 100644 index 47d70bd..0000000 --- a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest8.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMLargeTypeWindowImageTest.gtmUTState b/AppKit/TestData/GTMLargeTypeWindowImageTest.gtmUTState deleted file mode 100644 index 7a7512c..0000000 --- a/AppKit/TestData/GTMLargeTypeWindowImageTest.gtmUTState +++ /dev/null @@ -1,49 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>-1</integer> - <key>CellValue</key> - <dict> - <key>ImageSize</key> - <string>{128, 128}</string> - </dict> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSImageView</string> - <key>ControlValue</key> - <dict> - <key>ImageSize</key> - <string>{128, 128}</string> - </dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <true/> - <key>WindowTitle</key> - <string></string> -</dict> -</plist> diff --git a/AppKit/TestData/GTMLargeTypeWindowLongTextTest.10.6.gtmUTState b/AppKit/TestData/GTMLargeTypeWindowLongTextTest.10.6.gtmUTState deleted file mode 100644 index 563ae0c..0000000 --- a/AppKit/TestData/GTMLargeTypeWindowLongTextTest.10.6.gtmUTState +++ /dev/null @@ -1,1011 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Fonts</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Bold</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Italic</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Underline</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Outline</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Styles…</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>Font</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Font</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling and Grammar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Document Now</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Correct Spelling Automatically</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Quotes</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Dashes</string> - </dict> - <key>MenuItem 10</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuItem 11</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Data Detectors</string> - </dict> - <key>MenuItem 12</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Text Replacement</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Add Links</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Text</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Substitutions</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Dashes</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Make Upper Case</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Make Lower Case</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Capitalize</string> - </dict> - <key>MenuTitle</key> - <string>Transformations</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Transformations</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paragraph</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string> Default</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string> Left to Right</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string> Right to Left</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Selection</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string> Default</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string> Left to Right</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string> Right to Left</string> - </dict> - <key>MenuTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuTitle</key> - <string>Menu</string> - </dict> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <true/> - <key>WindowTitle</key> - <string></string> -</dict> -</plist> diff --git a/AppKit/TestData/GTMLargeTypeWindowLongTextTest.gtmUTState b/AppKit/TestData/GTMLargeTypeWindowLongTextTest.gtmUTState deleted file mode 100644 index 32d0b37..0000000 --- a/AppKit/TestData/GTMLargeTypeWindowLongTextTest.gtmUTState +++ /dev/null @@ -1,607 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Fonts</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Bold</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Italic</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Underline</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Outline</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Styles…</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>Font</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Font</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling and Grammar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Document Now</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string>Default</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Left to Right</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Right to Left</string> - </dict> - <key>MenuTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuTitle</key> - <string>Menu</string> - </dict> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <true/> - <key>WindowTitle</key> - <string></string> -</dict> -</plist> diff --git a/AppKit/TestData/GTMLargeTypeWindowMediumTextTest.10.6.gtmUTState b/AppKit/TestData/GTMLargeTypeWindowMediumTextTest.10.6.gtmUTState deleted file mode 100644 index 563ae0c..0000000 --- a/AppKit/TestData/GTMLargeTypeWindowMediumTextTest.10.6.gtmUTState +++ /dev/null @@ -1,1011 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Fonts</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Bold</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Italic</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Underline</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Outline</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Styles…</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>Font</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Font</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling and Grammar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Document Now</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Correct Spelling Automatically</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Quotes</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Dashes</string> - </dict> - <key>MenuItem 10</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuItem 11</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Data Detectors</string> - </dict> - <key>MenuItem 12</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Text Replacement</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Add Links</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Text</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Substitutions</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Dashes</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Make Upper Case</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Make Lower Case</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Capitalize</string> - </dict> - <key>MenuTitle</key> - <string>Transformations</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Transformations</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paragraph</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string> Default</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string> Left to Right</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string> Right to Left</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Selection</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string> Default</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string> Left to Right</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string> Right to Left</string> - </dict> - <key>MenuTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuTitle</key> - <string>Menu</string> - </dict> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <true/> - <key>WindowTitle</key> - <string></string> -</dict> -</plist> diff --git a/AppKit/TestData/GTMLargeTypeWindowMediumTextTest.gtmUTState b/AppKit/TestData/GTMLargeTypeWindowMediumTextTest.gtmUTState deleted file mode 100644 index 32d0b37..0000000 --- a/AppKit/TestData/GTMLargeTypeWindowMediumTextTest.gtmUTState +++ /dev/null @@ -1,607 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Fonts</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Bold</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Italic</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Underline</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Outline</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Styles…</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>Font</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Font</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling and Grammar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Document Now</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string>Default</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Left to Right</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Right to Left</string> - </dict> - <key>MenuTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuTitle</key> - <string>Menu</string> - </dict> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <true/> - <key>WindowTitle</key> - <string></string> -</dict> -</plist> diff --git a/AppKit/TestData/GTMLargeTypeWindowShortTextTest.10.6.gtmUTState b/AppKit/TestData/GTMLargeTypeWindowShortTextTest.10.6.gtmUTState deleted file mode 100644 index 563ae0c..0000000 --- a/AppKit/TestData/GTMLargeTypeWindowShortTextTest.10.6.gtmUTState +++ /dev/null @@ -1,1011 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Fonts</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Bold</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Italic</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Underline</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Outline</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Styles…</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>Font</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Font</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling and Grammar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Document Now</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Correct Spelling Automatically</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Quotes</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Dashes</string> - </dict> - <key>MenuItem 10</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuItem 11</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Data Detectors</string> - </dict> - <key>MenuItem 12</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Text Replacement</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Add Links</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Text</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Substitutions</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Dashes</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Make Upper Case</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Make Lower Case</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Capitalize</string> - </dict> - <key>MenuTitle</key> - <string>Transformations</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Transformations</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paragraph</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string> Default</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string> Left to Right</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string> Right to Left</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Selection</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string> Default</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string> Left to Right</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string> Right to Left</string> - </dict> - <key>MenuTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuTitle</key> - <string>Menu</string> - </dict> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <true/> - <key>WindowTitle</key> - <string></string> -</dict> -</plist> diff --git a/AppKit/TestData/GTMLargeTypeWindowShortTextTest.gtmUTState b/AppKit/TestData/GTMLargeTypeWindowShortTextTest.gtmUTState deleted file mode 100644 index 32d0b37..0000000 --- a/AppKit/TestData/GTMLargeTypeWindowShortTextTest.gtmUTState +++ /dev/null @@ -1,607 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Fonts</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Bold</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Italic</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Underline</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Outline</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Styles…</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>Font</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Font</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling and Grammar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Document Now</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string>Default</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Left to Right</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Right to Left</string> - </dict> - <key>MenuTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuTitle</key> - <string>Menu</string> - </dict> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <true/> - <key>WindowTitle</key> - <string></string> -</dict> -</plist> diff --git a/AppKit/TestData/GTMNSBezierPath+CGPathTest.ppc64.tiff b/AppKit/TestData/GTMNSBezierPath+CGPathTest.ppc64.tiff Binary files differdeleted file mode 100644 index 33c3e17..0000000 --- a/AppKit/TestData/GTMNSBezierPath+CGPathTest.ppc64.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMNSBezierPath+CGPathTest.tiff b/AppKit/TestData/GTMNSBezierPath+CGPathTest.tiff Binary files differdeleted file mode 100644 index 98ec8f8..0000000 --- a/AppKit/TestData/GTMNSBezierPath+CGPathTest.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMNSBezierPath+CGPathTest.x86_64.tiff b/AppKit/TestData/GTMNSBezierPath+CGPathTest.x86_64.tiff Binary files differdeleted file mode 100644 index 33c3e17..0000000 --- a/AppKit/TestData/GTMNSBezierPath+CGPathTest.x86_64.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMNSBezierPath+RoundRectTest.10.6.tiff b/AppKit/TestData/GTMNSBezierPath+RoundRectTest.10.6.tiff Binary files differdeleted file mode 100644 index b3e2fce..0000000 --- a/AppKit/TestData/GTMNSBezierPath+RoundRectTest.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMNSBezierPath+RoundRectTest.10.6.x86_64.tiff b/AppKit/TestData/GTMNSBezierPath+RoundRectTest.10.6.x86_64.tiff Binary files differdeleted file mode 100644 index 09675b1..0000000 --- a/AppKit/TestData/GTMNSBezierPath+RoundRectTest.10.6.x86_64.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMNSBezierPath+RoundRectTest.ppc64.tiff b/AppKit/TestData/GTMNSBezierPath+RoundRectTest.ppc64.tiff Binary files differdeleted file mode 100644 index 6e89cc1..0000000 --- a/AppKit/TestData/GTMNSBezierPath+RoundRectTest.ppc64.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMNSBezierPath+RoundRectTest.tiff b/AppKit/TestData/GTMNSBezierPath+RoundRectTest.tiff Binary files differdeleted file mode 100644 index 6e89cc1..0000000 --- a/AppKit/TestData/GTMNSBezierPath+RoundRectTest.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMNSBezierPath+RoundRectTest.x86_64.tiff b/AppKit/TestData/GTMNSBezierPath+RoundRectTest.x86_64.tiff Binary files differdeleted file mode 100644 index 0c9c300..0000000 --- a/AppKit/TestData/GTMNSBezierPath+RoundRectTest.x86_64.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMNSBezierPath+ShadingTest.10.6.tiff b/AppKit/TestData/GTMNSBezierPath+ShadingTest.10.6.tiff Binary files differdeleted file mode 100644 index 95dc623..0000000 --- a/AppKit/TestData/GTMNSBezierPath+ShadingTest.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMNSBezierPath+ShadingTest.tiff b/AppKit/TestData/GTMNSBezierPath+ShadingTest.tiff Binary files differdeleted file mode 100644 index b44b5bf..0000000 --- a/AppKit/TestData/GTMNSBezierPath+ShadingTest.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-0.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-0.10.6.tiff Binary files differdeleted file mode 100644 index 6780f1f..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-0.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-0.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-0.tiff Binary files differdeleted file mode 100644 index 86814a3..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-0.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-1.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-1.10.6.tiff Binary files differdeleted file mode 100644 index 5c35023..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-1.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-1.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-1.tiff Binary files differdeleted file mode 100644 index 31a44ba..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-1.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-2.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-2.10.6.tiff Binary files differdeleted file mode 100644 index 8946cee..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-2.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-2.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-2.tiff Binary files differdeleted file mode 100644 index b4c2375..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest1-2.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-0.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-0.10.6.tiff Binary files differdeleted file mode 100644 index ee94361..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-0.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-0.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-0.tiff Binary files differdeleted file mode 100644 index 25c53d9..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-0.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-1.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-1.10.6.tiff Binary files differdeleted file mode 100644 index 19cd92e..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-1.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-1.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-1.tiff Binary files differdeleted file mode 100644 index 26409a1..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-1.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-2.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-2.10.6.tiff Binary files differdeleted file mode 100644 index 479bf2f..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-2.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-2.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-2.tiff Binary files differdeleted file mode 100644 index 082e312..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest2-2.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-0.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-0.10.6.tiff Binary files differdeleted file mode 100644 index 9225709..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-0.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-0.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-0.tiff Binary files differdeleted file mode 100644 index 30c2a89..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-0.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-1.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-1.10.6.tiff Binary files differdeleted file mode 100644 index 28e2b17..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-1.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-1.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-1.tiff Binary files differdeleted file mode 100644 index d949898..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-1.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-2.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-2.10.6.tiff Binary files differdeleted file mode 100644 index e895173..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-2.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-2.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-2.tiff Binary files differdeleted file mode 100644 index 2d51e31..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-2.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-3.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-3.10.6.tiff Binary files differdeleted file mode 100644 index 410ed84..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-3.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-3.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-3.tiff Binary files differdeleted file mode 100644 index eb7b8fa..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-3.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-4.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-4.10.6.tiff Binary files differdeleted file mode 100644 index 11e07b9..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-4.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-4.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-4.tiff Binary files differdeleted file mode 100644 index 041b683..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest3-4.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10.6.7.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10.6.7.tiff Binary files differdeleted file mode 100644 index 480b89e..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10.6.7.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10.6.8.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10.6.8.tiff Binary files differdeleted file mode 100644 index 480b89e..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10.6.8.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10.6.tiff Binary files differdeleted file mode 100644 index 6ff76cc..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.7.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.7.tiff Binary files differdeleted file mode 100644 index e040930..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.7.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.8.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.8.tiff Binary files differdeleted file mode 100644 index e040930..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.8.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.tiff Binary files differdeleted file mode 100644 index 29c9762..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.tiff Binary files differdeleted file mode 100644 index 62ff8a1..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.tiff Binary files differdeleted file mode 100644 index 252ee9a..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-0.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10.6.7.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10.6.7.tiff Binary files differdeleted file mode 100644 index 9a7e936..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10.6.7.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10.6.8.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10.6.8.tiff Binary files differdeleted file mode 100644 index 9a7e936..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10.6.8.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10.6.tiff Binary files differdeleted file mode 100644 index 4e9db81..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.7.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.7.tiff Binary files differdeleted file mode 100644 index 5230658..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.7.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.8.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.8.tiff Binary files differdeleted file mode 100644 index 5230658..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.8.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.tiff Binary files differdeleted file mode 100644 index eb9815e..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.tiff Binary files differdeleted file mode 100644 index 17748e5..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.tiff Binary files differdeleted file mode 100644 index 2c1ddc7..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-1.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10.6.7.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10.6.7.tiff Binary files differdeleted file mode 100644 index 9f9d092..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10.6.7.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10.6.8.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10.6.8.tiff Binary files differdeleted file mode 100644 index 9f9d092..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10.6.8.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10.6.tiff Binary files differdeleted file mode 100644 index b548bff..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.7.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.7.tiff Binary files differdeleted file mode 100644 index c50bb1c..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.7.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.8.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.8.tiff Binary files differdeleted file mode 100644 index c50bb1c..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.8.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.tiff Binary files differdeleted file mode 100644 index f677712..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.tiff Binary files differdeleted file mode 100644 index 294237a..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.tiff Binary files differdeleted file mode 100644 index b63ef59..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest4-2.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-0.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-0.10.6.tiff Binary files differdeleted file mode 100644 index 46dc417..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-0.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-0.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-0.tiff Binary files differdeleted file mode 100644 index 97c6570..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-0.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-1.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-1.10.6.tiff Binary files differdeleted file mode 100644 index 3e12963..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-1.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-1.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-1.tiff Binary files differdeleted file mode 100644 index e15c2a6..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-1.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-2.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-2.10.6.tiff Binary files differdeleted file mode 100644 index ea4c671..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-2.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-2.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-2.tiff Binary files differdeleted file mode 100644 index a75f192..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest5-2.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-0.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-0.10.6.tiff Binary files differdeleted file mode 100644 index 4102a74..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-0.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-0.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-0.tiff Binary files differdeleted file mode 100644 index 0b6ced5..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-0.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-1.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-1.10.6.tiff Binary files differdeleted file mode 100644 index 5fe57d1..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-1.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-1.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-1.tiff Binary files differdeleted file mode 100644 index 2ba6f64..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-1.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-2.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-2.10.6.tiff Binary files differdeleted file mode 100644 index a978d11..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-2.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-2.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-2.tiff Binary files differdeleted file mode 100644 index e405f7f..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab0-2.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-0.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-0.10.6.tiff Binary files differdeleted file mode 100644 index 123d153..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-0.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-0.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-0.tiff Binary files differdeleted file mode 100644 index 0653128..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-0.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-1.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-1.10.6.tiff Binary files differdeleted file mode 100644 index b980cd4..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-1.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-1.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-1.tiff Binary files differdeleted file mode 100644 index 37054ee..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-1.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-2.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-2.10.6.tiff Binary files differdeleted file mode 100644 index ebb829f..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-2.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-2.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-2.tiff Binary files differdeleted file mode 100644 index 5940ef2..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest6-tab1-2.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-0.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-0.10.6.tiff Binary files differdeleted file mode 100644 index 77f6aa9..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-0.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-0.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-0.tiff Binary files differdeleted file mode 100644 index 8106dd4..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-0.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-1.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-1.10.6.tiff Binary files differdeleted file mode 100644 index 21df509..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-1.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-1.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-1.tiff Binary files differdeleted file mode 100644 index 1fd16b1..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-1.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-2.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-2.10.6.tiff Binary files differdeleted file mode 100644 index 97e5ffc..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-2.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-2.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-2.tiff Binary files differdeleted file mode 100644 index 11f0caf..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-2.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-3.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-3.10.6.tiff Binary files differdeleted file mode 100644 index 6a7cf51..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-3.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-3.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-3.tiff Binary files differdeleted file mode 100644 index ed584fe..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-Min-3.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.10.6.tiff Binary files differdeleted file mode 100644 index cac6f48..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.tiff Binary files differdeleted file mode 100644 index 3fab864..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.10.6.tiff Binary files differdeleted file mode 100644 index 9612f81..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.tiff Binary files differdeleted file mode 100644 index b12cad0..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.10.6.tiff Binary files differdeleted file mode 100644 index b1cc4e7..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.tiff Binary files differdeleted file mode 100644 index 4afb82f..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.10.6.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.10.6.tiff Binary files differdeleted file mode 100644 index 87b52ce..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.10.6.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.tiff b/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.tiff Binary files differdeleted file mode 100644 index 972271b..0000000 --- a/AppKit/TestData/GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.tiff +++ /dev/null diff --git a/AppKit/TestData/GTMUILocalizerWindow1State.10_4_SDK.gtmUTState b/AppKit/TestData/GTMUILocalizerWindow1State.10_4_SDK.gtmUTState deleted file mode 100644 index 84dde80..0000000 --- a/AppKit/TestData/GTMUILocalizerWindow1State.10_4_SDK.gtmUTState +++ /dev/null @@ -1,405 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Button</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>^Button2</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>TabItem 0</key> - <dict> - <key>TabLabel</key> - <string>Localized Tab</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>TabItem 1</key> - <dict> - <key>TabLabel</key> - <string>^Tab2</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Label</string> - <key>CellValue</key> - <string>Localized Label</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>Localized Label</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 4</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>^Label2</string> - <key>CellValue</key> - <string>^Label2</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>^Label2</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 5</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Item 2</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSPopUpButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Localized Item 1</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>1</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Localized Item 2</string> - </dict> - <key>MenuTitle</key> - <string>OtherViews</string> - </dict> - </dict> - <key>ViewSubView 6</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Checkbox 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 7</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Checkbox 2</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 8</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>1</integer> - <key>CellTitle</key> - <string>Localized Radio 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSMatrix</string> - <key>ControlValue</key> - <string>1</string> - <key>MatrixAllowEmptySelection</key> - <false/> - <key>MatrixAutosizesCells</key> - <true/> - <key>MatrixCell 0</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>1</integer> - <key>CellTitle</key> - <string>Localized Radio 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>MatrixCell 1</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Radio 2</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>MatrixCellPrototype</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Radio</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>MatrixColumnCount</key> - <integer>1</integer> - <key>MatrixIntercellSpacing</key> - <string>{4, 2}</string> - <key>MatrixMode</key> - <integer>0</integer> - <key>MatrixRowCount</key> - <integer>2</integer> - <key>MatrixSelectionByRect</key> - <true/> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 9</key> - <dict> - <key>BoxBorderType</key> - <integer>1</integer> - <key>BoxTitle</key> - <string>Bindings Tests</string> - <key>BoxTitlePosition</key> - <integer>2</integer> - <key>BoxType</key> - <integer>0</integer> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>DisplayPattern</string> - <key>CellValue</key> - <string>DisplayPattern</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>DisplayPattern</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string></string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSSearchField</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <false/> - <key>WindowTitle</key> - <string>Window</string> -</dict> -</plist> diff --git a/AppKit/TestData/GTMUILocalizerWindow1State.gtmUTState b/AppKit/TestData/GTMUILocalizerWindow1State.gtmUTState deleted file mode 100644 index ae95f53..0000000 --- a/AppKit/TestData/GTMUILocalizerWindow1State.gtmUTState +++ /dev/null @@ -1,426 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Button</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>^Button2</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>TabItem 0</key> - <dict> - <key>TabLabel</key> - <string>Localized Tab</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>TabItem 1</key> - <dict> - <key>TabLabel</key> - <string>^Tab2</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Label</string> - <key>CellValue</key> - <string>Localized Label</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>Localized Label</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 4</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>^Label2</string> - <key>CellValue</key> - <string>^Label2</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>^Label2</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 5</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Item 2</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSPopUpButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Localized Item 1</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>1</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Localized Item 2</string> - </dict> - <key>MenuTitle</key> - <string>OtherViews</string> - </dict> - </dict> - <key>ViewSubView 6</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Checkbox 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 7</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Checkbox 2</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 8</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>1</integer> - <key>CellTitle</key> - <string>Localized Radio 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSMatrix</string> - <key>ControlValue</key> - <string>1</string> - <key>MatrixAllowEmptySelection</key> - <false/> - <key>MatrixAutosizesCells</key> - <true/> - <key>MatrixCell 0</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>1</integer> - <key>CellTitle</key> - <string>Localized Radio 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>MatrixCell 1</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Radio 2</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>MatrixCellPrototype</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Radio</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>MatrixColumnCount</key> - <integer>1</integer> - <key>MatrixIntercellSpacing</key> - <string>{4, 2}</string> - <key>MatrixMode</key> - <integer>0</integer> - <key>MatrixRowCount</key> - <integer>2</integer> - <key>MatrixSelectionByRect</key> - <true/> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 9</key> - <dict> - <key>BoxBorderType</key> - <integer>1</integer> - <key>BoxTitle</key> - <string>Bindings Tests</string> - <key>BoxTitlePosition</key> - <integer>2</integer> - <key>BoxType</key> - <integer>0</integer> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>DisplayPattern</string> - <key>CellValue</key> - <string>DisplayPattern</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>DisplayPattern</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string></string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSSearchField</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <false/> - <key>WindowTitle</key> - <string>Window</string> - <key>WindowToolbar</key> - <dict> - <key>ToolbarItem 0</key> - <dict> - <key>Label</key> - <string>Localized Toolbar Item Label</string> - <key>PaletteLabel</key> - <string>Localized Toolbar Item Palette Label</string> - <key>ToolTip</key> - <string>Localized ToolTip</string> - </dict> - <key>ToolbarItem 1</key> - <dict> - <key>Label</key> - <string>ToolbarItemLabel</string> - <key>PaletteLabel</key> - <string>ToolbarItemPaletteLabel</string> - <key>ToolTip</key> - <string>ToolTip</string> - </dict> - </dict> -</dict> -</plist> diff --git a/AppKit/TestData/GTMUILocalizerWindow2State.gtmUTState b/AppKit/TestData/GTMUILocalizerWindow2State.gtmUTState deleted file mode 100644 index fa3e97a..0000000 --- a/AppKit/TestData/GTMUILocalizerWindow2State.gtmUTState +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <false/> - <key>WindowTitle</key> - <string>Localized Window</string> -</dict> -</plist> diff --git a/AppKit/TestData/GTMUILocalizerWindow3State.10_4_SDK.gtmUTState b/AppKit/TestData/GTMUILocalizerWindow3State.10_4_SDK.gtmUTState deleted file mode 100644 index ea1d10c..0000000 --- a/AppKit/TestData/GTMUILocalizerWindow3State.10_4_SDK.gtmUTState +++ /dev/null @@ -1,344 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>BoxBorderType</key> - <integer>1</integer> - <key>BoxTitle</key> - <string>Localized Box</string> - <key>BoxTitlePosition</key> - <integer>2</integer> - <key>BoxType</key> - <integer>0</integer> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Button</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>^Button2</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Label</string> - <key>CellValue</key> - <string>Localized Label</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>Localized Label</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>1</integer> - <key>CellTitle</key> - <string>Localized Radio 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSMatrix</string> - <key>ControlValue</key> - <string>1</string> - <key>MatrixAllowEmptySelection</key> - <false/> - <key>MatrixAutosizesCells</key> - <true/> - <key>MatrixCell 0</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>1</integer> - <key>CellTitle</key> - <string>Localized Radio 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>MatrixCell 1</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Radio 2</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>MatrixCellPrototype</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Radio</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>MatrixColumnCount</key> - <integer>1</integer> - <key>MatrixIntercellSpacing</key> - <string>{4, 2}</string> - <key>MatrixMode</key> - <integer>0</integer> - <key>MatrixRowCount</key> - <integer>2</integer> - <key>MatrixSelectionByRect</key> - <true/> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>^Label2</string> - <key>CellValue</key> - <string>^Label2</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>^Label2</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Checkbox 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Checkbox 2</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ComboBoxNumberOfItems</key> - <integer>5</integer> - <key>ComboBoxNumberOfVisibleItems</key> - <integer>4</integer> - <key>ComboBoxObjectValue 0</key> - <string>Localized Choice 1</string> - <key>ComboBoxObjectValue 1</key> - <string>Localized Choice 2</string> - <key>ComboBoxObjectValue 2</key> - <string>Localized Choice 3</string> - <key>ComboBoxObjectValue 3</key> - <string>^Choice4</string> - <key>ComboBoxObjectValue 4</key> - <string>^Choice5</string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Label</string> - <key>CellValue</key> - <string>Localized Label</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSComboBox</string> - <key>ControlValue</key> - <string>Localized Label</string> - <key>PlaceHolderString</key> - <string>Localized Placeholder</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <false/> - <key>WindowTitle</key> - <string>Localized Window</string> -</dict> -</plist> diff --git a/AppKit/TestData/GTMUILocalizerWindow3State.gtmUTState b/AppKit/TestData/GTMUILocalizerWindow3State.gtmUTState deleted file mode 100644 index 6958e6e..0000000 --- a/AppKit/TestData/GTMUILocalizerWindow3State.gtmUTState +++ /dev/null @@ -1,376 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>BoxBorderType</key> - <integer>1</integer> - <key>BoxTitle</key> - <string>Localized Box</string> - <key>BoxTitlePosition</key> - <integer>2</integer> - <key>BoxType</key> - <integer>0</integer> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Button</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>^Button2</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Label</string> - <key>CellValue</key> - <string>Localized Label</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>Localized Label</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>1</integer> - <key>CellTitle</key> - <string>Localized Radio 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSMatrix</string> - <key>ControlValue</key> - <string>1</string> - <key>MatrixAllowEmptySelection</key> - <false/> - <key>MatrixAutosizesCells</key> - <true/> - <key>MatrixCell 0</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>1</integer> - <key>CellTitle</key> - <string>Localized Radio 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>MatrixCell 1</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Radio 2</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>MatrixCellPrototype</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Radio</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>MatrixColumnCount</key> - <integer>1</integer> - <key>MatrixIntercellSpacing</key> - <string>{4, 2}</string> - <key>MatrixMode</key> - <integer>0</integer> - <key>MatrixRowCount</key> - <integer>2</integer> - <key>MatrixSelectionByRect</key> - <true/> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>^Label2</string> - <key>CellValue</key> - <string>^Label2</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>^Label2</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Checkbox 1</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Checkbox 2</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string></string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSSegmentedControl</string> - <key>ControlValue</key> - <string>1</string> - <key>Segment 0</key> - <string>Localized Segment 1</string> - <key>Segment 1</key> - <string>Localized Segment 2</string> - <key>Segment 2</key> - <string>^Seg3</string> - <key>SegmentCount</key> - <integer>3</integer> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 4</key> - <dict> - <key>ComboBoxNumberOfItems</key> - <integer>5</integer> - <key>ComboBoxNumberOfVisibleItems</key> - <integer>4</integer> - <key>ComboBoxObjectValue 0</key> - <string>Localized Choice 1</string> - <key>ComboBoxObjectValue 1</key> - <string>Localized Choice 2</string> - <key>ComboBoxObjectValue 2</key> - <string>Localized Choice 3</string> - <key>ComboBoxObjectValue 3</key> - <string>^Choice4</string> - <key>ComboBoxObjectValue 4</key> - <string>^Choice5</string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Localized Label</string> - <key>CellValue</key> - <string>Localized Label</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSComboBox</string> - <key>ControlValue</key> - <string>Localized Label</string> - <key>PlaceHolderString</key> - <string>Localized Placeholder</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <false/> - <key>WindowTitle</key> - <string>Localized Window</string> -</dict> -</plist> diff --git a/AppKit/TestData/Resources/English.lproj/Localizable.strings b/AppKit/TestData/Resources/English.lproj/Localizable.strings index b45dc87..b975f9b 100644 --- a/AppKit/TestData/Resources/English.lproj/Localizable.strings +++ b/AppKit/TestData/Resources/English.lproj/Localizable.strings @@ -36,7 +36,6 @@ "Item 1" = "Localized Item 1"; "Item 2" = "Localized Item 2"; "Checkbox 1" = "Localized Checkbox 1"; -"Checkbox 2" = "Localized Checkbox 2"; "Radio 1" = "Localized Radio 1"; "Radio 2" = "Localized Radio 2"; "Box" = "Localized Box"; diff --git a/DebugUtils/GTMDebugThreadValidationTest.m b/DebugUtils/GTMDebugThreadValidationTest.m deleted file mode 100644 index 66bd51b..0000000 --- a/DebugUtils/GTMDebugThreadValidationTest.m +++ /dev/null @@ -1,110 +0,0 @@ -// -// GTMDebugThreadValidationTest.m -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMDebugThreadValidation.h" - -// GTMDebugThreadValidation only happens on debug builds -#if DEBUG - -@interface GTMDebugThreadValidationTest : GTMTestCase -@end - -// A cheap flag for knowing when our thread has run - -static volatile BOOL gGTMDebugThreadValidationTestDone = NO; - -// This is an assertion handler that just records that an assertion has fired. -@interface GTMDebugThreadValidationCheckAssertionHandler : NSAssertionHandler { - @private - BOOL handledAssertion_; -} -- (void)handleFailureInMethod:(SEL)selector - object:(id)object - file:(NSString *)fileName - lineNumber:(NSInteger)line - description:(NSString *)format,...; - -- (void)handleFailureInFunction:(NSString *)functionName - file:(NSString *)fileName - lineNumber:(NSInteger)line - description:(NSString *)format,...; -- (BOOL)didHandleAssertion; -@end - -@implementation GTMDebugThreadValidationTest -- (void)testOnMainThread { - STAssertNoThrow(GTMAssertRunningOnMainThread(), nil); -} - -- (void)threadFunc:(NSMutableString *)result { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - // We'll insert our own assertion handler that will get called on the assert - // so that we don't have to worry about the log, and exception being thrown. - GTMDebugThreadValidationCheckAssertionHandler *handler = - [[[GTMDebugThreadValidationCheckAssertionHandler alloc] init] autorelease]; - NSMutableDictionary *threadDictionary - = [[NSThread currentThread] threadDictionary]; - [threadDictionary setObject:handler forKey:@"NSAssertionHandler"]; - GTMAssertRunningOnMainThread(); - if ([handler didHandleAssertion]) { - [result setString:@"ASSERTED"]; - } - [threadDictionary removeObjectForKey:@"NSAssertionHandler"]; - gGTMDebugThreadValidationTestDone = YES; - [pool release]; -} - -- (void)testOnOtherThread { - NSMutableString *result = [NSMutableString string]; - gGTMDebugThreadValidationTestDone = NO; - [NSThread detachNewThreadSelector:@selector(threadFunc:) - toTarget:self - withObject:result]; - NSRunLoop *loop = [NSRunLoop currentRunLoop]; - - while (!gGTMDebugThreadValidationTestDone) { - NSDate *date = [NSDate dateWithTimeIntervalSinceNow:0.01]; - [loop runUntilDate:date]; - } - STAssertEqualStrings(result, @"ASSERTED", @"GTMAssertRunningOnMainThread did " - @"not assert while running on another thread"); -} -@end - -@implementation GTMDebugThreadValidationCheckAssertionHandler - -- (void)handleFailureInMethod:(SEL)selector - object:(id)object - file:(NSString *)fileName - lineNumber:(NSInteger)line - description:(NSString *)format,... { - handledAssertion_ = YES; -} - -- (void)handleFailureInFunction:(NSString *)functionName - file:(NSString *)fileName - lineNumber:(NSInteger)line - description:(NSString *)format,... { - handledAssertion_ = YES; -} - -- (BOOL)didHandleAssertion { - return handledAssertion_; -} -@end -#endif // DEBUG diff --git a/Foundation/GTMAbstractDOListener.h b/Foundation/GTMAbstractDOListener.h deleted file mode 100644 index 104ec05..0000000 --- a/Foundation/GTMAbstractDOListener.h +++ /dev/null @@ -1,231 +0,0 @@ -// -// GTMAbstractDOListener.h -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// -#import <Foundation/Foundation.h> -#import "GTMDefines.h" - -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -@class GTMReceivePortDelegate; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - -// Abstract base class for DO "listeners". -// A class that needs to vend itself over DO should subclass this abstract -// class. This class takes care of certain things like creating a new thread -// to handle requests, setting request/reply timeouts, and ensuring the vended -// object only gets requests that comply with the specified protocol. -// -// Subclassers will want to use the -// GTM_ABSTRACTDOLISTENER_SUBCLASS_THREADMAIN_IMPL macro for easier debugging -// of stack traces. Please read it's description below. -// -@interface GTMAbstractDOListener : NSObject <NSConnectionDelegate> { - @protected - NSString *registeredName_; - GTM_WEAK Protocol *protocol_; - NSConnection *connection_; - BOOL isRunningInNewThread_; - BOOL shouldShutdown_; - NSTimeInterval requestTimeout_; - NSTimeInterval replyTimeout_; - NSPort *port_; - NSTimeInterval heartRate_; - -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - GTMReceivePortDelegate *receivePortDelegate_; // Strong (only used on Tiger) -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -} - -// Returns a set of all live instances of GTMAbstractDOListener subclasses. -// If no listeners have been created, this will return an empty array--not nil. -// -// TODO: Remove this method -// -+ (NSArray *)allListeners; - -// Initializer. This actually calls -// initWithRegisteredName:protocol:port with [NSMachPort port] as the port. -// -// Args: -// name - the name that the object will register under -// proto - the protocol that this object (self) should conform to -// -- (id)initWithRegisteredName:(NSString *)name protocol:(Protocol *)proto; - -// The designated initializer. -// -// Args: -// name - the name used to register the port. While not necessarily required -// for an NSSocketPort this class still requires it. -// proto - the protocol that this object (self) should conform to -// port - the port to be used when creating the NSConnection. If a NSMachPort -// is being used then initWithRegisteredName:protocol is recommended. -// Otherwise the port must be allocted by the caller. -// -- (id)initWithRegisteredName:(NSString *)name - protocol:(Protocol *)proto - port:(NSPort *)port; - -// Returns the name that this server will register with the -// mach port name sever. This is the name of the port that this class -// will "listen" on when -runInNewThread is called. -// -// Returns: -// The registered name as a string -// -- (NSString *)registeredName; - -// Sets the registered name to use when listening over DO. This only makes -// sense to be called before -runInNewThread has been called, because -// -runInNewThread will listen on this "registered name", so setting it -// afterwards would do nothing. -// -// Args: -// name - the name to register under. May not be nil. -// -- (void)setRegisteredName:(NSString *)name; - -// Get/set the request timeout interval. If set to a value less than 0, -// the default DO connection timeout will be used (maximum possible value). -// -- (NSTimeInterval)requestTimeout; -- (void)setRequestTimeout:(NSTimeInterval)timeout; - -// Get/set the reply timeout interval. If set to a value less than 0, -// the default DO connection timeout will be used (maximum possible value). -// -- (NSTimeInterval)replyTimeout; -- (void)setReplyTimeout:(NSTimeInterval)timeout; - -// Get/set how long the thread will spin the run loop. This only takes affect -// if runInNewThreadWithErrorTarget:selector:withObjectArgument: is used. The -// default heart rate is 10.0 seconds. -// -- (void)setThreadHeartRate:(NSTimeInterval)heartRate; -- (NSTimeInterval)ThreadHeartRate; - -// Returns the listeners associated NSConnection. May be nil if no connection -// has been setup yet. -// -- (NSConnection *)connection; - -// Starts the DO system listening using the current thread and current runloop. -// It only makes sense to call this method -OR- -runInNewThread, but not both. -// Returns YES if it was able to startup the DO listener, NO otherwise. -// -- (BOOL)runInCurrentThread; - -// Starts the DO system listening, and creates a new thread to handle the DO -// connections. It only makes sense to call this method -OR- -// -runInCurrentThread, but not both. -// if |errObject| is non nil, it will be used along with |selector| and -// |argument| to signal that the startup of the listener in the new thread -// failed. The actual selector will be invoked back on the main thread so -// it does not have to be thread safe. -// The most basic way to call this method is as follows: -// [listener runInNewThreadWithErrorTarget:nil -// selector:NULL -// withObjectArgument:nil]; -// -// Note: Using the example above you will not know if the listener failed to -// startup due to some error. -// -- (void)runInNewThreadWithErrorTarget:(id)errObject - selector:(SEL)selector - withObjectArgument:(id)argument; - -// Shuts down the connection. If it was running in a new thread, that thread -// should exit (within about 10 seconds). This call does not block. -// -// NOTE: This method is called in -dealloc, so if -runInNewThread had previously -// been called, -dealloc will return *before* the thread actually exits. This -// can be a problem as "self" may be gone before the thread exits. This is a -// bug and needs to be fixed. Currently, to be safe, only call -shutdown if -// -runInCurrentThread had previously been called. -// -- (void)shutdown; - -@end - - -// Methods that subclasses may implement to vary the behavior of this abstract -// class. -// -@interface GTMAbstractDOListener (GTMAbstractDOListenerSubclassMethods) - -// Called by the -runIn* methods. In the case where a new thread is being used, -// this method is called on the new thread. The default implementation of this -// method just returns YES, but subclasses can override it to do subclass -// specific initialization. If this method returns NO, the -runIn* method that -// called it will fail with an error. -// -// Returns: -// YES if the -runIn* method should continue successfully, NO if the it should -// fail. -// -- (BOOL)doRunInitialization; - -// Called as the "main" for the thread spun off by GTMAbstractDOListener. -// Not really for use by subclassers, except to use the -// GTMABSTRACTDOLISTENER_SUBCLASS_THREADMAIN_IMPL macro defined below. -// -// This method runs forever in a new thread. This method actually starts the -// DO connection listening. -// -- (void)threadMain:(NSInvocation *)failureCallback; - -@end - -// GTMAbstractDOListeners used to be hard to debug because crashes in their -// stacks looked like this: -// -// #0 0x90009cd7 in mach_msg_trap () -// #1 0x90009c38 in mach_msg () -// #2 0x9082d2b3 in CFRunLoopRunSpecific () -// #3 0x9082cace in CFRunLoopRunInMode () -// #4 0x9282ad3a in -[NSRunLoop runMode:beforeDate:] () -// #5 0x928788e4 in -[NSRunLoop runUntilDate:] () -// #6 0x00052696 in -[GTMAbstractDOListener(GTMAbstractDOListenerSubclassMethods) threadMain:] ... -// #7 0x927f52e0 in forkThreadForFunction () -// #8 0x90024227 in _pthread_body () -// -// and there was no good way to figure out what thread had the problem because -// they all originated from -// -[GTMAbstractDOListener(GTMAbstractDOListenerSubclassMethods) threadMain:] -// -// If you add GTMABSTRACTDOLISTENER_SUBCLASS_THREADMAIN_IMPL to the impl of your -// subclass you will get a stack that looks like this: -// #0 0x90009cd7 in mach_msg_trap () -// #1 0x90009c38 in mach_msg () -// #2 0x9082d2b3 in CFRunLoopRunSpecific () -// #3 0x9082cace in CFRunLoopRunInMode () -// #4 0x9282ad3a in -[NSRunLoop runMode:beforeDate:] () -// #5 0x928788e4 in -[NSRunLoop runUntilDate:] () -// #6 0x00052696 in -[GTMAbstractDOListener(GTMAbstractDOListenerSubclassMethods) threadMain:] ... -// #7 0x0004b35c in -[GDStatsListener threadMain:] -// #8 0x927f52e0 in forkThreadForFunction () #9 0x90024227 in _pthread_body () -// -// so we can see that this was the GDStatsListener thread that failed. -// It will look something like this -// @implemetation MySubclassOfGTMAbstractDOListenerSubclassMethods -// GTM_ABSTRACTDOLISTENER_SUBCLASS_THREADMAIN_IMPL -// .... -// @end - -#define GTM_ABSTRACTDOLISTENER_SUBCLASS_THREADMAIN_IMPL \ - - (void)threadMain:(NSInvocation *)failureCallback { \ - [super threadMain:failureCallback]; \ - } diff --git a/Foundation/GTMAbstractDOListener.m b/Foundation/GTMAbstractDOListener.m deleted file mode 100644 index 4ac69bd..0000000 --- a/Foundation/GTMAbstractDOListener.m +++ /dev/null @@ -1,454 +0,0 @@ -// -// GTMAbstractDOListener.m -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMAbstractDOListener.h" -#import "GTMSystemVersion.h" -#import <mach/mach_init.h> - -// Hack workaround suggested by DTS for the DO deadlock bug. Basically, this -// class intercepts the delegate role for DO's receive port (which is an -// NSMachPort). When -handlePortMessage: is called, it verifies that the send -// and receive ports are not nil, then forwards the message on to the original -// delegate. If the ports are nil, then the resulting NSConnection would -// eventually cause us to deadlock. In this case, it simply ignores the -// message. This is only need on Tiger. -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -@interface GTMReceivePortDelegate : NSObject { - GTM_WEAK id delegate_; -} -- (id)initWithDelegate:(id)delegate; -- (void)handlePortMessage:(NSPortMessage *)message; -@end -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - -@interface GTMAbstractDOListener (PrivateMethods) -- (BOOL)startListening; -- (void)stopListening; - -// Returns a description of the port based on the type of port. -- (NSString *)portDescription; - -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -// Uses the GTMReceivePortDelegate hack (see comments above) if we're on Tiger. -- (void)hackaroundTigerDOWedgeBug:(NSConnection *)conn; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -@end - -// Static global set that holds a pointer to all instances of -// GTMAbstractDOListener subclasses. -// -static NSMutableSet *gAllListeners = nil; - -@implementation GTMAbstractDOListener - -+ (void)initialize { - if (self == [GTMAbstractDOListener class]) { - // We create the set using CFSetCreateMutable because we don't - // want to retain things in this set. If we retained things in the - // set we would never be able to dealloc ourselves because we - // add "self" to this set in it's init routine would cause an - // extra retain to be added to it. - gAllListeners = (NSMutableSet*)CFSetCreateMutable(NULL, 0, NULL); - } -} - -+ (NSArray *)allListeners { - // We return an NSArray instead of an NSSet here because NSArrays look nicer - // when displayed as %@ - NSArray *allListeners = nil; - - @synchronized (gAllListeners) { - allListeners = [gAllListeners allObjects]; - } - return allListeners; -} - -- (id)init { - return [self initWithRegisteredName:nil protocol:NULL]; -} - -- (id)initWithRegisteredName:(NSString *)name protocol:(Protocol *)proto { - return [self initWithRegisteredName:name - protocol:proto - port:[NSMachPort port]]; -} - -- (id)initWithRegisteredName:(NSString *)name - protocol:(Protocol *)proto - port:(NSPort *)port { - self = [super init]; - if (!self) { - return nil; - } - - if ((!proto) || (!port) || (!name)) { - if (!proto) { - _GTMDevLog(@"Failed to create a listener, a protocol must be specified"); - } - - if (!port) { - _GTMDevLog(@"Failed to create a listener, a port must be specified"); - } - - if (!name) { - _GTMDevLog(@"Failed to create a listener, a name must be specified"); - } - - [self release]; - return nil; - } - - registeredName_ = [name copy]; - protocol_ = proto; // Can't retain protocols - port_ = [port retain]; - - requestTimeout_ = -1; - replyTimeout_ = -1; - - heartRate_ = (NSTimeInterval)10.0; - - _GTMDevAssert(gAllListeners, @"gAllListeners is not nil"); - @synchronized (gAllListeners) { - [gAllListeners addObject:self]; - } - - return self; -} - -- (void)dealloc { - _GTMDevAssert(gAllListeners, @"gAllListeners is not nil"); - @synchronized (gAllListeners) { - [gAllListeners removeObject:self]; - } - -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - [receivePortDelegate_ release]; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - - [self shutdown]; - [port_ release]; - [registeredName_ release]; - [super dealloc]; -} - - -#pragma mark Getters and Setters - -- (NSString *)registeredName { - return registeredName_; -} - -- (void)setRegisteredName:(NSString *)name { - if (!name) { - return; - } - [registeredName_ autorelease]; - registeredName_ = [name copy]; -} - -- (NSTimeInterval)requestTimeout { - return requestTimeout_; -} - -- (void)setRequestTimeout:(NSTimeInterval)timeout { - requestTimeout_ = timeout; -} - -- (NSTimeInterval)replyTimeout { - return replyTimeout_; -} - -- (void)setReplyTimeout:(NSTimeInterval)timeout { - replyTimeout_ = timeout; -} - -- (void)setThreadHeartRate:(NSTimeInterval)heartRate { - heartRate_ = heartRate; -} - -- (NSTimeInterval)ThreadHeartRate { - return heartRate_; -} - -- (NSConnection *)connection { - return connection_; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"%@<%p> { name=\"%@\", %@ }", - [self class], self, registeredName_, [self portDescription]]; -} - -#pragma mark "Run" methods - -- (BOOL)runInCurrentThread { - return [self startListening]; -} - -- (void)runInNewThreadWithErrorTarget:(id)errObject - selector:(SEL)selector - withObjectArgument:(id)argument { - NSInvocation *invocation = nil; - - _GTMDevAssert(((errObject != nil && selector != NULL) || - (!errObject && !selector)), @"errObject and selector must " - @"both be nil or not nil"); - - // create an invocation we can use if things fail - if (errObject) { - NSMethodSignature *signature = - [errObject methodSignatureForSelector:selector]; - invocation = [NSInvocation invocationWithMethodSignature:signature]; - [invocation setSelector:selector]; - [invocation setTarget:errObject]; - - // If the selector they passed in takes an arg (i.e., it has at least one - // colon in the selector name), then set the first user-specified arg to be - // the |argument| they specified. The first two args are self and _cmd. - if ([signature numberOfArguments] > 2) { - [invocation setArgument:&argument atIndex:2]; - } - - [invocation retainArguments]; - } - - shouldShutdown_ = NO; - [NSThread detachNewThreadSelector:@selector(threadMain:) - toTarget:self - withObject:invocation]; -} - -- (void)shutdown { - // If we're not running in a new thread (then we're running in the "current" - // thread), tear down the NSConnection here. If we are running in a new - // thread we just set the shouldShutdown_ flag, and the thread will teardown - // the NSConnection itself. - if (!isRunningInNewThread_) { - [self stopListening]; - } else { - shouldShutdown_ = YES; - } -} - -@end - -@implementation GTMAbstractDOListener (PrivateMethods) - -- (BOOL)startListening { - BOOL result = NO; - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - _GTMDevAssert(!connection_, @"Connection_ should not be set. Was this " - @"listener already started? %@", self); - connection_ = [[NSConnection alloc] initWithReceivePort:port_ sendPort:nil]; - - NSProtocolChecker *checker = - [NSProtocolChecker protocolCheckerWithTarget:self - protocol:protocol_]; - - if (requestTimeout_ >= 0) { - [connection_ setRequestTimeout:requestTimeout_]; - } - - if (replyTimeout_ >= 0) { - [connection_ setReplyTimeout:replyTimeout_]; - } - - // Set the connection's root object to be the protocol checker so that only - // methods listed in the protocol_ are available via DO. - [connection_ setRootObject:checker]; - - // Allow subclasses to be the connection delegate - [connection_ setDelegate:self]; - - // Because of radar 5493309 we need to do this. [NSConnection registeredName:] - // returns NO when the connection is created using an NSSocketPort under - // Leopard. - // - // The recommendation from Apple was to use the command: - // [NSConnection registerName:withNameServer:]. - NSPortNameServer *server; - if ([port_ isKindOfClass:[NSSocketPort class]]) { - server = [NSSocketPortNameServer sharedInstance]; - } else { - server = [NSPortNameServer systemDefaultPortNameServer]; - } - - BOOL registered = [connection_ registerName:registeredName_ - withNameServer:server]; - - if (registeredName_ && registered) { -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - [self hackaroundTigerDOWedgeBug:connection_]; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - - result = YES; - - _GTMDevLog(@"listening on %@ with name '%@'", [self portDescription], - registeredName_); - } else { - _GTMDevLog(@"failed to register %@ with %@", connection_, registeredName_); - } - - // we're good, so call the overrideable initializer - if (result) { - // Call the virtual "runIn*" initializer - result = [self doRunInitialization]; - } else { - [connection_ invalidate]; - [connection_ release]; - connection_ = nil; - } - - [pool drain]; - - return result; -} - -- (void)stopListening { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [connection_ invalidate]; - [connection_ release]; - connection_ = nil; - [pool drain]; -} - -- (NSString *)portDescription { - NSString *portDescription; - if ([port_ isKindOfClass:[NSMachPort class]]) { - portDescription = [NSString stringWithFormat:@"mach_port=%#x", - [(NSMachPort *)port_ machPort]]; - } else { - portDescription = [NSString stringWithFormat:@"port=%@", - [port_ description]]; - } - return portDescription; -} - -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -- (void)hackaroundTigerDOWedgeBug:(NSConnection *)conn { - if ([GTMSystemVersion isTiger]) { - NSPort *receivePort = [conn receivePort]; - if ([receivePort isKindOfClass:[NSMachPort class]]) { - id portDelegate = [receivePort delegate]; - receivePortDelegate_ = - [[GTMReceivePortDelegate alloc] initWithDelegate:portDelegate]; - [receivePort setDelegate:receivePortDelegate_]; - } - } -} -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - -@end - -@implementation GTMAbstractDOListener (GTMAbstractDOListenerSubclassMethods) - -- (BOOL)doRunInitialization { - return YES; -} - -// -// -threadMain: -// - -// -- (void)threadMain:(NSInvocation *)failureCallback { - isRunningInNewThread_ = YES; - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - // register - if ([self startListening]) { - // spin - for (;;) { // Run forever - - // check if we were asked to shutdown - if (shouldShutdown_) { - break; - } - - NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init]; - // Wrap our runloop in case we get an exception from DO - @try { - NSDate *waitDate = [NSDate dateWithTimeIntervalSinceNow:heartRate_]; - [[NSRunLoop currentRunLoop] runUntilDate:waitDate]; - } @catch (id e) { - _GTMDevLog(@"Listener '%@' caught exception: %@", registeredName_, e); - } - [localPool drain]; - } - } else { - // failed, if we had something to invoke, call it on the main thread - if (failureCallback) { - [failureCallback performSelectorOnMainThread:@selector(invoke) - withObject:nil - waitUntilDone:NO]; - } - } - - [self stopListening]; - [pool drain]; - - isRunningInNewThread_ = NO; -} - -@end - -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -@implementation GTMReceivePortDelegate - -- (id)initWithDelegate:(id)delegate { - if ((self = [super init])) { - delegate_ = delegate; // delegates aren't retained - } - return self; -} - -- (void)handlePortMessage:(NSPortMessage *)message { - NSPort *receivePort = [message receivePort]; - NSPort *sendPort = [message sendPort]; - - // If we don't have a sensible send or receive port, just act like - // the message never arrived. Otherwise, hand it off to the original - // delegate (which is the NSMachPort itself). - if (receivePort == nil || sendPort == nil || [receivePort isEqual:sendPort]) { - _GTMDevLog(@"Dropping port message destined for itself to avoid DO wedge."); - } else { - // Uncomment for super-duper verbose DO message forward logging - // _GTMDevLog(@"--> Forwarding message %@ to delegate %@", - // message, delegate_); - [delegate_ handlePortMessage:message]; - } - - // If processing the message caused us to drop no longer being the delegate, - // set us back. Due to interactions between NSConnection and NSMachPort, - // it's possible for the NSMachPort's delegate to get set back to its - // original value. If that happens, we set it back to the value we want. - if ([delegate_ delegate] != self) { - if ([delegate_ delegate] == delegate_) { - _GTMDevLog(@"Restoring DO delegate to %@", self); - [delegate_ setDelegate:self]; - } else { - _GTMDevLog(@"GMReceivePortDelegate replaced with %@", - [delegate_ delegate]); - } - } -} -@end -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 diff --git a/Foundation/GTMAbstractDOListenerTest.m b/Foundation/GTMAbstractDOListenerTest.m deleted file mode 100644 index 6a5a90a..0000000 --- a/Foundation/GTMAbstractDOListenerTest.m +++ /dev/null @@ -1,365 +0,0 @@ -// -// GTMAbstractDOListenerTest.m -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMAbstractDOListener.h" - -// Needed for GTMUnitTestDevLog expectPattern -#import "GTMUnitTestDevLog.h" - -// Used for request/reply timeouts -#define kDefaultTimeout 0.5 - -// Used when waiting for something to shutdown -#define kDelayTimeout 30.0 - -enum { - kGTMAbstractDOConditionWaiting = 123, - kGTMAbstractDOConditionReceivedMessage -}; - -#pragma mark - -#pragma mark Test Protocols - -@protocol TestServerDOProtocol -- (oneway void)testCommand; -- (in bycopy NSNumber *)delayResponseForTime:(in byref NSNumber *)delay; -@end - -@protocol TestServerEvilDOProtocol -// This command is not implemented, but is declared to remove all compiler -// warnings. -// -- (oneway void)evilCommand; -@end - -@protocol TestServerDelegateProtocol -- (void)clientSentMessage; -@end - -#pragma mark - -#pragma mark Test Server - -@interface TestServer : GTMAbstractDOListener<TestServerDOProtocol> { - @private - GTM_WEAK id delegate_; -} -- (void)setDelegate:(id)delegate; -@end - -@implementation TestServer - -- (void)setDelegate:(id)delegate { - delegate_ = delegate; -} - -- (in bycopy NSNumber *)delayResponseForTime:(in byref NSNumber *)delay { - NSDate *future = [NSDate dateWithTimeIntervalSinceNow:[delay doubleValue]]; - [NSThread sleepUntilDate:future]; - return [NSNumber numberWithDouble:kDefaultTimeout]; -} - -- (oneway void)testCommand { - [delegate_ performSelector:@selector(clientSentMessage)]; -} - -@end - -#pragma mark - -#pragma mark Test Client - -@interface TestClient : NSObject { - @private - id proxy_; - NSString *serverName_; -} -- (id)initWithName:(NSString *)name; -- (id)connect; -- (void)disconnect; -@end - -@implementation TestClient -- (id)initWithName:(NSString *)name { - self = [super init]; - if (self) { - serverName_ = [[NSString alloc] initWithString:name]; - if (!serverName_) { - [self release]; - self = nil; - } - } - return self; -} - -- (void)finalize { - [self disconnect]; - [super finalize]; -} - -- (void)dealloc { - [self disconnect]; - [serverName_ release]; - [super dealloc]; -} - -- (id)connect { - NSConnection *connection = - [NSConnection connectionWithRegisteredName:serverName_ host:nil]; - - [connection setReplyTimeout:kDefaultTimeout]; - [connection setRequestTimeout:kDefaultTimeout]; - - @try { - proxy_ = [[connection rootProxy] retain]; - } @catch (NSException *e) { - [self disconnect]; - } - return proxy_; -} - -- (void)disconnect { - NSConnection *connection = - [NSConnection connectionWithRegisteredName:serverName_ host:nil]; - [connection invalidate]; - [proxy_ release]; - proxy_ = nil; -} - -@end - -#pragma mark - -#pragma mark Tests - -@interface GTMAbstractDOListenerTest : GTMTestCase<TestServerDelegateProtocol> { - @private - NSConditionLock *lock_; -} -@end - -@implementation GTMAbstractDOListenerTest - -- (void)clientSentMessage { - NSDate *future = [NSDate dateWithTimeIntervalSinceNow:kDefaultTimeout]; - STAssertTrue([lock_ lockWhenCondition:kGTMAbstractDOConditionWaiting - beforeDate:future], @"Unable to acquire lock " - @"for client send message. This is BAD!"); - [lock_ unlockWithCondition:kGTMAbstractDOConditionReceivedMessage]; -} - -- (void)listenerErrorEncountered:(id)error { - // Do nothing -} - -- (void)testAbstractDOListenerProtocol { - lock_ = - [[NSConditionLock alloc] initWithCondition:kGTMAbstractDOConditionWaiting]; - [lock_ autorelease]; - - NSString *serverName = @"ProtoTest"; - - // Build and start the server - TestServer *listener = - [[TestServer alloc] initWithRegisteredName:serverName - protocol:@protocol(TestServerDOProtocol)]; - [listener autorelease]; - [listener setDelegate:self]; - [GTMUnitTestDevLog expectPattern:@"listening on.*"]; - [listener runInCurrentThread]; - - // Connect with our simple client - TestClient *client = - [[[TestClient alloc] initWithName:serverName] autorelease]; - id proxy = [client connect]; - STAssertNotNil(proxy, @"should have a proxy object"); - - [proxy testCommand]; - - NSDate *timeout = [NSDate dateWithTimeIntervalSinceNow:kDelayTimeout]; - while (![lock_ tryLockWhenCondition:kGTMAbstractDOConditionReceivedMessage] && - ([timeout compare:[NSDate date]] == NSOrderedDescending)) { - NSDate* runUntil = [NSDate dateWithTimeIntervalSinceNow:0.1]; - [[NSRunLoop currentRunLoop] runUntilDate:runUntil]; - } - - STAssertFalse([lock_ tryLockWhenCondition:kGTMAbstractDOConditionWaiting], - @"A message was never received from the client."); - - STAssertThrows([proxy evilCommand], - @"An exception should have been thrown for a method not in" - @"the specified protocol."); - - [client disconnect]; - [listener shutdown]; - - STAssertNil([listener connection], @"The connection should be nil after " - @"shutdown."); - - // We are done with the lock. - [lock_ unlockWithCondition:kGTMAbstractDOConditionWaiting]; -} - -- (void)testAbstractDOListenerBadInitializers { - [GTMUnitTestDevLog expectString: - @"Failed to create a listener, a protocol must be specified"]; - [GTMUnitTestDevLog expectString: - @"Failed to create a listener, a name must be specified"]; - TestServer *listener = [[TestServer alloc] init]; - STAssertNil(listener, @"We should not have created a server using init"); - - [GTMUnitTestDevLog expectString: - @"Failed to create a listener, a name must be specified"]; - listener = - [[TestServer alloc] initWithRegisteredName:nil - protocol:@protocol(TestServerDOProtocol) - port:[NSMachPort port]]; - STAssertNil(listener, @"We should not have created a server with a nil name"); - - [GTMUnitTestDevLog expectString: - @"Failed to create a listener, a protocol must be specified"]; - listener = - [[TestServer alloc] initWithRegisteredName:@"NilProtocol" - protocol:nil - port:[NSMachPort port]]; - STAssertNil(listener, - @"We should not have created a server with a nil protocol"); - - [GTMUnitTestDevLog expectString: - @"Failed to create a listener, a port must be specified"]; - listener = - [[TestServer alloc] initWithRegisteredName:@"NilPort" - protocol:@protocol(TestServerDOProtocol) - port:nil]; - STAssertNil(listener, @"We should not have created a server with a nil port"); - -} - -- (void)testAbstractDOListenerMultipleRegistration { - TestServer *listener = - [[[TestServer alloc] initWithRegisteredName:@"MyUniqueName" - protocol:@protocol(TestServerDOProtocol) - port:[NSMachPort port]] autorelease]; - [GTMUnitTestDevLog expectPattern:@"listening on.*"]; - [listener runInCurrentThread]; - - TestServer *copyCat = - [[[TestServer alloc] initWithRegisteredName:@"copyCat" - protocol:@protocol(TestServerDOProtocol) - port:[NSMachPort port]] autorelease]; - STAssertTrue(([[copyCat registeredName] isEqualToString:@"copyCat"]), - @"The name we set to register with is not correct."); - - TestServer *listener2 = - [[[TestServer alloc] initWithRegisteredName:@"MyUniqueName" - protocol:@protocol(TestServerDOProtocol) - port:[NSMachPort port]] autorelease]; - - [GTMUnitTestDevLog expectPattern:@"failed to register.*"]; - [listener2 runInCurrentThread]; - STAssertNil([listener2 connection], @"We should not have been able to create " - @"a server with a name that has already been taken."); -} - -- (void)testAbstractDOListenerRequestTimeout { - NSString *serverName = @"RequestTimeoutTest"; - - // Build and start the server - TestServer *listener = - [[TestServer alloc] initWithRegisteredName:serverName - protocol:@protocol(TestServerDOProtocol)]; - [listener autorelease]; - [listener setReplyTimeout:kDefaultTimeout]; - [listener setRequestTimeout:kDefaultTimeout]; - - STAssertLessThanOrEqual(ABS([listener replyTimeout] - kDefaultTimeout), - (kDefaultTimeout / pow(kDefaultTimeout, 15)), nil); - - STAssertLessThanOrEqual(ABS([listener requestTimeout] - kDefaultTimeout), - (kDefaultTimeout / pow(kDefaultTimeout, 15)), nil); - - NSTimeInterval customHeartRate = 0.25; - [listener setThreadHeartRate:0.25]; - - STAssertLessThanOrEqual(ABS([listener ThreadHeartRate] - customHeartRate), - (customHeartRate / pow(customHeartRate, 15)), nil); - - [GTMUnitTestDevLog expectPattern:@"listening on.*"]; - [listener runInNewThreadWithErrorTarget:self - selector:@selector(listenerErrorEncountered:) - withObjectArgument:nil]; - - // It will take a little while for the new thread to spin up and start - // listening. We will spin here and wait for it to come on-line. - NSDate *timeout = [NSDate dateWithTimeIntervalSinceNow:kDelayTimeout]; - while (![listener connection] && - ([timeout compare:[NSDate date]] == NSOrderedDescending)) { - NSDate *waitTime = [NSDate dateWithTimeIntervalSinceNow:0.05]; - [[NSRunLoop currentRunLoop] runUntilDate:waitTime]; - } - - STAssertNotNil([listener connection], - @"The server never created a connection."); - - // Connect with our simple client - TestClient *client = - [[[TestClient alloc] initWithName:serverName] autorelease]; - id proxy = [client connect]; - STAssertNotNil(proxy, @"should have a proxy object"); - - NSNumber *overDelay = [NSNumber numberWithDouble:(kDefaultTimeout + 0.25)]; - STAssertThrows([proxy delayResponseForTime:overDelay], - @"An exception should have been thrown for the response taking" - @"longer than the replyTimout."); - - [client disconnect]; - [listener shutdown]; - - timeout = [NSDate dateWithTimeIntervalSinceNow:kDelayTimeout]; - while ([listener connection] && - ([timeout compare:[NSDate date]] == NSOrderedDescending)) { - NSDate *waitTime = [NSDate dateWithTimeIntervalSinceNow:0.05]; - [[NSRunLoop currentRunLoop] runUntilDate:waitTime]; - } - - STAssertNil([listener connection], - @"The connection should be nil after shutdown."); -} - -- (void)testAbstractDOListenerRelease { - NSUInteger listenerCount = [[GTMAbstractDOListener allListeners] count]; - GTMAbstractDOListener *listener = - [[GTMAbstractDOListener alloc] initWithRegisteredName:@"FOO" - protocol:@protocol(NSObject) - port:[NSPort port]]; - STAssertNotNil(listener, nil); - - // We throw an autorelease pool here because allStores does a couple of - // autoreleased retains on us which would screws up our retain count - // numbers. - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - STAssertEquals([[GTMAbstractDOListener allListeners] count], - listenerCount + 1, nil); - [pool drain]; - - STAssertEquals([listener retainCount], (NSUInteger)1, nil); - - [listener release]; - STAssertEquals([[GTMAbstractDOListener allListeners] count], listenerCount, - nil); -} - -@end diff --git a/Foundation/GTMCalculatedRange.h b/Foundation/GTMCalculatedRange.h deleted file mode 100644 index c51181a..0000000 --- a/Foundation/GTMCalculatedRange.h +++ /dev/null @@ -1,105 +0,0 @@ -// -// GTMCalculatedRange.h -// -// This is a collection that allows you to calculate a value based on -// defined stops in a range. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> -#import "GTMDefines.h" -#if GTM_IPHONE_SDK -#import <CoreGraphics/CoreGraphics.h> -#endif // GTM_IPHONE_SDK - -/// Allows you to calculate a value based on defined stops in a range. -// -/// For example if you have a range from 0.0 to 1.0 where the stop -/// located at 0.0 is red and the stop located at 1.0 is blue, -/// the value based on the position 0.5 would come out as purple assuming -/// that the valueAtPosition function calculates a purely linear mapping between -/// the stops at 0.0 and 1.0. Stops have indices and are sorted from lowest to -/// highest. The example above would have 2 stops. Stop 0 would be red and stop -/// 1 would be blue. -/// -/// Subclasses of GTMCalculatedRange are expected to override the valueAtPosition: -/// method to return a value based on the position passed in, and the stops -/// that are currently set in the range. Stops do not necessarily have to -/// be the same type as the values that are calculated, but normally they are. -@interface GTMCalculatedRange : NSObject { - NSMutableArray *storage_; -} - -// Adds a stop to the range at |position|. If there is already a stop -// at position |position| it is replaced. -// -// Args: -// item: the object to place at |position|. -// position: the position in the range to put |item|. -// -- (void)insertStop:(id)item atPosition:(CGFloat)position; - -// Removes a stop from the range at |position|. -// -// Args: -// position: the position in the range to remove |item|. -// -// Returns: -// YES if there is a stop at |position| that has been removed -// NO if there is not a stop at the |position| -- (BOOL)removeStopAtPosition:(CGFloat)position; - -// Removes stop |index| from the range. Stops are ordered -// based on position where index of x < index of y if position -// of x < position of y. -// -// Args: -// item: the object to place at |position|. -// position: the position in the range to put |item|. -// -- (void)removeStopAtIndex:(NSUInteger)index; - -// Returns the number of stops in the range. -// -// Returns: -// number of stops -- (NSUInteger)stopCount; - -// Returns the value at position |position|. -// This function should be overridden by subclasses to calculate a -// value for any given range. -// The default implementation returns a value if there happens to be -// a stop for the given position. Otherwise it returns nil. -// -// Args: -// position: the position to calculate a value for. -// -// Returns: -// value for position -- (id)valueAtPosition:(CGFloat)position; - -// Returns the |index|'th stop and position in the set. -// Throws an exception if out of range. -// -// Args: -// index: the index of the stop -// outPosition: a pointer to a value to be filled in with a position. -// this can be NULL, in which case no position is returned. -// -// Returns: -// the stop at the index. -- (id)stopAtIndex:(NSUInteger)index position:(CGFloat*)outPosition; -@end diff --git a/Foundation/GTMCalculatedRange.m b/Foundation/GTMCalculatedRange.m deleted file mode 100644 index 3e8aa69..0000000 --- a/Foundation/GTMCalculatedRange.m +++ /dev/null @@ -1,148 +0,0 @@ -// -// GTMCalculatedRange.m -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMCalculatedRange.h" - -// Our internal storage type. It keeps track of an item and it's -// position. -@interface GTMCalculatedRangeStopPrivate : NSObject { - id item_; // the item (STRONG) - CGFloat position_; // -} -+ (id)stopWithObject:(id)item position:(CGFloat)inPosition; -- (id)initWithObject:(id)item position:(CGFloat)inPosition; -- (id)item; -- (CGFloat)position; -@end - -GTM_INLINE BOOL FPEqual(CGFloat a, CGFloat b) { - return (fpclassify(a - b) == FP_ZERO); -} - -@implementation GTMCalculatedRangeStopPrivate -+ (id)stopWithObject:(id)item position:(CGFloat)inPosition { - return [[[self alloc] initWithObject:item position:inPosition] autorelease]; -} - -- (id)initWithObject:(id)item position:(CGFloat)inPosition { - self = [super init]; - if (self != nil) { - item_ = [item retain]; - position_ = inPosition; - } - return self; -} - -- (void)dealloc { - [item_ release]; - [super dealloc]; -} - -- (id)item { - return item_; -} - -- (CGFloat)position { - return position_; -} - -- (NSString *)description { - return [NSString stringWithFormat: @"%f %@", position_, item_]; -} -@end - -@implementation GTMCalculatedRange -- (id)init { - self = [super init]; - if (self != nil) { - storage_ = [[NSMutableArray arrayWithCapacity:0] retain]; - } - return self; -} -- (void)dealloc { - [storage_ release]; - [super dealloc]; -} - -- (void)insertStop:(id)item atPosition:(CGFloat)position { - NSUInteger positionIndex = 0; - GTMCalculatedRangeStopPrivate *theStop; - GTM_FOREACH_OBJECT(theStop, storage_) { - if ([theStop position] < position) { - positionIndex += 1; - } - else if (FPEqual([theStop position], position)) { - // remove and stop the enum since we just modified the object - [storage_ removeObjectAtIndex:positionIndex]; - break; - } - } - [storage_ insertObject:[GTMCalculatedRangeStopPrivate stopWithObject:item position:position] - atIndex:positionIndex]; -} - -- (BOOL)removeStopAtPosition:(CGFloat)position { - NSUInteger positionIndex = 0; - BOOL foundStop = NO; - GTMCalculatedRangeStopPrivate *theStop; - GTM_FOREACH_OBJECT(theStop, storage_) { - if (FPEqual([theStop position], position)) { - break; - } else { - positionIndex += 1; - } - } - if (nil != theStop) { - [self removeStopAtIndex:positionIndex]; - foundStop = YES; - } - return foundStop; -} - -- (void)removeStopAtIndex:(NSUInteger)positionIndex { - [storage_ removeObjectAtIndex:positionIndex]; -} - -- (NSUInteger)stopCount { - return [storage_ count]; -} - -- (id)stopAtIndex:(NSUInteger)positionIndex position:(CGFloat*)outPosition { - GTMCalculatedRangeStopPrivate *theStop = [storage_ objectAtIndex:positionIndex]; - if (nil != outPosition) { - *outPosition = [theStop position]; - } - return [theStop item]; -} - -- (id)valueAtPosition:(CGFloat)position { - id theValue = nil; - GTMCalculatedRangeStopPrivate *theStop; - GTM_FOREACH_OBJECT(theStop, storage_) { - if (FPEqual([theStop position], position)) { - theValue = [theStop item]; - break; - } - } - return theValue; -} - -- (NSString *)description { - return [storage_ description]; -} -@end diff --git a/Foundation/GTMCalculatedRangeTest.m b/Foundation/GTMCalculatedRangeTest.m deleted file mode 100644 index 0806a0d..0000000 --- a/Foundation/GTMCalculatedRangeTest.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// GTMCalculatedRangeTest.m -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMCalculatedRange.h" -#import "GTMSenTestCase.h" - -@interface GTMCalculatedRangeTest : GTMTestCase { - GTMCalculatedRange *range_; -} -@end - -@implementation GTMCalculatedRangeTest -NSString *kStrings[] = { @"Fee", @"Fi", @"Fo", @"Fum" }; -const NSUInteger kStringCount = sizeof(kStrings) / sizeof(NSString*); -const CGFloat kOddPosition = 0.14159265f; -const CGFloat kExistingPosition = 0.5f; -const NSUInteger kExisitingIndex = 2; - -- (void)setUp { - range_ = [[GTMCalculatedRange alloc] init]; - for(NSUInteger i = kStringCount; i > 0; --i) { - [range_ insertStop:kStrings[kStringCount - i] atPosition:(CGFloat)(1.0 / i)]; - } -} - -- (void)tearDown { - [range_ release]; -} - -- (void)testInsertStop { - // new position - NSString *theString = @"I smell the blood of an Englishman!"; - [range_ insertStop:theString atPosition:kOddPosition]; - STAssertEquals([range_ stopCount], kStringCount + 1, @"Stop count was bad"); - NSString *getString = [range_ valueAtPosition:kOddPosition]; - STAssertNotNil(getString, @"String was bad"); - STAssertEquals(theString, getString, @"Stops weren't equal"); - // existing position - NSString *theStringTake2 = @"I smell the blood of an Englishman! Take 2"; - [range_ insertStop:theStringTake2 atPosition:kOddPosition]; - STAssertEquals([range_ stopCount], kStringCount + 1, @"Stop count was bad"); - getString = [range_ valueAtPosition:kOddPosition]; - STAssertNotNil(getString, @"String was bad"); - STAssertEquals(theStringTake2, getString, @"Stops weren't equal"); - STAssertNotEquals(theString, getString, @"Should be the new value"); - STAssertNotEqualObjects(theString, getString, @"Should be the new value"); -} - -- (void)testRemoveStopAtPosition { - STAssertFalse([range_ removeStopAtPosition: kOddPosition], @"Was able to remove non-existant stop"); - STAssertTrue([range_ removeStopAtPosition: kExistingPosition], @"Was unable to remove good stop"); - STAssertEquals([range_ stopCount], kStringCount - 1, @"Removing stop should adjust stop count"); -} - -- (void)testRemoveStopAtIndex { - STAssertThrows([range_ removeStopAtIndex: kStringCount], @"Was able to remove non-existant stop"); - STAssertNoThrow([range_ removeStopAtIndex: kStringCount - 1], @"Was unable to remove good stop"); - STAssertEquals([range_ stopCount], kStringCount - 1, @"Removing stop should adjust stop count"); -} - -- (void)testStopCount { - STAssertEquals([range_ stopCount], kStringCount, @"Bad stop count"); -} - -- (void)testValueAtPosition { - STAssertEqualObjects([range_ valueAtPosition: kExistingPosition], kStrings[kExisitingIndex], nil); - STAssertNotEqualObjects([range_ valueAtPosition: kExistingPosition], kStrings[kStringCount - 1], nil); - STAssertNil([range_ valueAtPosition: kOddPosition], nil); -} - -- (void)testStopAtIndex { - CGFloat thePosition; - - STAssertEqualObjects([range_ stopAtIndex:kStringCount - 1 position:nil], kStrings[kStringCount - 1], nil); - STAssertEqualObjects([range_ stopAtIndex:kExisitingIndex position:&thePosition], kStrings[kExisitingIndex], nil); - STAssertEquals(thePosition, kExistingPosition, nil); - STAssertNotEqualObjects([range_ stopAtIndex:kStringCount - 1 position:nil], kStrings[2], nil); - STAssertThrows([range_ stopAtIndex:kStringCount position:nil], nil); -} - -- (void)testDescription { - // we expect a description of atleast a few chars - STAssertGreaterThan([[range_ description] length], (NSUInteger)10, nil); -} - -@end diff --git a/Foundation/GTMExceptionalInlines.h b/Foundation/GTMExceptionalInlines.h deleted file mode 100644 index ee3a3db..0000000 --- a/Foundation/GTMExceptionalInlines.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// GTMExceptionalInlines.h -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> -#import "GTMDefines.h" -#if GTM_IPHONE_SDK -#import <CoreGraphics/CoreGraphics.h> -#endif // GTM_IPHONE_SDK - -// This file exists because when you have full warnings on you can run into -// troubles with functions that Apple has inlined that have structures or -// local variables defined in them. -// You only see this warning if you have -Wuninitialized turned on, -// and you will only see them in release mode. -Wno-unitialized turns them -// off, but you also lose all the good warnings that come with -Wuninitialized. -// If you have the inline versions of any of the functions below in a -// @syncronized, or @try block, you will get -// warning: variable 'r' might be clobbered by 'longjmp' or 'vfork' -// By moving this local vars "out of line" you fix the problem. -// These functions do nothing more than act as "out of line" calls to the -// functions they are masking to avoid the warning. -// If you run into others, feel free to add them. - -// Please only use these to avoid the warning above. Use the Apple defined -// functions where possible. - -FOUNDATION_EXPORT NSRange GTMNSMakeRange(NSUInteger loc, NSUInteger len); -FOUNDATION_EXPORT CFRange GTMCFRangeMake(NSUInteger loc, NSUInteger len); - -FOUNDATION_EXPORT CGPoint GTMCGPointMake(CGFloat x, CGFloat y); -FOUNDATION_EXPORT CGSize GTMCGSizeMake(CGFloat width, CGFloat height); -FOUNDATION_EXPORT CGRect GTMCGRectMake(CGFloat x, CGFloat y, - CGFloat width, CGFloat height); - -#if !GTM_IPHONE_SDK -// iPhone does not have NSTypes defined, only CGTypes. So no NSRect, NSPoint etc. -FOUNDATION_EXPORT NSPoint GTMNSMakePoint(CGFloat x, CGFloat y); -FOUNDATION_EXPORT NSSize GTMNSMakeSize(CGFloat w, CGFloat h); -FOUNDATION_EXPORT NSRect GTMNSMakeRect(CGFloat x, CGFloat y, - CGFloat w, CGFloat h); -#endif diff --git a/Foundation/GTMExceptionalInlines.m b/Foundation/GTMExceptionalInlines.m deleted file mode 100644 index d803ea9..0000000 --- a/Foundation/GTMExceptionalInlines.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// GTMExceptionalInlines.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMExceptionalInlines.h" - -NSRange GTMNSMakeRange(NSUInteger loc, NSUInteger len) { - return NSMakeRange(loc, len); -} - -CFRange GTMCFRangeMake(NSUInteger loc, NSUInteger len) { - return CFRangeMake(loc, len); -} - -CGPoint GTMCGPointMake(CGFloat x, CGFloat y) { - return CGPointMake(x, y); -} - -CGSize GTMCGSizeMake(CGFloat width, CGFloat height) { - return CGSizeMake(width, height); -} - -CGRect GTMCGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height) { - return CGRectMake(x, y, width, height); -} - -#if !GTM_IPHONE_SDK -// iPhone does not have NSTypes defined, only CGTypes. So no NSRect, NSPoint etc. - -NSPoint GTMNSMakePoint(CGFloat x, CGFloat y) { - return NSMakePoint(x, y); -} - -NSSize GTMNSMakeSize(CGFloat w, CGFloat h) { - return NSMakeSize(w, h); -} - -NSRect GTMNSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h) { - return NSMakeRect(x, y, w, h); -} - -#endif diff --git a/Foundation/GTMExceptionalInlinesTest.m b/Foundation/GTMExceptionalInlinesTest.m deleted file mode 100644 index 6142236..0000000 --- a/Foundation/GTMExceptionalInlinesTest.m +++ /dev/null @@ -1,71 +0,0 @@ -// -// GTMExceptionalInlinesTest.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMExceptionalInlines.h" - -@interface GTMExceptionalInlinesTest : GTMTestCase -@end - -@implementation GTMExceptionalInlinesTest -- (void)testExceptionalInlines { - // Numbers chosen basically at random. - NSUInteger loc = 5; - NSUInteger len = 10; - CGFloat x = 22.5; - CGFloat y = 40.2; - CGFloat h = 21.6; - CGFloat w = 54.2; - - NSRange range1 = GTMNSMakeRange(loc, len); - NSRange range2 = NSMakeRange(loc, len); - STAssertTrue(NSEqualRanges(range1, range2), nil); - - CFRange cfrange1 = GTMCFRangeMake(loc, len); - CFRange cfrange2 = CFRangeMake(loc, len); - STAssertEquals(cfrange1.length, cfrange2.length, nil); - STAssertEquals(cfrange1.location, cfrange2.location, nil); - - - CGPoint cgpoint1 = GTMCGPointMake(x, y); - CGPoint cgpoint2 = CGPointMake(x, y); - STAssertTrue(CGPointEqualToPoint(cgpoint1, cgpoint2), nil); - - CGSize cgsize1 = GTMCGSizeMake(x, y); - CGSize cgsize2 = CGSizeMake(x, y); - STAssertTrue(CGSizeEqualToSize(cgsize1, cgsize2), nil); - - CGRect cgrect1 = GTMCGRectMake(x, y, w, h); - CGRect cgrect2 = CGRectMake(x, y, w, h); - STAssertTrue(CGRectEqualToRect(cgrect1, cgrect2), nil); - -#if !GTM_IPHONE_SDK - NSPoint point1 = GTMNSMakePoint(x, y); - NSPoint point2 = NSMakePoint(x, y); - STAssertTrue(NSEqualPoints(point1, point2), nil); - - NSSize size1 = GTMNSMakeSize(w, h); - NSSize size2 = NSMakeSize(w, h); - STAssertTrue(NSEqualSizes(size1, size2), nil); - - NSRect rect1 = GTMNSMakeRect(x, y, w, h); - NSRect rect2 = NSMakeRect(x, y, w, h); - STAssertTrue(NSEqualRects(rect1, rect2), nil); -#endif -} -@end diff --git a/Foundation/GTMFileSystemKQueueTest.m b/Foundation/GTMFileSystemKQueueTest.m index 3919b86..9ffc046 100644 --- a/Foundation/GTMFileSystemKQueueTest.m +++ b/Foundation/GTMFileSystemKQueueTest.m @@ -18,7 +18,6 @@ #import "GTMSenTestCase.h" #import "GTMFileSystemKQueue.h" -#import "GTMUnitTestDevLog.h" // Private methods of GTMFileSystemKQueue we use for some tests @@ -47,17 +46,9 @@ - (void)callbackForQueue:(GTMFileSystemKQueue *)queue events:(GTMFileSystemKQueueEvents)event { - // Can't use standard ST macros here because our helper - // is not a subclass of GTMTestCase. This is intentional. if (queue != queue_) { - NSString *file = [NSString stringWithUTF8String:__FILE__]; - NSException *exception - = [NSException failureInEqualityBetweenObject:queue - andObject:queue_ - inFile:file - atLine:__LINE__ - withDescription:nil]; - [exception raise]; + // We should never get here. + [NSException raise:NSInternalInconsistencyException format:@"Bad Queue!"]; } if (event & kGTMFileSystemKQueueWriteEvent) { @@ -132,13 +123,11 @@ - (void)testInit { GTMFileSystemKQueue *testKQ; GTMFSKQTestHelper *helper = [[[GTMFSKQTestHelper alloc] init] autorelease]; - STAssertNotNil(helper, nil); + XCTAssertNotNil(helper); // init should fail - [GTMUnitTestDevLog expectString:@"Don't call init, use " - @"initWithPath:forEvents:acrossReplace:target:action:"]; testKQ = [[[GTMFileSystemKQueue alloc] init] autorelease]; - STAssertNil(testKQ, nil); + XCTAssertNil(testKQ); // no path testKQ @@ -147,7 +136,7 @@ acrossReplace:YES target:helper action:@selector(callbackForQueue:events:)] autorelease]; - STAssertNil(testKQ, nil); + XCTAssertNil(testKQ); // not events testKQ @@ -156,7 +145,7 @@ acrossReplace:YES target:helper action:@selector(callbackForQueue:events:)] autorelease]; - STAssertNil(testKQ, nil); + XCTAssertNil(testKQ); // no target testKQ @@ -165,7 +154,7 @@ acrossReplace:YES target:nil action:@selector(callbackForQueue:events:)] autorelease]; - STAssertNil(testKQ, nil); + XCTAssertNil(testKQ); // no handler testKQ @@ -174,7 +163,7 @@ acrossReplace:YES target:helper action:nil] autorelease]; - STAssertNil(testKQ, nil); + XCTAssertNil(testKQ); // path that doesn't exist @@ -184,7 +173,7 @@ acrossReplace:YES target:helper action:@selector(callbackForQueue:events:)] autorelease]; - STAssertNil(testKQ, nil); + XCTAssertNil(testKQ); } - (void)spinForEvents:(GTMFSKQTestHelper *)helper { @@ -201,11 +190,11 @@ NSFileManager *fm = [NSFileManager defaultManager]; GTMFSKQTestHelper *helper = [[[GTMFSKQTestHelper alloc] init] autorelease]; - STAssertNotNil(helper, nil); + XCTAssertNotNil(helper); - STAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil], nil); + XCTAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil]); NSFileHandle *testFH = [NSFileHandle fileHandleForWritingAtPath:testPath_]; - STAssertNotNil(testFH, nil); + XCTAssertNotNil(testFH); // Start monitoring the file GTMFileSystemKQueue *testKQ @@ -214,8 +203,8 @@ acrossReplace:YES target:helper action:@selector(callbackForQueue:events:)]; - STAssertNotNil(testKQ, nil); - STAssertEqualObjects([testKQ path], testPath_, nil); + XCTAssertNotNil(testKQ); + XCTAssertEqualObjects([testKQ path], testPath_); [helper setKQueue:testKQ]; // Write to the file @@ -223,27 +212,27 @@ // Spin the runloop for a second so that the helper callbacks fire [self spinForEvents:helper]; - STAssertEquals([helper totals], 1, nil); + XCTAssertEqual([helper totals], 1); // Close and delete [testFH closeFile]; #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 NSError *error = nil; - STAssertTrue([fm removeItemAtPath:testPath_ error:&error], @"Err: %@", error); + XCTAssertTrue([fm removeItemAtPath:testPath_ error:&error], @"Err: %@", error); #else - STAssertTrue([fm removeFileAtPath:testPath_ handler:nil], nil); + XCTAssertTrue([fm removeFileAtPath:testPath_ handler:nil]); #endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 [self spinForEvents:helper]; - STAssertEquals([helper totals], 2, nil); + XCTAssertEqual([helper totals], 2); // Clean up the kqueue [testKQ release]; testKQ = nil; - STAssertEquals([helper writes], 1, nil); - STAssertEquals([helper deletes], 1, nil); - STAssertEquals([helper renames], 0, nil); + XCTAssertEqual([helper writes], 1); + XCTAssertEqual([helper deletes], 1); + XCTAssertEqual([helper renames], 0); } - (void)testWriteAndDeleteAndWrite { @@ -252,14 +241,14 @@ NSFileManager *fm = [NSFileManager defaultManager]; GTMFSKQTestHelper *helper = [[[GTMFSKQTestHelper alloc] init] autorelease]; - STAssertNotNil(helper, nil); + XCTAssertNotNil(helper); GTMFSKQTestHelper *helper2 = [[[GTMFSKQTestHelper alloc] init] autorelease]; - STAssertNotNil(helper, nil); + XCTAssertNotNil(helper); // Create a temp file path - STAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil], nil); + XCTAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil]); NSFileHandle *testFH = [NSFileHandle fileHandleForWritingAtPath:testPath_]; - STAssertNotNil(testFH, nil); + XCTAssertNotNil(testFH); // Start monitoring the file GTMFileSystemKQueue *testKQ @@ -268,8 +257,8 @@ acrossReplace:YES target:helper action:@selector(callbackForQueue:events:)]; - STAssertNotNil(testKQ, nil); - STAssertEqualObjects([testKQ path], testPath_, nil); + XCTAssertNotNil(testKQ); + XCTAssertEqualObjects([testKQ path], testPath_); [helper setKQueue:testKQ]; GTMFileSystemKQueue *testKQ2 @@ -278,8 +267,8 @@ acrossReplace:NO target:helper2 action:@selector(callbackForQueue:events:)]; - STAssertNotNil(testKQ2, nil); - STAssertEqualObjects([testKQ2 path], testPath_, nil); + XCTAssertNotNil(testKQ2); + XCTAssertEqualObjects([testKQ2 path], testPath_); [helper2 setKQueue:testKQ2]; // Write to the file @@ -287,49 +276,49 @@ // Spin the runloop for a second so that the helper callbacks fire [self spinForEvents:helper]; - STAssertEquals([helper totals], 1, nil); - STAssertEquals([helper2 totals], 1, nil); + XCTAssertEqual([helper totals], 1); + XCTAssertEqual([helper2 totals], 1); // Close and delete [testFH closeFile]; #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 NSError *error = nil; - STAssertTrue([fm removeItemAtPath:testPath_ error:&error], @"Err: %@", error); + XCTAssertTrue([fm removeItemAtPath:testPath_ error:&error], @"Err: %@", error); #else - STAssertTrue([fm removeFileAtPath:testPath_ handler:nil], nil); + XCTAssertTrue([fm removeFileAtPath:testPath_ handler:nil]); #endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 // Recreate - STAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil], nil); + XCTAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil]); testFH = [NSFileHandle fileHandleForWritingAtPath:testPath_]; - STAssertNotNil(testFH, nil); + XCTAssertNotNil(testFH); [testFH writeData:[@"ha!" dataUsingEncoding:NSUnicodeStringEncoding]]; // Spin the runloop for a second so that the helper callbacks fire [self spinForEvents:helper]; - STAssertEquals([helper totals], 2, nil); - STAssertEquals([helper2 totals], 2, nil); + XCTAssertEqual([helper totals], 2); + XCTAssertEqual([helper2 totals], 2); // Write to it again [testFH writeData:[@"continued..." dataUsingEncoding:NSUnicodeStringEncoding]]; // Spin the runloop for a second so that the helper callbacks fire [self spinForEvents:helper]; - STAssertEquals([helper totals], 3, nil); - STAssertEquals([helper2 totals], 2, nil); + XCTAssertEqual([helper totals], 3); + XCTAssertEqual([helper2 totals], 2); // Close and delete [testFH closeFile]; #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - STAssertTrue([fm removeItemAtPath:testPath_ error:&error], @"Err: %@", error); + XCTAssertTrue([fm removeItemAtPath:testPath_ error:&error], @"Err: %@", error); #else - STAssertTrue([fm removeFileAtPath:testPath_ handler:nil], nil); + XCTAssertTrue([fm removeFileAtPath:testPath_ handler:nil]); #endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 // Spin the runloop for a second so that the helper callbacks fire [self spinForEvents:helper]; - STAssertEquals([helper totals], 4, nil); - STAssertEquals([helper2 totals], 2, nil); + XCTAssertEqual([helper totals], 4); + XCTAssertEqual([helper2 totals], 2); // Clean up the kqueue [testKQ release]; @@ -337,12 +326,12 @@ [testKQ2 release]; testKQ2 = nil; - STAssertEquals([helper writes], 2, nil); - STAssertEquals([helper deletes], 2, nil); - STAssertEquals([helper renames], 0, nil); - STAssertEquals([helper2 writes], 1, nil); - STAssertEquals([helper2 deletes], 1, nil); - STAssertEquals([helper2 renames], 0, nil); + XCTAssertEqual([helper writes], 2); + XCTAssertEqual([helper deletes], 2); + XCTAssertEqual([helper renames], 0); + XCTAssertEqual([helper2 writes], 1); + XCTAssertEqual([helper2 deletes], 1); + XCTAssertEqual([helper2 renames], 0); } - (void)testWriteAndRenameAndWrite { @@ -351,14 +340,14 @@ NSFileManager *fm = [NSFileManager defaultManager]; GTMFSKQTestHelper *helper = [[[GTMFSKQTestHelper alloc] init] autorelease]; - STAssertNotNil(helper, nil); + XCTAssertNotNil(helper); GTMFSKQTestHelper *helper2 = [[[GTMFSKQTestHelper alloc] init] autorelease]; - STAssertNotNil(helper2, nil); + XCTAssertNotNil(helper2); // Create a temp file path - STAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil], nil); + XCTAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil]); NSFileHandle *testFH = [NSFileHandle fileHandleForWritingAtPath:testPath_]; - STAssertNotNil(testFH, nil); + XCTAssertNotNil(testFH); // Start monitoring the file GTMFileSystemKQueue *testKQ @@ -367,8 +356,8 @@ acrossReplace:YES target:helper action:@selector(callbackForQueue:events:)]; - STAssertNotNil(testKQ, nil); - STAssertEqualObjects([testKQ path], testPath_, nil); + XCTAssertNotNil(testKQ); + XCTAssertEqualObjects([testKQ path], testPath_); [helper setKQueue:testKQ]; GTMFileSystemKQueue *testKQ2 @@ -377,8 +366,8 @@ acrossReplace:NO target:helper2 action:@selector(callbackForQueue:events:)]; - STAssertNotNil(testKQ2, nil); - STAssertEqualObjects([testKQ2 path], testPath_, nil); + XCTAssertNotNil(testKQ2); + XCTAssertEqualObjects([testKQ2 path], testPath_); [helper2 setKQueue:testKQ2]; // Write to the file @@ -386,70 +375,70 @@ // Spin the runloop for a second so that the helper callbacks fire [self spinForEvents:helper]; - STAssertEquals([helper totals], 1, nil); - STAssertEquals([helper2 totals], 1, nil); + XCTAssertEqual([helper totals], 1); + XCTAssertEqual([helper2 totals], 1); // Move it and create the file again #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 NSError *error = nil; - STAssertTrue([fm moveItemAtPath:testPath_ toPath:testPath2_ error:&error], - @"Error: %@", error); + XCTAssertTrue([fm moveItemAtPath:testPath_ toPath:testPath2_ error:&error], + @"Error: %@", error); #else - STAssertTrue([fm movePath:testPath_ toPath:testPath2_ handler:nil], nil); + XCTAssertTrue([fm movePath:testPath_ toPath:testPath2_ handler:nil]); #endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - STAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil], nil); + XCTAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil]); NSFileHandle *testFHPrime = [NSFileHandle fileHandleForWritingAtPath:testPath_]; - STAssertNotNil(testFHPrime, nil); + XCTAssertNotNil(testFHPrime); [testFHPrime writeData:[@"eh?" dataUsingEncoding:NSUnicodeStringEncoding]]; // Spin the runloop for a second so that the helper callbacks fire [self spinForEvents:helper]; - STAssertEquals([helper totals], 2, nil); - STAssertEquals([helper2 totals], 2, nil); + XCTAssertEqual([helper totals], 2); + XCTAssertEqual([helper2 totals], 2); // Write to the new file [testFHPrime writeData:[@"continue..." dataUsingEncoding:NSUnicodeStringEncoding]]; // Spin the runloop for a second so that the helper callbacks fire [self spinForEvents:helper]; - STAssertEquals([helper totals], 3, nil); - STAssertEquals([helper2 totals], 2, nil); + XCTAssertEqual([helper totals], 3); + XCTAssertEqual([helper2 totals], 2); // Write to the old file [testFH writeData:[@"continue old..." dataUsingEncoding:NSUnicodeStringEncoding]]; // Spin the runloop for a second so that the helper callbacks fire [self spinForEvents:helper]; - STAssertEquals([helper totals], 3, nil); - STAssertEquals([helper2 totals], 3, nil); + XCTAssertEqual([helper totals], 3); + XCTAssertEqual([helper2 totals], 3); // and now close old [testFH closeFile]; #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - STAssertTrue([fm removeItemAtPath:testPath2_ error:&error], @"Err: %@", error); + XCTAssertTrue([fm removeItemAtPath:testPath2_ error:&error], @"Err: %@", error); #else - STAssertTrue([fm removeFileAtPath:testPath2_ handler:nil], nil); + XCTAssertTrue([fm removeFileAtPath:testPath2_ handler:nil]); #endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 // Spin the runloop for a second so that the helper callbacks fire [self spinForEvents:helper]; - STAssertEquals([helper totals], 3, nil); - STAssertEquals([helper2 totals], 4, nil); + XCTAssertEqual([helper totals], 3); + XCTAssertEqual([helper2 totals], 4); // and now close new [testFHPrime closeFile]; #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - STAssertTrue([fm removeItemAtPath:testPath_ error:&error], @"Err: %@", error); + XCTAssertTrue([fm removeItemAtPath:testPath_ error:&error], @"Err: %@", error); #else - STAssertTrue([fm removeFileAtPath:testPath_ handler:nil], nil); + XCTAssertTrue([fm removeFileAtPath:testPath_ handler:nil]); #endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 // Spin the runloop for a second so that the helper callbacks fire [self spinForEvents:helper]; - STAssertEquals([helper totals], 4, nil); - STAssertEquals([helper2 totals], 4, nil); + XCTAssertEqual([helper totals], 4); + XCTAssertEqual([helper2 totals], 4); // Clean up the kqueue [testKQ release]; @@ -457,12 +446,12 @@ [testKQ2 release]; testKQ2 = nil; - STAssertEquals([helper writes], 2, nil); - STAssertEquals([helper deletes], 1, nil); - STAssertEquals([helper renames], 1, nil); - STAssertEquals([helper2 writes], 2, nil); - STAssertEquals([helper2 deletes], 1, nil); - STAssertEquals([helper2 renames], 1, nil); + XCTAssertEqual([helper writes], 2); + XCTAssertEqual([helper deletes], 1); + XCTAssertEqual([helper renames], 1); + XCTAssertEqual([helper2 writes], 2); + XCTAssertEqual([helper2 deletes], 1); + XCTAssertEqual([helper2 renames], 1); } - (void)testNoSpinHang { @@ -480,10 +469,10 @@ NSFileManager *fm = [NSFileManager defaultManager]; GTMFSKQTestHelper *helper = [[[GTMFSKQTestHelper alloc] init] autorelease]; - STAssertNotNil(helper, nil); - STAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil], nil); + XCTAssertNotNil(helper); + XCTAssertTrue([fm createFileAtPath:testPath_ contents:nil attributes:nil]); NSFileHandle *testFH = [NSFileHandle fileHandleForWritingAtPath:testPath_]; - STAssertNotNil(testFH, nil); + XCTAssertNotNil(testFH); // Start monitoring the file GTMFileSystemKQueue *testKQ @@ -492,8 +481,8 @@ acrossReplace:YES target:helper action:@selector(callbackForQueue:events:)]; - STAssertNotNil(testKQ, nil); - STAssertEqualObjects([testKQ path], testPath_, nil); + XCTAssertNotNil(testKQ); + XCTAssertEqualObjects([testKQ path], testPath_); [helper setKQueue:testKQ]; // Write to the file @@ -502,20 +491,20 @@ [testFH closeFile]; #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 NSError *error = nil; - STAssertTrue([fm removeItemAtPath:testPath_ error:&error], @"Err: %@", error); + XCTAssertTrue([fm removeItemAtPath:testPath_ error:&error], @"Err: %@", error); #else - STAssertTrue([fm removeFileAtPath:testPath_ handler:nil], nil); + XCTAssertTrue([fm removeFileAtPath:testPath_ handler:nil]); #endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 // Now destroy the queue, with events outstanding from the CFSocket, but // unconsumed. - STAssertEquals([testKQ retainCount], (NSUInteger)1, nil); + XCTAssertEqual([testKQ retainCount], (NSUInteger)1); [testKQ release]; testKQ = nil; // Spin the runloop, no events were delivered (and we should not hang) [self spinForEvents:helper]; - STAssertEquals([helper totals], 0, nil); + XCTAssertEqual([helper totals], 0); } @end diff --git a/Foundation/GTMFourCharCode.h b/Foundation/GTMFourCharCode.h deleted file mode 100644 index 90853b5..0000000 --- a/Foundation/GTMFourCharCode.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// GTMFourCharCode -// Wrapper for FourCharCodes -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> - -// FourCharCodes are OSTypes, ResTypes etc. This class wraps them if -// you need to store them in dictionaries etc. -@interface GTMFourCharCode : NSObject <NSCopying, NSCoding> { - FourCharCode code_; -} - -// returns a string for a FourCharCode -+ (id)stringWithFourCharCode:(FourCharCode)code; - -// String must be 4 chars or less, or you will get nil back. -+ (id)fourCharCodeWithString:(NSString*)string; -+ (id)fourCharCodeWithFourCharCode:(FourCharCode)code; - -// String must be 4 chars or less, or you will get nil back. -- (id)initWithString:(NSString*)string; - -// Designated Initializer -- (id)initWithFourCharCode:(FourCharCode)code; - -// Returns 'APPL' for "APPL" -- (FourCharCode)fourCharCode; - -// For FourCharCode of 'APPL' returns "APPL". For 1 returns "\0\0\0\1" -- (NSString*)stringValue; - -// For FourCharCode of "APPL" returns an NSNumber with 1095782476 (0x4150504C). -// For 1 returns 1. -- (NSNumber*)numberValue; - -@end diff --git a/Foundation/GTMFourCharCode.m b/Foundation/GTMFourCharCode.m deleted file mode 100644 index 02eea23..0000000 --- a/Foundation/GTMFourCharCode.m +++ /dev/null @@ -1,97 +0,0 @@ -// -// GTMFourCharCode.m -// Wrapper for FourCharCodes -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMDefines.h" -#import "GTMFourCharCode.h" -#import <CoreServices/CoreServices.h> - -@implementation GTMFourCharCode - -+ (id)stringWithFourCharCode:(FourCharCode)code { - return GTMCFAutorelease(UTCreateStringForOSType(code)); -} - -+ (id)fourCharCodeWithString:(NSString*)string { - return [[[self alloc] initWithString:string] autorelease]; -} - -+ (id)fourCharCodeWithFourCharCode:(FourCharCode)code { - return [[[self alloc] initWithFourCharCode:code] autorelease]; -} - -- (id)initWithString:(NSString*)string { - NSUInteger length = [string length]; - if (length == 0 || length > 4) { - [self release]; - return nil; - } else { - return [self initWithFourCharCode:UTGetOSTypeFromString((CFStringRef)string)]; - } -} - -- (id)initWithFourCharCode:(FourCharCode)code { - if ((self = [super init])) { - code_ = code; - } - return self; -} - -- (id)initWithCoder:(NSCoder *)aDecoder { - if ((self = [super init])) { - code_ = [aDecoder decodeInt32ForKey:@"FourCharCode"]; - } - return self; -} - -- (void)encodeWithCoder:(NSCoder *)aCoder { - [aCoder encodeInt32:code_ forKey:@"FourCharCode"]; -} - -- (id)copyWithZone:(NSZone *)zone { - return [[[self class] alloc] initWithFourCharCode:code_]; -} - -- (BOOL)isEqual:(id)object { - return [object isKindOfClass:[self class]] && [object fourCharCode] == code_; -} - -- (NSUInteger)hash { - return (NSUInteger)code_; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"%@ - %@ (0x%lX)", - [self class], - [self stringValue], - (unsigned long)code_]; -} - -- (FourCharCode)fourCharCode { - return code_; -} - -- (NSString*)stringValue { - return GTMCFAutorelease(UTCreateStringForOSType(code_)); -} - -- (NSNumber*)numberValue { - return [NSNumber numberWithUnsignedInt:code_]; -} - -@end diff --git a/Foundation/GTMFourCharCodeTest.m b/Foundation/GTMFourCharCodeTest.m deleted file mode 100644 index 1799629..0000000 --- a/Foundation/GTMFourCharCodeTest.m +++ /dev/null @@ -1,122 +0,0 @@ -// -// GTMFourCharCodeTest.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMFourCharCode.h" - -@interface GTMFourCharCodeTest : GTMTestCase { - @private - NSString *lowAsciiString_; - NSString *highMacOSRomanString_; -} - -@end - -@implementation GTMFourCharCodeTest - -static const FourCharCode kGTMHighMacOSRomanCode = 0xA5A8A9AA; // '•®©™' - -- (void)setUp { - // There appears to be a bug in the gcc 4.0 that is included with Xcode - // 3.2.5 where in release mode it doesn't like some string constants - // that include high or low ascii using the @"blah" string style. - // So we build them by hand. - // Use 8 bytes instead of 4, because stack protection gives us a warning - // if we have a buffer smaller than 8 bytes. - char string[8] = { 0, 0, 0, 1, 0, 0, 0, 0 }; - lowAsciiString_ = [[NSString alloc] initWithBytes:string - length:4 - encoding:NSASCIIStringEncoding]; - - // Must make sure our bytes are in the right order for building strings with, - // otherwise the string comes out in the wrong order on low-endian systems. - FourCharCode orderedString = htonl(kGTMHighMacOSRomanCode); - highMacOSRomanString_ - = [[NSString alloc] initWithBytes:&orderedString - length:sizeof(orderedString) - encoding:NSMacOSRomanStringEncoding]; -} - -- (void)tearDown { - [lowAsciiString_ release]; - [highMacOSRomanString_ release]; -} - -- (void)testFourCharCode { - GTMFourCharCode *fcc = [GTMFourCharCode fourCharCodeWithString:@"APPL"]; - STAssertNotNil(fcc, nil); - STAssertEqualObjects([fcc stringValue], @"APPL", nil); - STAssertEqualObjects([fcc numberValue], - [NSNumber numberWithUnsignedInt:'APPL'], nil); - STAssertEquals([fcc fourCharCode], (FourCharCode)'APPL', nil); - - STAssertEqualObjects([fcc description], - @"GTMFourCharCode - APPL (0x4150504C)", nil); - STAssertEquals([fcc hash], (NSUInteger)'APPL', nil); - - NSData *data = [NSKeyedArchiver archivedDataWithRootObject:fcc]; - STAssertNotNil(data, nil); - GTMFourCharCode *fcc2 - = (GTMFourCharCode*)[NSKeyedUnarchiver unarchiveObjectWithData:data]; - STAssertNotNil(fcc2, nil); - STAssertEqualObjects(fcc, fcc2, nil); - - fcc = [[[GTMFourCharCode alloc] initWithFourCharCode:'\?\?\?\?'] autorelease]; - STAssertNotNil(fcc, nil); - STAssertEqualObjects([fcc stringValue], @"????", nil); - STAssertEqualObjects([fcc numberValue], - [NSNumber numberWithUnsignedInt:'\?\?\?\?'], nil); - STAssertEquals([fcc fourCharCode], (FourCharCode)'\?\?\?\?', nil); - - fcc = [[[GTMFourCharCode alloc] initWithString:@"????"] autorelease]; - STAssertNotNil(fcc, nil); - STAssertEqualObjects([fcc stringValue], @"????", nil); - STAssertEqualObjects([fcc numberValue], - [NSNumber numberWithUnsignedInt:'\?\?\?\?'], nil); - STAssertEquals([fcc fourCharCode], (FourCharCode)'\?\?\?\?', nil); - - fcc = [GTMFourCharCode fourCharCodeWithFourCharCode:1]; - STAssertNotNil(fcc, nil); - STAssertTrue([[fcc stringValue] isEqualToString:lowAsciiString_], nil); - STAssertEqualObjects([fcc numberValue], - [NSNumber numberWithUnsignedInt:1], nil); - STAssertEquals([fcc fourCharCode], (FourCharCode)1, nil); - - fcc = [GTMFourCharCode fourCharCodeWithString:@"BADDSTRING"]; - STAssertNil(fcc, nil); - - fcc2 = [GTMFourCharCode fourCharCodeWithFourCharCode:kGTMHighMacOSRomanCode]; - STAssertNotNil(fcc2, nil); - STAssertEqualObjects([fcc2 stringValue], highMacOSRomanString_, nil); - STAssertEqualObjects([fcc2 numberValue], - [NSNumber numberWithUnsignedInt:kGTMHighMacOSRomanCode], - nil); - STAssertEquals([fcc2 fourCharCode], - (FourCharCode)kGTMHighMacOSRomanCode, nil); -} - -- (void)testStringWithCode { - STAssertEqualObjects([GTMFourCharCode stringWithFourCharCode:'APPL'], - @"APPL", nil); - STAssertEqualObjects([GTMFourCharCode stringWithFourCharCode:1], - lowAsciiString_, nil); - STAssertEqualObjects([GTMFourCharCode stringWithFourCharCode:kGTMHighMacOSRomanCode], - highMacOSRomanString_, nil); -} - -@end diff --git a/Foundation/GTMGeometryUtilsTest.m b/Foundation/GTMGeometryUtilsTest.m index f765526..f4cf731 100644 --- a/Foundation/GTMGeometryUtilsTest.m +++ b/Foundation/GTMGeometryUtilsTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -28,49 +28,49 @@ - (void)testGTMNSRectToCGRect { NSRect nsRect = NSMakeRect(4.6,3.2,22.1,45.0); CGRect cgRect = GTMNSRectToCGRect(nsRect); - STAssertTrue(CGRectEqualToRect(cgRect, *(CGRect*)&nsRect), nil); + XCTAssertTrue(CGRectEqualToRect(cgRect, *(CGRect*)&nsRect)); } - (void)testGTMNSSizeToCGSize { NSSize nsSize = {22,15}; CGSize cgSize = GTMNSSizeToCGSize(nsSize); - STAssertTrue(CGSizeEqualToSize(cgSize, *(CGSize*)&nsSize), nil); + XCTAssertTrue(CGSizeEqualToSize(cgSize, *(CGSize*)&nsSize)); } - (void)testGTMNSPointsOnRect { NSRect rect = NSMakeRect(0, 0, 2, 2); - + NSPoint point = GTMNSMidMinX(rect); - STAssertEqualsWithAccuracy(point.y, (CGFloat)1.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(point.x, (CGFloat)0.0, (CGFloat)0.01, nil); - + XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); + XCTAssertEqualWithAccuracy(point.x, 0.0, 0.01); + point = GTMNSMidMaxX(rect); - STAssertEqualsWithAccuracy(point.y, (CGFloat)1.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(point.x, (CGFloat)2.0, (CGFloat)0.01, nil); - + XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); + XCTAssertEqualWithAccuracy(point.x, 2.0, 0.01); + point = GTMNSMidMaxY(rect); - STAssertEqualsWithAccuracy(point.y, (CGFloat)2.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(point.x, (CGFloat)1.0, (CGFloat)0.01, nil); - + XCTAssertEqualWithAccuracy(point.y, 2.0, 0.01); + XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); + point = GTMNSMidMinY(rect); - STAssertEqualsWithAccuracy(point.y, (CGFloat)0.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(point.x, (CGFloat)1.0, (CGFloat)0.01, nil); + XCTAssertEqualWithAccuracy(point.y, 0.0, 0.01); + XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); point = GTMNSCenter(rect); - STAssertEqualsWithAccuracy(point.y, (CGFloat)1.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(point.x, (CGFloat)1.0, (CGFloat)0.01, nil); + XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); + XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); } - (void)testGTMNSRectSize { NSSize nsSize = GTMNSRectSize(NSMakeRect(1, 1, 10, 5)); - STAssertEqualsWithAccuracy(nsSize.width, (CGFloat)10.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(nsSize.height, (CGFloat)5.0, (CGFloat)0.01, nil); + XCTAssertEqualWithAccuracy(nsSize.width, 10.0, 0.01); + XCTAssertEqualWithAccuracy(nsSize.height, 5.0, 0.01); } - (void)testGTMNSRectOfSize { NSRect outRect = GTMNSRectOfSize(NSMakeSize(10, 5)); NSRect expectedRect = NSMakeRect(0, 0, 10, 5); - STAssertEquals(outRect, expectedRect, nil); + XCTAssertTrue(NSEqualRects(outRect, expectedRect)); } - (void)testGTMNSAlignRectangles { @@ -78,7 +78,7 @@ NSPoint expectedOrigin; GTMRectAlignment alignment; } TestData; - + TestData data[] = { { {1,2}, GTMRectAlignTop }, { {0,2}, GTMRectAlignTopLeft }, @@ -90,17 +90,17 @@ { {2,1}, GTMRectAlignRight }, { {1,1}, GTMRectAlignCenter }, }; - + NSRect rect1 = NSMakeRect(0, 0, 4, 4); NSRect rect2 = NSMakeRect(0, 0, 2, 2); - + NSRect expectedRect; expectedRect.size = NSMakeSize(2, 2); - + for (size_t i = 0; i < sizeof(data) / sizeof(TestData); i++) { expectedRect.origin = data[i].expectedOrigin; NSRect outRect = GTMNSAlignRectangles(rect2, rect1, data[i].alignment); - STAssertEquals(outRect, expectedRect, nil); + XCTAssertTrue(NSEqualRects(outRect, expectedRect)); } } @@ -120,24 +120,25 @@ { { 2.0, 2.0 }, { 2.0, 2.0 } }, { { 0.0, 10.0 }, { 0.0, 0.0 } } }; - + for (size_t i = 0; i < sizeof(tests) / sizeof(Test); ++i) { NSRect result = GTMNSScaleRectangleToSize(rect, tests[i].size_, GTMScaleProportionally); - STAssertEquals(result, GTMNSRectOfSize(tests[i].newSize_), @"failed on test %zd", i); + XCTAssertTrue(NSEqualRects(result, GTMNSRectOfSize(tests[i].newSize_)), + @"failed on test %zd", i); } - + NSRect result = GTMNSScaleRectangleToSize(NSZeroRect, tests[0].size_, GTMScaleProportionally); - STAssertEquals(result, NSZeroRect, nil); - + XCTAssertTrue(NSEqualRects(result, NSZeroRect)); + result = GTMNSScaleRectangleToSize(rect, tests[0].size_, GTMScaleToFit); - STAssertEquals(result, GTMNSRectOfSize(tests[0].size_), nil); - + XCTAssertTrue(NSEqualRects(result, GTMNSRectOfSize(tests[0].size_))); + result = GTMNSScaleRectangleToSize(rect, tests[0].size_, GTMScaleNone); - STAssertEquals(result, rect, nil); + XCTAssertTrue(NSEqualRects(result, rect)); } @@ -147,20 +148,20 @@ GTMScaling scaling; GTMRectAlignment alignment; } TestData; - + NSRect rect1 = NSMakeRect(0, 0, 4, 4); NSRect rect2 = NSMakeRect(0, 0, 2, 1); - + TestData data[] = { { NSMakeRect(2, 3, 2, 1), GTMScaleToFillProportionally, GTMRectAlignTopRight }, { NSMakeRect(0, 0, 4, 4), GTMScaleToFit, GTMRectAlignCenter }, { NSMakeRect(1, 1.5, 2, 1), GTMScaleNone, GTMRectAlignCenter }, { NSMakeRect(1, 0, 2, 1), GTMScaleProportionally, GTMRectAlignBottom }, }; - + for (size_t i = 0; i < sizeof(data) / sizeof(TestData); i++) { NSRect outRect = GTMNSScaleRectToRect(rect2, rect1, data[i].scaling, data[i].alignment); - STAssertEquals(outRect, data[i].expectedRect, nil); + XCTAssertTrue(NSEqualRects(outRect, data[i].expectedRect)); } } @@ -168,18 +169,17 @@ - (void)testGTMNSDistanceBetweenPoints { NSPoint pt1 = NSMakePoint(0, 0); NSPoint pt2 = NSMakePoint(3, 4); - STAssertEquals(GTMNSDistanceBetweenPoints(pt1, pt2), (CGFloat)5.0, nil); - STAssertEquals(GTMNSDistanceBetweenPoints(pt2, pt1), (CGFloat)5.0, nil); + XCTAssertEqualWithAccuracy(GTMNSDistanceBetweenPoints(pt1, pt2), 5.0, 0.01); + XCTAssertEqualWithAccuracy(GTMNSDistanceBetweenPoints(pt2, pt1), 5.0, 0.01); pt1 = NSMakePoint(1, 1); pt2 = NSMakePoint(1, 1); - STAssertEquals(GTMNSDistanceBetweenPoints(pt1, pt2), (CGFloat)0.0, nil); + XCTAssertEqualWithAccuracy(GTMNSDistanceBetweenPoints(pt1, pt2), 0.0, 0.01); } - (void)testGTMNSRectScaling { NSRect rect = NSMakeRect(1.0f, 2.0f, 5.0f, 10.0f); - NSRect rect2 = NSMakeRect((CGFloat)1.0, (CGFloat)2.0, (CGFloat)1.0, (CGFloat)12.0); - STAssertEquals(GTMNSRectScale(rect, (CGFloat)0.2, (CGFloat)1.2), - rect2, nil); + NSRect rect2 = NSMakeRect(1.0, 2.0, 1.0, 12.0); + XCTAssertTrue(NSEqualRects(GTMNSRectScale(rect, 0.2, 1.2), rect2)); } #endif // !GTM_IPHONE_SDK @@ -187,11 +187,11 @@ - (void)testGTMCGDistanceBetweenPoints { CGPoint pt1 = CGPointMake(0, 0); CGPoint pt2 = CGPointMake(3, 4); - STAssertEquals(GTMCGDistanceBetweenPoints(pt1, pt2), (CGFloat)5.0, nil); - STAssertEquals(GTMCGDistanceBetweenPoints(pt2, pt1), (CGFloat)5.0, nil); + XCTAssertEqualWithAccuracy(GTMCGDistanceBetweenPoints(pt1, pt2), 5.0, 0.01); + XCTAssertEqualWithAccuracy(GTMCGDistanceBetweenPoints(pt2, pt1), 5.0, 0.01); pt1 = CGPointMake(1, 1); pt2 = CGPointMake(1, 1); - STAssertEquals(GTMCGDistanceBetweenPoints(pt1, pt2), (CGFloat)0.0, nil); + XCTAssertEqualWithAccuracy(GTMCGDistanceBetweenPoints(pt1, pt2), 0.0, 0.01); } - (void)testGTMCGAlignRectangles { @@ -199,7 +199,7 @@ CGPoint expectedOrigin; GTMRectAlignment alignment; } TestData; - + TestData data[] = { { {1,2}, GTMRectAlignTop }, { {0,2}, GTMRectAlignTopLeft }, @@ -211,61 +211,60 @@ { {2,1}, GTMRectAlignRight }, { {1,1}, GTMRectAlignCenter }, }; - + CGRect rect1 = CGRectMake(0, 0, 4, 4); CGRect rect2 = CGRectMake(0, 0, 2, 2); - + CGRect expectedRect; expectedRect.size = CGSizeMake(2, 2); - + for (size_t i = 0; i < sizeof(data) / sizeof(TestData); i++) { expectedRect.origin = data[i].expectedOrigin; CGRect outRect = GTMCGAlignRectangles(rect2, rect1, data[i].alignment); - STAssertEquals(outRect, expectedRect, nil); + XCTAssertTrue(CGRectEqualToRect(outRect, expectedRect)); } } - (void)testGTMCGPointsOnRect { CGRect rect = CGRectMake(0, 0, 2, 2); - + CGPoint point = GTMCGMidMinX(rect); - STAssertEqualsWithAccuracy(point.y, (CGFloat)1.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(point.x, (CGFloat)0.0, (CGFloat)0.01, nil); - + XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); + XCTAssertEqualWithAccuracy(point.x, 0.0, 0.01); + point = GTMCGMidMaxX(rect); - STAssertEqualsWithAccuracy(point.y, (CGFloat)1.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(point.x, (CGFloat)2.0, (CGFloat)0.01, nil); - + XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); + XCTAssertEqualWithAccuracy(point.x, 2.0, 0.01); + point = GTMCGMidMaxY(rect); - STAssertEqualsWithAccuracy(point.y, (CGFloat)2.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(point.x, (CGFloat)1.0, (CGFloat)0.01, nil); - + XCTAssertEqualWithAccuracy(point.y, 2.0, 0.01); + XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); + point = GTMCGMidMinY(rect); - STAssertEqualsWithAccuracy(point.y, (CGFloat)0.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(point.x, (CGFloat)1.0, (CGFloat)0.01, nil); - + XCTAssertEqualWithAccuracy(point.y, 0.0, 0.01); + XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); + point = GTMCGCenter(rect); - STAssertEqualsWithAccuracy(point.y, (CGFloat)1.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(point.x, (CGFloat)1.0, (CGFloat)0.01, nil); + XCTAssertEqualWithAccuracy(point.y, 1.0, 0.01); + XCTAssertEqualWithAccuracy(point.x, 1.0, 0.01); } - (void)testGTMCGRectSize { CGSize cgSize = GTMCGRectSize(CGRectMake(1, 1, 10, 5)); - STAssertEqualsWithAccuracy(cgSize.width, (CGFloat)10.0, (CGFloat)0.01, nil); - STAssertEqualsWithAccuracy(cgSize.height, (CGFloat)5.0, (CGFloat)0.01, nil); + XCTAssertEqualWithAccuracy(cgSize.width, 10.0, 0.01); + XCTAssertEqualWithAccuracy(cgSize.height, 5.0, 0.01); } - (void)testGTMCGRectOfSize { CGRect outRect = GTMCGRectOfSize(CGSizeMake(10, 5)); CGRect expectedRect = CGRectMake(0, 0, 10, 5); - STAssertEquals(outRect, expectedRect, nil); + XCTAssertTrue(CGRectEqualToRect(outRect, expectedRect)); } - (void)testGTMCGRectScaling { CGRect rect = CGRectMake(1.0f, 2.0f, 5.0f, 10.0f); - CGRect rect2 = CGRectMake((CGFloat)1.0, (CGFloat)2.0, (CGFloat)1.0, (CGFloat)12.0); - STAssertEquals(GTMCGRectScale(rect, (CGFloat)0.2, (CGFloat)1.2), - rect2, nil); + CGRect rect2 = CGRectMake(1.0, 2.0, 1.0, 12.0); + XCTAssertTrue(CGRectEqualToRect(GTMCGRectScale(rect, 0.2, 1.2), rect2)); } - (void)testGTMCGScaleRectangleToSize { @@ -284,24 +283,25 @@ { { 2.0, 2.0 }, { 2.0, 2.0 } }, { { 0.0, 10.0 }, { 0.0, 0.0 } } }; - + for (size_t i = 0; i < sizeof(tests) / sizeof(Test); ++i) { CGRect result = GTMCGScaleRectangleToSize(rect, tests[i].size_, GTMScaleProportionally); - STAssertEquals(result, GTMCGRectOfSize(tests[i].newSize_), @"failed on test %zd", i); + XCTAssertTrue(CGRectEqualToRect(result, GTMCGRectOfSize(tests[i].newSize_)), + @"failed on test %zd", i); } - + CGRect result = GTMCGScaleRectangleToSize(CGRectZero, tests[0].size_, GTMScaleProportionally); - STAssertEquals(result, CGRectZero, nil); - + XCTAssertTrue(CGRectEqualToRect(result, CGRectZero)); + result = GTMCGScaleRectangleToSize(rect, tests[0].size_, GTMScaleToFit); - STAssertEquals(result, GTMCGRectOfSize(tests[0].size_), nil); - + XCTAssertTrue(CGRectEqualToRect(result, GTMCGRectOfSize(tests[0].size_))); + result = GTMCGScaleRectangleToSize(rect, tests[0].size_, GTMScaleNone); - STAssertEquals(result, rect, nil); + XCTAssertTrue(CGRectEqualToRect(result, rect)); } @end diff --git a/Foundation/GTMLightweightProxyTest.m b/Foundation/GTMLightweightProxyTest.m index 03a1979..cdf29b6 100644 --- a/Foundation/GTMLightweightProxyTest.m +++ b/Foundation/GTMLightweightProxyTest.m @@ -37,59 +37,59 @@ - (void)testInit { id proxy = [[[GTMLightweightProxy alloc] initWithRepresentedObject:self] autorelease]; - STAssertNotNil(proxy, nil); + XCTAssertNotNil(proxy); proxy = [[[GTMLightweightProxy alloc] init] autorelease]; - STAssertNotNil(proxy, nil); + XCTAssertNotNil(proxy); } - (void)testProxy { id proxy = [[[GTMLightweightProxy alloc] initWithRepresentedObject:self] autorelease]; - STAssertEqualObjects(self, [proxy representedObject], - @"Represented object setup failed"); + XCTAssertEqualObjects(self, [proxy representedObject], + @"Represented object setup failed"); // Check that it identifies itself as a proxy. - STAssertTrue([proxy isProxy], @"Should identify as a proxy"); + XCTAssertTrue([proxy isProxy], @"Should identify as a proxy"); // Check that it passes class requests on - STAssertTrue([proxy isMemberOfClass:[self class]], - @"Should pass class requests through"); + XCTAssertTrue([proxy isMemberOfClass:[self class]], + @"Should pass class requests through"); // Check that it claims to respond to its selectors. - STAssertTrue([proxy respondsToSelector:@selector(initWithRepresentedObject:)], - @"Claims not to respond to initWithRepresentedObject:"); - STAssertTrue([proxy respondsToSelector:@selector(representedObject)], - @"Claims not to respond to representedObject:"); - STAssertTrue([proxy respondsToSelector:@selector(setRepresentedObject:)], - @"Claims not to respond to setRepresentedObject:"); + XCTAssertTrue([proxy respondsToSelector:@selector(initWithRepresentedObject:)], + @"Claims not to respond to initWithRepresentedObject:"); + XCTAssertTrue([proxy respondsToSelector:@selector(representedObject)], + @"Claims not to respond to representedObject:"); + XCTAssertTrue([proxy respondsToSelector:@selector(setRepresentedObject:)], + @"Claims not to respond to setRepresentedObject:"); // Check that it responds to its represented object's selectors - STAssertTrue([proxy respondsToSelector:@selector(returnYes)], - @"Claims not to respond to returnYes"); + XCTAssertTrue([proxy respondsToSelector:@selector(returnYes)], + @"Claims not to respond to returnYes"); // ... but not to made up selectors. #if !(__IPHONE_OS_VERSION_MIN_REQUIRED == __IPHONE_3_2 || __IPHONE_OS_VERSION_MIN_REQUIRED == __IPHONE_4_0) // Exceptions thrown by - (void)doesNotRecognizeSelector:(SEL)aSelector // does not get caught on iOS 3.2 and greater. // http://openradar.appspot.com/radar?id=420401 - STAssertThrows([proxy someMadeUpMethod], - @"Calling a bogus method should throw"); + XCTAssertThrows([proxy someMadeUpMethod], + @"Calling a bogus method should throw"); #endif // Check that callthrough works. - STAssertTrue([proxy returnYes], - @"Calling through to the represented object failed"); + XCTAssertTrue([proxy returnYes], + @"Calling through to the represented object failed"); // Check that nilling out the represented object works. [proxy setRepresentedObject:nil]; - STAssertTrue([proxy respondsToSelector:@selector(setRepresentedObject:)], - @"Claims not to respond to setRepresentedObject: after nilling" - @" out represented object"); - STAssertFalse([proxy respondsToSelector:@selector(returnYes)], - @"Claims to respond to returnYes after nilling out represented" - @" object"); + XCTAssertTrue([proxy respondsToSelector:@selector(setRepresentedObject:)], + @"Claims not to respond to setRepresentedObject: after nilling" + @" out represented object"); + XCTAssertFalse([proxy respondsToSelector:@selector(returnYes)], + @"Claims to respond to returnYes after nilling out represented" + @" object"); // Calling through once the represented object is nil should fail silently - STAssertNoThrow([proxy returnYes], - @"Calling through without a represented object should fail" - @" silently"); + XCTAssertNoThrow([proxy returnYes], + @"Calling through without a represented object should fail" + @" silently"); // ... even when they are made up. #if !(__IPHONE_OS_VERSION_MIN_REQUIRED == __IPHONE_3_2 || __IPHONE_OS_VERSION_MIN_REQUIRED == __IPHONE_4_0) @@ -97,8 +97,8 @@ // does not get caught on iOS 3.2 and greater. // http://openradar.appspot.com/radar?id=420401 - STAssertNoThrow([proxy someMadeUpMethod], - @"Calling a bogus method on a nilled proxy should not throw"); + XCTAssertNoThrow([proxy someMadeUpMethod], + @"Calling a bogus method on a nilled proxy should not throw"); #endif } diff --git a/Foundation/GTMLogger+ASLTest.m b/Foundation/GTMLogger+ASLTest.m index 2756bfc..db85d70 100644 --- a/Foundation/GTMLogger+ASLTest.m +++ b/Foundation/GTMLogger+ASLTest.m @@ -57,10 +57,10 @@ static NSMutableArray *gDummyLog; // weak - (void)testCreation { GTMLogger *aslLogger = [GTMLogger standardLoggerWithASL]; - STAssertNotNil(aslLogger, nil); + XCTAssertNotNil(aslLogger); GTMLogASLWriter *writer = [GTMLogASLWriter aslWriter]; - STAssertNotNil(writer, nil); + XCTAssertNotNil(writer); } - (void)testLogWriter { @@ -71,8 +71,8 @@ static NSMutableArray *gDummyLog; // weak autorelease]; - STAssertNotNil(writer, nil); - STAssertEquals([gDummyLog count], (NSUInteger)0, nil); + XCTAssertNotNil(writer); + XCTAssertEqual([gDummyLog count], (NSUInteger)0); // Log some messages [writer logMessage:@"unknown" level:kGTMLoggerLevelUnknown]; @@ -93,7 +93,7 @@ static NSMutableArray *gDummyLog; // weak @"-assert-1", nil]; - STAssertEqualObjects(gDummyLog, expected, nil); + XCTAssertEqualObjects(gDummyLog, expected); [gDummyLog removeAllObjects]; // Same test with facility @@ -102,8 +102,8 @@ static NSMutableArray *gDummyLog; // weak facility:@"testfac"] autorelease]; - STAssertNotNil(writer, nil); - STAssertEquals([gDummyLog count], (NSUInteger)0, nil); + XCTAssertNotNil(writer); + XCTAssertEqual([gDummyLog count], (NSUInteger)0); [writer logMessage:@"unknown" level:kGTMLoggerLevelUnknown]; [writer logMessage:@"debug" level:kGTMLoggerLevelDebug]; @@ -117,14 +117,14 @@ static NSMutableArray *gDummyLog; // weak @"testfac-error-3", @"testfac-assert-1", nil]; - STAssertEqualObjects(gDummyLog, expected, nil); + XCTAssertEqualObjects(gDummyLog, expected); gDummyLog = nil; } - (void)testASLClient { GTMLoggerASLClient *client = [[GTMLoggerASLClient alloc] init]; - STAssertNotNil(client, nil); + XCTAssertNotNil(client); [client release]; } diff --git a/Foundation/GTMLogger.m b/Foundation/GTMLogger.m index 3ace20f..e6b2ba1 100644 --- a/Foundation/GTMLogger.m +++ b/Foundation/GTMLogger.m @@ -367,7 +367,7 @@ static GTMLogger *gSharedLogger = nil; - (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level { @synchronized(self) { id<GTMLogWriter> child = nil; - GTM_FOREACH_OBJECT(child, self) { + for (child in self) { if ([child conformsToProtocol:@protocol(GTMLogWriter)]) [child logMessage:msg level:level]; } diff --git a/Foundation/GTMLoggerRingBufferWriterTest.m b/Foundation/GTMLoggerRingBufferWriterTest.m index 1c5d72b..73cc306 100644 --- a/Foundation/GTMLoggerRingBufferWriterTest.m +++ b/Foundation/GTMLoggerRingBufferWriterTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -19,7 +19,6 @@ #import "GTMSenTestCase.h" #import "GTMLoggerRingBufferWriter.h" #import "GTMLogger.h" -#import "GTMUnitTestDevLog.h" // -------------------------------------------------- // CountingWriter keeps a count of the number of times it has been @@ -87,16 +86,16 @@ line:(int)line { NSArray *loggedContents = [writer loggedContents]; - STAssertEquals([expected count], [loggedContents count], + XCTAssertEqual([expected count], [loggedContents count], @"count mismatch from line %d", line); for (unsigned int i = 0; i < [expected count]; i++) { - STAssertEqualObjects([expected objectAtIndex:i], - [loggedContents objectAtIndex:i], - @"logging mistmatch at index %d from line %d", - i, line); + XCTAssertEqualObjects([expected objectAtIndex:i], + [loggedContents objectAtIndex:i], + @"logging mistmatch at index %d from line %d", + i, line); } - + } // compareWithExpectedLogging @@ -118,24 +117,24 @@ GTMLoggerRingBufferWriter *writer = [GTMLoggerRingBufferWriter ringBufferWriterWithCapacity:32 writer:countingWriter_]; - STAssertEquals([writer capacity], (NSUInteger)32, nil); - STAssertTrue([writer writer] == countingWriter_, nil); - STAssertEquals([writer count], (NSUInteger)0, nil); - STAssertEquals([writer droppedLogCount], (NSUInteger)0, nil); - STAssertEquals([writer totalLogged], (NSUInteger)0, nil); + XCTAssertEqual([writer capacity], (NSUInteger)32); + XCTAssertTrue([writer writer] == countingWriter_); + XCTAssertEqual([writer count], (NSUInteger)0); + XCTAssertEqual([writer droppedLogCount], (NSUInteger)0); + XCTAssertEqual([writer totalLogged], (NSUInteger)0); // Try with invalid arguments. Should always get nil back. writer = [GTMLoggerRingBufferWriter ringBufferWriterWithCapacity:0 writer:countingWriter_]; - STAssertNil(writer, nil); + XCTAssertNil(writer); writer = [GTMLoggerRingBufferWriter ringBufferWriterWithCapacity:32 writer:nil]; - STAssertNil(writer, nil); + XCTAssertNil(writer); writer = [[GTMLoggerRingBufferWriter alloc] init]; - STAssertNil(writer, nil); + XCTAssertNil(writer); } // testCreation @@ -145,31 +144,31 @@ [GTMLoggerRingBufferWriter ringBufferWriterWithCapacity:4 writer:countingWriter_]; [logger_ setWriter:writer]; - + // Shouldn't do anything if there are no contents. [writer dumpContents]; - STAssertEquals([writer count], (NSUInteger)0, nil); - STAssertEquals([countingWriter_ count], (NSUInteger)0, nil); + XCTAssertEqual([writer count], (NSUInteger)0); + XCTAssertEqual([countingWriter_ count], (NSUInteger)0); // Log a single item. Make sure the counts are accurate. [logger_ logDebug:@"oop"]; - STAssertEquals([writer count], (NSUInteger)1, nil); - STAssertEquals([writer totalLogged], (NSUInteger)1, nil); - STAssertEquals([writer droppedLogCount], (NSUInteger)0, nil); - STAssertEquals([countingWriter_ count], (NSUInteger)0, nil); + XCTAssertEqual([writer count], (NSUInteger)1); + XCTAssertEqual([writer totalLogged], (NSUInteger)1); + XCTAssertEqual([writer droppedLogCount], (NSUInteger)0); + XCTAssertEqual([countingWriter_ count], (NSUInteger)0); // Log a second item. Also make sure counts are accurate. [logger_ logDebug:@"ack"]; - STAssertEquals([writer count], (NSUInteger)2, nil); - STAssertEquals([writer totalLogged], (NSUInteger)2, nil); - STAssertEquals([writer droppedLogCount], (NSUInteger)0, nil); - STAssertEquals([countingWriter_ count], (NSUInteger)0, nil); + XCTAssertEqual([writer count], (NSUInteger)2); + XCTAssertEqual([writer totalLogged], (NSUInteger)2); + XCTAssertEqual([writer droppedLogCount], (NSUInteger)0); + XCTAssertEqual([countingWriter_ count], (NSUInteger)0); // Print them, and make sure the countingWriter sees the right stuff. [writer dumpContents]; - STAssertEquals([countingWriter_ count], (NSUInteger)2, nil); - STAssertEquals([writer count], (NSUInteger)2, nil); // Should not be zeroed. - STAssertEquals([writer totalLogged], (NSUInteger)2, nil); + XCTAssertEqual([countingWriter_ count], (NSUInteger)2); + XCTAssertEqual([writer count], (NSUInteger)2); // Should not be zeroed. + XCTAssertEqual([writer totalLogged], (NSUInteger)2); [self compareWriter:countingWriter_ withExpectedLogging:[NSArray arrayWithObjects:@"oop",@"ack", nil] @@ -179,18 +178,18 @@ // Wipe the slates clean. [writer reset]; [countingWriter_ reset]; - STAssertEquals([writer count], (NSUInteger)0, nil); - STAssertEquals([writer totalLogged], (NSUInteger)0, nil); + XCTAssertEqual([writer count], (NSUInteger)0); + XCTAssertEqual([writer totalLogged], (NSUInteger)0); // An error log level should print the buffer and empty it. [logger_ logDebug:@"oop"]; [logger_ logInfo:@"ack"]; - STAssertEquals([writer droppedLogCount], (NSUInteger)0, nil); - STAssertEquals([writer totalLogged], (NSUInteger)2, nil); + XCTAssertEqual([writer droppedLogCount], (NSUInteger)0); + XCTAssertEqual([writer totalLogged], (NSUInteger)2); [logger_ logError:@"blargh"]; - STAssertEquals([countingWriter_ count], (NSUInteger)3, nil); - STAssertEquals([writer droppedLogCount], (NSUInteger)0, nil); + XCTAssertEqual([countingWriter_ count], (NSUInteger)3); + XCTAssertEqual([writer droppedLogCount], (NSUInteger)0); [self compareWriter:countingWriter_ withExpectedLogging:[NSArray arrayWithObjects:@"oop", @"ack", @@ -204,13 +203,13 @@ [logger_ logDebug:@"oop"]; [logger_ logInfo:@"ack"]; [logger_ logDebug:@"blargh"]; - STAssertEquals([writer droppedLogCount], (NSUInteger)0, nil); - STAssertEquals([writer count], (NSUInteger)3, nil); - STAssertEquals([writer totalLogged], (NSUInteger)3, nil); + XCTAssertEqual([writer droppedLogCount], (NSUInteger)0); + XCTAssertEqual([writer count], (NSUInteger)3); + XCTAssertEqual([writer totalLogged], (NSUInteger)3); [logger_ logAssert:@"ouch"]; - STAssertEquals([countingWriter_ count], (NSUInteger)4, nil); - STAssertEquals([writer droppedLogCount], (NSUInteger)0, nil); + XCTAssertEqual([countingWriter_ count], (NSUInteger)4); + XCTAssertEqual([writer droppedLogCount], (NSUInteger)0); [self compareWriter:countingWriter_ withExpectedLogging:[NSArray arrayWithObjects:@"oop", @"ack", @"blargh", @"ouch", nil] @@ -223,11 +222,11 @@ [logger_ logDebug:@"oop"]; [logger_ logDebug:@"blargh"]; [logger_ logDebug:@"flong"]; // Fills buffer - STAssertEquals([writer droppedLogCount], (NSUInteger)0, nil); - STAssertEquals([writer count], (NSUInteger)4, nil); + XCTAssertEqual([writer droppedLogCount], (NSUInteger)0); + XCTAssertEqual([writer count], (NSUInteger)4); [logger_ logAssert:@"ouch"]; // should drop "ack" - STAssertEquals([countingWriter_ count], (NSUInteger)4, nil); + XCTAssertEqual([countingWriter_ count], (NSUInteger)4); [self compareWriter:countingWriter_ withExpectedLogging:[NSArray arrayWithObjects:@"oop", @"blargh", @@ -242,11 +241,11 @@ [logger_ logDebug:@"blargh"]; [logger_ logDebug:@"flong"]; // Fills buffer [logger_ logDebug:@"bloogie"]; // should drop "ack" - STAssertEquals([writer droppedLogCount], (NSUInteger)1, nil); - STAssertEquals([writer count], (NSUInteger)4, nil); + XCTAssertEqual([writer droppedLogCount], (NSUInteger)1); + XCTAssertEqual([writer count], (NSUInteger)4); [logger_ logAssert:@"ouch"]; // should drop "oop" - STAssertEquals([countingWriter_ count], (NSUInteger)4, nil); + XCTAssertEqual([countingWriter_ count], (NSUInteger)4); [self compareWriter:countingWriter_ withExpectedLogging:[NSArray arrayWithObjects:@"blargh", @@ -264,22 +263,22 @@ [logger_ setWriter:writer]; [logger_ logInfo:@"ack"]; - STAssertEquals([countingWriter_ count], (NSUInteger)0, nil); - STAssertEquals([writer count], (NSUInteger)1, nil); + XCTAssertEqual([countingWriter_ count], (NSUInteger)0); + XCTAssertEqual([writer count], (NSUInteger)1); [writer dumpContents]; - STAssertEquals([countingWriter_ count], (NSUInteger)1, nil); + XCTAssertEqual([countingWriter_ count], (NSUInteger)1); [self compareWriter:countingWriter_ - withExpectedLogging:[NSArray arrayWithObjects:@"ack", nil] + withExpectedLogging:[NSArray arrayWithObject:@"ack"] line:__LINE__]; [logger_ logDebug:@"oop"]; // should drop "ack" - STAssertEquals([writer count], (NSUInteger)1, nil); - STAssertEquals([writer droppedLogCount], (NSUInteger)1, nil); + XCTAssertEqual([writer count], (NSUInteger)1); + XCTAssertEqual([writer droppedLogCount], (NSUInteger)1); [countingWriter_ reset]; [logger_ logError:@"snoogy"]; // should drop "oop" - STAssertEquals([countingWriter_ count], (NSUInteger)1, nil); + XCTAssertEqual([countingWriter_ count], (NSUInteger)1); [self compareWriter:countingWriter_ withExpectedLogging:[NSArray arrayWithObjects:@"snoogy", nil] @@ -289,7 +288,7 @@ -// Run 10 threads, all logging through the same logger. +// Run 10 threads, all logging through the same logger. static volatile NSUInteger gStoppedThreads = 0; // Total number that have stopped. @@ -343,15 +342,15 @@ static volatile NSUInteger gStoppedThreads = 0; // Total number that have stoppe } // Now make sure we get back what's expected. - STAssertEquals([writer count], kThreadCount, nil); - STAssertEquals([countingWriter_ count], (NSUInteger)0, nil); // Nothing should be logged - STAssertEquals([writer totalLogged], (NSUInteger)420, nil); + XCTAssertEqual([writer count], kThreadCount); + XCTAssertEqual([countingWriter_ count], (NSUInteger)0); // Nothing should be logged + XCTAssertEqual([writer totalLogged], (NSUInteger)420); [logger_ logError:@"bork"]; - STAssertEquals([countingWriter_ count], kCapacity, nil); - + XCTAssertEqual([countingWriter_ count], kCapacity); + NSArray *expected = [NSArray arrayWithObjects: - @"ack", @"ack", @"ack", @"ack", @"ack", + @"ack", @"ack", @"ack", @"ack", @"ack", @"ack", @"ack", @"ack", @"ack", @"bork", nil]; [self compareWriter:countingWriter_ diff --git a/Foundation/GTMLoggerTest.m b/Foundation/GTMLoggerTest.m index bea75b2..6ce60bd 100644 --- a/Foundation/GTMLoggerTest.m +++ b/Foundation/GTMLoggerTest.m @@ -112,22 +112,14 @@ - (void)setUp { path_ = [[NSTemporaryDirectory() stringByAppendingPathComponent: @"GTMLoggerUnitTest.log"] retain]; - STAssertNotNil(path_, nil); + XCTAssertNotNil(path_); // Make sure we're cleaned up from the last run -#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - [[NSFileManager defaultManager] removeFileAtPath:path_ handler:nil]; -#else [[NSFileManager defaultManager] removeItemAtPath:path_ error:NULL]; -#endif } - (void)tearDown { - STAssertNotNil(path_, nil); -#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - [[NSFileManager defaultManager] removeFileAtPath:path_ handler:nil]; -#else + XCTAssertNotNil(path_); [[NSFileManager defaultManager] removeItemAtPath:path_ error:NULL]; -#endif [path_ release]; path_ = nil; } @@ -138,58 +130,58 @@ logger1 = [GTMLogger sharedLogger]; logger2 = [GTMLogger sharedLogger]; - STAssertTrue(logger1 == logger2, nil); + XCTAssertTrue(logger1 == logger2); - STAssertNotNil([logger1 writer], nil); - STAssertNotNil([logger1 formatter], nil); - STAssertNotNil([logger1 filter], nil); + XCTAssertNotNil([logger1 writer]); + XCTAssertNotNil([logger1 formatter]); + XCTAssertNotNil([logger1 filter]); // Get a new instance; not the shared instance logger2 = [GTMLogger standardLogger]; - STAssertTrue(logger1 != logger2, nil); - STAssertNotNil([logger2 writer], nil); - STAssertNotNil([logger2 formatter], nil); - STAssertNotNil([logger2 filter], nil); + XCTAssertTrue(logger1 != logger2); + XCTAssertNotNil([logger2 writer]); + XCTAssertNotNil([logger2 formatter]); + XCTAssertNotNil([logger2 filter]); // Set the new instance to be the shared logger. [GTMLogger setSharedLogger:logger2]; - STAssertTrue(logger2 == [GTMLogger sharedLogger], nil); - STAssertTrue(logger1 != [GTMLogger sharedLogger], nil); + XCTAssertTrue(logger2 == [GTMLogger sharedLogger]); + XCTAssertTrue(logger1 != [GTMLogger sharedLogger]); // Set the shared logger to nil, which should reset it to a new "standard" // logger. [GTMLogger setSharedLogger:nil]; - STAssertNotNil([GTMLogger sharedLogger], nil); - STAssertTrue(logger2 != [GTMLogger sharedLogger], nil); - STAssertTrue(logger1 != [GTMLogger sharedLogger], nil); + XCTAssertNotNil([GTMLogger sharedLogger]); + XCTAssertTrue(logger2 != [GTMLogger sharedLogger]); + XCTAssertTrue(logger1 != [GTMLogger sharedLogger]); GTMLogger *logger = [GTMLogger logger]; - STAssertNotNil(logger, nil); + XCTAssertNotNil(logger); logger = [GTMLogger standardLoggerWithStderr]; - STAssertNotNil(logger, nil); + XCTAssertNotNil(logger); logger = [GTMLogger standardLoggerWithPath:path_]; - STAssertNotNil(logger, nil); + XCTAssertNotNil(logger); } - (void)testAccessors { GTMLogger *logger = [GTMLogger standardLogger]; - STAssertNotNil(logger, nil); + XCTAssertNotNil(logger); - STAssertNotNil([logger writer], nil); - STAssertNotNil([logger formatter], nil); - STAssertNotNil([logger filter], nil); + XCTAssertNotNil([logger writer]); + XCTAssertNotNil([logger formatter]); + XCTAssertNotNil([logger filter]); [logger setWriter:nil]; [logger setFormatter:nil]; [logger setFilter:nil]; // These attributes should NOT be nil. They should be set to their defaults. - STAssertNotNil([logger writer], nil); - STAssertNotNil([logger formatter], nil); - STAssertNotNil([logger filter], nil); + XCTAssertNotNil([logger writer]); + XCTAssertNotNil([logger formatter]); + XCTAssertNotNil([logger filter]); } - (void)testLogger { @@ -212,7 +204,7 @@ formatter:nil // basic formatter filter:filter]; - STAssertNotNil(logger, nil); + XCTAssertNotNil(logger); // Log a few messages to test with [logger logInfo:@"hi"]; @@ -222,22 +214,22 @@ // Makes sure the messages got logged NSArray *messages = [writer messages]; - STAssertNotNil(messages, nil); - STAssertEquals([messages count], (NSUInteger)4, nil); - STAssertEqualObjects([messages objectAtIndex:0], @"hi", nil); - STAssertEqualObjects([messages objectAtIndex:1], @"foo", nil); - STAssertEqualObjects([messages objectAtIndex:2], @"blah", nil); - STAssertEqualObjects([messages objectAtIndex:3], @"baz", nil); + XCTAssertNotNil(messages); + XCTAssertEqual([messages count], (NSUInteger)4); + XCTAssertEqualObjects([messages objectAtIndex:0], @"hi"); + XCTAssertEqualObjects([messages objectAtIndex:1], @"foo"); + XCTAssertEqualObjects([messages objectAtIndex:2], @"blah"); + XCTAssertEqualObjects([messages objectAtIndex:3], @"baz"); // Log a message that should be ignored, and make sure it did NOT get logged [logger logInfo:@"please ignore this"]; messages = [writer messages]; - STAssertNotNil(messages, nil); - STAssertEquals([messages count], (NSUInteger)4, nil); - STAssertEqualObjects([messages objectAtIndex:0], @"hi", nil); - STAssertEqualObjects([messages objectAtIndex:1], @"foo", nil); - STAssertEqualObjects([messages objectAtIndex:2], @"blah", nil); - STAssertEqualObjects([messages objectAtIndex:3], @"baz", nil); + XCTAssertNotNil(messages); + XCTAssertEqual([messages count], (NSUInteger)4); + XCTAssertEqualObjects([messages objectAtIndex:0], @"hi"); + XCTAssertEqualObjects([messages objectAtIndex:1], @"foo"); + XCTAssertEqualObjects([messages objectAtIndex:2], @"blah"); + XCTAssertEqualObjects([messages objectAtIndex:3], @"baz"); // Change the formatter to our "dumb formatter" id<GTMLogFormatter> formatter = [[[DumbFormatter alloc] init] autorelease]; @@ -245,14 +237,14 @@ [logger logInfo:@"bleh"]; messages = [writer messages]; - STAssertNotNil(messages, nil); - STAssertEquals([messages count], (NSUInteger)5, nil); // Message count should increase + XCTAssertNotNil(messages); + XCTAssertEqual([messages count], (NSUInteger)5); // Message count should increase // The previously logged messages should not change - STAssertEqualObjects([messages objectAtIndex:0], @"hi", nil); - STAssertEqualObjects([messages objectAtIndex:1], @"foo", nil); - STAssertEqualObjects([messages objectAtIndex:2], @"blah", nil); - STAssertEqualObjects([messages objectAtIndex:3], @"baz", nil); - STAssertEqualObjects([messages objectAtIndex:4], @"DUMB [2] bleh", nil); + XCTAssertEqualObjects([messages objectAtIndex:0], @"hi"); + XCTAssertEqualObjects([messages objectAtIndex:1], @"foo"); + XCTAssertEqualObjects([messages objectAtIndex:2], @"blah"); + XCTAssertEqualObjects([messages objectAtIndex:3], @"baz"); + XCTAssertEqualObjects([messages objectAtIndex:4], @"DUMB [2] bleh"); } - (void)testConvenienceMacros { @@ -267,10 +259,10 @@ // test to make sure the logged message does indeed contain the name of the // current function "testConvenienceMacros". GTMLoggerError(@"test ========================"); - STAssertEquals([[writer messages] count], (NSUInteger)1, nil); + XCTAssertEqual([[writer messages] count], (NSUInteger)1); NSRange rangeOfFuncName = [[[writer messages] objectAtIndex:0] rangeOfString:@"testConvenienceMacros"]; - STAssertTrue(rangeOfFuncName.location != NSNotFound, nil); + XCTAssertTrue(rangeOfFuncName.location != NSNotFound); [writer clear]; [[GTMLogger sharedLogger] setFormatter:nil]; @@ -281,19 +273,19 @@ GTMLoggerAssert(@"test %d", 4); NSArray *messages = [writer messages]; - STAssertNotNil(messages, nil); + XCTAssertNotNil(messages); #ifdef DEBUG - STAssertEquals([messages count], (NSUInteger)4, nil); - STAssertEqualObjects([messages objectAtIndex:0], @"test 1", nil); - STAssertEqualObjects([messages objectAtIndex:1], @"test 2", nil); - STAssertEqualObjects([messages objectAtIndex:2], @"test 3", nil); - STAssertEqualObjects([messages objectAtIndex:3], @"test 4", nil); + XCTAssertEqual([messages count], (NSUInteger)4); + XCTAssertEqualObjects([messages objectAtIndex:0], @"test 1"); + XCTAssertEqualObjects([messages objectAtIndex:1], @"test 2"); + XCTAssertEqualObjects([messages objectAtIndex:2], @"test 3"); + XCTAssertEqualObjects([messages objectAtIndex:3], @"test 4"); #else // In Release builds, only the Error and Assert messages will be logged - STAssertEquals([messages count], (NSUInteger)2, nil); - STAssertEqualObjects([messages objectAtIndex:0], @"test 3", nil); - STAssertEqualObjects([messages objectAtIndex:1], @"test 4", nil); + XCTAssertEqual([messages count], (NSUInteger)2); + XCTAssertEqualObjects([messages objectAtIndex:0], @"test 3"); + XCTAssertEqualObjects([messages objectAtIndex:1], @"test 4"); #endif } @@ -302,10 +294,10 @@ NSFileHandle *fh = nil; fh = [NSFileHandle fileHandleForWritingAtPath:path_]; - STAssertNil(fh, nil); + XCTAssertNil(fh); fh = [NSFileHandle fileHandleForLoggingAtPath:path_ mode:0644]; - STAssertNotNil(fh, nil); + XCTAssertNotNil(fh); [fh logMessage:@"test 0" level:kGTMLoggerLevelUnknown]; [fh logMessage:@"test 1" level:kGTMLoggerLevelDebug]; @@ -318,24 +310,24 @@ NSString *contents = [NSString stringWithContentsOfFile:path_ encoding:NSUTF8StringEncoding error:&err]; - STAssertNotNil(contents, @"Error loading log file: %@", err); - STAssertEqualObjects(@"test 0\ntest 1\ntest 2\ntest 3\ntest 4\n", contents, nil); + XCTAssertNotNil(contents, @"Error loading log file: %@", err); + XCTAssertEqualObjects(@"test 0\ntest 1\ntest 2\ntest 3\ntest 4\n", contents); } - (void)testLoggerAdapterWriter { ArrayWriter *writer = [[[ArrayWriter alloc] init] autorelease]; - STAssertNotNil(writer, nil); + XCTAssertNotNil(writer); GTMLogger *sublogger = [GTMLogger loggerWithWriter:writer formatter:nil filter:nil]; - STAssertNotNil(sublogger, nil); + XCTAssertNotNil(sublogger); GTMLogger *logger = [GTMLogger loggerWithWriter:sublogger formatter:nil filter:nil]; - STAssertNotNil(logger, nil); + XCTAssertNotNil(logger); // Log a few messages to test with [logger logInfo:@"hi"]; @@ -345,12 +337,12 @@ // Makes sure the messages got logged NSArray *messages = [writer messages]; - STAssertNotNil(messages, nil); - STAssertEquals([messages count], (NSUInteger)4, nil); - STAssertEqualObjects([messages objectAtIndex:0], @"hi", nil); - STAssertEqualObjects([messages objectAtIndex:1], @"foo", nil); - STAssertEqualObjects([messages objectAtIndex:2], @"blah", nil); - STAssertEqualObjects([messages objectAtIndex:3], @"assert", nil); + XCTAssertNotNil(messages); + XCTAssertEqual([messages count], (NSUInteger)4); + XCTAssertEqualObjects([messages objectAtIndex:0], @"hi"); + XCTAssertEqualObjects([messages objectAtIndex:1], @"foo"); + XCTAssertEqualObjects([messages objectAtIndex:2], @"blah"); + XCTAssertEqualObjects([messages objectAtIndex:3], @"assert"); } // Helper method to help testing GTMLogFormatters @@ -370,211 +362,177 @@ - (void)testFunctionPrettifier { GTMLogBasicFormatter *fmtr = [[[GTMLogBasicFormatter alloc] init] autorelease]; - STAssertNotNil(fmtr, nil); + XCTAssertNotNil(fmtr); // Nil, empty and whitespace - STAssertEqualObjects([fmtr prettyNameForFunc:nil], @"(unknown)", nil); - STAssertEqualObjects([fmtr prettyNameForFunc:@""], @"(unknown)", nil); - STAssertEqualObjects([fmtr prettyNameForFunc:@" \n\t"], @"(unknown)", nil); + XCTAssertEqualObjects([fmtr prettyNameForFunc:nil], @"(unknown)"); + XCTAssertEqualObjects([fmtr prettyNameForFunc:@""], @"(unknown)"); + XCTAssertEqualObjects([fmtr prettyNameForFunc:@" \n\t"], @"(unknown)"); // C99 __func__ - STAssertEqualObjects([fmtr prettyNameForFunc:@"main"], @"main()", nil); - STAssertEqualObjects([fmtr prettyNameForFunc:@"main"], @"main()", nil); - STAssertEqualObjects([fmtr prettyNameForFunc:@" main "], @"main()", nil); + XCTAssertEqualObjects([fmtr prettyNameForFunc:@"main"], @"main()"); + XCTAssertEqualObjects([fmtr prettyNameForFunc:@"main"], @"main()"); + XCTAssertEqualObjects([fmtr prettyNameForFunc:@" main "], @"main()"); // GCC Obj-C __func__ and __PRETTY_FUNCTION__ - STAssertEqualObjects([fmtr prettyNameForFunc:@"+[Foo bar]"], @"+[Foo bar]", - nil); - STAssertEqualObjects([fmtr prettyNameForFunc:@" +[Foo bar] "], @"+[Foo bar]", - nil); - STAssertEqualObjects([fmtr prettyNameForFunc:@"-[Foo baz]"], @"-[Foo baz]", - nil); - STAssertEqualObjects([fmtr prettyNameForFunc:@" -[Foo baz] "], @"-[Foo baz]", - nil); + XCTAssertEqualObjects([fmtr prettyNameForFunc:@"+[Foo bar]"], @"+[Foo bar]"); + XCTAssertEqualObjects([fmtr prettyNameForFunc:@" +[Foo bar] "], @"+[Foo bar]"); + XCTAssertEqualObjects([fmtr prettyNameForFunc:@"-[Foo baz]"], @"-[Foo baz]"); + XCTAssertEqualObjects([fmtr prettyNameForFunc:@" -[Foo baz] "], @"-[Foo baz]"); // GCC C++ __PRETTY_FUNCTION__ - STAssertEqualObjects([fmtr prettyNameForFunc:@"void a::sub(int)"], - @"void a::sub(int)", nil); - STAssertEqualObjects([fmtr prettyNameForFunc:@" void a::sub(int) "], - @"void a::sub(int)", nil); + XCTAssertEqualObjects([fmtr prettyNameForFunc:@"void a::sub(int)"], + @"void a::sub(int)"); + XCTAssertEqualObjects([fmtr prettyNameForFunc:@" void a::sub(int) "], + @"void a::sub(int)"); } - (void)testBasicFormatter { id<GTMLogFormatter> fmtr = [[[GTMLogBasicFormatter alloc] init] autorelease]; - STAssertNotNil(fmtr, nil); + XCTAssertNotNil(fmtr); NSString *msg = nil; msg = [self stringFromFormatter:fmtr level:kGTMLoggerLevelDebug format:@"test"]; - STAssertEqualObjects(msg, @"test", nil); + XCTAssertEqualObjects(msg, @"test"); msg = [self stringFromFormatter:fmtr level:kGTMLoggerLevelDebug format:@"test %d", 1]; - STAssertEqualObjects(msg, @"test 1", nil); + XCTAssertEqualObjects(msg, @"test 1"); msg = [self stringFromFormatter:fmtr level:kGTMLoggerLevelDebug format:@"test %@", @"foo"]; - STAssertEqualObjects(msg, @"test foo", nil); + XCTAssertEqualObjects(msg, @"test foo"); msg = [self stringFromFormatter:fmtr level:kGTMLoggerLevelDebug format:@""]; - STAssertEqualObjects(msg, @"", nil); + XCTAssertEqualObjects(msg, @""); msg = [self stringFromFormatter:fmtr level:kGTMLoggerLevelDebug format:@" "]; - STAssertEqualObjects(msg, @" ", nil); + XCTAssertEqualObjects(msg, @" "); } - (void)testStandardFormatter { id<GTMLogFormatter> fmtr = [[[GTMLogStandardFormatter alloc] init] autorelease]; - STAssertNotNil(fmtr, nil); - - NSString * kFormatBasePattern; -#if GTM_MACOS_SDK - // E.g. 2008-01-04 09:16:26.906 otest[5567/0xa07d0f60] [lvl=1] (no func) test - // E.g. 2009-10-26 22:26:25.086 otest-i386[53200/0xa0438500] [lvl=1] (no func) test - kFormatBasePattern = - @"[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3} ((otest)|(otest-i386)|(otest-x86_64)|(otest-ppc))\\[[0-9]+/0x[0-9a-f]+\\] \\[lvl=[0-3]\\] \\(unknown\\) "; -#else // GTM_MACOS_SDK - // E.g. 2008-01-04 09:16:26.906 otest[5567/0xa07d0f60] [lvl=1] (no func) test - // 2011-11-29 12:32:24.129 GTMiPhoneUnitTestingOCUnitTestRig[31540/0xa04dd540] [lvl=1] (unknown) test - kFormatBasePattern = - @"[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3} (GTMiPhoneTest|GTMiPhoneUnitTestingOCUnitTestRig)\\[[0-9]+/0x[0-9a-f]+\\] \\[lvl=[0-3]\\] \\(unknown\\) "; -#endif // GTM_MACOS_SDK + XCTAssertNotNil(fmtr); + + // E.g. 2008-01-04 09:16:26.906 xctest[5567/0xa07d0f60] [lvl=1] (no func) test + #define kFormatBasePattern @"[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3} %@\\[[0-9]+/0x[0-9a-f]+\\] \\[lvl=[0-3]\\] \\(unknown\\) %@" NSString *msg = nil; + NSString *executableName = [[[NSBundle mainBundle] executablePath] lastPathComponent]; msg = [self stringFromFormatter:fmtr level:kGTMLoggerLevelDebug format:@"test"]; - STAssertTrue([msg gtm_matchesPattern:[kFormatBasePattern stringByAppendingString:@"test"]], - @"msg: %@", msg); + NSString *pattern = [NSString stringWithFormat:kFormatBasePattern, executableName, @"test"]; + XCTAssertTrue([msg gtm_matchesPattern:pattern], @"msg: %@", msg); msg = [self stringFromFormatter:fmtr level:kGTMLoggerLevelError format:@"test %d", 1]; - STAssertTrue([msg gtm_matchesPattern:[kFormatBasePattern stringByAppendingString:@"test 1"]], - @"msg: %@", msg); - + pattern = [NSString stringWithFormat:kFormatBasePattern, executableName, @"test 1"]; + XCTAssertTrue([msg gtm_matchesPattern:pattern], @"msg: %@", msg); msg = [self stringFromFormatter:fmtr level:kGTMLoggerLevelInfo format:@"test %@", @"hi"]; - STAssertTrue([msg gtm_matchesPattern:[kFormatBasePattern stringByAppendingString:@"test hi"]], - @"msg: %@", msg); + pattern = [NSString stringWithFormat:kFormatBasePattern, executableName, @"test hi"]; + XCTAssertTrue([msg gtm_matchesPattern:pattern], @"msg: %@", msg); msg = [self stringFromFormatter:fmtr level:kGTMLoggerLevelUnknown format:@"test"]; - STAssertTrue([msg gtm_matchesPattern:[kFormatBasePattern stringByAppendingString:@"test"]], - @"msg: %@", msg); + pattern = [NSString stringWithFormat:kFormatBasePattern, executableName, @"test"]; + XCTAssertTrue([msg gtm_matchesPattern:pattern], @"msg: %@", msg); } - (void)testNoFilter { id<GTMLogFilter> filter = [[[GTMLogNoFilter alloc] init] autorelease]; - STAssertNotNil(filter, nil); - - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown], nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug], nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo], nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError], nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert], nil); - STAssertTrue([filter filterAllowsMessage:@"" level:kGTMLoggerLevelDebug], nil); - STAssertTrue([filter filterAllowsMessage:nil level:kGTMLoggerLevelDebug], nil); + XCTAssertNotNil(filter); + + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert]); + XCTAssertTrue([filter filterAllowsMessage:@"" level:kGTMLoggerLevelDebug]); + XCTAssertTrue([filter filterAllowsMessage:nil level:kGTMLoggerLevelDebug]); } - (void)testMinimumFilter { id<GTMLogFilter> filter = [[[GTMLogMininumLevelFilter alloc] initWithMinimumLevel:kGTMLoggerLevelInfo] autorelease]; - STAssertNotNil(filter, nil); - STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown], - nil); - STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug], - nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo], - nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError], - nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert], - nil); + XCTAssertNotNil(filter); + XCTAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown]); + XCTAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert]); filter = [[[GTMLogMininumLevelFilter alloc] initWithMinimumLevel:kGTMLoggerLevelDebug] autorelease]; - STAssertNotNil(filter, nil); - STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown], - nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug], - nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo], - nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError], - nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert], - nil); + XCTAssertNotNil(filter); + XCTAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert]); // Cannot exceed min/max levels filter filter = [[[GTMLogMininumLevelFilter alloc] initWithMinimumLevel:kGTMLoggerLevelAssert + 1] autorelease]; - STAssertNil(filter, nil); + XCTAssertNil(filter); filter = [[[GTMLogMininumLevelFilter alloc] initWithMinimumLevel:kGTMLoggerLevelUnknown - 1] autorelease]; - STAssertNil(filter, nil); + XCTAssertNil(filter); } - (void)testMaximumFilter { id<GTMLogFilter> filter = [[[GTMLogMaximumLevelFilter alloc] initWithMaximumLevel:kGTMLoggerLevelInfo] autorelease]; - STAssertNotNil(filter, nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown], - nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug], - nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo], - nil); - STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError], - nil); - STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert], - nil); + XCTAssertNotNil(filter); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo]); + XCTAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError]); + XCTAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert]); filter = [[[GTMLogMaximumLevelFilter alloc] initWithMaximumLevel:kGTMLoggerLevelDebug] autorelease]; - STAssertNotNil(filter, nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown], - nil); - STAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug], - nil); - STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo], - nil); - STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError], - nil); - STAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert], - nil); + XCTAssertNotNil(filter); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelUnknown]); + XCTAssertTrue([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelDebug]); + XCTAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelInfo]); + XCTAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelError]); + XCTAssertFalse([filter filterAllowsMessage:@"hi" level:kGTMLoggerLevelAssert]); // Cannot exceed min/max levels filter filter = [[[GTMLogMaximumLevelFilter alloc] initWithMaximumLevel:kGTMLoggerLevelAssert + 1] autorelease]; - STAssertNil(filter, nil); + XCTAssertNil(filter); filter = [[[GTMLogMaximumLevelFilter alloc] initWithMaximumLevel:kGTMLoggerLevelUnknown - 1] autorelease]; - STAssertNil(filter, nil); + XCTAssertNil(filter); } - (void)testFileHandleCreation { NSFileHandle *fh = nil; fh = [NSFileHandle fileHandleForLoggingAtPath:nil mode:0644]; - STAssertNil(fh, nil); + XCTAssertNil(fh); fh = [NSFileHandle fileHandleForLoggingAtPath:path_ mode:0644]; - STAssertNotNil(fh, nil); + XCTAssertNotNil(fh); [fh logMessage:@"test 1" level:kGTMLoggerLevelInfo]; [fh logMessage:@"test 2" level:kGTMLoggerLevelInfo]; @@ -583,7 +541,7 @@ // Re-open file and make sure our log messages get appended fh = [NSFileHandle fileHandleForLoggingAtPath:path_ mode:0644]; - STAssertNotNil(fh, nil); + XCTAssertNotNil(fh); [fh logMessage:@"test 4" level:kGTMLoggerLevelInfo]; [fh logMessage:@"test 5" level:kGTMLoggerLevelInfo]; @@ -594,8 +552,8 @@ NSString *contents = [NSString stringWithContentsOfFile:path_ encoding:NSUTF8StringEncoding error:&err]; - STAssertNotNil(contents, @"Error loading log file: %@", err); - STAssertEqualObjects(@"test 1\ntest 2\ntest 3\ntest 4\ntest 5\ntest 6\n", contents, nil); + XCTAssertNotNil(contents, @"Error loading log file: %@", err); + XCTAssertEqualObjects(@"test 1\ntest 2\ntest 3\ntest 4\ntest 5\ntest 6\n", contents); } @end diff --git a/Foundation/GTMNSAppleEvent+HandlerTest.applescript b/Foundation/GTMNSAppleEvent+HandlerTest.applescript deleted file mode 100644 index 377d733..0000000 --- a/Foundation/GTMNSAppleEvent+HandlerTest.applescript +++ /dev/null @@ -1,60 +0,0 @@ --- --- Copyright 2008 Google Inc. --- --- Licensed under the Apache License, Version 2.0 (the "License"); you may not --- use this file except in compliance with the License. You may obtain a copy --- of the License at --- --- http://www.apache.org/licenses/LICENSE-2.0 --- --- Unless required by applicable law or agreed to in writing, software --- distributed under the License is distributed on an "AS IS" BASIS, WITHOUT --- WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the --- License for the specific language governing permissions and limitations under --- the License. --- - -script parentTestScript - property parentTestScriptProperty : 6 - on parentTestScriptFunc() - return "parent" - end parentTestScriptFunc -end script - -script testScript - property parent : parentTestScript - property testScriptProperty : 5 - on testScriptFunc() - return "child" - end testScriptFunc - on open foo - end open -end script - -property foo : 1 - -on test() -end test - -on testReturnOne() - return 1 -end testReturnOne - -on testReturnParam(param) - return param -end testReturnParam - -on testAddParams(param1, param2) - return param1 + param2 -end testAddParams - -on testAdd of a onto b given otherValue:d - return a + b + d -end testAdd - -on testGetScript() - return testScript -end testGetScript - -on print -end print diff --git a/Foundation/GTMNSAppleEventDescriptor+Foundation.h b/Foundation/GTMNSAppleEventDescriptor+Foundation.h deleted file mode 100644 index 8e62bcc..0000000 --- a/Foundation/GTMNSAppleEventDescriptor+Foundation.h +++ /dev/null @@ -1,102 +0,0 @@ -// -// GTMNSAppleEventDescriptor+Foundation.h -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> -#import "GTMDefines.h" -#import "GTMFourCharCode.h" - -// A category for dealing with NSAppleEventDescriptors and NSArrays. -@interface NSAppleEventDescriptor (GTMAppleEventDescriptorArrayAdditions) -// Used to register the types you know how to convert into -// NSAppleEventDescriptors. -// See examples in GTMNSAppleEventDescriptor+Foundation. -// Args: -// selector - selector to call for any of the types in |types| -// -(NSAppleEventDesc *)selector_name; -// types - an std c array of types of length |count| -// count - number of types in |types| -+ (void)gtm_registerSelector:(SEL)selector - forTypes:(DescType*)types - count:(NSUInteger)count; - -// Returns an NSObject for any NSAppleEventDescriptor -// Uses types registerd by registerSelector:forTypes:count: to determine -// what type of object to create. If it doesn't know a type, it attempts -// to return [self stringValue]. -- (id)gtm_objectValue; - -// Return an NSArray for an AEList -// Returns nil on failure. -- (NSArray*)gtm_arrayValue; - -// Return an NSDictionary for an AERecord -// Returns nil on failure. -- (NSDictionary*)gtm_dictionaryValue; - -// Return an NSNull for a desc of typeNull -// Returns nil on failure. -- (NSNull*)gtm_nullValue; - -// Return a NSAppleEventDescriptor for a double value. -+ (NSAppleEventDescriptor*)gtm_descriptorWithDouble:(double)real; - -// Return a NSAppleEventDescriptor for a float value. -+ (NSAppleEventDescriptor*)gtm_descriptorWithFloat:(float)real; - -// Return a NSAppleEventDescriptor for a CGFloat value. -+ (NSAppleEventDescriptor*)gtm_descriptorWithCGFloat:(CGFloat)real; - -// Attempt to extract a double value. Returns NAN on error. -- (double)gtm_doubleValue; - -// Attempt to extract a float value. Returns NAN on error. -- (float)gtm_floatValue; - -// Attempt to extract a CGFloat value. Returns NAN on error. -- (CGFloat)gtm_cgFloatValue; - -// Attempt to extract a NSNumber. Returns nil on error. -- (NSNumber*)gtm_numberValue; - -// Attempt to return a GTMFourCharCode. Returns nil on error. -- (GTMFourCharCode*)gtm_fourCharCodeValue; -@end - -@interface NSObject (GTMAppleEventDescriptorObjectAdditions) -// A informal protocol that objects can override to return appleEventDescriptors -// for their type. The default is to return [self description] rolled up -// in an NSAppleEventDescriptor. Built in support for: -// NSArray, NSDictionary, NSNull, NSString, NSNumber and NSProcessInfo -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor; -@end - -@interface NSAppleEventDescriptor (GTMAppleEventDescriptorAdditions) -// Allows you to send events. -// Returns YES if send was successful. -- (BOOL)gtm_sendEventWithMode:(AESendMode)mode - timeOut:(NSTimeInterval)timeout - reply:(NSAppleEventDescriptor**)reply; -@end - -@interface GTMFourCharCode (GTMAppleEventDescriptorObjectAdditions) - -// if you call gtm_appleEventDescriptor on GTMFourCharCode it will be of -// type typeType. If you need something different (like typeProperty) this -// allows you to define the type you want. -- (NSAppleEventDescriptor*)gtm_appleEventDescriptorOfType:(DescType)type; -@end diff --git a/Foundation/GTMNSAppleEventDescriptor+Foundation.m b/Foundation/GTMNSAppleEventDescriptor+Foundation.m deleted file mode 100644 index f9828d4..0000000 --- a/Foundation/GTMNSAppleEventDescriptor+Foundation.m +++ /dev/null @@ -1,536 +0,0 @@ -// -// GTMNSAppleEventDescriptor+Foundation.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSAppleEventDescriptor+Foundation.h" -#import "GTMDebugSelectorValidation.h" -#import <Carbon/Carbon.h> // Needed Solely For keyASUserRecordFields - -// Map of types to selectors. -static NSMutableDictionary *gTypeMap = nil; - -@implementation NSAppleEventDescriptor (GTMAppleEventDescriptorArrayAdditions) - -+ (void)gtm_registerSelector:(SEL)selector - forTypes:(DescType*)types - count:(NSUInteger)count { - if (selector && types && count > 0) { -#if DEBUG - NSAppleEventDescriptor *desc - = [[[NSAppleEventDescriptor alloc] initListDescriptor] autorelease]; - GTMAssertSelectorNilOrImplementedWithReturnTypeAndArguments(desc, - selector, - @encode(id), - NULL); -#endif - @synchronized(self) { - if (!gTypeMap) { - gTypeMap = [[NSMutableDictionary alloc] init]; - } - NSString *selString = NSStringFromSelector(selector); - for (NSUInteger i = 0; i < count; ++i) { - NSNumber *key = [NSNumber numberWithUnsignedInt:types[i]]; - NSString *exists = [gTypeMap objectForKey:key]; - if (exists) { - _GTMDevLog(@"%@ being replaced with %@ exists for type: %@", - exists, selString, key); - } - [gTypeMap setObject:selString forKey:key]; - } - } - } -} - -- (id)gtm_objectValue { - id value = nil; - - // Check our registered types to see if we have anything - if (gTypeMap) { - @synchronized(gTypeMap) { - DescType type = [self descriptorType]; - NSNumber *key = [NSNumber numberWithUnsignedInt:type]; - NSString *selectorString = [gTypeMap objectForKey:key]; - if (selectorString) { - SEL selector = NSSelectorFromString(selectorString); - value = [self performSelector:selector]; - } else { - value = [self stringValue]; - } - } - } - return value; -} - -- (NSArray*)gtm_arrayValue { - NSUInteger count = [self numberOfItems]; - NSAppleEventDescriptor *workingDesc = self; - if (count == 0) { - // Create a list to work with. - workingDesc = [self coerceToDescriptorType:typeAEList]; - count = [workingDesc numberOfItems]; - } - NSMutableArray *items = [NSMutableArray arrayWithCapacity:count]; - for (NSUInteger i = 1; i <= count; ++i) { - NSAppleEventDescriptor *desc = [workingDesc descriptorAtIndex:i]; - id value = [desc gtm_objectValue]; - if (!value) { - _GTMDevLog(@"Unknown type of descriptor %@", [desc description]); - return nil; - } - [items addObject:value]; - } - return items; -} - -- (NSDictionary*)gtm_dictionaryValue { - NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; - NSAppleEventDescriptor *userRecord = [self descriptorForKeyword:keyASUserRecordFields]; - if (userRecord) { - NSArray *userItems = [userRecord gtm_arrayValue]; - NSString *key = nil; - NSString *item; - GTM_FOREACH_OBJECT(item, userItems) { - if (key) { - // Save the pair and reset our state - [dictionary setObject:item forKey:key]; - key = nil; - } else { - // Save it for the next pair - key = item; - } - } - if (key) { - _GTMDevLog(@"Got a key %@ with no value in %@", key, userItems); - return nil; - } - } else { - NSUInteger count = [self numberOfItems]; - for (NSUInteger i = 1; i <= count; ++i) { - AEKeyword key = [self keywordForDescriptorAtIndex:i]; - NSAppleEventDescriptor *desc = [self descriptorForKeyword:key]; - id value = [desc gtm_objectValue]; - if (!value) { - _GTMDevLog(@"Unknown type of descriptor %@", [desc description]); - return nil; - } - [dictionary setObject:value - forKey:[GTMFourCharCode fourCharCodeWithFourCharCode:key]]; - } - } - return dictionary; -} - -- (NSNull*)gtm_nullValue { - return [NSNull null]; -} - -+ (NSAppleEventDescriptor*)gtm_descriptorWithDouble:(double)real { - return [NSAppleEventDescriptor descriptorWithDescriptorType:typeIEEE64BitFloatingPoint - bytes:&real - length:sizeof(real)]; -} - -+ (NSAppleEventDescriptor*)gtm_descriptorWithFloat:(float)real { - return [NSAppleEventDescriptor descriptorWithDescriptorType:typeIEEE32BitFloatingPoint - bytes:&real - length:sizeof(real)]; -} - - -+ (NSAppleEventDescriptor*)gtm_descriptorWithCGFloat:(CGFloat)real { -#if CGFLOAT_IS_DOUBLE - return [self gtm_descriptorWithDouble:real]; -#else - return [self gtm_descriptorWithFloat:real]; -#endif -} - -- (double)gtm_doubleValue { - // Be careful modifying this code as Xcode 3.2.5 gcc 4.2.1 (5664) was - // generating bad code with a previous incarnation. - NSNumber *number = [self gtm_numberValue]; - if (number) { - return [number doubleValue]; - } - return NAN; -} - -- (float)gtm_floatValue { - NSNumber *number = [self gtm_numberValue]; - if (number) { - return [number floatValue]; - } - return NAN; -} - -- (CGFloat)gtm_cgFloatValue { -#if CGFLOAT_IS_DOUBLE - return [self gtm_doubleValue]; -#else - return [self gtm_floatValue]; -#endif -} - -- (NSNumber*)gtm_numberValue { - typedef struct { - DescType type; - SEL selector; - } TypeSelectorMap; - TypeSelectorMap typeSelectorMap[] = { - { typeFalse, @selector(numberWithBool:) }, - { typeTrue, @selector(numberWithBool:) }, - { typeBoolean, @selector(numberWithBool:) }, - { typeSInt16, @selector(numberWithShort:) }, - { typeSInt32, @selector(numberWithInt:) }, - { typeUInt32, @selector(numberWithUnsignedInt:) }, - { typeSInt64, @selector(numberWithLongLong:) }, - { typeIEEE32BitFloatingPoint, @selector(numberWithFloat:) }, - { typeIEEE64BitFloatingPoint, @selector(numberWithDouble:) } - }; - DescType type = [self descriptorType]; - SEL selector = nil; - for (size_t i = 0; i < sizeof(typeSelectorMap) / sizeof(TypeSelectorMap); ++i) { - if (type == typeSelectorMap[i].type) { - selector = typeSelectorMap[i].selector; - break; - } - } - NSAppleEventDescriptor *desc = self; - if (!selector) { - // COV_NF_START - Don't know how to force this in a unittest - _GTMDevLog(@"Didn't get a valid selector?"); - desc = [self coerceToDescriptorType:typeIEEE64BitFloatingPoint]; - selector = @selector(numberWithDouble:); - // COV_NF_END - } - NSData *descData = [desc data]; - const void *bytes = [descData bytes]; - if (!bytes) { - // COV_NF_START - Don't know how to force this in a unittest - _GTMDevLog(@"Unable to get bytes from %@", desc); - return nil; - // COV_NF_END - } - Class numberClass = [NSNumber class]; - NSMethodSignature *signature = [numberClass methodSignatureForSelector:selector]; - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; - [invocation setSelector:selector]; - [invocation setArgument:(void*)bytes atIndex:2]; - [invocation setTarget:numberClass]; - [invocation invoke]; - NSNumber *value = nil; - [invocation getReturnValue:&value]; - return value; -} - -- (GTMFourCharCode*)gtm_fourCharCodeValue { - return [GTMFourCharCode fourCharCodeWithFourCharCode:[self typeCodeValue]]; -} - -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor { - return self; -} - -@end - -@implementation NSObject (GTMAppleEventDescriptorObjectAdditions) -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor { - return [NSAppleEventDescriptor descriptorWithString:[self description]]; -} -@end - -@implementation NSArray (GTMAppleEventDescriptorObjectAdditions) - -+ (void)load { - DescType types[] = { - typeAEList, - }; - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [NSAppleEventDescriptor gtm_registerSelector:@selector(gtm_arrayValue) - forTypes:types - count:sizeof(types)/sizeof(DescType)]; - [pool drain]; -} - -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor { - NSAppleEventDescriptor *desc = [NSAppleEventDescriptor listDescriptor]; - NSUInteger count = [self count]; - for (NSUInteger i = 1; i <= count; ++i) { - id item = [self objectAtIndex:i-1]; - NSAppleEventDescriptor *itemDesc = [item gtm_appleEventDescriptor]; - if (!itemDesc) { - _GTMDevLog(@"Unable to create Apple Event Descriptor for %@", [self description]); - return nil; - } - [desc insertDescriptor:itemDesc atIndex:i]; - } - return desc; -} -@end - -@implementation NSDictionary (GTMAppleEventDescriptorObjectAdditions) - -+ (void)load { - DescType types[] = { - typeAERecord, - }; - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [NSAppleEventDescriptor gtm_registerSelector:@selector(gtm_dictionaryValue) - forTypes:types - count:sizeof(types)/sizeof(DescType)]; - [pool drain]; -} - -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor { - Class keyClass = nil; - id key = nil; - GTM_FOREACH_KEY(key, self) { - if (!keyClass) { - if ([key isKindOfClass:[GTMFourCharCode class]]) { - keyClass = [GTMFourCharCode class]; - } else if ([key isKindOfClass:[NSString class]]) { - keyClass = [NSString class]; - } else { - _GTMDevLog(@"Keys must be of type NSString or GTMFourCharCode: %@", key); - return nil; - } - } - if (![key isKindOfClass:keyClass]) { - _GTMDevLog(@"Keys must be homogenous (first key was of type %@) " - "and of type NSString or GTMFourCharCode: %@", keyClass, key); - return nil; - } - } - NSAppleEventDescriptor *desc = [NSAppleEventDescriptor recordDescriptor]; - if ([keyClass isEqual:[NSString class]]) { - NSMutableArray *array = [NSMutableArray arrayWithCapacity:[self count] * 2]; - GTM_FOREACH_KEY(key, self) { - [array addObject:key]; - [array addObject:[self objectForKey:key]]; - } - NSAppleEventDescriptor *userRecord = [array gtm_appleEventDescriptor]; - if (!userRecord) { - return nil; - } - [desc setDescriptor:userRecord forKeyword:keyASUserRecordFields]; - } else { - GTM_FOREACH_KEY(key, self) { - id value = [self objectForKey:key]; - NSAppleEventDescriptor *valDesc = [value gtm_appleEventDescriptor]; - if (!valDesc) { - return nil; - } - [desc setDescriptor:valDesc forKeyword:[key fourCharCode]]; - } - } - return desc; -} - -@end - -@implementation NSNull (GTMAppleEventDescriptorObjectAdditions) -+ (void)load { - DescType types[] = { - typeNull - }; - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [NSAppleEventDescriptor gtm_registerSelector:@selector(gtm_nullValue) - forTypes:types - count:sizeof(types)/sizeof(DescType)]; - [pool drain]; -} - -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor { - return [NSAppleEventDescriptor nullDescriptor]; -} -@end - -@implementation NSString (GTMAppleEventDescriptorObjectAdditions) - -+ (void)load { - DescType types[] = { - typeUTF16ExternalRepresentation, - typeUnicodeText, - typeUTF8Text, - typeCString, - typePString, - typeChar, - typeIntlText }; - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [NSAppleEventDescriptor gtm_registerSelector:@selector(stringValue) - forTypes:types - count:sizeof(types)/sizeof(DescType)]; - [pool drain]; -} - -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor { - return [NSAppleEventDescriptor descriptorWithString:self]; -} -@end - -@implementation NSNumber (GTMAppleEventDescriptorObjectAdditions) - -+ (void)load { - DescType types[] = { - typeTrue, - typeFalse, - typeBoolean, - typeSInt16, - typeSInt32, - typeUInt32, - typeSInt64, - typeIEEE32BitFloatingPoint, - typeIEEE64BitFloatingPoint }; - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [NSAppleEventDescriptor gtm_registerSelector:@selector(gtm_numberValue) - forTypes:types - count:sizeof(types)/sizeof(DescType)]; - [pool drain]; -} - -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor { - const char *type = [self objCType]; - if (!type || strlen(type) != 1) return nil; - - DescType desiredType = typeNull; - NSAppleEventDescriptor *desc = nil; - switch (type[0]) { - // COV_NF_START - // I can't seem to convince objcType to return something of this type - case 'B': - desc = [NSAppleEventDescriptor descriptorWithBoolean:[self boolValue]]; - break; - // COV_NF_END - - case 'c': - case 'C': - case 's': - case 'S': - desiredType = typeSInt16; - break; - - case 'i': - case 'l': - desiredType = typeSInt32; - break; - - // COV_NF_START - // I can't seem to convince objcType to return something of this type - case 'I': - case 'L': - desiredType = typeUInt32; - break; - // COV_NF_END - - case 'q': - case 'Q': - desiredType = typeSInt64; - break; - - case 'f': - desiredType = typeIEEE32BitFloatingPoint; - break; - - case 'd': - default: - desiredType = typeIEEE64BitFloatingPoint; - break; - } - - if (!desc) { - desc = [NSAppleEventDescriptor gtm_descriptorWithDouble:[self doubleValue]]; - if (desc && desiredType != typeIEEE64BitFloatingPoint) { - desc = [desc coerceToDescriptorType:desiredType]; - } - } - return desc; -} - -@end - -@implementation NSProcessInfo (GTMAppleEventDescriptorObjectAdditions) - -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor { - ProcessSerialNumber psn = { 0, kCurrentProcess }; - return [NSAppleEventDescriptor descriptorWithDescriptorType:typeProcessSerialNumber - bytes:&psn - length:sizeof(ProcessSerialNumber)]; -} - -@end - -@implementation GTMFourCharCode (GTMAppleEventDescriptorObjectAdditions) - -+ (void)load { - DescType types[] = { - typeType, - typeKeyword, - typeApplSignature, - typeEnumerated, - }; - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [NSAppleEventDescriptor gtm_registerSelector:@selector(gtm_fourCharCodeValue) - forTypes:types - count:sizeof(types)/sizeof(DescType)]; - [pool drain]; -} - -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor { - return [self gtm_appleEventDescriptorOfType:typeType]; -} - -- (NSAppleEventDescriptor*)gtm_appleEventDescriptorOfType:(DescType)type { - FourCharCode code = [self fourCharCode]; - return [NSAppleEventDescriptor descriptorWithDescriptorType:type - bytes:&code - length:sizeof(code)]; -} -@end - -@implementation NSAppleEventDescriptor (GTMAppleEventDescriptorAdditions) - -- (BOOL)gtm_sendEventWithMode:(AESendMode)mode - timeOut:(NSTimeInterval)timeout - reply:(NSAppleEventDescriptor**)reply { - BOOL isGood = YES; - AppleEvent replyEvent = { typeNull, NULL }; - OSStatus err = AESendMessage([self aeDesc], &replyEvent, mode, timeout * 60); - NSAppleEventDescriptor *replyDesc - = [[[NSAppleEventDescriptor alloc] initWithAEDescNoCopy:&replyEvent] autorelease]; - if (err) { - isGood = NO; - _GTMDevLog(@"Unable to send message: %@ %d", self, (int)err); - } - if (isGood) { - NSAppleEventDescriptor *errorDesc = [replyDesc descriptorForKeyword:keyErrorNumber]; - if (errorDesc && [errorDesc int32Value]) { - isGood = NO; - } - } - if (reply) { - *reply = replyDesc; - } - return isGood; -} - -@end diff --git a/Foundation/GTMNSAppleEventDescriptor+FoundationTest.m b/Foundation/GTMNSAppleEventDescriptor+FoundationTest.m deleted file mode 100644 index f346e99..0000000 --- a/Foundation/GTMNSAppleEventDescriptor+FoundationTest.m +++ /dev/null @@ -1,643 +0,0 @@ -// -// GTMNSAppleEventDescriptor+FoundationTest.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import <Carbon/Carbon.h> -#import "GTMNSAppleEventDescriptor+Foundation.h" -#import "GTMFourCharCode.h" -#import "GTMUnitTestDevLog.h" - -@interface GTMNSAppleEventDescriptor_TestObject : NSObject -@end - -@implementation GTMNSAppleEventDescriptor_TestObject - -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor { - return nil; -} - -@end - -@interface GTMNSAppleEventDescriptor_FoundationTest : GTMTestCase { - BOOL gotEvent_; -} -- (void)handleEvent:(NSAppleEventDescriptor*)event - withReply:(NSAppleEventDescriptor*)reply; -- (void)handleEvent:(NSAppleEventDescriptor*)event - withError:(NSAppleEventDescriptor*)reply; - -@end - -@implementation GTMNSAppleEventDescriptor_FoundationTest -- (void)testRegisterSelectorForTypesCount { - // Weird edge casey stuff. - // + (void)registerSelector:(SEL)selector - // forTypes:(DescType*)types count:(int)count - // is tested heavily by the other NSAppleEventDescriptor+foo categories. - DescType type; - [NSAppleEventDescriptor gtm_registerSelector:nil - forTypes:&type count:1]; - [NSAppleEventDescriptor gtm_registerSelector:@selector(initListDescriptor) - forTypes:nil count:1]; - [NSAppleEventDescriptor gtm_registerSelector:@selector(initListDescriptor) - forTypes:&type count:0]; - // Test the duplicate case - [NSAppleEventDescriptor gtm_registerSelector:@selector(initListDescriptor) - forTypes:&type count:1]; - [GTMUnitTestDevLog expectPattern:@"initListDescriptor being replaced with " - "initListDescriptor exists for type: [0-9]+"]; - [NSAppleEventDescriptor gtm_registerSelector:@selector(initListDescriptor) - forTypes:&type count:1]; -} - -- (void)testObjectValue { - // - (void)testObjectValue is tested heavily by the other - // NSAppleEventDescriptor+foo categories. - long data = 1; - // v@#f is just a bogus descriptor type that we don't recognize. - NSAppleEventDescriptor *desc - = [NSAppleEventDescriptor descriptorWithDescriptorType:'v@#f' - bytes:&data - length:sizeof(data)]; - id value = [desc gtm_objectValue]; - STAssertNil(value, nil); -} - -- (void)testAppleEventDescriptor { - // - (NSAppleEventDescriptor*)appleEventDescriptor is tested heavily by the - // other NSAppleEventDescriptor+foo categories. - NSAppleEventDescriptor *desc = [self gtm_appleEventDescriptor]; - STAssertNotNil(desc, nil); - STAssertEquals([desc descriptorType], (DescType)typeUnicodeText, nil); -} - -- (void)testDescriptorWithArrayAndArrayValue { - // Test empty array - NSAppleEventDescriptor *desc = [[NSArray array] gtm_appleEventDescriptor]; - STAssertNotNil(desc, nil); - STAssertEquals([desc numberOfItems], (NSInteger)0, nil); - - // Complex array - NSArray *array = [NSArray arrayWithObjects: - [NSNumber numberWithInt:4], - @"foo", - [NSNumber numberWithInt:2], - @"bar", - [NSArray arrayWithObjects: - @"bam", - [NSArray arrayWithObject:[NSNumber numberWithFloat:4.2f]], - nil], - nil]; - STAssertNotNil(array, nil); - desc = [array gtm_appleEventDescriptor]; - STAssertNotNil(desc, nil); - NSArray *array2 = [desc gtm_objectValue]; - STAssertNotNil(array2, nil); - NSArray *array3 = [desc gtm_arrayValue]; - STAssertNotNil(array3, nil); - STAssertTrue([array isEqualToArray:array2], - @"array: %@\narray2: %@\ndesc: %@", - [array description], [array2 description], [desc description]); - STAssertTrue([array2 isEqualToArray:array3], - @"array: %@\narray2: %@\ndesc: %@", - [array description], [array2 description], [desc description]); - - // Test a single object - array = [NSArray arrayWithObject:@"foo"]; - desc = [NSAppleEventDescriptor descriptorWithString:@"foo"]; - STAssertNotNil(desc, nil); - array2 = [desc gtm_arrayValue]; - STAssertTrue([array isEqualToArray:array2], - @"array: %@\narray2: %@\ndesc: %@", - [array description], [array2 description], [desc description]); - - // Something that doesn't know how to register itself. - GTMNSAppleEventDescriptor_TestObject *obj - = [[[GTMNSAppleEventDescriptor_TestObject alloc] init] autorelease]; - [GTMUnitTestDevLog expectPattern:@"Unable to create Apple Event Descriptor for .*"]; - desc = [[NSArray arrayWithObject:obj] gtm_appleEventDescriptor]; - STAssertNil(desc, @"Should be nil"); - - // A list containing something we don't know how to deal with - desc = [NSAppleEventDescriptor listDescriptor]; - NSAppleEventDescriptor *desc2 - = [NSAppleEventDescriptor descriptorWithDescriptorType:'@!@#' - bytes:&desc - length:sizeof(desc)]; - [GTMUnitTestDevLog expectPattern:@"Unknown type of descriptor " - "<NSAppleEventDescriptor: '@!@#'\\(\\$[0-9A-F]*\\$\\)>"]; - [desc insertDescriptor:desc2 atIndex:0]; - array = [desc gtm_objectValue]; - STAssertEquals([array count], (NSUInteger)0, @"Should have 0 items"); -} - -- (void)testDescriptorWithDictionaryAndDictionaryValue { - // Test empty dictionary - NSAppleEventDescriptor *desc - = [[NSDictionary dictionary] gtm_appleEventDescriptor]; - STAssertNotNil(desc, nil); - STAssertEquals([desc numberOfItems], (NSInteger)0, nil); - - // Complex dictionary - NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys: - @"fooobject", - @"fookey", - @"barobject", - @"barkey", - [NSDictionary dictionaryWithObjectsAndKeys: - @"january", - [GTMFourCharCode fourCharCodeWithFourCharCode:cJanuary], - @"february", - [GTMFourCharCode fourCharCodeWithFourCharCode:cFebruary], - nil], - @"dictkey", - nil]; - STAssertNotNil(dictionary, nil); - desc = [dictionary gtm_appleEventDescriptor]; - STAssertNotNil(desc, nil); - NSDictionary *dictionary2 = [desc gtm_objectValue]; - STAssertNotNil(dictionary2, nil); - NSDictionary *dictionary3 = [desc gtm_dictionaryValue]; - STAssertNotNil(dictionary3, nil); - STAssertEqualObjects(dictionary, dictionary2, - @"desc: %@", [desc description]); - STAssertEqualObjects(dictionary2, dictionary3, - @"desc: %@", [desc description]); - - // Something that doesn't know how to register itself. - GTMNSAppleEventDescriptor_TestObject *obj - = [[[GTMNSAppleEventDescriptor_TestObject alloc] init] autorelease]; - [GTMUnitTestDevLog expectPattern:@"Unable to create Apple Event Descriptor for .*"]; - desc = [[NSDictionary dictionaryWithObject:obj - forKey:@"foo"] gtm_appleEventDescriptor]; - STAssertNil(desc, @"Should be nil"); - - GTMFourCharCode *fcc = [GTMFourCharCode fourCharCodeWithFourCharCode:cJanuary]; - desc = [[NSDictionary dictionaryWithObject:obj - forKey:fcc] gtm_appleEventDescriptor]; - STAssertNil(desc, @"Should be nil"); - - // A list containing something we don't know how to deal with - desc = [NSAppleEventDescriptor recordDescriptor]; - NSAppleEventDescriptor *desc2 - = [NSAppleEventDescriptor descriptorWithDescriptorType:'@!@#' - bytes:&desc - length:sizeof(desc)]; - [desc setDescriptor:desc2 forKeyword:cJanuary]; - [GTMUnitTestDevLog expectPattern:@"Unknown type of descriptor " - "<NSAppleEventDescriptor: '@!@#'\\(\\$[0-9A-F]+\\$\\)>"]; - dictionary = [desc gtm_objectValue]; - STAssertEquals([dictionary count], (NSUInteger)0, @"Should have 0 items"); - - // A bad dictionary - dictionary = [NSDictionary dictionaryWithObjectsAndKeys: - @"foo", - [GTMFourCharCode fourCharCodeWithFourCharCode:'APPL'], - @"bam", - @"bar", - nil]; - STAssertNotNil(dictionary, nil); - // I cannot use expectString here to the exact string because interestingly - // dictionaries in 64 bit enumerate in a different order from dictionaries - // on 32 bit. This is the closest pattern I can match. - [GTMUnitTestDevLog expectPattern:@"Keys must be homogenous .*"]; - desc = [dictionary gtm_appleEventDescriptor]; - STAssertNil(desc, nil); - - // Another bad dictionary - dictionary = [NSDictionary dictionaryWithObjectsAndKeys: - @"foo", - [NSNumber numberWithInt:4], - @"bam", - @"bar", - nil]; - STAssertNotNil(dictionary, nil); - // I cannot use expectString here to the exact string because interestingly - // dictionaries in 64 bit enumerate in a different order from dictionaries - // on 32 bit. This is the closest pattern I can match. - [GTMUnitTestDevLog expectPattern:@"Keys must be .*"]; - desc = [dictionary gtm_appleEventDescriptor]; - STAssertNil(desc, nil); - - // A bad descriptor - desc = [NSAppleEventDescriptor recordDescriptor]; - STAssertNotNil(desc, @""); - NSArray *array = [NSArray arrayWithObjects:@"foo", @"bar", @"bam", nil]; - STAssertNotNil(array, @""); - NSAppleEventDescriptor *userRecord = [array gtm_appleEventDescriptor]; - STAssertNotNil(userRecord, @""); - [desc setDescriptor:userRecord forKeyword:keyASUserRecordFields]; - [GTMUnitTestDevLog expectPattern:@"Got a key bam with no value in \\(.*"]; - dictionary = [desc gtm_objectValue]; - STAssertNil(dictionary, @"Should be nil"); -} - -- (void)testDescriptorWithNull { - // Test Null - NSNull *null = [NSNull null]; - NSAppleEventDescriptor *desc = [null gtm_appleEventDescriptor]; - STAssertNotNil(desc, nil); - NSNull *null2 = [desc gtm_objectValue]; - STAssertNotNil(null2, nil); - NSNull *null3 = [desc gtm_nullValue]; - STAssertNotNil(null2, nil); - STAssertEqualObjects(null, null2, - @"null: %@\null2: %@\ndesc: %@", - [null description], [null2 description], - [desc description]); - STAssertEqualObjects(null, null3, - @"null: %@\null3: %@\ndesc: %@", - [null description], [null3 description], - [desc description]); -} - -- (void)testDescriptorWithString { - // Test empty String - NSAppleEventDescriptor *desc = [[NSString string] gtm_appleEventDescriptor]; - STAssertNotNil(desc, nil); - - // Test String - NSString *string = @"Ratatouille!"; - desc = [string gtm_appleEventDescriptor]; - STAssertNotNil(desc, nil); - NSString *string2 = [desc gtm_objectValue]; - STAssertNotNil(string2, nil); - STAssertEqualObjects(string, string2, - @"string: %@\nstring: %@\ndesc: %@", - [string description], [string2 description], [desc description]); - -} - -- (void)testDescriptorWithNumberAndNumberValue { - // There's really no good way to make this into a loop sadly due - // to me having to pass a pointer of bytes to NSInvocation as an argument. - // I want the compiler to convert my int to the appropriate type. - - NSNumber *original = [NSNumber numberWithBool:YES]; - STAssertNotNil(original, @"Value: YES"); - NSAppleEventDescriptor *desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: YES"); - id returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: YES"); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: YES"); - STAssertEqualObjects(original, returned, @"Value: YES"); - desc = [desc coerceToDescriptorType:typeBoolean]; - NSNumber *number = [desc gtm_numberValue]; - STAssertEqualObjects(number, original, @"Value: YES"); - - original = [NSNumber numberWithBool:NO]; - STAssertNotNil(original, @"Value: NO"); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: NO"); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: NO"); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: NO"); - STAssertEqualObjects(original, returned, @"Value: NO"); - - sranddev(); - double value = rand(); - - original = [NSNumber numberWithChar:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = rand(); - original = [NSNumber numberWithUnsignedChar:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = rand(); - original = [NSNumber numberWithShort:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = rand(); - original = [NSNumber numberWithUnsignedShort:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = rand(); - original = [NSNumber numberWithInt:(int)value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = rand(); - original = [NSNumber numberWithUnsignedInt:(unsigned int)value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = rand(); - original = [NSNumber numberWithLong:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = rand(); - original = [NSNumber numberWithUnsignedLong:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = rand(); - original = [NSNumber numberWithLongLong:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = rand(); - original = [NSNumber numberWithUnsignedLongLong:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - float floatA = rand(); - float floatB = rand(); - value = floatA / floatB; - original = [NSNumber numberWithFloat:(float)value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - double doubleA = rand(); - double doubleB = rand(); - value = doubleA / doubleB; - original = [NSNumber numberWithDouble:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = rand(); - original = [NSNumber numberWithBool:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = NAN; - original = [NSNumber numberWithDouble:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = INFINITY; - original = [NSNumber numberWithDouble:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = -0.0; - original = [NSNumber numberWithDouble:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); - - value = -INFINITY; - original = [NSNumber numberWithDouble:value]; - STAssertNotNil(original, @"Value: %g", value); - desc = [original gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Value: %g", value); - returned = [desc gtm_objectValue]; - STAssertNotNil(returned, @"Value: %g", value); - STAssertTrue([returned isKindOfClass:[NSNumber class]], @"Value: %g", value); - STAssertEqualObjects(original, returned, @"Value: %g", value); -} - -- (void)testDescriptorWithDoubleAndDoubleValue { - sranddev(); - for (int i = 0; i < 1000; ++i) { - double value1 = rand(); - double value2 = rand(); - double value = value1 / value2; - NSAppleEventDescriptor *desc - = [NSAppleEventDescriptor gtm_descriptorWithDouble:value]; - STAssertNotNil(desc, @"Value: %g", value); - double returnedValue = [desc gtm_doubleValue]; - STAssertEquals(value, returnedValue, @"Value: %g", value); - } - - double specialCases[] = { 0.0f, __DBL_MIN__, __DBL_EPSILON__, INFINITY, NAN }; - for (size_t i = 0; i < sizeof(specialCases) / sizeof(double); ++i) { - double value = specialCases[i]; - NSAppleEventDescriptor *desc - = [NSAppleEventDescriptor gtm_descriptorWithDouble:value]; - STAssertNotNil(desc, @"Value: %g", value); - double returnedValue = [desc gtm_doubleValue]; - STAssertEquals(value, returnedValue, @"Value: %g", value); - } -} - -- (void)testDescriptorWithFloatAndFloatValue { - sranddev(); - for (int i = 0; i < 1000; ++i) { - float value1 = rand(); - float value2 = rand(); - float value = value1 / value2; - NSAppleEventDescriptor *desc - = [NSAppleEventDescriptor gtm_descriptorWithFloat:value]; - STAssertNotNil(desc, @"Value: %f", value); - float returnedValue = [desc gtm_floatValue]; - STAssertEquals(value, returnedValue, @"Value: %f", value); - } - - float specialCases[] = { 0.0f, FLT_MIN, FLT_MAX, FLT_EPSILON, INFINITY, NAN }; - for (size_t i = 0; i < sizeof(specialCases) / sizeof(float); ++i) { - float value = specialCases[i]; - NSAppleEventDescriptor *desc - = [NSAppleEventDescriptor gtm_descriptorWithFloat:value]; - STAssertNotNil(desc, @"Value: %f", value); - float returnedValue = [desc gtm_floatValue]; - STAssertEquals(value, returnedValue, @"Value: %f", value); - } -} - -- (void)testDescriptorWithCGFloatAndCGFloatValue { - sranddev(); - for (int i = 0; i < 1000; ++i) { - CGFloat value1 = rand(); - CGFloat value2 = rand(); - CGFloat value = value1 / value2; - NSAppleEventDescriptor *desc - = [NSAppleEventDescriptor gtm_descriptorWithCGFloat:value]; - STAssertNotNil(desc, @"Value: %g", (double)value); - CGFloat returnedValue = [desc gtm_cgFloatValue]; - STAssertEquals(value, returnedValue, @"Value: %g", (double)value); - } - - CGFloat specialCases[] = { 0.0f, CGFLOAT_MIN, CGFLOAT_MAX, NAN }; - for (size_t i = 0; i < sizeof(specialCases) / sizeof(CGFloat); ++i) { - CGFloat value = specialCases[i]; - NSAppleEventDescriptor *desc - = [NSAppleEventDescriptor gtm_descriptorWithCGFloat:value]; - STAssertNotNil(desc, @"Value: %g", (double)value); - CGFloat returnedValue = [desc gtm_cgFloatValue]; - STAssertEquals(value, returnedValue, @"Value: %g", (double)value); - } -} - -- (void)testDescriptorWithGTMFourCharCode { - GTMFourCharCode *fcc = [GTMFourCharCode fourCharCodeWithFourCharCode:'APPL']; - STAssertNotNil(fcc, nil); - NSAppleEventDescriptor *desc = [fcc gtm_appleEventDescriptor]; - STAssertNotNil(desc, nil); - GTMFourCharCode *fcc2 = [desc gtm_objectValue]; - STAssertNotNil(fcc2, nil); - STAssertEqualObjects(fcc, fcc2, nil); - STAssertEquals([desc descriptorType], (DescType)typeType, nil); - desc = [fcc gtm_appleEventDescriptorOfType:typeKeyword]; - STAssertNotNil(desc, nil); - fcc2 = [desc gtm_objectValue]; - STAssertNotNil(fcc2, nil); - STAssertEqualObjects(fcc, fcc2, nil); - STAssertEquals([desc descriptorType], (DescType)typeKeyword, nil); -} - -- (void)testDescriptorWithDescriptor { - NSAppleEventDescriptor *desc - = [NSAppleEventDescriptor descriptorWithString:@"foo"]; - NSAppleEventDescriptor *desc2 = [desc gtm_appleEventDescriptor]; - STAssertEqualObjects(desc, desc2, nil); -} - -- (void)handleEvent:(NSAppleEventDescriptor*)event - withReply:(NSAppleEventDescriptor*)reply { - gotEvent_ = YES; - NSAppleEventDescriptor *answer = [NSAppleEventDescriptor descriptorWithInt32:1]; - [reply setDescriptor:answer forKeyword:keyDirectObject]; -} - -- (void)handleEvent:(NSAppleEventDescriptor*)event - withError:(NSAppleEventDescriptor*)error { - gotEvent_ = YES; - NSAppleEventDescriptor *answer = [NSAppleEventDescriptor descriptorWithInt32:1]; - [error setDescriptor:answer forKeyword:keyErrorNumber]; -} - -- (void)testSend { - const AEEventClass eventClass = 'Fooz'; - const AEEventID eventID = 'Ball'; - NSAppleEventManager *mgr = [NSAppleEventManager sharedAppleEventManager]; - [mgr setEventHandler:self - andSelector:@selector(handleEvent:withReply:) - forEventClass:eventClass - andEventID:'Ball']; - NSAppleEventDescriptor *currentProcess - = [[NSProcessInfo processInfo] gtm_appleEventDescriptor]; - NSAppleEventDescriptor *event - = [NSAppleEventDescriptor appleEventWithEventClass:eventClass - eventID:eventID - targetDescriptor:currentProcess - returnID:kAutoGenerateReturnID - transactionID:kAnyTransactionID]; - gotEvent_ = NO; - NSAppleEventDescriptor *reply; - BOOL goodEvent = [event gtm_sendEventWithMode:kAEWaitReply timeOut:60 reply:&reply]; - [mgr removeEventHandlerForEventClass:eventClass andEventID:eventID]; - STAssertTrue(goodEvent, @"bad event?"); - STAssertTrue(gotEvent_, @"Handler not called"); - NSAppleEventDescriptor *value = [reply descriptorForKeyword:keyDirectObject]; - STAssertEquals([value int32Value], (SInt32)1, @"didn't get reply"); - - - gotEvent_ = NO; - [GTMUnitTestDevLog expectString:@"Unable to send message: " - "<NSAppleEventDescriptor: 'Fooz'\\'Ball'{ }> -1708"]; - goodEvent = [event gtm_sendEventWithMode:kAEWaitReply timeOut:60 reply:&reply]; - STAssertFalse(goodEvent, @"good event?"); - STAssertFalse(gotEvent_, @"Handler called?"); - - [mgr setEventHandler:self - andSelector:@selector(handleEvent:withError:) - forEventClass:eventClass - andEventID:eventID]; - gotEvent_ = NO; - goodEvent = [event gtm_sendEventWithMode:kAEWaitReply timeOut:60 reply:&reply]; - STAssertFalse(goodEvent, @"good event?"); - STAssertTrue(gotEvent_, @"Handler not called?"); - [mgr removeEventHandlerForEventClass:eventClass andEventID:eventID]; -} - -@end diff --git a/Foundation/GTMNSAppleEventDescriptor+Handler.h b/Foundation/GTMNSAppleEventDescriptor+Handler.h deleted file mode 100644 index 29c9c1e..0000000 --- a/Foundation/GTMNSAppleEventDescriptor+Handler.h +++ /dev/null @@ -1,45 +0,0 @@ -// -// GTMNSAppleEventDescriptor+Handler.h -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> -#import "GTMDefines.h" - -@interface NSAppleEventDescriptor (GTMAppleEventDescriptorHandlerAdditions) -+ (id)gtm_descriptorWithPositionalHandler:(NSString*)handler - parametersArray:(NSArray*)params; -+ (id)gtm_descriptorWithPositionalHandler:(NSString*)handler - parametersDescriptor:(NSAppleEventDescriptor*)params; -+ (id)gtm_descriptorWithLabeledHandler:(NSString*)handler - labels:(AEKeyword*)labels - parameters:(id*)params - count:(NSUInteger)count; - -- (id)gtm_initWithPositionalHandler:(NSString*)handler - parametersArray:(NSArray*)params - NS_RETURNS_RETAINED NS_CONSUMES_SELF; - -- (id)gtm_initWithPositionalHandler:(NSString*)handler - parametersDescriptor:(NSAppleEventDescriptor*)params - NS_RETURNS_RETAINED NS_CONSUMES_SELF; - -- (id)gtm_initWithLabeledHandler:(NSString*)handler - labels:(AEKeyword*)labels - parameters:(id*)params - count:(NSUInteger)count - NS_RETURNS_RETAINED NS_CONSUMES_SELF; -@end diff --git a/Foundation/GTMNSAppleEventDescriptor+Handler.m b/Foundation/GTMNSAppleEventDescriptor+Handler.m deleted file mode 100644 index 76b6e85..0000000 --- a/Foundation/GTMNSAppleEventDescriptor+Handler.m +++ /dev/null @@ -1,130 +0,0 @@ -// -// GTMNSAppleEventDescriptor+Handler.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSAppleEventDescriptor+Handler.h" -#import "GTMNSAppleEventDescriptor+Foundation.h" -#import "GTMMethodCheck.h" -#import <Carbon/Carbon.h> - -@implementation NSAppleEventDescriptor (GTMAppleEventDescriptorHandlerAdditions) -GTM_METHOD_CHECK(NSProcessInfo, gtm_appleEventDescriptor); - -+ (id)gtm_descriptorWithPositionalHandler:(NSString*)handler - parametersArray:(NSArray*)params { - return [[[self alloc] gtm_initWithPositionalHandler:handler - parametersArray:params] autorelease]; -} - -+ (id)gtm_descriptorWithPositionalHandler:(NSString*)handler - parametersDescriptor:(NSAppleEventDescriptor*)params { - return [[[self alloc] gtm_initWithPositionalHandler:handler - parametersDescriptor:params] autorelease]; -} - -+ (id)gtm_descriptorWithLabeledHandler:(NSString*)handler - labels:(AEKeyword*)labels - parameters:(id*)params - count:(NSUInteger)count { - return [[[self alloc] gtm_initWithLabeledHandler:handler - labels:labels - parameters:params - count:count] autorelease]; -} - -- (id)gtm_initWithPositionalHandler:(NSString*)handler - parametersArray:(NSArray*)params { - return [self gtm_initWithPositionalHandler:handler - parametersDescriptor:[params gtm_appleEventDescriptor]]; -} - -- (id)gtm_initWithPositionalHandler:(NSString*)handler - parametersDescriptor:(NSAppleEventDescriptor*)params { - if ((self = [self initWithEventClass:kASAppleScriptSuite - eventID:kASSubroutineEvent - targetDescriptor:[[NSProcessInfo processInfo] gtm_appleEventDescriptor] - returnID:kAutoGenerateReturnID - transactionID:kAnyTransactionID])) { - // Create an NSAppleEventDescriptor with the method handler. Note that the - // name must be lowercase (even if it is uppercase in AppleScript). - // http://developer.apple.com/qa/qa2001/qa1111.html - // has details. - handler = [handler lowercaseString]; - if (!handler) { - [self release]; - return nil; - } - NSAppleEventDescriptor *handlerDesc - = [NSAppleEventDescriptor descriptorWithString:handler]; - [self setParamDescriptor:handlerDesc forKeyword:keyASSubroutineName]; - if (params) { - [self setParamDescriptor:params forKeyword:keyDirectObject]; - } - } - return self; -} - - -- (id)gtm_initWithLabeledHandler:(NSString*)handler - labels:(AEKeyword*)labels - parameters:(id*)params - count:(NSUInteger)count { - if ((self = [self initWithEventClass:kASAppleScriptSuite - eventID:kASSubroutineEvent - targetDescriptor:[[NSProcessInfo processInfo] gtm_appleEventDescriptor] - returnID:kAutoGenerateReturnID - transactionID:kAnyTransactionID])) { - if (!handler) { - [self release]; - return nil; - } - // Create an NSAppleEventDescriptor with the method handler. Note that the - // name must be lowercase (even if it is uppercase in AppleScript). - NSAppleEventDescriptor *handlerDesc - = [NSAppleEventDescriptor descriptorWithString:[handler lowercaseString]]; - [self setParamDescriptor:handlerDesc forKeyword:keyASSubroutineName]; - for (NSUInteger i = 0; i < count; i++) { - NSAppleEventDescriptor *paramDesc = [params[i] gtm_appleEventDescriptor]; - if(labels[i] == keyASPrepositionGiven) { - if (![params[i] isKindOfClass:[NSDictionary class]]) { - _GTMDevLog(@"Must pass in dictionary for keyASPrepositionGiven " - "(got %@)", params[i]); - [self release]; - self = nil; - break; - } - NSAppleEventDescriptor *userDesc - = [paramDesc descriptorForKeyword:keyASUserRecordFields]; - if (!userDesc) { - _GTMDevLog(@"Dictionary for keyASPrepositionGiven must be a user " - "record field dictionary (got %@)", params[i]); - [self release]; - self = nil; - break; - } - [self setParamDescriptor:userDesc - forKeyword:keyASUserRecordFields]; - } else { - [self setParamDescriptor:paramDesc - forKeyword:labels[i]]; - } - } - } - return self; -} - -@end diff --git a/Foundation/GTMNSAppleEventDescriptor+HandlerTest.m b/Foundation/GTMNSAppleEventDescriptor+HandlerTest.m deleted file mode 100644 index a137d8a..0000000 --- a/Foundation/GTMNSAppleEventDescriptor+HandlerTest.m +++ /dev/null @@ -1,70 +0,0 @@ -// -// GTNNSAppleEventDescriptor+HandlerTest.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Carbon/Carbon.h> -#import "GTMSenTestCase.h" -#import "GTMNSAppleEventDescriptor+Foundation.h" -#import "GTMNSAppleEventDescriptor+Handler.h" -#import "GTMUnitTestDevLog.h" - -@interface GTMNSAppleEventDescriptor_HandlerTest : GTMTestCase -@end - -@implementation GTMNSAppleEventDescriptor_HandlerTest -// Most of this gets tested by the NSAppleScript+Handler tests. -- (void)testPositionalHandlers { - NSAppleEventDescriptor *desc - = [NSAppleEventDescriptor gtm_descriptorWithPositionalHandler:nil - parametersArray:[NSArray array]]; - STAssertNil(desc, @"got a desc?"); - - desc = [NSAppleEventDescriptor gtm_descriptorWithPositionalHandler:@"happy" - parametersDescriptor:nil]; - STAssertNotNil(desc, @"didn't get a desc?"); - - desc = [NSAppleEventDescriptor gtm_descriptorWithLabeledHandler:nil - labels:nil - parameters:nil - count:0]; - STAssertNil(desc, @"got a desc?"); - - AEKeyword keys[] = { keyASPrepositionGiven }; - NSString *string = @"foo"; - [GTMUnitTestDevLog expectString:@"Must pass in dictionary for " - "keyASPrepositionGiven (got foo)"]; - desc = [NSAppleEventDescriptor gtm_descriptorWithLabeledHandler:@"happy" - labels:keys - parameters:&string - count:1]; - STAssertNil(desc, @"got a desc?"); - - NSDictionary *dict = [NSDictionary dictionaryWithObject:@"bart" - forKey:[NSNumber numberWithInt:4]]; - [GTMUnitTestDevLog expectString:@"Keys must be of type NSString or " - "GTMFourCharCode: 4"]; - [GTMUnitTestDevLog expectPattern:@"Dictionary for keyASPrepositionGiven must " - "be a user record field dictionary \\(got .*"]; - desc = [NSAppleEventDescriptor gtm_descriptorWithLabeledHandler:@"happy" - labels:keys - parameters:&dict - count:1]; - STAssertNil(desc, @"got a desc?"); - -} - -@end diff --git a/Foundation/GTMNSAppleScript+Handler.h b/Foundation/GTMNSAppleScript+Handler.h deleted file mode 100644 index ba4fe72..0000000 --- a/Foundation/GTMNSAppleScript+Handler.h +++ /dev/null @@ -1,132 +0,0 @@ -// -// GTMNSAppleScript+Handler.h -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> -#import "GTMDefines.h" - -// A category for calling handlers in NSAppleScript - -enum { - // Data type is OSAID. These will generally be representing - // scripts. - typeGTMOSAID = 'GTMO' -}; - -@interface NSAppleScript(GTMAppleScriptHandlerAdditions) -// Allows us to call a specific handler in an AppleScript. -// parameters are passed in left-right order 0-n. -// -// Args: -// handler - name of the handler to call in the Applescript -// params - the parameters to pass to the handler -// error - in non-nil returns any error that may have occurred. -// -// Returns: -// The result of the handler being called. nil on failure. -- (NSAppleEventDescriptor*)gtm_executePositionalHandler:(NSString*)handler - parameters:(NSArray*)params - error:(NSDictionary**)error; - - -// Allows us to call a specific labeled handler in an AppleScript. -// Parameters for a labeled handler can be in any order, as long as the -// order of the params array corresponds to the order of the labels array -// such that labels are associated with their correct parameter values. -// -// Args: -// handler - name of the handler to call in the Applescript -// labels - the labels to associate with the parameters -// params - the parameters to pass to the handler -// count - number of labels/parameters -// error - in non-nil returns any error that may have occurred. -// -// Returns: -// The result of the handler being called. nil on failure. -- (NSAppleEventDescriptor*)gtm_executeLabeledHandler:(NSString*)handler - labels:(AEKeyword*)labels - parameters:(id*)params - count:(NSUInteger)count - error:(NSDictionary **)error; - -// Same as executeAppleEvent:error: except that it handles return values of -// script correctly. Return values containing scripts will have the -// typeGTMOSAID. Calling gtm_objectValue on a NSAppleEventDescriptor of -// typeGTMOSAID will resolve correctly to a script value. We don't use -// typeScript because that actually copies the script instead of returning the -// actual value. Therefore if you called executeAppleEvent:error: (instead of -// the GTM version) to execute an event that returns a script, you will -// get a completely new Applescript, instead of the actual script you wanted. If -// you are working with script information, use gtm_executeAppleEvent:error -// instead of executeAppleEvent:error: to avoid the problem. -- (NSAppleEventDescriptor *)gtm_executeAppleEvent:(NSAppleEventDescriptor *)event - error:(NSDictionary **)error; - -// The set of all handlers that are defined in this script and its parents. -// Remember that handlers that are defined in an sdef will have their -// eventclass/eventid as their handler instead of the name seen in the script. -// So: -// on open(a) -// blah -// end open -// won't be "open" it will be "aevtodoc". -- (NSSet*)gtm_handlers; - -// The set of all properties that are defined in this script and its parents. -// Note that properties can be strings or GTMNSFourCharCodes, so expect both -// coming back in the set. -- (NSSet*)gtm_properties; - -// Return a value for a property. Will look up the inheritence tree. -// Property must be an NSString or a GTMFourCharCode. -- (id)gtm_valueForProperty:(id)property; - -// Return a value for a property by type (eg pASParent). Will look up the -// inheritence tree -- (id)gtm_valueForPropertyEnum:(DescType)property; - -// Set a script property value. Returns YES/NO on success/failure. -// Property must be of kind NSString or GTMFourCharCode. -// If addingDefinition is YES, it will add a definition to the script -// if the value doesn't exist in the script or one of it's parents. -- (BOOL)gtm_setValue:(id)value - forProperty:(id)property - addingDefinition:(BOOL)adding; - -// Set a value for a property by type (eg pASParent). See note above -// for gtm_setValue:forProperty. -- (BOOL)gtm_setValue:(id)value - forPropertyEnum:(DescType)property - addingDefinition:(BOOL)adding; - -// Return YES if the script has an open documents (odoc) handler -// Does not require script compilation, so it's a fast check. -- (BOOL)gtm_hasOpenDocumentsHandler; - -@end - -// Error keys that we may return in the error dictionary on top of the standard -// NSAppleScriptError* keys. -extern NSString const* GTMNSAppleScriptErrorPartialResult; // id -extern NSString const* GTMNSAppleScriptErrorOffendingObject; // id -extern NSString const* GTMNSAppleScriptErrorExpectedType; // GTMFourCharCode - -@interface NSAppleEventDescriptor (GTMAppleEventDescriptorOSAAdditions) -// Returns an NSValue containing an NSRange of script source when an error -// occurs while compiling and/or executing a script. -- (id)gtm_OSAErrorRangeValue; -@end diff --git a/Foundation/GTMNSAppleScript+Handler.m b/Foundation/GTMNSAppleScript+Handler.m deleted file mode 100644 index 850de58..0000000 --- a/Foundation/GTMNSAppleScript+Handler.m +++ /dev/null @@ -1,662 +0,0 @@ -// -// GTMNSAppleScript+Handler.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Carbon/Carbon.h> -#import "GTMNSAppleScript+Handler.h" -#import "GTMNSAppleEventDescriptor+Foundation.h" -#import "GTMNSAppleEventDescriptor+Handler.h" -#import "GTMFourCharCode.h" -#import "GTMMethodCheck.h" - -// Keys for passing AppleScript calls from other threads to the main thread -// and back through gtm_internalExecuteAppleEvent: -static NSString *const GTMNSAppleScriptEventKey = @"GTMNSAppleScriptEvent"; -static NSString *const GTMNSAppleScriptResultKey = @"GTMNSAppleScriptResult"; -static NSString *const GTMNSAppleScriptErrorKey = @"GTMNSAppleScriptError"; - -// Error keys that we may return in the error dictionary on top of the standard -// NSAppleScriptError* keys. -NSString const* GTMNSAppleScriptErrorPartialResult - = @"GTMNSAppleScriptErrorPartialResult"; -NSString const* GTMNSAppleScriptErrorOffendingObject - = @"GTMNSAppleScriptErrorOffendingObject"; -NSString const* GTMNSAppleScriptErrorExpectedType - = @"GTMNSAppleScriptErrorExpectedType"; - -// Some private methods that we need to call -@interface NSAppleScript (NSPrivate) -+ (ComponentInstance)_defaultScriptingComponent; -- (OSAID) _compiledScriptID; -- (id)_initWithData:(NSData*)data error:(NSDictionary**)error; -- (id)_initWithScriptIDNoCopy:(OSAID)osaID; -@end - -@interface NSMethodSignature (NSPrivate) -+ (id)signatureWithObjCTypes:(const char *)fp8; -@end - -// Our own private interfaces. -@interface NSAppleScript (GTMAppleScriptHandlerAdditionsPrivate) - -// Return an descriptor for a property. Properties are only supposed to be -// of type NSString or GTMFourCharCode. GTMFourCharCode's need special handling -// as they must be turned into NSAppleEventDescriptors of typeProperty. -- (NSAppleEventDescriptor*)gtm_descriptorForPropertyValue:(id)property; - -// Return an NSAppleEventDescriptor for a given property. -// |property| must be kind of class GTMFourCharCode -- (NSAppleEventDescriptor*)gtm_valueDescriptorForProperty:(id)property; - -// Utility routine for extracting multiple values in scripts and their -// parents. -- (NSSet*)gtm_allValuesUsingSelector:(SEL)selector; - -// Utility routine for extracting the handlers for a specific script without -// referring to parent scripts. -- (NSSet*)gtm_scriptHandlers; - -// Utility routine for extracting the properties for a specific script without -// referring to parent scripts. -- (NSSet*)gtm_scriptProperties; - -// Handles creating an NSAppleEventDescriptor from an OSAID -- (NSAppleEventDescriptor*)descForScriptID:(OSAID)scriptID - component:(ComponentInstance)component; - -// Utility methods for converting between real and generic OSAIDs. -- (OSAID)gtm_genericID:(OSAID)osaID forComponent:(ComponentInstance)component; -- (OSAID)gtm_realIDAndComponent:(ComponentInstance*)component; - -- (void)gtm_internalExecuteAppleEvent:(NSMutableDictionary *)data; - -- (NSDictionary *)gtm_errorDictionaryFromOSStatus:(OSStatus)status - component:(ComponentInstance)component; -@end - -// Private methods for dealing with Scripts/Events and NSAppleEventDescriptors -@interface NSAppleEventDescriptor (GTMAppleEventDescriptorScriptAdditions) - -// Return an NSAppleScript for a desc of typeScript. This will create a new -// Applescript that is a copy of the script that you want. -// Returns nil on failure. -- (NSAppleScript*)gtm_scriptValue; - -// Return an NSAppleScript for a desc of typeGTMOSAID. This will not copy the -// script, but will create an NSAppleScript wrapping the script represented -// by the OSAID. -// Returns nil on failure. -- (NSAppleScript*)gtm_osaIDValue; - -// Return a NSString with [eventClass][eventID] for typeEvent 'evnt' -- (NSString*)gtm_eventValue; -@end - -@implementation NSAppleScript(GTMAppleScriptHandlerAdditions) -GTM_METHOD_CHECK(NSAppleEventDescriptor, gtm_descriptorWithPositionalHandler:parametersArray:); -GTM_METHOD_CHECK(NSAppleEventDescriptor, gtm_descriptorWithLabeledHandler:labels:parameters:count:); -GTM_METHOD_CHECK(NSAppleEventDescriptor, gtm_registerSelector:forTypes:count:); - -+ (void)load { - DescType types[] = { - typeScript - }; - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [NSAppleEventDescriptor gtm_registerSelector:@selector(gtm_scriptValue) - forTypes:types - count:sizeof(types)/sizeof(DescType)]; - - DescType types2[] = { - 'evnt' // No type code for this one - }; - - [NSAppleEventDescriptor gtm_registerSelector:@selector(gtm_eventValue) - forTypes:types2 - count:sizeof(types2)/sizeof(DescType)]; - - DescType types3[] = { - typeGTMOSAID - }; - - [NSAppleEventDescriptor gtm_registerSelector:@selector(gtm_osaIDValue) - forTypes:types3 - count:sizeof(types3)/sizeof(DescType)]; - [pool drain]; -} - -- (NSAppleEventDescriptor *)gtm_executeAppleEvent:(NSAppleEventDescriptor *)event - error:(NSDictionary **)error { - NSMutableDictionary *data = [NSMutableDictionary dictionaryWithObjectsAndKeys: - event, GTMNSAppleScriptEventKey, nil]; - [self performSelectorOnMainThread:@selector(gtm_internalExecuteAppleEvent:) - withObject:data - waitUntilDone:YES]; - if (error) { - *error = [data objectForKey:GTMNSAppleScriptErrorKey]; - } - return [data objectForKey:GTMNSAppleScriptResultKey]; -} - -- (NSAppleEventDescriptor*)gtm_executePositionalHandler:(NSString*)handler - parameters:(NSArray*)params - error:(NSDictionary**)error { - NSAppleEventDescriptor *event - = [NSAppleEventDescriptor gtm_descriptorWithPositionalHandler:handler - parametersArray:params]; - return [self gtm_executeAppleEvent:event error:error]; -} - -- (NSAppleEventDescriptor*)gtm_executeLabeledHandler:(NSString*)handler - labels:(AEKeyword*)labels - parameters:(id*)params - count:(NSUInteger)count - error:(NSDictionary **)error { - NSAppleEventDescriptor *event - = [NSAppleEventDescriptor gtm_descriptorWithLabeledHandler:handler - labels:labels - parameters:params - count:count]; - return [self gtm_executeAppleEvent:event error:error]; -} - -- (NSSet*)gtm_handlers { - return [self gtm_allValuesUsingSelector:@selector(gtm_scriptHandlers)]; -} - -- (NSSet*)gtm_properties { - return [self gtm_allValuesUsingSelector:@selector(gtm_scriptProperties)]; -} - -// Set a value for a property by type (eg pASTopLevelScript) -- (BOOL)gtm_setValue:(id)value - forPropertyEnum:(DescType)property - addingDefinition:(BOOL)adding { - GTMFourCharCode *fcc - = [GTMFourCharCode fourCharCodeWithFourCharCode:property]; - return [self gtm_setValue:value forProperty:fcc addingDefinition:adding]; -} - -- (BOOL)gtm_setValue:(id)value - forProperty:(id)property - addingDefinition:(BOOL)adding{ - OSAError error = paramErr; - BOOL wasGood = NO; - NSAppleEventDescriptor *propertyName - = [self gtm_descriptorForPropertyValue:property]; - NSAppleEventDescriptor *desc = [value gtm_appleEventDescriptor]; - if (propertyName && desc) { - NSAppleScript *script = self; - OSAID valueID = kOSANullScript; - ComponentInstance component = NULL; - OSAID scriptID = [script gtm_realIDAndComponent:&component]; - error = OSACoerceFromDesc(component, - [desc aeDesc], - kOSAModeNull, - &valueID); - if (error == noErr) { - error = OSASetProperty(component, - adding ? kOSAModeNull : kOSAModeDontDefine, - scriptID, - [propertyName aeDesc], - valueID); - if (error == noErr) { - wasGood = YES; - } - } - } - if (!wasGood) { - _GTMDevLog(@"Unable to setValue:%@ forProperty:%@ from %@ (%d)", - value, property, self, (int)error); - } - return wasGood; -} - -- (id)gtm_valueForProperty:(id)property { - return [[self gtm_valueDescriptorForProperty:property] gtm_objectValue]; -} - -- (id)gtm_valueForPropertyEnum:(DescType)property { - GTMFourCharCode *fcc = [GTMFourCharCode fourCharCodeWithFourCharCode:property]; - return [self gtm_valueForProperty:fcc]; -} - -- (NSAppleEventDescriptor*)gtm_appleEventDescriptor { - ComponentInstance component; - OSAID osaID = [self gtm_realIDAndComponent:&component]; - AEDesc result = { typeNull, NULL }; - NSAppleEventDescriptor *desc = nil; - OSAError error = OSACoerceToDesc(component, - osaID, - typeScript, - kOSAModeNull, - &result); - if (error == noErr) { - desc = [[[NSAppleEventDescriptor alloc] initWithAEDescNoCopy:&result] - autorelease]; - } else { - _GTMDevLog(@"Unable to coerce script %ld", (long)error); - } - return desc; -} - -- (BOOL)gtm_hasOpenDocumentsHandler { - ComponentInstance component = NULL; - OSAID osaID = [self gtm_realIDAndComponent:&component]; - long value = 0; - OSAError error = OSAGetScriptInfo(component, - osaID, - kASHasOpenHandler, - &value); - if (error) { - _GTMDevLog(@"Unable to get script info about open handler %ld", (long)error); - value = 0; - } - return value != 0; -} - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector { - NSMethodSignature *signature = [super methodSignatureForSelector:aSelector]; - if (!signature) { - NSMutableString *types = [NSMutableString stringWithString:@"@@:"]; - NSString *selName = NSStringFromSelector(aSelector); - NSArray *selArray = [selName componentsSeparatedByString:@":"]; - NSUInteger count = [selArray count]; - for (NSUInteger i = 1; i < count; i++) { - [types appendString:@"@"]; - } - signature = [NSMethodSignature signatureWithObjCTypes:[types UTF8String]]; - } - return signature; -} - -- (void)forwardInvocation:(NSInvocation *)invocation { - SEL sel = [invocation selector]; - NSMutableString *handlerName - = [NSMutableString stringWithString:NSStringFromSelector(sel)]; - NSUInteger handlerOrigLength = [handlerName length]; - [handlerName replaceOccurrencesOfString:@":" - withString:@"" - options:0 - range:NSMakeRange(0,handlerOrigLength)]; - NSUInteger argCount = handlerOrigLength - [handlerName length]; - NSMutableArray *args = [NSMutableArray arrayWithCapacity:argCount]; - for (NSUInteger i = 0; i < argCount; ++i) { - id arg; - // +2 to ignore _sel and _cmd - [invocation getArgument:&arg atIndex:i + 2]; - [args addObject:arg]; - } - NSDictionary *error = nil; - NSAppleEventDescriptor *desc = [self gtm_executePositionalHandler:handlerName - parameters:args - error:&error]; - if ([[invocation methodSignature] methodReturnLength] > 0) { - id returnValue = [desc gtm_objectValue]; - [invocation setReturnValue:&returnValue]; - } -} -@end - -@implementation NSAppleScript (GTMAppleScriptHandlerAdditionsPrivate) - -- (NSAppleEventDescriptor*)gtm_descriptorForPropertyValue:(id)property { - NSAppleEventDescriptor *propDesc = nil; - if ([property isKindOfClass:[GTMFourCharCode class]]) { - propDesc = [property gtm_appleEventDescriptorOfType:typeProperty]; - } else if ([property isKindOfClass:[NSString class]]) { - propDesc = [property gtm_appleEventDescriptor]; - } - return propDesc; -} - -- (NSAppleEventDescriptor*)gtm_valueDescriptorForProperty:(id)property { - _GTMDevAssert([NSThread isMainThread], @"Requires main thread."); - OSAError error = paramErr; - NSAppleEventDescriptor *desc = nil; - NSAppleEventDescriptor *propertyName - = [self gtm_descriptorForPropertyValue:property]; - if (propertyName) { - ComponentInstance component = NULL; - OSAID scriptID = [self gtm_realIDAndComponent:&component]; - OSAID valueID = kOSANullScript; - error = OSAGetProperty(component, - kOSAModeNull, - scriptID, - [propertyName aeDesc], - &valueID); - if (error == noErr) { - desc = [self descForScriptID:valueID component:component]; - } - } - if (error) { - _GTMDevLog(@"Unable to get valueForProperty:%@ from %@ (%d)", - property, self, (int)error); - } - return desc; -} - -- (NSSet*)gtm_allValuesUsingSelector:(SEL)selector { - NSMutableSet *resultSet = [NSMutableSet set]; - NSAppleEventDescriptor *scriptDesc = [self gtm_appleEventDescriptor]; - NSMutableSet *scriptDescsWeveSeen = [NSMutableSet set]; - GTMFourCharCode *fcc = [GTMFourCharCode fourCharCodeWithFourCharCode:pASParent]; - Class appleScriptClass = [NSAppleScript class]; - while (scriptDesc) { - NSAppleScript *script = [scriptDesc gtm_objectValue]; - if ([script isKindOfClass:appleScriptClass]) { - NSData *data = [scriptDesc data]; - if (!data || [scriptDescsWeveSeen containsObject:data]) { - break; - } else { - [scriptDescsWeveSeen addObject:data]; - } - NSSet *newSet = [script performSelector:selector]; - [resultSet unionSet:newSet]; - scriptDesc = [script gtm_valueDescriptorForProperty:fcc]; - } else { - break; - } - } - return resultSet; -} - -- (NSSet*)gtm_scriptHandlers { - _GTMDevAssert([NSThread isMainThread], @"Requires main thread."); - AEDescList names = { typeNull, NULL }; - NSArray *array = nil; - ComponentInstance component = NULL; - OSAID osaID = [self gtm_realIDAndComponent:&component]; - OSAError error = OSAGetHandlerNames(component, kOSAModeNull, osaID, &names); - if (error == noErr) { - NSAppleEventDescriptor *desc - = [[[NSAppleEventDescriptor alloc] initWithAEDescNoCopy:&names] - autorelease]; - array = [desc gtm_objectValue]; - } - if (error != noErr) { - _GTMDevLog(@"Error getting handlers: %d", (int)error); // COV_NF_LINE - } - return [NSSet setWithArray:array]; -} - -- (NSSet*)gtm_scriptProperties { - _GTMDevAssert([NSThread isMainThread], @"Requires main thread."); - AEDescList names = { typeNull, NULL }; - NSArray *array = nil; - ComponentInstance component = NULL; - OSAID osaID = [self gtm_realIDAndComponent:&component]; - OSAError error = OSAGetPropertyNames(component, kOSAModeNull, osaID, &names); - if (error == noErr) { - NSAppleEventDescriptor *desc - = [[[NSAppleEventDescriptor alloc] initWithAEDescNoCopy:&names] - autorelease]; - array = [desc gtm_objectValue]; - } - if (error != noErr) { - _GTMDevLog(@"Error getting properties: %d", (int)error); // COV_NF_LINE - } - return [NSSet setWithArray:array]; -} - -- (OSAID)gtm_genericID:(OSAID)osaID forComponent:(ComponentInstance)component { - _GTMDevAssert([NSThread isMainThread], @"Requires main thread."); - ComponentInstance genericComponent = [NSAppleScript _defaultScriptingComponent]; - OSAID exactID = osaID; - OSAError error = OSARealToGenericID(genericComponent, &exactID, component); - if (error != noErr) { - _GTMDevLog(@"Unable to get real id script: %@ %d", self, (int)error); // COV_NF_LINE - exactID = kOSANullScript; // COV_NF_LINE - } - return exactID; -} - -- (NSAppleEventDescriptor*)descForScriptID:(OSAID)osaID - component:(ComponentInstance)component { - _GTMDevAssert([NSThread isMainThread], @"Requires main thread."); - NSAppleEventDescriptor *desc = nil; - // If we have a script, return a typeGTMOSAID, otherwise convert it to - // it's default AEDesc using OSACoerceToDesc with typeWildCard. - long value = 0; - OSAError err = noErr; - if (osaID == 0) { - desc = [NSAppleEventDescriptor nullDescriptor]; - } else { - err = OSAGetScriptInfo(component, - osaID, - kOSAScriptBestType, - &value); - if (err == noErr) { - if (value == typeScript) { - osaID = [self gtm_genericID:osaID forComponent:component]; - desc = [NSAppleEventDescriptor descriptorWithDescriptorType:typeGTMOSAID - bytes:&osaID - length:sizeof(osaID)]; - } else { - AEDesc aeDesc; - err = OSACoerceToDesc(component, - osaID, - typeWildCard, - kOSAModeNull, - &aeDesc); - if (err == noErr) { - desc = [[[NSAppleEventDescriptor alloc] - initWithAEDescNoCopy:&aeDesc] autorelease]; - } - } - } - } - if (err != noErr) { - _GTMDevLog(@"Unable to create desc for id:%lu (%ld)", (unsigned long)osaID, (long)err); // COV_NF_LINE - } - return desc; -} - -- (OSAID)gtm_realIDAndComponent:(ComponentInstance*)component { - _GTMDevAssert([NSThread isMainThread], @"Requires main thread."); - if (![self isCompiled]) { - NSDictionary *error; - if (![self compileAndReturnError:&error]) { - _GTMDevLog(@"Unable to compile script: %@ %@", self, error); - return kOSANullScript; - } - } - OSAID genericID = [self _compiledScriptID]; - ComponentInstance genericComponent = [NSAppleScript _defaultScriptingComponent]; - OSAError error = OSAGenericToRealID(genericComponent, &genericID, component); - if (error != noErr) { - _GTMDevLog(@"Unable to get real id script: %@ %d", self, (int)error); // COV_NF_LINE - genericID = kOSANullScript; // COV_NF_LINE - } - return genericID; -} - -- (void)gtm_internalExecuteAppleEvent:(NSMutableDictionary *)data { - _GTMDevAssert([NSThread isMainThread], @"Requires main thread."); - NSDictionary *error = nil; - if (![self isCompiled]) { - [self compileAndReturnError:&error]; - } - if (!error) { - NSAppleEventDescriptor *desc = nil; - NSAppleEventDescriptor *event = [data objectForKey:GTMNSAppleScriptEventKey]; - ComponentInstance component = NULL; - OSAID scriptID = [self gtm_realIDAndComponent:&component]; - OSAID valueID; - OSAError err = OSAExecuteEvent(component, [event aeDesc], scriptID, - kOSAModeNull, &valueID); - if (err == noErr) { - // descForScriptID:component: is what sets this apart from the - // standard executeAppleEvent:error: in that it handles - // taking script results and turning them into AEDescs of typeGTMOSAID - // instead of typeScript. - desc = [self descForScriptID:valueID component:component]; - if (desc) { - [data setObject:desc forKey:GTMNSAppleScriptResultKey]; - } - } else { - error = [self gtm_errorDictionaryFromOSStatus:err component:component]; - } - } - if (error) { - [data setObject:error forKey:GTMNSAppleScriptErrorKey]; - } -} - -- (NSDictionary *)gtm_errorDictionaryFromOSStatus:(OSStatus)status - component:(ComponentInstance)component { - NSMutableDictionary *error = nil; - if (status == errOSAScriptError) { - error = [NSMutableDictionary dictionary]; - struct { - OSType selector; - DescType desiredType; - SEL extractor; - id key; - } errMap[] = { - { - kOSAErrorNumber, - typeSInt16, - @selector(gtm_numberValue), - NSAppleScriptErrorNumber - }, - { - kOSAErrorMessage, - typeText, - @selector(stringValue), - NSAppleScriptErrorMessage - }, - { - kOSAErrorBriefMessage, - typeText, - @selector(stringValue), - NSAppleScriptErrorBriefMessage - }, - { kOSAErrorApp, - typeText, - @selector(stringValue), - NSAppleScriptErrorAppName - }, - { kOSAErrorRange, - typeOSAErrorRange, - @selector(gtm_OSAErrorRangeValue), - NSAppleScriptErrorRange - }, - { - kOSAErrorPartialResult, - typeBest, - @selector(gtm_objectValue), - GTMNSAppleScriptErrorPartialResult - }, - { - kOSAErrorOffendingObject, - typeBest, - @selector(gtm_objectValue), - GTMNSAppleScriptErrorOffendingObject - }, - { - kOSAErrorExpectedType, - typeType, - @selector(gtm_fourCharCodeValue), - GTMNSAppleScriptErrorExpectedType - }, - }; - for (size_t i = 0; i < sizeof(errMap) / sizeof(errMap[0]); ++i) { - AEDesc errorResult = { typeNull, NULL }; - OSStatus err = OSAScriptError(component, - errMap[i].selector, - errMap[i].desiredType, - &errorResult); - if (err == noErr) { - NSAppleEventDescriptor *desc = [[[NSAppleEventDescriptor alloc] - initWithAEDescNoCopy:&errorResult] autorelease]; - id value = [desc performSelector:errMap[i].extractor]; - if (value) { - [error setObject:value forKey:errMap[i].key]; - } - } - } - } else if (status != noErr) { - // Unknown error. Do our best to give the user something good. - NSNumber *errNum = [NSNumber numberWithInt:status]; - error - = [NSMutableDictionary dictionaryWithObject:errNum - forKey:NSAppleScriptErrorNumber]; - NSString *briefMessage - = [NSString stringWithUTF8String:GetMacOSStatusErrorString(status)]; - if (briefMessage) { - [error setValue:briefMessage forKey:NSAppleScriptErrorBriefMessage]; - } - NSString *message - = [NSString stringWithUTF8String:GetMacOSStatusCommentString(status)]; - if (message) { - [error setValue:message forKey:NSAppleScriptErrorMessage]; - } - } - return error; -} -@end - -@implementation NSAppleEventDescriptor (GMAppleEventDescriptorScriptAdditions) - -- (NSAppleScript*)gtm_scriptValue { - NSDictionary *error; - NSAppleScript *script = [[[NSAppleScript alloc] _initWithData:[self data] - error:&error] autorelease]; - if (!script) { - _GTMDevLog(@"Unable to create script: %@", error); // COV_NF_LINE - } - return script; -} - -- (NSAppleScript*)gtm_osaIDValue { - _GTMDevAssert([[self data] length] == sizeof(OSAID), nil); - OSAID osaID = *(const OSAID*)[[self data] bytes]; - return [[[NSAppleScript alloc] _initWithScriptIDNoCopy:osaID] autorelease]; -} - -- (NSString*)gtm_eventValue { - struct AEEventRecordStruct { - AEEventClass eventClass; - AEEventID eventID; - }; - NSData *data = [self data]; - const struct AEEventRecordStruct *record - = (const struct AEEventRecordStruct*)[data bytes]; - NSString *eClass = [GTMFourCharCode stringWithFourCharCode:record->eventClass]; - NSString *eID = [GTMFourCharCode stringWithFourCharCode:record->eventID]; - return [eClass stringByAppendingString:eID]; -} -@end - -@implementation NSAppleEventDescriptor (GTMAppleEventDescriptorOSAAdditions) - -- (id)gtm_OSAErrorRangeValue { - id value = nil; - NSAppleEventDescriptor *start = [self descriptorForKeyword:keyOSASourceStart]; - if (start) { - NSAppleEventDescriptor *end = [self descriptorForKeyword:keyOSASourceEnd]; - if (end) { - NSRange range = NSMakeRange([start int32Value], [end int32Value]); - value = [NSValue valueWithRange:range]; - } - } - return value; -} - -@end - diff --git a/Foundation/GTMNSAppleScript+HandlerTest.m b/Foundation/GTMNSAppleScript+HandlerTest.m deleted file mode 100644 index 6a064dd..0000000 --- a/Foundation/GTMNSAppleScript+HandlerTest.m +++ /dev/null @@ -1,504 +0,0 @@ -// -// GTMNSAppleScript+HandlerTest.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import <Carbon/Carbon.h> -#import "GTMNSAppleScript+Handler.h" -#import "GTMNSAppleEventDescriptor+Foundation.h" -#import "GTMUnitTestDevLog.h" -#import "GTMSystemVersion.h" -#import "GTMFourCharCode.h" - -@protocol ScriptInterface -- (id)test; -- (id)testReturnParam:(id)param; -- (id)testAddParams:(id)param1 :(id)param2; -@end - -@interface GTMNSAppleScript_HandlerTest : GTMTestCase { - NSAppleScript *script_; -} -@end - -@implementation GTMNSAppleScript_HandlerTest - -- (void)setUp { - NSBundle *bundle - = [NSBundle bundleForClass:[GTMNSAppleScript_HandlerTest class]]; - STAssertNotNil(bundle, nil); - NSString *path = [bundle pathForResource:@"GTMNSAppleEvent+HandlerTest" - ofType:@"scpt" - inDirectory:@"Scripts"]; - STAssertNotNil(path, [bundle description]); - NSDictionary *error = nil; - script_ - = [[NSAppleScript alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] - error:&error]; - STAssertNotNil(script_, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); -} - -- (void)tearDown { - [script_ release]; - script_ = nil; -} - -- (void)testExecuteAppleEvent { - NSString *source = @"on test()\nreturn 1\nend test"; - NSAppleScript *script - = [[[NSAppleScript alloc] initWithSource:source] autorelease]; - STAssertNotNil(script, nil); - NSDictionary *error = nil; - NSAppleEventDescriptor *desc = [script gtm_executePositionalHandler:@"test" - parameters:nil - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc gtm_objectValue], [NSNumber numberWithInt:1], nil); - - // bogus script - source = @"adf872345ba asdf asdf gr"; - script = [[[NSAppleScript alloc] initWithSource:source] autorelease]; - STAssertNotNil(script, nil); - desc = [script gtm_executePositionalHandler:@"test" - parameters:nil - error:&error]; - STAssertNil(desc, nil); - STAssertNotNil(error, @"Error should not be nil"); -} - -- (void)testHandlerNoParamsNoReturn { - NSDictionary *error = nil; - NSAppleEventDescriptor *desc = [script_ gtm_executePositionalHandler:@"test" - parameters:nil - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc descriptorType], (DescType)typeNull, nil); - desc = [script_ gtm_executePositionalHandler:@"test" - parameters:[NSArray array] - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc descriptorType], (DescType)typeNull, nil); - - //Applescript doesn't appear to get upset about extra params - desc = [script_ gtm_executePositionalHandler:@"test" - parameters:[NSArray arrayWithObject:@"foo"] - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc descriptorType], (DescType)typeNull, nil); -} - -- (void)testHandlerNoParamsWithReturn { - NSDictionary *error = nil; - NSAppleEventDescriptor *desc - = [script_ gtm_executePositionalHandler:@"testReturnOne" - parameters:nil - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc descriptorType], (DescType)typeSInt32, nil); - STAssertEquals([desc int32Value], (SInt32)1, nil); - desc = [script_ gtm_executePositionalHandler:@"testReturnOne" - parameters:[NSArray array] - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc descriptorType], (DescType)typeSInt32, nil); - STAssertEquals([desc int32Value], (SInt32)1, nil); - - //Applescript doesn't appear to get upset about extra params - desc = [script_ gtm_executePositionalHandler:@"testReturnOne" - parameters:[NSArray arrayWithObject:@"foo"] - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc descriptorType], (DescType)typeSInt32, nil); - STAssertEquals([desc int32Value], (SInt32)1, nil); -} - -- (void)testHandlerOneParamWithReturn { - NSDictionary *error = nil; - // Note case change in executeHandler call - NSAppleEventDescriptor *desc - = [script_ gtm_executePositionalHandler:@"testreturnParam" - parameters:nil - error:&error]; - STAssertNil(desc, @"Desc should by nil %@", desc); - STAssertNotNil(error, nil); - error = nil; - - desc = [script_ gtm_executePositionalHandler:@"testReturnParam" - parameters:[NSArray array] - error:&error]; - STAssertNil(desc, @"Desc should by nil %@", desc); - - // Verify that our error handling is working correctly. - STAssertEquals([[error allKeys] count], (NSUInteger)6, @"%@", error); - STAssertNotNil([error objectForKey:GTMNSAppleScriptErrorOffendingObject], - @"%@", error); - STAssertNotNil([error objectForKey:GTMNSAppleScriptErrorPartialResult], - @"%@", error); - - error = nil; - - desc = [script_ gtm_executePositionalHandler:@"testReturnParam" - parameters:[NSArray arrayWithObject:@"foo"] - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc descriptorType], (DescType)typeUnicodeText, nil); - STAssertEqualObjects([desc gtm_objectValue], @"foo", nil); -} - -- (void)testHandlerTwoParamsWithReturn { - NSDictionary *error = nil; - // Note case change in executeHandler call - // Test case and empty params - NSAppleEventDescriptor *desc - = [script_ gtm_executePositionalHandler:@"testADDPArams" - parameters:nil - error:&error]; - STAssertNil(desc, @"Desc should by nil %@", desc); - STAssertNotNil(error, nil); - - // Test empty params - error = nil; - desc = [script_ gtm_executePositionalHandler:@"testAddParams" - parameters:[NSArray array] - error:&error]; - STAssertNil(desc, @"Desc should by nil %@", desc); - STAssertNotNil(error, nil); - - error = nil; - NSArray *args = [NSArray arrayWithObjects: - [NSNumber numberWithInt:1], - [NSNumber numberWithInt:2], - nil]; - desc = [script_ gtm_executePositionalHandler:@"testAddParams" - parameters:args - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc descriptorType], (DescType)typeSInt32, nil); - STAssertEquals([desc int32Value], (SInt32)3, nil); - - // Test bad params - error = nil; - args = [NSArray arrayWithObjects: - @"foo", - @"bar", - nil]; - desc = [script_ gtm_executePositionalHandler:@"testAddParams" - parameters:args - error:&error]; - STAssertNil(desc, @"Desc should by nil %@", desc); - STAssertNotNil(error, nil); - - // Test too many params. Currently Applescript allows this so it should pass - error = nil; - args = [NSArray arrayWithObjects: - [NSNumber numberWithInt:1], - [NSNumber numberWithInt:2], - [NSNumber numberWithInt:3], - nil]; - desc = [script_ gtm_executePositionalHandler:@"testAddParams" - parameters:args - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc descriptorType], (DescType)typeSInt32, nil); - STAssertEquals([desc int32Value], (SInt32)3, nil);} - -- (void)testLabeledHandler { - NSDictionary *error = nil; - AEKeyword labels[] = { keyDirectObject, - keyASPrepositionOnto, - keyASPrepositionGiven }; - id params[3]; - params[0] = [NSNumber numberWithInt:1]; - params[1] = [NSNumber numberWithInt:3]; - params[2] = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:4] - forKey:@"othervalue"]; - - NSAppleEventDescriptor *desc - = [script_ gtm_executeLabeledHandler:@"testAdd" - labels:labels - parameters:params - count:sizeof(params) / sizeof(id) - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc descriptorType], (DescType)typeSInt32, nil); - STAssertEquals([desc int32Value], (SInt32)8, nil); - - // Test too many params. Currently Applescript allows this so it should pass - AEKeyword labels2[] = { keyDirectObject, - keyASPrepositionOnto, - keyASPrepositionBetween, - keyASPrepositionGiven }; - id params2[4]; - params2[0] = [NSNumber numberWithInt:1]; - params2[1] = [NSNumber numberWithInt:3]; - params2[2] = [NSNumber numberWithInt:5]; - params2[3] = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:4] - forKey:@"othervalue"]; - - error = nil; - desc = [script_ gtm_executeLabeledHandler:@"testAdd" - labels:labels2 - parameters:params2 - count:sizeof(params2) / sizeof(id) - error:&error]; - STAssertNotNil(desc, [error description]); - STAssertNil(error, @"Error should be nil. Error = %@", [error description]); - STAssertEquals([desc descriptorType], (DescType)typeSInt32, nil); - STAssertEquals([desc int32Value], (SInt32)8, nil);} - -- (void)testHandlers { - NSSet *handlers = [script_ gtm_handlers]; - NSSet *expected = [NSSet setWithObjects: - @"aevtpdoc", - @"test", - @"testreturnone", - @"testreturnparam", - @"testaddparams", - @"testadd", - @"testgetscript", - nil]; - if ([GTMSystemVersion isSnowLeopardOrGreater]) { - // Workaround for bug in SnowLeopard - // rdar://66688601 OSAGetHandlersNames returns names in camelcase instead - // of smallcaps. - handlers = [handlers valueForKey:@"lowercaseString"]; - } - STAssertEqualObjects(handlers, expected, @"Unexpected handlers?"); -} - -- (void)testInheritedHandlers { - NSDictionary *error = nil; - NSAppleEventDescriptor *desc - = [script_ gtm_executePositionalHandler:@"testGetScript" - parameters:nil - error:&error]; - STAssertNil(error, nil); - STAssertNotNil(desc, nil); - NSAppleScript *script = [desc gtm_objectValue]; - STAssertTrue([script isKindOfClass:[NSAppleScript class]], nil); - error = nil; - desc = [script gtm_executePositionalHandler:@"parentTestScriptFunc" - parameters:nil error:&error]; - STAssertNil(error, nil); - STAssertNotNil(desc, nil); - NSString *value = [desc gtm_objectValue]; - STAssertEqualObjects(value, @"parent", nil); -} - -- (void)testProperties { - NSDictionary *error = nil; - NSAppleEventDescriptor *desc - = [script_ gtm_executePositionalHandler:@"testGetScript" - parameters:nil - error:&error]; - STAssertNil(error, nil); - STAssertNotNil(desc, nil); - NSAppleScript *script = [desc gtm_objectValue]; - STAssertTrue([script isKindOfClass:[NSAppleScript class]], nil); - - NSSet *properties = [script gtm_properties]; - NSSet *expected - = [NSSet setWithObjects: - @"testscriptproperty", - @"parenttestscriptproperty", - @"foo", - @"testscript", - @"parenttestscript", - @"asdscriptuniqueidentifier", - [GTMFourCharCode fourCharCodeWithFourCharCode:pVersion], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASPrintDepth], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASTopLevelScript], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASResult], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASMinutes], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASDays], - // No constant for linefeed in the 10.5 sdk - // Radar 6132775 Need a constant for the Applescript Property 'lnfd' - [GTMFourCharCode fourCharCodeWithFourCharCode:'lnfd'], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASPi], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASReturn], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASSpace], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASPrintLength], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASQuote], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASWeeks], - [GTMFourCharCode fourCharCodeWithFourCharCode:pTextItemDelimiters], - // Applescript properties should be pASSeconds, but - // on 10.5.4/10.5.5 it is actually using cSeconds. - // Radar 6132696 Applescript root level property is cSeconds - // instead of pASSeconds - [GTMFourCharCode fourCharCodeWithFourCharCode:cSeconds], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASHours], - [GTMFourCharCode fourCharCodeWithFourCharCode:pASTab], - nil]; - if ([GTMSystemVersion isSnowLeopardOrGreater]) { - // Workaround for bug in SnowLeopard - // rdar://6289077 OSAGetPropertyNames returns names in camelcase instead - // of lowercase. - id obj; - NSMutableSet *properties2 = [NSMutableSet set]; - GTM_FOREACH_OBJECT(obj, properties) { - if ([obj isKindOfClass:[NSString class]]) { - obj = [obj lowercaseString]; - } - [properties2 addObject:obj]; - } - properties = properties2; - } - STAssertEqualObjects(properties, expected, @"Unexpected properties?"); - id value = [script gtm_valueForProperty:@"testScriptProperty"]; - STAssertEqualObjects(value, [NSNumber numberWithInt:5], @"bad property?"); - BOOL goodSet = [script gtm_setValue:@"bar" - forProperty:@"foo" - addingDefinition:NO]; - STAssertTrue(goodSet, @"Couldn't set property"); - - // Test local set - value = [script gtm_valueForProperty:@"foo"]; - STAssertEqualObjects(value, @"bar", @"bad property?"); - - // Test inherited set - value = [script_ gtm_valueForProperty:@"foo"]; - STAssertEqualObjects(value, @"bar", @"bad property?"); - - [GTMUnitTestDevLog expectPattern:@"Unable to setValue:bar forProperty:" - "\\(null\\) from <NSAppleScript: 0x[0-9a-f]+> \\(-50\\)"]; - goodSet = [script gtm_setValue:@"bar" - forProperty:nil - addingDefinition:NO]; - STAssertFalse(goodSet, @"Set property?"); - - [GTMUnitTestDevLog expectPattern:@"Unable to setValue:bar forProperty:3" - " from <NSAppleScript: 0x[0-9a-f]+> \\(-50\\)"]; - goodSet = [script gtm_setValue:@"bar" - forProperty:[NSNumber numberWithInt:3] - addingDefinition:YES]; - STAssertFalse(goodSet, @"Set property?"); - - - [GTMUnitTestDevLog expectPattern:@"Unable to get valueForProperty:gargle " - "from <NSAppleScript: 0x[0-9a-f]+> \\(-1753\\)"]; - value = [script gtm_valueForProperty:@"gargle"]; - STAssertNil(value, @"Property named gargle?"); - - goodSet = [script_ gtm_setValue:@"wow" - forProperty:@"addedProperty" - addingDefinition:YES]; - STAssertTrue(goodSet, @"Unable to addProperty"); - - value = [script gtm_valueForProperty:@"addedProperty"]; - STAssertNotNil(value, nil); - STAssertEqualObjects(value, @"wow", nil); - - // http://www.straightdope.com/classics/a3_341.html - NSNumber *newPI = [NSNumber numberWithInt:3]; - goodSet = [script gtm_setValue:newPI - forPropertyEnum:pASPi - addingDefinition:NO]; - STAssertTrue(goodSet, @"Unable to set property"); - value = [script_ gtm_valueForPropertyEnum:pASPi]; - STAssertNotNil(value, nil); - STAssertEqualObjects(value, newPI, @"bad property"); -} - -- (void)testFailures { - NSDictionary *error = nil; - NSAppleEventDescriptor *desc - = [script_ gtm_executePositionalHandler:@"noSuchTest" - parameters:nil - error:&error]; - STAssertNil(desc, nil); - STAssertNotNil(error, nil); - - // Test with empty handler name - error = nil; - desc = [script_ gtm_executePositionalHandler:@"" - parameters:[NSArray array] - error:&error]; - STAssertNil(desc, nil); - STAssertNotNil(error, nil); - - // Test with nil handler - error = nil; - desc = [script_ gtm_executePositionalHandler:nil - parameters:[NSArray array] - error:&error]; - STAssertNil(desc, nil); - STAssertNotNil(error, nil); - - // Test with nil handler and nil error - desc = [script_ gtm_executePositionalHandler:nil - parameters:nil - error:nil]; - STAssertNil(desc, nil); - - // Test with a bad script - NSAppleScript *script - = [[[NSAppleScript alloc] initWithSource:@"david hasselhoff"] autorelease]; - [GTMUnitTestDevLog expectPattern:@"Unable to compile script: .*"]; - [GTMUnitTestDevLog expectString:@"Unable to coerce script -2147450879"]; - NSSet *handlers = [script gtm_handlers]; - STAssertEquals([handlers count], (NSUInteger)0, @"Should have no handlers"); - [GTMUnitTestDevLog expectPattern:@"Unable to compile script: .*"]; - [GTMUnitTestDevLog expectString:@"Unable to coerce script -2147450879"]; - NSSet *properties = [script gtm_properties]; - STAssertEquals([properties count], - (NSUInteger)0, - @"Should have no properties"); - [GTMUnitTestDevLog expectPattern:@"Unable to compile script: .*"]; - [GTMUnitTestDevLog expectString:@"Unable to get script info about " - @"open handler -2147450879"]; - STAssertFalse([script gtm_hasOpenDocumentsHandler], - @"Has an opendoc handler?"); -} - -- (void)testScriptDescriptors { - NSAppleEventDescriptor *desc = [script_ gtm_appleEventDescriptor]; - STAssertNotNil(desc, @"Couldn't make a script desc"); - NSAppleScript *script = [desc gtm_objectValue]; - STAssertNotNil(script, @"Couldn't get a script back"); - NSSet *handlers = [script gtm_handlers]; - STAssertNotNil(handlers, @"Couldn't get handlers"); -} - -- (void)testOpenHandler { - STAssertFalse([script_ gtm_hasOpenDocumentsHandler], nil); - id script = [script_ gtm_valueForProperty:@"testscript"]; - STAssertNotNil(script, nil); - STAssertTrue([script gtm_hasOpenDocumentsHandler], nil); -} - -- (void)testForwarding { - id<ScriptInterface> foo = (id<ScriptInterface>)script_; - [foo test]; - NSNumber *val = [foo testReturnParam:[NSNumber numberWithInt:2]]; - STAssertEquals([val intValue], 2, @"should be 2"); - val = [foo testAddParams:[NSNumber numberWithInt:2] - :[NSNumber numberWithInt:3]]; - STAssertEquals([val intValue], 5, @"should be 5"); -} -@end diff --git a/Foundation/GTMNSArray+Merge.m b/Foundation/GTMNSArray+Merge.m index 5bf07c8..4b67853 100644 --- a/Foundation/GTMNSArray+Merge.m +++ b/Foundation/GTMNSArray+Merge.m @@ -6,13 +6,13 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations +// License for the specific language governing permissions and limitations // under the License. // @@ -48,20 +48,20 @@ [mergingArray sortUsingSelector:comparer]; NSArray *sortedNewArray = [newArray sortedArrayUsingSelector:comparer]; - + NSUInteger oldIndex = 0; NSUInteger oldCount = [mergingArray count]; id oldItem = (oldIndex < oldCount) ? [mergingArray objectAtIndex:0] : nil; - + id newItem = nil; - GTM_FOREACH_OBJECT(newItem, sortedNewArray) { + for (newItem in sortedNewArray) { BOOL stillLooking = YES; while (oldIndex < oldCount && stillLooking) { // We must take care here, since Intel leaves junk in high bytes of // return register for predicates that return BOOL. - // For details see: + // For details see: // http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/universal_binary_tips/chapter_5_section_23.html // and // http://www.red-sweater.com/blog/320/abusing-objective-c-with-class#comment-83187 diff --git a/Foundation/GTMNSArray+MergeTest.m b/Foundation/GTMNSArray+MergeTest.m index 9148ba7..535e0ce 100644 --- a/Foundation/GTMNSArray+MergeTest.m +++ b/Foundation/GTMNSArray+MergeTest.m @@ -37,8 +37,8 @@ NSArray *emptyArrayB = [NSArray array]; NSArray *mergedArray = [emptyArrayA gtm_mergeArray:emptyArrayB mergeSelector:nil]; - STAssertNil(mergedArray, - @"merge of two empty arrays with no merger should render nil"); + XCTAssertNil(mergedArray, + @"merge of two empty arrays with no merger should render nil"); } - (void)testMergingTwoEmptyArraysWithMerger { @@ -47,8 +47,8 @@ NSArray *mergedArray = [emptyArrayA gtm_mergeArray:emptyArrayB mergeSelector:@selector(mergeString:)]; - STAssertNil(mergedArray, - @"merge of two empty arrays with merger should render nil"); + XCTAssertNil(mergedArray, + @"merge of two empty arrays with merger should render nil"); } - (void)testMergingEmptyWithNilArray { @@ -56,8 +56,8 @@ NSArray *nilArrayB = nil; NSArray *mergedArray = [emptyArrayA gtm_mergeArray:nilArrayB mergeSelector:nil]; - STAssertNil(mergedArray, - @"merge of empty with nil array with no merger should render nil"); + XCTAssertNil(mergedArray, + @"merge of empty with nil array with no merger should render nil"); } - (void)testMergingEmptyWithNilArrayWithMerger { @@ -66,8 +66,8 @@ NSArray *mergedArray = [emptyArrayA gtm_mergeArray:nilArrayB mergeSelector:@selector(mergeString:)]; - STAssertNil(mergedArray, - @"merge of empty with nil array with merger should render nil"); + XCTAssertNil(mergedArray, + @"merge of empty with nil array with merger should render nil"); } - (void)testMergingTwoOneItemArraysThatDontMatch { @@ -75,13 +75,13 @@ NSArray *arrayB = [NSArray arrayWithObject:@"abc.ghi"]; NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB mergeSelector:nil]; - STAssertNotNil(mergedArray, - @"merge of two non empty arrays with no merger should render " - @"an array"); - STAssertEquals([mergedArray count], (NSUInteger)2, + XCTAssertNotNil(mergedArray, + @"merge of two non empty arrays with no merger should render " + @"an array"); + XCTAssertEqual([mergedArray count], (NSUInteger)2, @"merged array should have two items"); - STAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def", nil); - STAssertEqualObjects([mergedArray objectAtIndex:1], @"abc.ghi", nil); + XCTAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def"); + XCTAssertEqualObjects([mergedArray objectAtIndex:1], @"abc.ghi"); } - (void)testMergingTwoOneItemArraysThatDontMatchWithMerger { @@ -89,13 +89,13 @@ NSArray *arrayB = [NSArray arrayWithObject:@"abc.ghi"]; NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB mergeSelector:@selector(mergeString:)]; - STAssertNotNil(mergedArray, - @"merge of two non empty arrays with merger should render " - @"an array"); - STAssertEquals([mergedArray count], (NSUInteger)2, + XCTAssertNotNil(mergedArray, + @"merge of two non empty arrays with merger should render " + @"an array"); + XCTAssertEqual([mergedArray count], (NSUInteger)2, @"merged array should have two items"); - STAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def", nil); - STAssertEqualObjects([mergedArray objectAtIndex:1], @"abc.ghi", nil); + XCTAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def"); + XCTAssertEqualObjects([mergedArray objectAtIndex:1], @"abc.ghi"); } - (void)testMergingTwoOneItemArraysThatMatch { @@ -103,13 +103,13 @@ NSArray *arrayB = [NSArray arrayWithObject:@"abc.def"]; NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB mergeSelector:nil]; - STAssertNotNil(mergedArray, - @"merge of two matching arrays with no merger should render " - @"an array"); - STAssertEquals([mergedArray count], (NSUInteger)2, + XCTAssertNotNil(mergedArray, + @"merge of two matching arrays with no merger should render " + @"an array"); + XCTAssertEqual([mergedArray count], (NSUInteger)2, @"merged array with no merger should have two items"); - STAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def", nil); - STAssertEqualObjects([mergedArray objectAtIndex:1], @"abc.def", nil); + XCTAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def"); + XCTAssertEqualObjects([mergedArray objectAtIndex:1], @"abc.def"); } - (void)testMergingTwoOneItemArraysThatMatchWithMerger { @@ -117,12 +117,12 @@ NSArray *arrayB = [NSArray arrayWithObject:@"abc.def"]; NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB mergeSelector:@selector(mergeString:)]; - STAssertNotNil(mergedArray, - @"merge of two matching arrays with merger should render " - @"an array"); - STAssertEquals([mergedArray count], (NSUInteger)1, + XCTAssertNotNil(mergedArray, + @"merge of two matching arrays with merger should render " + @"an array"); + XCTAssertEqual([mergedArray count], (NSUInteger)1, @"merged array with merger should have one items"); - STAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def", nil); + XCTAssertEqualObjects([mergedArray objectAtIndex:0], @"abc.def"); } - (void)testMergingMultipleItemArray { @@ -141,10 +141,10 @@ nil]; NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB mergeSelector:nil]; - STAssertNotNil(mergedArray, - @"merge of two non empty arrays with no merger should render " - @"an array"); - STAssertEquals([mergedArray count], (NSUInteger)9, + XCTAssertNotNil(mergedArray, + @"merge of two non empty arrays with no merger should render " + @"an array"); + XCTAssertEqual([mergedArray count], (NSUInteger)9, @"merged array should have 9 items"); } @@ -164,10 +164,10 @@ nil]; NSArray *mergedArray = [arrayA gtm_mergeArray:arrayB mergeSelector:@selector(mergeString:)]; - STAssertNotNil(mergedArray, - @"merge of two non empty arrays with merger should render " - @"an array"); - STAssertEquals([mergedArray count], (NSUInteger)7, + XCTAssertNotNil(mergedArray, + @"merge of two non empty arrays with merger should render " + @"an array"); + XCTAssertEqual([mergedArray count], (NSUInteger)7, @"merged array should have 7 items"); } @@ -175,35 +175,34 @@ NSArray *arrayA = [NSArray arrayWithObjects:@"xyz", @"abc", @"mno", nil]; NSArray *arrayB = [NSArray array]; NSArray *expected = [NSArray arrayWithObjects:@"abc", @"mno", @"xyz", nil]; - STAssertNotNil(arrayA, nil); - STAssertNotNil(arrayB, nil); - STAssertNotNil(expected, nil); + XCTAssertNotNil(arrayA); + XCTAssertNotNil(arrayB); + XCTAssertNotNil(expected); NSArray *mergedArray; // no merger mergedArray = [arrayA gtm_mergeArray:arrayB mergeSelector:nil]; - STAssertNotNil(mergedArray, nil); - STAssertEqualObjects(mergedArray, expected, nil); + XCTAssertNotNil(mergedArray); + XCTAssertEqualObjects(mergedArray, expected); // w/ merger mergedArray = [arrayA gtm_mergeArray:arrayB mergeSelector:@selector(mergeString:)]; - STAssertNotNil(mergedArray, nil); - STAssertEqualObjects(mergedArray, expected, nil); + XCTAssertNotNil(mergedArray); + XCTAssertEqualObjects(mergedArray, expected); // no merger and array args reversed mergedArray = [arrayB gtm_mergeArray:arrayA mergeSelector:nil]; - STAssertNotNil(mergedArray, nil); - STAssertEqualObjects(mergedArray, expected, nil); + XCTAssertNotNil(mergedArray); + XCTAssertEqualObjects(mergedArray, expected); // w/ merger and array args reversed mergedArray = [arrayB gtm_mergeArray:arrayA mergeSelector:@selector(mergeString:)]; - STAssertNotNil(mergedArray, nil); - STAssertEqualObjects(mergedArray, expected, nil); - + XCTAssertNotNil(mergedArray); + XCTAssertEqualObjects(mergedArray, expected); } @end diff --git a/Foundation/GTMNSData+zlib.h b/Foundation/GTMNSData+zlib.h index 08fbb9a..dceadc4 100644 --- a/Foundation/GTMNSData+zlib.h +++ b/Foundation/GTMNSData+zlib.h @@ -33,22 +33,34 @@ // Uses the default compression level. + (NSData *)gtm_dataByGzippingBytes:(const void *)bytes length:(NSUInteger)length; ++ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes + length:(NSUInteger)length + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of gzipping the payload of |data|. // // Uses the default compression level. -+ (NSData *)gtm_dataByGzippingData:(NSData *)data; ++ (NSData *)gtm_dataByGzippingData:(NSData *)data __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByGzippingData:(NSData *)data + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of gzipping the bytes using |level| compression level. // // |level| can be 1-9, any other values will be clipped to that range. + (NSData *)gtm_dataByGzippingBytes:(const void *)bytes length:(NSUInteger)length - compressionLevel:(int)level; + compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes + length:(NSUInteger)length + compressionLevel:(int)level + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of gzipping the payload of |data| using |level| compression level. + (NSData *)gtm_dataByGzippingData:(NSData *)data - compressionLevel:(int)level; + compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByGzippingData:(NSData *)data + compressionLevel:(int)level + error:(NSError **)error; #pragma mark Zlib "Stream" Compression @@ -59,23 +71,35 @@ // // Uses the default compression level. + (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes - length:(NSUInteger)length; + length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes + length:(NSUInteger)length + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of deflating the payload of |data|. // // Uses the default compression level. -+ (NSData *)gtm_dataByDeflatingData:(NSData *)data; ++ (NSData *)gtm_dataByDeflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByDeflatingData:(NSData *)data + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of deflating the bytes using |level| compression level. // // |level| can be 1-9, any other values will be clipped to that range. + (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes length:(NSUInteger)length - compressionLevel:(int)level; + compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes + length:(NSUInteger)length + compressionLevel:(int)level + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of deflating the payload of |data| using |level| compression level. + (NSData *)gtm_dataByDeflatingData:(NSData *)data - compressionLevel:(int)level; + compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByDeflatingData:(NSData *)data + compressionLevel:(int)level + error:(NSError **)error; #pragma mark Uncompress of Gzip or Zlib @@ -83,13 +107,17 @@ // // The bytes to decompress can be zlib or gzip payloads. + (NSData *)gtm_dataByInflatingBytes:(const void *)bytes - length:(NSUInteger)length; + length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByInflatingBytes:(const void *)bytes + length:(NSUInteger)length + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of decompressing the payload of |data|. // // The data to decompress can be zlib or gzip payloads. -+ (NSData *)gtm_dataByInflatingData:(NSData *)data; - ++ (NSData *)gtm_dataByInflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByInflatingData:(NSData *)data + error:(NSError **)error; #pragma mark "Raw" Compression Support @@ -103,13 +131,18 @@ // Uses the default compression level. // *No* header is added to the resulting data. + (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes - length:(NSUInteger)length; + length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes + length:(NSUInteger)length + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of *raw* deflating the payload of |data|. // // Uses the default compression level. // *No* header is added to the resulting data. -+ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data; ++ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of *raw* deflating the bytes using |level| compression level. // @@ -117,22 +150,50 @@ // *No* header is added to the resulting data. + (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes length:(NSUInteger)length - compressionLevel:(int)level; + compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes + length:(NSUInteger)length + compressionLevel:(int)level + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of *raw* deflating the payload of |data| using |level| compression level. // *No* header is added to the resulting data. + (NSData *)gtm_dataByRawDeflatingData:(NSData *)data - compressionLevel:(int)level; + compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data + compressionLevel:(int)level + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of *raw* decompressing the bytes. // // The data to decompress, it should *not* have any header (zlib nor gzip). + (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes - length:(NSUInteger)length; + length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes + length:(NSUInteger)length + error:(NSError **)error; /// Return an autoreleased NSData w/ the result of *raw* decompressing the payload of |data|. // // The data to decompress, it should *not* have any header (zlib nor gzip). -+ (NSData *)gtm_dataByRawInflatingData:(NSData *)data; ++ (NSData *)gtm_dataByRawInflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); ++ (NSData *)gtm_dataByRawInflatingData:(NSData *)data + error:(NSError **)error; @end + +FOUNDATION_EXPORT NSString *const GTMNSDataZlibErrorDomain; +FOUNDATION_EXPORT NSString *const GTMNSDataZlibErrorKey; // NSNumber +FOUNDATION_EXPORT NSString *const GTMNSDataZlibRemainingBytesKey; // NSNumber + +typedef NS_ENUM(NSInteger, GTMNSDataZlibError) { + GTMNSDataZlibErrorGreaterThan32BitsToCompress = 1024, + // An internal zlib error. + // GTMNSDataZlibErrorKey will contain the error value. + // NSLocalizedDescriptionKey may contain an error string from zlib. + // Look in zlib.h for list of errors. + GTMNSDataZlibErrorInternal, + // There was left over data in the buffer that was not used. + // GTMNSDataZlibRemainingBytesKey will contain number of remaining bytes. + GTMNSDataZlibErrorDataRemaining +}; diff --git a/Foundation/GTMNSData+zlib.m b/Foundation/GTMNSData+zlib.m index 4f8df8c..bf74b2d 100644 --- a/Foundation/GTMNSData+zlib.m +++ b/Foundation/GTMNSData+zlib.m @@ -20,12 +20,12 @@ #import <zlib.h> #import "GTMDefines.h" -// Export a nonsense symbol to suppress a libtool warning when this is linked alone in a static lib. -__attribute__((visibility("default"))) char GTMNSDataZLibExportToSuppressLibToolWarning = 0; - - #define kChunkSize 1024 +NSString *const GTMNSDataZlibErrorDomain = @"com.google.GTMNSDataZlibErrorDomain"; +NSString *const GTMNSDataZlibErrorKey = @"GTMNSDataZlibErrorKey"; +NSString *const GTMNSDataZlibRemainingBytesKey = @"GTMNSDataZlibRemainingBytesKey"; + typedef enum { CompressionModeZlib, CompressionModeGzip, @@ -36,10 +36,12 @@ typedef enum { + (NSData *)gtm_dataByCompressingBytes:(const void *)bytes length:(NSUInteger)length compressionLevel:(int)level - mode:(CompressionMode)mode; + mode:(CompressionMode)mode + error:(NSError **)error; + (NSData *)gtm_dataByInflatingBytes:(const void *)bytes length:(NSUInteger)length - isRawData:(BOOL)isRawData; + isRawData:(BOOL)isRawData + error:(NSError **)error; @end @implementation NSData (GTMZlibAdditionsPrivate) @@ -47,7 +49,8 @@ typedef enum { + (NSData *)gtm_dataByCompressingBytes:(const void *)bytes length:(NSUInteger)length compressionLevel:(int)level - mode:(CompressionMode)mode { + mode:(CompressionMode)mode + error:(NSError **)error { if (!bytes || !length) { return nil; } @@ -55,6 +58,11 @@ typedef enum { #if defined(__LP64__) && __LP64__ // Don't support > 32bit length for 64 bit, see note in header. if (length > UINT_MAX) { + if (error) { + *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain + code:GTMNSDataZlibErrorGreaterThan32BitsToCompress + userInfo:nil]; + } return nil; } #endif @@ -90,8 +98,13 @@ typedef enum { if ((retCode = deflateInit2(&strm, level, Z_DEFLATED, windowBits, memLevel, Z_DEFAULT_STRATEGY)) != Z_OK) { // COV_NF_START - no real way to force this in a unittest (we guard all args) - _GTMDevLog(@"Failed to init for deflate w/ level %d, error %d", - level, retCode); + if (error) { + NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] + forKey:GTMNSDataZlibErrorKey]; + *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain + code:GTMNSDataZlibErrorInternal + userInfo:userInfo]; + } return nil; // COV_NF_END } @@ -115,8 +128,13 @@ typedef enum { // (in inflate, we can feed bogus/truncated data to test, but an error // here would be some internal issue w/in zlib, and there isn't any real // way to test it) - _GTMDevLog(@"Error trying to deflate some of the payload, error %d", - retCode); + if (error) { + NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] + forKey:GTMNSDataZlibErrorKey]; + *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain + code:GTMNSDataZlibErrorInternal + userInfo:userInfo]; + } deflateEnd(&strm); return nil; // COV_NF_END @@ -145,7 +163,8 @@ typedef enum { + (NSData *)gtm_dataByInflatingBytes:(const void *)bytes length:(NSUInteger)length - isRawData:(BOOL)isRawData { + isRawData:(BOOL)isRawData + error:(NSError **)error { if (!bytes || !length) { return nil; } @@ -174,7 +193,13 @@ typedef enum { int retCode; if ((retCode = inflateInit2(&strm, windowBits)) != Z_OK) { // COV_NF_START - no real way to force this in a unittest (we guard all args) - _GTMDevLog(@"Failed to init for inflate, error %d", retCode); + if (error) { + NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] + forKey:GTMNSDataZlibErrorKey]; + *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain + code:GTMNSDataZlibErrorInternal + userInfo:userInfo]; + } return nil; // COV_NF_END } @@ -190,8 +215,20 @@ typedef enum { strm.next_out = output; retCode = inflate(&strm, Z_NO_FLUSH); if ((retCode != Z_OK) && (retCode != Z_STREAM_END)) { - _GTMDevLog(@"Error trying to inflate some of the payload, error %d: %s", - retCode, strm.msg); + if (error) { + NSMutableDictionary *userInfo = + [NSMutableDictionary dictionaryWithObject:[NSNumber numberWithInt:retCode] + forKey:GTMNSDataZlibErrorKey]; + if (strm.msg) { + NSString *message = [NSString stringWithUTF8String:strm.msg]; + if (message) { + [userInfo setObject:message forKey:NSLocalizedDescriptionKey]; + } + } + *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain + code:GTMNSDataZlibErrorInternal + userInfo:userInfo]; + } inflateEnd(&strm); return nil; } @@ -206,8 +243,14 @@ typedef enum { // make sure there wasn't more data tacked onto the end of a valid compressed // stream. if (strm.avail_in != 0) { - _GTMDevLog(@"thought we finished inflate w/o using all input, %u bytes left", - strm.avail_in); + if (error) { + NSDictionary *userInfo = + [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInt:strm.avail_in] + forKey:GTMNSDataZlibRemainingBytesKey]; + *error = [NSError errorWithDomain:GTMNSDataZlibErrorDomain + code:GTMNSDataZlibErrorDataRemaining + userInfo:userInfo]; + } result = nil; } // the only way out of the loop was by hitting the end of the stream @@ -228,69 +271,135 @@ typedef enum { + (NSData *)gtm_dataByGzippingBytes:(const void *)bytes length:(NSUInteger)length { + return [self gtm_dataByGzippingBytes:bytes length:length error:NULL]; +} // gtm_dataByGzippingBytes:length: + ++ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes + length:(NSUInteger)length + error:(NSError **)error { return [self gtm_dataByCompressingBytes:bytes length:length compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeGzip]; -} // gtm_dataByGzippingBytes:length: + mode:CompressionModeGzip + error:error]; +} // gtm_dataByGzippingBytes:length:error: + (NSData *)gtm_dataByGzippingData:(NSData *)data { + return [self gtm_dataByGzippingData:data error:NULL]; +} // gtm_dataByGzippingData: + ++ (NSData *)gtm_dataByGzippingData:(NSData *)data error:(NSError **)error { return [self gtm_dataByCompressingBytes:[data bytes] length:[data length] compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeGzip]; -} // gtm_dataByGzippingData: + mode:CompressionModeGzip + error:error]; +} // gtm_dataByGzippingData:error: + (NSData *)gtm_dataByGzippingBytes:(const void *)bytes length:(NSUInteger)length compressionLevel:(int)level { + return [self gtm_dataByGzippingBytes:bytes + length:length + compressionLevel:level + error:NULL]; +} // gtm_dataByGzippingBytes:length:level: + ++ (NSData *)gtm_dataByGzippingBytes:(const void *)bytes + length:(NSUInteger)length + compressionLevel:(int)level + error:(NSError **)error{ return [self gtm_dataByCompressingBytes:bytes length:length compressionLevel:level - mode:CompressionModeGzip]; -} // gtm_dataByGzippingBytes:length:level: + mode:CompressionModeGzip + error:error]; +} // gtm_dataByGzippingBytes:length:level:error + (NSData *)gtm_dataByGzippingData:(NSData *)data compressionLevel:(int)level { + return [self gtm_dataByGzippingData:data + compressionLevel:level + error:NULL]; +} // gtm_dataByGzippingData:level: + ++ (NSData *)gtm_dataByGzippingData:(NSData *)data + compressionLevel:(int)level + error:(NSError **)error{ return [self gtm_dataByCompressingBytes:[data bytes] length:[data length] compressionLevel:level - mode:CompressionModeGzip]; -} // gtm_dataByGzippingData:level: + mode:CompressionModeGzip + error:error]; +} // gtm_dataByGzippingData:level:error #pragma mark - + (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes length:(NSUInteger)length { + return [self gtm_dataByDeflatingBytes:bytes + length:length + error:NULL]; +} // gtm_dataByDeflatingBytes:length: + ++ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes + length:(NSUInteger)length + error:(NSError **)error{ return [self gtm_dataByCompressingBytes:bytes length:length compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeZlib]; -} // gtm_dataByDeflatingBytes:length: + mode:CompressionModeZlib + error:error]; +} // gtm_dataByDeflatingBytes:length:error + (NSData *)gtm_dataByDeflatingData:(NSData *)data { + return [self gtm_dataByDeflatingData:data error:NULL]; +} // gtm_dataByDeflatingData: + ++ (NSData *)gtm_dataByDeflatingData:(NSData *)data error:(NSError **)error { return [self gtm_dataByCompressingBytes:[data bytes] length:[data length] compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeZlib]; + mode:CompressionModeZlib + error:error]; } // gtm_dataByDeflatingData: + (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes length:(NSUInteger)length compressionLevel:(int)level { + return [self gtm_dataByDeflatingBytes:bytes + length:length + compressionLevel:level + error:NULL]; +} // gtm_dataByDeflatingBytes:length:level: + ++ (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes + length:(NSUInteger)length + compressionLevel:(int)level + error:(NSError **)error { return [self gtm_dataByCompressingBytes:bytes length:length compressionLevel:level - mode:CompressionModeZlib]; -} // gtm_dataByDeflatingBytes:length:level: + mode:CompressionModeZlib + error:error]; +} // gtm_dataByDeflatingBytes:length:level:error: + (NSData *)gtm_dataByDeflatingData:(NSData *)data compressionLevel:(int)level { + return [self gtm_dataByDeflatingData:data + compressionLevel:level + error:NULL]; +} // gtm_dataByDeflatingData:level: + ++ (NSData *)gtm_dataByDeflatingData:(NSData *)data + compressionLevel:(int)level + error:(NSError **)error { return [self gtm_dataByCompressingBytes:[data bytes] length:[data length] compressionLevel:level - mode:CompressionModeZlib]; -} // gtm_dataByDeflatingData:level: + mode:CompressionModeZlib + error:error]; +} // gtm_dataByDeflatingData:level:error: #pragma mark - @@ -298,60 +407,125 @@ typedef enum { length:(NSUInteger)length { return [self gtm_dataByInflatingBytes:bytes length:length - isRawData:NO]; + error:NULL]; } // gtm_dataByInflatingBytes:length: ++ (NSData *)gtm_dataByInflatingBytes:(const void *)bytes + length:(NSUInteger)length + error:(NSError **)error { + return [self gtm_dataByInflatingBytes:bytes + length:length + isRawData:NO + error:error]; +} // gtm_dataByInflatingBytes:length:error: + + (NSData *)gtm_dataByInflatingData:(NSData *)data { + return [self gtm_dataByInflatingData:data error:NULL]; +} // gtm_dataByInflatingData: + ++ (NSData *)gtm_dataByInflatingData:(NSData *)data + error:(NSError **)error { return [self gtm_dataByInflatingBytes:[data bytes] length:[data length] - isRawData:NO]; + isRawData:NO + error:error]; } // gtm_dataByInflatingData: #pragma mark - + (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes length:(NSUInteger)length { + return [self gtm_dataByRawDeflatingBytes:(const void *)bytes + length:(NSUInteger)length + error:NULL]; +} // gtm_dataByRawDeflatingBytes:length: + ++ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes + length:(NSUInteger)length + error:(NSError **)error { return [self gtm_dataByCompressingBytes:bytes length:length compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeRaw]; -} // gtm_dataByRawDeflatingBytes:length: + mode:CompressionModeRaw + error:error]; +} // gtm_dataByRawDeflatingBytes:length:error: + (NSData *)gtm_dataByRawDeflatingData:(NSData *)data { + return [self gtm_dataByRawDeflatingData:data error:NULL]; +} // gtm_dataByRawDeflatingData: + ++ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data error:(NSError **)error { return [self gtm_dataByCompressingBytes:[data bytes] length:[data length] compressionLevel:Z_DEFAULT_COMPRESSION - mode:CompressionModeRaw]; -} // gtm_dataByRawDeflatingData: + mode:CompressionModeRaw + error:error]; +} // gtm_dataByRawDeflatingData:error: + (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes length:(NSUInteger)length compressionLevel:(int)level { + return [self gtm_dataByRawDeflatingBytes:bytes + length:length + compressionLevel:level + error:NULL]; +} // gtm_dataByRawDeflatingBytes:length:compressionLevel: + ++ (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes + length:(NSUInteger)length + compressionLevel:(int)level + error:(NSError **)error{ return [self gtm_dataByCompressingBytes:bytes length:length compressionLevel:level - mode:CompressionModeRaw]; -} // gtm_dataByRawDeflatingBytes:length:compressionLevel: + mode:CompressionModeRaw + error:error]; +} // gtm_dataByRawDeflatingBytes:length:compressionLevel:error: + (NSData *)gtm_dataByRawDeflatingData:(NSData *)data compressionLevel:(int)level { + return [self gtm_dataByRawDeflatingData:data + compressionLevel:level + error:NULL]; +} // gtm_dataByRawDeflatingData:compressionLevel: + ++ (NSData *)gtm_dataByRawDeflatingData:(NSData *)data + compressionLevel:(int)level + error:(NSError **)error { return [self gtm_dataByCompressingBytes:[data bytes] length:[data length] compressionLevel:level - mode:CompressionModeRaw]; -} // gtm_dataByRawDeflatingData:compressionLevel: + mode:CompressionModeRaw + error:error]; +} // gtm_dataByRawDeflatingData:compressionLevel:error: + (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes length:(NSUInteger)length { return [self gtm_dataByInflatingBytes:bytes length:length - isRawData:YES]; + error:NULL]; } // gtm_dataByRawInflatingBytes:length: ++ (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes + length:(NSUInteger)length + error:(NSError **)error{ + return [self gtm_dataByInflatingBytes:bytes + length:length + isRawData:YES + error:error]; +} // gtm_dataByRawInflatingBytes:length:error: + + (NSData *)gtm_dataByRawInflatingData:(NSData *)data { + return [self gtm_dataByRawInflatingData:data + error:NULL]; +} // gtm_dataByRawInflatingData: + ++ (NSData *)gtm_dataByRawInflatingData:(NSData *)data + error:(NSError **)error { return [self gtm_dataByInflatingBytes:[data bytes] length:[data length] - isRawData:YES]; -} // gtm_dataByRawInflatingData: + isRawData:YES + error:error]; +} // gtm_dataByRawInflatingData:error: @end diff --git a/Foundation/GTMNSData+zlibTest.m b/Foundation/GTMNSData+zlibTest.m index 8a14919..4f3acc1 100644 --- a/Foundation/GTMNSData+zlibTest.m +++ b/Foundation/GTMNSData+zlibTest.m @@ -17,9 +17,8 @@ // #import "GTMSenTestCase.h" -#import "GTMUnitTestDevLog.h" #import "GTMNSData+zlib.h" -#import <stdlib.h> // for randiom/srandomdev +#import <stdlib.h> // for random/srandomdev #import <zlib.h> @interface GTMNSData_zlibTest : GTMTestCase @@ -91,405 +90,526 @@ static BOOL HasGzipHeader(NSData *data) { ((bytes[0] == 0x1f) && (bytes[1] == 0x8b)); } +#define GTMCheckZLibError(error, errorCode) \ + XCTAssertEqual([error code], GTMNSDataZlibErrorInternal); \ + XCTAssertEqualObjects([error domain], GTMNSDataZlibErrorDomain); \ + XCTAssertEqualObjects([[error userInfo] objectForKey:GTMNSDataZlibErrorKey], \ + [NSNumber numberWithInt:errorCode]); \ + error = nil + +#define GTMCheckRemainingError(error, bytes) \ + XCTAssertEqual([error code], GTMNSDataZlibErrorDataRemaining); \ + XCTAssertEqualObjects([error domain], GTMNSDataZlibErrorDomain); \ + XCTAssertEqualObjects([[error userInfo] objectForKey:GTMNSDataZlibRemainingBytesKey], \ + [NSNumber numberWithInt:bytes]); \ + error = nil @implementation GTMNSData_zlibTest -- (void)testBoundryValues { +- (void)testBoundaryValues { // build some test data NSData *data = [NSData dataWithBytes:randomDataLarge length:sizeof(randomDataLarge)]; - STAssertNotNil(data, @"failed to alloc data block"); + XCTAssertNotNil(data, @"failed to alloc data block"); // bogus args to start - STAssertNil([NSData gtm_dataByDeflatingData:nil], nil); - STAssertNil([NSData gtm_dataByDeflatingBytes:nil length:666], nil); - STAssertNil([NSData gtm_dataByDeflatingBytes:[data bytes] length:0], nil); - STAssertNil([NSData gtm_dataByGzippingData:nil], nil); - STAssertNil([NSData gtm_dataByGzippingBytes:nil length:666], nil); - STAssertNil([NSData gtm_dataByGzippingBytes:[data bytes] length:0], nil); - STAssertNil([NSData gtm_dataByInflatingData:nil], nil); - STAssertNil([NSData gtm_dataByInflatingBytes:nil length:666], nil); - STAssertNil([NSData gtm_dataByInflatingBytes:[data bytes] length:0], nil); - STAssertNil([NSData gtm_dataByRawDeflatingData:nil], nil); - STAssertNil([NSData gtm_dataByRawDeflatingBytes:nil length:666], nil); - STAssertNil([NSData gtm_dataByRawDeflatingBytes:[data bytes] length:0], nil); - STAssertNil([NSData gtm_dataByRawInflatingData:nil], nil); - STAssertNil([NSData gtm_dataByRawInflatingBytes:nil length:666], nil); - STAssertNil([NSData gtm_dataByRawInflatingBytes:[data bytes] length:0], nil); + NSError *error = nil; + XCTAssertNil([NSData gtm_dataByDeflatingData:nil error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByDeflatingBytes:nil length:666 error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByDeflatingBytes:[data bytes] length:0 error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByGzippingData:nil error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByGzippingBytes:nil length:666 error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByGzippingBytes:[data bytes] length:0 error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByInflatingData:nil error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByInflatingBytes:nil length:666 error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByInflatingBytes:[data bytes] length:0 error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByRawDeflatingData:nil error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByRawDeflatingBytes:nil length:666 error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByRawDeflatingBytes:[data bytes] length:0 error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByRawInflatingData:nil error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByRawInflatingBytes:nil length:666 error:&error]); + XCTAssertNil(error); + error = nil; + XCTAssertNil([NSData gtm_dataByRawInflatingBytes:[data bytes] length:0 error:&error]); + XCTAssertNil(error); + error = nil; // test deflate w/ compression levels out of range NSData *deflated = [NSData gtm_dataByDeflatingData:data - compressionLevel:-4]; - STAssertNotNil(deflated, nil); - STAssertFalse(HasGzipHeader(deflated), nil); - NSData *dataPrime = [NSData gtm_dataByInflatingData:deflated]; - STAssertNotNil(dataPrime, nil); - STAssertEqualObjects(data, dataPrime, nil); + compressionLevel:-4 + error:&error]; + XCTAssertNotNil(deflated); + XCTAssertNil(error); + error = nil; + XCTAssertFalse(HasGzipHeader(deflated)); + NSData *dataPrime = [NSData gtm_dataByInflatingData:deflated error:&error]; + XCTAssertNotNil(dataPrime); + XCTAssertEqualObjects(data, dataPrime); + XCTAssertNil(error); + error = nil; deflated = [NSData gtm_dataByDeflatingData:data - compressionLevel:20]; - STAssertNotNil(deflated, nil); - STAssertFalse(HasGzipHeader(deflated), nil); - dataPrime = [NSData gtm_dataByInflatingData:deflated]; - STAssertNotNil(dataPrime, nil); - STAssertEqualObjects(data, dataPrime, nil); + compressionLevel:20 + error:&error]; + XCTAssertNotNil(deflated); + XCTAssertFalse(HasGzipHeader(deflated)); + XCTAssertNil(error); + error = nil; + dataPrime = [NSData gtm_dataByInflatingData:deflated error:&error]; + XCTAssertNotNil(dataPrime); + XCTAssertEqualObjects(data, dataPrime); + XCTAssertNil(error); + error = nil; // test gzip w/ compression levels out of range NSData *gzipped = [NSData gtm_dataByGzippingData:data - compressionLevel:-4]; - STAssertNotNil(gzipped, nil); - STAssertTrue(HasGzipHeader(gzipped), nil); - dataPrime = [NSData gtm_dataByInflatingData:gzipped]; - STAssertNotNil(dataPrime, nil); - STAssertEqualObjects(data, dataPrime, nil); + compressionLevel:-4 + error:&error]; + XCTAssertNotNil(gzipped); + XCTAssertNil(error); + error = nil; + XCTAssertTrue(HasGzipHeader(gzipped)); + dataPrime = [NSData gtm_dataByInflatingData:gzipped error:&error]; + XCTAssertNotNil(dataPrime); + XCTAssertEqualObjects(data, dataPrime); + XCTAssertNil(error); + error = nil; gzipped = [NSData gtm_dataByGzippingData:data - compressionLevel:20]; - STAssertNotNil(gzipped, nil); - STAssertTrue(HasGzipHeader(gzipped), nil); - dataPrime = [NSData gtm_dataByInflatingData:gzipped]; - STAssertNotNil(dataPrime, nil); - STAssertEqualObjects(data, dataPrime, nil); + compressionLevel:20 + error:&error]; + XCTAssertNotNil(gzipped); + XCTAssertTrue(HasGzipHeader(gzipped)); + XCTAssertNil(error); + error = nil; + dataPrime = [NSData gtm_dataByInflatingData:gzipped error:&error]; + XCTAssertNotNil(dataPrime); + XCTAssertEqualObjects(data, dataPrime); + XCTAssertNil(error); + error = nil; // test raw deflate w/ compression levels out of range NSData *rawDeflated = [NSData gtm_dataByRawDeflatingData:data - compressionLevel:-4]; - STAssertNotNil(rawDeflated, nil); - STAssertFalse(HasGzipHeader(rawDeflated), nil); - dataPrime = [NSData gtm_dataByRawInflatingData:rawDeflated]; - STAssertNotNil(dataPrime, nil); - STAssertEqualObjects(data, dataPrime, nil); + compressionLevel:-4 + error:&error]; + XCTAssertNotNil(rawDeflated); + XCTAssertFalse(HasGzipHeader(rawDeflated)); + XCTAssertNil(error); + error = nil; + dataPrime = [NSData gtm_dataByRawInflatingData:rawDeflated error:&error]; + XCTAssertNotNil(dataPrime); + XCTAssertEqualObjects(data, dataPrime); + XCTAssertNil(error); + error = nil; rawDeflated = [NSData gtm_dataByRawDeflatingData:data - compressionLevel:20]; - STAssertNotNil(rawDeflated, nil); - STAssertFalse(HasGzipHeader(rawDeflated), nil); - dataPrime = [NSData gtm_dataByRawInflatingData:rawDeflated]; - STAssertNotNil(dataPrime, nil); - STAssertEqualObjects(data, dataPrime, nil); + compressionLevel:20 + error:&error]; + XCTAssertNotNil(rawDeflated); + XCTAssertFalse(HasGzipHeader(rawDeflated)); + XCTAssertNil(error); + error = nil; + dataPrime = [NSData gtm_dataByRawInflatingData:rawDeflated error:&error]; + XCTAssertNotNil(dataPrime); + XCTAssertEqualObjects(data, dataPrime); + XCTAssertNil(error); + error = nil; // test non-compressed data data itself - [GTMUnitTestDevLog expectString:@"Error trying to inflate some of the " - @"payload, error -3: incorrect header check"]; - STAssertNil([NSData gtm_dataByInflatingData:data], nil); - + XCTAssertNil([NSData gtm_dataByInflatingData:data error:&error]); + GTMCheckZLibError(error, -3); // test deflated data runs that end before they are done - [GTMUnitTestDevLog expect:([deflated length] / 11) + 1 - casesOfString:@"Error trying to inflate some of the payload, " - @"error -5: (null)"]; for (NSUInteger x = 1 ; x < [deflated length] ; x += 11) { - STAssertNil([NSData gtm_dataByInflatingBytes:[deflated bytes] - length:x], nil); + XCTAssertNil([NSData gtm_dataByInflatingBytes:[deflated bytes] + length:x + error:&error]); + GTMCheckZLibError(error, -5); } // test gzipped data runs that end before they are done - [GTMUnitTestDevLog expect:([gzipped length] / 11) + 1 - casesOfString:@"Error trying to inflate some of the payload, " - @"error -5: (null)"]; for (NSUInteger x = 1 ; x < [gzipped length] ; x += 11) { - STAssertNil([NSData gtm_dataByInflatingBytes:[gzipped bytes] - length:x], nil); + XCTAssertNil([NSData gtm_dataByInflatingBytes:[gzipped bytes] + length:x + error:&error]); + GTMCheckZLibError(error, -5); } // test raw deflated data runs that end before they are done - [GTMUnitTestDevLog expectString:@"Error trying to inflate some of the " - @"payload, error -5: (null)"]; - [GTMUnitTestDevLog expect:([rawDeflated length] / 11) - 1 - casesOfString:@"Error trying to inflate some of the payload, " - @"error -3: incorrect header check"]; for (NSUInteger x = 1 ; x < [rawDeflated length] ; x += 11) { - STAssertNil([NSData gtm_dataByInflatingBytes:[rawDeflated bytes] - length:x], nil); + XCTAssertNil([NSData gtm_dataByInflatingBytes:[rawDeflated bytes] + length:x + error:&error]); + int expectedError = (x == 1) ? -5 : -3; + GTMCheckZLibError(error, expectedError); } // test extra data before the deflated/gzipped data (just to make sure we // don't seek to the "real" data) NSMutableData *prefixedDeflated = [NSMutableData dataWithBytes:randomDataSmall length:sizeof(randomDataSmall)]; - STAssertNotNil(prefixedDeflated, @"failed to alloc data block"); + XCTAssertNotNil(prefixedDeflated, @"failed to alloc data block"); [prefixedDeflated appendData:deflated]; - [GTMUnitTestDevLog expectString:@"Error trying to inflate some of the " - @"payload, error -3: incorrect header check"]; - STAssertNil([NSData gtm_dataByInflatingData:prefixedDeflated], nil); - [GTMUnitTestDevLog expectString:@"Error trying to inflate some of the " - @"payload, error -3: incorrect header check"]; - STAssertNil([NSData gtm_dataByInflatingBytes:[prefixedDeflated bytes] - length:[prefixedDeflated length]], - nil); + XCTAssertNil([NSData gtm_dataByInflatingData:prefixedDeflated error:&error]); + GTMCheckZLibError(error, -3); + XCTAssertNil([NSData gtm_dataByInflatingBytes:[prefixedDeflated bytes] + length:[prefixedDeflated length] + error:&error]); + GTMCheckZLibError(error, -3); NSMutableData *prefixedGzipped = [NSMutableData dataWithBytes:randomDataSmall length:sizeof(randomDataSmall)]; - STAssertNotNil(prefixedDeflated, @"failed to alloc data block"); + XCTAssertNotNil(prefixedDeflated, @"failed to alloc data block"); [prefixedGzipped appendData:gzipped]; - [GTMUnitTestDevLog expectString:@"Error trying to inflate some of the " - @"payload, error -3: incorrect header check"]; - STAssertNil([NSData gtm_dataByInflatingData:prefixedGzipped], nil); - [GTMUnitTestDevLog expectString:@"Error trying to inflate some of the " - @"payload, error -3: incorrect header check"]; - STAssertNil([NSData gtm_dataByInflatingBytes:[prefixedGzipped bytes] - length:[prefixedGzipped length]], - nil); + XCTAssertNil([NSData gtm_dataByInflatingData:prefixedGzipped error:&error]); + GTMCheckZLibError(error, -3); + XCTAssertNil([NSData gtm_dataByInflatingBytes:[prefixedGzipped bytes] + length:[prefixedGzipped length] + error:&error]); + GTMCheckZLibError(error, -3); NSMutableData *prefixedRawDeflated = [NSMutableData dataWithBytes:randomDataSmall length:sizeof(randomDataSmall)]; - STAssertNotNil(prefixedRawDeflated, @"failed to alloc data block"); + XCTAssertNotNil(prefixedRawDeflated, @"failed to alloc data block"); [prefixedRawDeflated appendData:rawDeflated]; - [GTMUnitTestDevLog expectString:@"Error trying to inflate some of the " - @"payload, error -3: invalid stored block lengths"]; - STAssertNil([NSData gtm_dataByRawInflatingData:prefixedRawDeflated], nil); - [GTMUnitTestDevLog expectString:@"Error trying to inflate some of the " - @"payload, error -3: invalid stored block lengths"]; - STAssertNil([NSData gtm_dataByRawInflatingBytes:[prefixedRawDeflated bytes] - length:[prefixedRawDeflated length]], - nil); + XCTAssertNil([NSData gtm_dataByRawInflatingData:prefixedRawDeflated error:&error]); + GTMCheckZLibError(error, -3); + XCTAssertNil([NSData gtm_dataByRawInflatingBytes:[prefixedRawDeflated bytes] + length:[prefixedRawDeflated length] + error:&error]); + GTMCheckZLibError(error, -3); // test extra data after the deflated/gzipped data (just to make sure we // don't ignore some of the data) NSMutableData *suffixedDeflated = [NSMutableData data]; - STAssertNotNil(suffixedDeflated, @"failed to alloc data block"); + XCTAssertNotNil(suffixedDeflated, @"failed to alloc data block"); [suffixedDeflated appendData:deflated]; [suffixedDeflated appendBytes:[data bytes] length:20]; - [GTMUnitTestDevLog expectString:@"thought we finished inflate w/o using " - @"all input, 20 bytes left"]; - STAssertNil([NSData gtm_dataByInflatingData:suffixedDeflated], nil); - [GTMUnitTestDevLog expectString:@"thought we finished inflate w/o using " - @"all input, 20 bytes left"]; - STAssertNil([NSData gtm_dataByInflatingBytes:[suffixedDeflated bytes] - length:[suffixedDeflated length]], - nil); + XCTAssertNil([NSData gtm_dataByInflatingData:suffixedDeflated + error:&error]); + GTMCheckRemainingError(error, 20); + XCTAssertNil([NSData gtm_dataByInflatingBytes:[suffixedDeflated bytes] + length:[suffixedDeflated length] + error:&error]); + GTMCheckRemainingError(error, 20); NSMutableData *suffixedGZipped = [NSMutableData data]; - STAssertNotNil(suffixedGZipped, @"failed to alloc data block"); + XCTAssertNotNil(suffixedGZipped, @"failed to alloc data block"); [suffixedGZipped appendData:gzipped]; [suffixedGZipped appendBytes:[data bytes] length:20]; - [GTMUnitTestDevLog expectString:@"thought we finished inflate w/o using " - @"all input, 20 bytes left"]; - STAssertNil([NSData gtm_dataByInflatingData:suffixedGZipped], nil); - [GTMUnitTestDevLog expectString:@"thought we finished inflate w/o using " - @"all input, 20 bytes left"]; - STAssertNil([NSData gtm_dataByInflatingBytes:[suffixedGZipped bytes] - length:[suffixedGZipped length]], - nil); + XCTAssertNil([NSData gtm_dataByInflatingData:suffixedGZipped error:&error]); + GTMCheckRemainingError(error, 20); + XCTAssertNil([NSData gtm_dataByInflatingBytes:[suffixedGZipped bytes] + length:[suffixedGZipped length] + error:&error]); + GTMCheckRemainingError(error, 20); NSMutableData *suffixedRawDeflated = [NSMutableData data]; - STAssertNotNil(suffixedRawDeflated, @"failed to alloc data block"); + XCTAssertNotNil(suffixedRawDeflated, @"failed to alloc data block"); [suffixedRawDeflated appendData:rawDeflated]; [suffixedRawDeflated appendBytes:[data bytes] length:20]; - [GTMUnitTestDevLog expectString:@"thought we finished inflate w/o using " - @"all input, 20 bytes left"]; - STAssertNil([NSData gtm_dataByRawInflatingData:suffixedRawDeflated], nil); - [GTMUnitTestDevLog expectString:@"thought we finished inflate w/o using " - @"all input, 20 bytes left"]; - STAssertNil([NSData gtm_dataByRawInflatingBytes:[suffixedRawDeflated bytes] - length:[suffixedRawDeflated length]], - nil); + XCTAssertNil([NSData gtm_dataByRawInflatingData:suffixedRawDeflated error:&error]); + GTMCheckRemainingError(error, 20); + XCTAssertNil([NSData gtm_dataByRawInflatingBytes:[suffixedRawDeflated bytes] + length:[suffixedRawDeflated length] + error:&error]); + GTMCheckRemainingError(error, 20); } - (void)testInflateDeflate { NSData *data = [NSData dataWithBytes:randomDataLarge length:sizeof(randomDataLarge)]; - STAssertNotNil(data, @"failed to alloc data block"); + XCTAssertNotNil(data, @"failed to alloc data block"); // w/ *Bytes apis, default level + NSError *error = nil; NSData *deflated = [NSData gtm_dataByDeflatingBytes:[data bytes] - length:[data length]]; - STAssertNotNil(deflated, @"failed to deflate data block"); - STAssertGreaterThan([deflated length], - (NSUInteger)0, @"failed to deflate data block"); - STAssertFalse(HasGzipHeader(deflated), @"has gzip header on zlib data"); + length:[data length] + error:&error]; + XCTAssertNotNil(deflated, @"failed to deflate data block"); + XCTAssertGreaterThan([deflated length], (NSUInteger)0, + @"failed to deflate data block"); + XCTAssertFalse(HasGzipHeader(deflated), @"has gzip header on zlib data"); + XCTAssertNil(error); + error = nil; + NSData *dataPrime = [NSData gtm_dataByInflatingBytes:[deflated bytes] - length:[deflated length]]; - STAssertNotNil(dataPrime, @"failed to inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to inflate data block"); - STAssertEqualObjects(data, - dataPrime, @"failed to round trip via *Bytes apis"); + length:[deflated length] + error:&error]; + XCTAssertNotNil(dataPrime, @"failed to inflate data block"); + XCTAssertGreaterThan([dataPrime length], (NSUInteger)0, + @"failed to inflate data block"); + XCTAssertEqualObjects(data, dataPrime, + @"failed to round trip via *Bytes apis"); + XCTAssertNil(error); + error = nil; // w/ *Data apis, default level - deflated = [NSData gtm_dataByDeflatingData:data]; - STAssertNotNil(deflated, @"failed to deflate data block"); - STAssertGreaterThan([deflated length], - (NSUInteger)0, @"failed to deflate data block"); - STAssertFalse(HasGzipHeader(deflated), @"has gzip header on zlib data"); - dataPrime = [NSData gtm_dataByInflatingData:deflated]; - STAssertNotNil(dataPrime, @"failed to inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to inflate data block"); - STAssertEqualObjects(data, - dataPrime, @"failed to round trip via *Data apis"); + deflated = [NSData gtm_dataByDeflatingData:data error:&error]; + XCTAssertNotNil(deflated, @"failed to deflate data block"); + XCTAssertGreaterThan([deflated length], (NSUInteger)0, + @"failed to deflate data block"); + XCTAssertFalse(HasGzipHeader(deflated), @"has gzip header on zlib data"); + XCTAssertNil(error); + error = nil; + dataPrime = [NSData gtm_dataByInflatingData:deflated error:&error]; + + XCTAssertNotNil(dataPrime, @"failed to inflate data block"); + XCTAssertGreaterThan([dataPrime length], (NSUInteger)0, + @"failed to inflate data block"); + XCTAssertEqualObjects(data, dataPrime, + @"failed to round trip via *Data apis"); + XCTAssertNil(error); + error = nil; // loop over the compression levels for (int level = 1 ; level <= 9 ; ++level) { // w/ *Bytes apis, using our level deflated = [NSData gtm_dataByDeflatingBytes:[data bytes] length:[data length] - compressionLevel:level]; - STAssertNotNil(deflated, @"failed to deflate data block"); - STAssertGreaterThan([deflated length], - (NSUInteger)0, @"failed to deflate data block"); - STAssertFalse(HasGzipHeader(deflated), @"has gzip header on zlib data"); + compressionLevel:level + error:&error]; + XCTAssertNotNil(deflated, @"failed to deflate data block"); + XCTAssertGreaterThan([deflated length], + (NSUInteger)0, @"failed to deflate data block"); + XCTAssertFalse(HasGzipHeader(deflated), @"has gzip header on zlib data"); + XCTAssertNil(error); + error = nil; dataPrime = [NSData gtm_dataByInflatingBytes:[deflated bytes] - length:[deflated length]]; - STAssertNotNil(dataPrime, @"failed to inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to inflate data block"); - STAssertEqualObjects(data, - dataPrime, @"failed to round trip via *Bytes apis"); + length:[deflated length] + error:&error]; + XCTAssertNotNil(dataPrime, @"failed to inflate data block"); + XCTAssertGreaterThan([dataPrime length], + (NSUInteger)0, @"failed to inflate data block"); + XCTAssertEqualObjects(data, + dataPrime, @"failed to round trip via *Bytes apis"); + XCTAssertNil(error); + error = nil; // w/ *Data apis, using our level - deflated = [NSData gtm_dataByDeflatingData:data compressionLevel:level]; - STAssertNotNil(deflated, @"failed to deflate data block"); - STAssertGreaterThan([deflated length], - (NSUInteger)0, @"failed to deflate data block"); - STAssertFalse(HasGzipHeader(deflated), @"has gzip header on zlib data"); - dataPrime = [NSData gtm_dataByInflatingData:deflated]; - STAssertNotNil(dataPrime, @"failed to inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to inflate data block"); - STAssertEqualObjects(data, - dataPrime, @"failed to round trip via *Data apis"); + deflated = [NSData gtm_dataByDeflatingData:data compressionLevel:level error:&error]; + XCTAssertNotNil(deflated, @"failed to deflate data block"); + XCTAssertGreaterThan([deflated length], + (NSUInteger)0, @"failed to deflate data block"); + XCTAssertFalse(HasGzipHeader(deflated), @"has gzip header on zlib data"); + XCTAssertNil(error); + error = nil; + dataPrime = [NSData gtm_dataByInflatingData:deflated error:&error]; + XCTAssertNotNil(dataPrime, @"failed to inflate data block"); + XCTAssertGreaterThan([dataPrime length], + (NSUInteger)0, @"failed to inflate data block"); + XCTAssertEqualObjects(data, + dataPrime, @"failed to round trip via *Data apis"); + XCTAssertNil(error); + error = nil; } } - (void)testInflateGzip { NSData *data = [NSData dataWithBytes:randomDataLarge length:sizeof(randomDataLarge)]; - STAssertNotNil(data, @"failed to alloc data block"); + XCTAssertNotNil(data, @"failed to alloc data block"); // w/ *Bytes apis, default level + NSError *error = nil; NSData *gzipped = [NSData gtm_dataByGzippingBytes:[data bytes] length:[data length]]; - STAssertNotNil(gzipped, @"failed to gzip data block"); - STAssertGreaterThan([gzipped length], - (NSUInteger)0, @"failed to gzip data block"); - STAssertTrue(HasGzipHeader(gzipped), - @"doesn't have gzip header on gzipped data"); + XCTAssertNotNil(gzipped, @"failed to gzip data block"); + XCTAssertGreaterThan([gzipped length], + (NSUInteger)0, @"failed to gzip data block"); + XCTAssertTrue(HasGzipHeader(gzipped), + @"doesn't have gzip header on gzipped data"); NSData *dataPrime = [NSData gtm_dataByInflatingBytes:[gzipped bytes] - length:[gzipped length]]; - STAssertNotNil(dataPrime, @"failed to inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to inflate data block"); - STAssertEqualObjects(data, - dataPrime, @"failed to round trip via *Bytes apis"); + length:[gzipped length] + error:&error]; + XCTAssertNotNil(dataPrime, @"failed to inflate data block"); + XCTAssertGreaterThan([dataPrime length], + (NSUInteger)0, @"failed to inflate data block"); + XCTAssertEqualObjects(data, + dataPrime, @"failed to round trip via *Bytes apis"); + XCTAssertNil(error); + error = nil; // w/ *Data apis, default level - gzipped = [NSData gtm_dataByGzippingData:data]; - STAssertNotNil(gzipped, @"failed to gzip data block"); - STAssertGreaterThan([gzipped length], + gzipped = [NSData gtm_dataByGzippingData:data error:&error]; + XCTAssertNotNil(gzipped, @"failed to gzip data block"); + XCTAssertGreaterThan([gzipped length], (NSUInteger)0, @"failed to gzip data block"); - STAssertTrue(HasGzipHeader(gzipped), - @"doesn't have gzip header on gzipped data"); - dataPrime = [NSData gtm_dataByInflatingData:gzipped]; - STAssertNotNil(dataPrime, @"failed to inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to inflate data block"); - STAssertEqualObjects(data, dataPrime, - @"failed to round trip via *Data apis"); + XCTAssertTrue(HasGzipHeader(gzipped), + @"doesn't have gzip header on gzipped data"); + XCTAssertNil(error); + error = nil; + dataPrime = [NSData gtm_dataByInflatingData:gzipped error:&error]; + XCTAssertNotNil(dataPrime, @"failed to inflate data block"); + XCTAssertGreaterThan([dataPrime length], + (NSUInteger)0, @"failed to inflate data block"); + XCTAssertEqualObjects(data, dataPrime, + @"failed to round trip via *Data apis"); + XCTAssertNil(error); + error = nil; // loop over the compression levels for (int level = 1 ; level <= 9 ; ++level) { // w/ *Bytes apis, using our level gzipped = [NSData gtm_dataByGzippingBytes:[data bytes] length:[data length] - compressionLevel:level]; - STAssertNotNil(gzipped, @"failed to gzip data block"); - STAssertGreaterThan([gzipped length], - (NSUInteger)0, @"failed to gzip data block"); - STAssertTrue(HasGzipHeader(gzipped), - @"doesn't have gzip header on gzipped data"); + compressionLevel:level + error:&error]; + XCTAssertNotNil(gzipped, @"failed to gzip data block"); + XCTAssertGreaterThan([gzipped length], + (NSUInteger)0, @"failed to gzip data block"); + XCTAssertTrue(HasGzipHeader(gzipped), + @"doesn't have gzip header on gzipped data"); + XCTAssertNil(error); + error = nil; dataPrime = [NSData gtm_dataByInflatingBytes:[gzipped bytes] - length:[gzipped length]]; - STAssertNotNil(dataPrime, @"failed to inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to inflate data block"); - STAssertEqualObjects(data, dataPrime, - @"failed to round trip via *Bytes apis"); + length:[gzipped length] + error:&error]; + XCTAssertNotNil(dataPrime, @"failed to inflate data block"); + XCTAssertGreaterThan([dataPrime length], + (NSUInteger)0, @"failed to inflate data block"); + XCTAssertEqualObjects(data, dataPrime, + @"failed to round trip via *Bytes apis"); + XCTAssertNil(error); + error = nil; // w/ *Data apis, using our level - gzipped = [NSData gtm_dataByGzippingData:data compressionLevel:level]; - STAssertNotNil(gzipped, @"failed to gzip data block"); - STAssertGreaterThan([gzipped length], - (NSUInteger)0, @"failed to gzip data block"); - STAssertTrue(HasGzipHeader(gzipped), - @"doesn't have gzip header on gzipped data"); - dataPrime = [NSData gtm_dataByInflatingData:gzipped]; - STAssertNotNil(dataPrime, @"failed to inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to inflate data block"); - STAssertEqualObjects(data, - dataPrime, @"failed to round trip via *Data apis"); + gzipped = [NSData gtm_dataByGzippingData:data compressionLevel:level error:&error]; + XCTAssertNotNil(gzipped, @"failed to gzip data block"); + XCTAssertGreaterThan([gzipped length], + (NSUInteger)0, @"failed to gzip data block"); + XCTAssertTrue(HasGzipHeader(gzipped), + @"doesn't have gzip header on gzipped data"); + XCTAssertNil(error); + error = nil; + dataPrime = [NSData gtm_dataByInflatingData:gzipped error:&error]; + XCTAssertNotNil(dataPrime, @"failed to inflate data block"); + XCTAssertGreaterThan([dataPrime length], + (NSUInteger)0, @"failed to inflate data block"); + XCTAssertEqualObjects(data, + dataPrime, @"failed to round trip via *Data apis"); + XCTAssertNil(error); + error = nil; } } - (void)testRawtInflateRawDeflate { + NSError *error = nil; NSData *data = [NSData dataWithBytes:randomDataLarge length:sizeof(randomDataLarge)]; - STAssertNotNil(data, @"failed to alloc data block"); + XCTAssertNotNil(data, @"failed to alloc data block"); // w/ *Bytes apis, default level NSData *rawDeflated = [NSData gtm_dataByRawDeflatingBytes:[data bytes] - length:[data length]]; - STAssertNotNil(rawDeflated, @"failed to raw deflate data block"); - STAssertGreaterThan([rawDeflated length], - (NSUInteger)0, @"failed to raw deflate data block"); - STAssertFalse(HasGzipHeader(rawDeflated), @"has gzip header on raw data"); + length:[data length] + error:&error]; + XCTAssertNotNil(rawDeflated, @"failed to raw deflate data block"); + XCTAssertGreaterThan([rawDeflated length], + (NSUInteger)0, @"failed to raw deflate data block"); + XCTAssertFalse(HasGzipHeader(rawDeflated), @"has gzip header on raw data"); + XCTAssertNil(error); + error = nil; NSData *dataPrime = [NSData gtm_dataByRawInflatingBytes:[rawDeflated bytes] - length:[rawDeflated length]]; - STAssertNotNil(dataPrime, @"failed to raw inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to raw inflate data block"); - STAssertEqualObjects(data, - dataPrime, @"failed to round trip via *Bytes apis"); + length:[rawDeflated length] + error:&error]; + XCTAssertNotNil(dataPrime, @"failed to raw inflate data block"); + XCTAssertGreaterThan([dataPrime length], + (NSUInteger)0, @"failed to raw inflate data block"); + XCTAssertEqualObjects(data, + dataPrime, @"failed to round trip via *Bytes apis"); + XCTAssertNil(error); + error = nil; // w/ *Data apis, default level - rawDeflated = [NSData gtm_dataByRawDeflatingData:data]; - STAssertNotNil(rawDeflated, @"failed to raw deflate data block"); - STAssertGreaterThan([rawDeflated length], - (NSUInteger)0, @"failed to raw deflate data block"); - STAssertFalse(HasGzipHeader(rawDeflated), @"has gzip header on raw data"); - dataPrime = [NSData gtm_dataByRawInflatingData:rawDeflated]; - STAssertNotNil(dataPrime, @"failed to raw inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to raw inflate data block"); - STAssertEqualObjects(data, - dataPrime, @"failed to round trip via *Data apis"); + rawDeflated = [NSData gtm_dataByRawDeflatingData:data error:&error]; + XCTAssertNotNil(rawDeflated, @"failed to raw deflate data block"); + XCTAssertGreaterThan([rawDeflated length], + (NSUInteger)0, @"failed to raw deflate data block"); + XCTAssertFalse(HasGzipHeader(rawDeflated), @"has gzip header on raw data"); + XCTAssertNil(error); + error = nil; + dataPrime = [NSData gtm_dataByRawInflatingData:rawDeflated error:&error]; + XCTAssertNotNil(dataPrime, @"failed to raw inflate data block"); + XCTAssertGreaterThan([dataPrime length], + (NSUInteger)0, @"failed to raw inflate data block"); + XCTAssertEqualObjects(data, + dataPrime, @"failed to round trip via *Data apis"); + XCTAssertNil(error); + error = nil; // loop over the compression levels for (int level = 1 ; level <= 9 ; ++level) { // w/ *Bytes apis, using our level rawDeflated = [NSData gtm_dataByRawDeflatingBytes:[data bytes] length:[data length] - compressionLevel:level]; - STAssertNotNil(rawDeflated, @"failed to rawDeflate data block"); - STAssertGreaterThan([rawDeflated length], - (NSUInteger)0, @"failed to raw deflate data block"); - STAssertFalse(HasGzipHeader(rawDeflated), @"has gzip header on raw data"); + compressionLevel:level + error:&error]; + XCTAssertNotNil(rawDeflated, @"failed to rawDeflate data block"); + XCTAssertGreaterThan([rawDeflated length], + (NSUInteger)0, @"failed to raw deflate data block"); + XCTAssertFalse(HasGzipHeader(rawDeflated), @"has gzip header on raw data"); + XCTAssertNil(error); + error = nil; dataPrime = [NSData gtm_dataByRawInflatingBytes:[rawDeflated bytes] - length:[rawDeflated length]]; - STAssertNotNil(dataPrime, @"failed to raw inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to raw inflate data block"); - STAssertEqualObjects(data, - dataPrime, @"failed to round trip via *Bytes apis"); + length:[rawDeflated length] + error:&error]; + XCTAssertNotNil(dataPrime, @"failed to raw inflate data block"); + XCTAssertGreaterThan([dataPrime length], + (NSUInteger)0, @"failed to raw inflate data block"); + XCTAssertEqualObjects(data, + dataPrime, @"failed to round trip via *Bytes apis"); + XCTAssertNil(error); + error = nil; // w/ *Data apis, using our level rawDeflated = [NSData gtm_dataByRawDeflatingData:data - compressionLevel:level]; - STAssertNotNil(rawDeflated, @"failed to deflate data block"); - STAssertGreaterThan([rawDeflated length], - (NSUInteger)0, @"failed to raw deflate data block"); - STAssertFalse(HasGzipHeader(rawDeflated), @"has gzip header on raw data"); - dataPrime = [NSData gtm_dataByRawInflatingData:rawDeflated]; - STAssertNotNil(dataPrime, @"failed to raw inflate data block"); - STAssertGreaterThan([dataPrime length], - (NSUInteger)0, @"failed to raw inflate data block"); - STAssertEqualObjects(data, - dataPrime, @"failed to round trip via *Data apis"); + compressionLevel:level + error:&error]; + XCTAssertNotNil(rawDeflated, @"failed to deflate data block"); + XCTAssertGreaterThan([rawDeflated length], + (NSUInteger)0, @"failed to raw deflate data block"); + XCTAssertFalse(HasGzipHeader(rawDeflated), @"has gzip header on raw data"); + XCTAssertNil(error); + error = nil; + dataPrime = [NSData gtm_dataByRawInflatingData:rawDeflated error:&error]; + XCTAssertNotNil(dataPrime, @"failed to raw inflate data block"); + XCTAssertGreaterThan([dataPrime length], + (NSUInteger)0, @"failed to raw inflate data block"); + XCTAssertEqualObjects(data, + dataPrime, @"failed to round trip via *Data apis"); + XCTAssertNil(error); + error = nil; } } - (void)testLargeData { // Generate some large data out of the random chunk by xoring over it // to make sure it changes and isn't too repeated. + NSError *error = nil; NSData *data = [NSData dataWithBytes:randomDataLarge length:sizeof(randomDataLarge)]; - STAssertNotNil(data, @"failed to alloc data block"); + XCTAssertNotNil(data, @"failed to alloc data block"); const uint8_t *dataBytes = [data bytes]; NSMutableData *scratch = [NSMutableData dataWithLength:[data length]]; - STAssertNotNil(scratch, @"failed to alloc data block"); + XCTAssertNotNil(scratch, @"failed to alloc data block"); uint8_t *scratchBytes = [scratch mutableBytes]; NSMutableData *input = [NSMutableData dataWithCapacity:200 * [data length]]; for (NSUInteger i = 0; i < 200; ++i) { @@ -505,22 +625,27 @@ static BOOL HasGzipHeader(NSData *data) { // Should deflate to more then one buffer size to make sure the internal loop // is working. NSData *compressed = [NSData gtm_dataByDeflatingData:input - compressionLevel:9]; - STAssertNotNil(compressed, @"failed to deflate"); - STAssertGreaterThan([compressed length], internalBufferSize, - @"should have been more then %d bytes", - (int)internalBufferSize); + compressionLevel:9 + error:&error]; + XCTAssertNotNil(compressed, @"failed to deflate"); + XCTAssertGreaterThan([compressed length], internalBufferSize, + @"should have been more then %d bytes", + (int)internalBufferSize); + XCTAssertNil(error); + error = nil; // Should inflate to more then one buffer size to make sure the internal loop // is working. - NSData *uncompressed = [NSData gtm_dataByInflatingData:compressed]; - STAssertNotNil(uncompressed, @"fail to inflate"); - STAssertGreaterThan([uncompressed length], internalBufferSize, - @"should have been more then %d bytes", - (int)internalBufferSize); - - STAssertEqualObjects(uncompressed, input, - @"didn't get the same thing back"); + NSData *uncompressed = [NSData gtm_dataByInflatingData:compressed error:&error]; + XCTAssertNotNil(uncompressed, @"fail to inflate"); + XCTAssertGreaterThan([uncompressed length], internalBufferSize, + @"should have been more then %d bytes", + (int)internalBufferSize); + + XCTAssertEqualObjects(uncompressed, input, + @"didn't get the same thing back"); + XCTAssertNil(error); + error = nil; } @end diff --git a/Foundation/GTMNSDictionary+CaseInsensitive.h b/Foundation/GTMNSDictionary+CaseInsensitive.h deleted file mode 100644 index 890af4b..0000000 --- a/Foundation/GTMNSDictionary+CaseInsensitive.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// GTMNSDictionary+CaseInsensitive.h -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> -#import "GTMDefines.h" - -/// Utility for building case-insensitive NSDictionary objects. -@interface NSDictionary (GTMNSDictionaryCaseInsensitiveAdditions) - -/// Initializes an NSDictionary with a case-insensitive comparison function -/// for NSString keys, while non-NSString keys are treated normally. -/// -/// The case for NSString keys is preserved, though duplicate keys (when -/// compared in a case-insensitive fashion) have one of their values dropped -/// arbitrarily. -/// -/// An example of use with HTTP headers in an NSHTTPURLResponse object: -/// -/// NSDictionary *headers = -/// [NSDictionary gtm_dictionaryWithDictionaryCaseInsensitive: -/// [response allHeaderFields]]; -/// NSString *contentType = [headers objectForKey:@"Content-Type"]; -- (id)gtm_initWithDictionaryCaseInsensitive:(NSDictionary *)dictionary - NS_RETURNS_RETAINED NS_CONSUMES_SELF; - -/// Returns a newly created and autoreleased NSDictionary object as above. -+ (id)gtm_dictionaryWithDictionaryCaseInsensitive:(NSDictionary *)dictionary; - -@end diff --git a/Foundation/GTMNSDictionary+CaseInsensitive.m b/Foundation/GTMNSDictionary+CaseInsensitive.m deleted file mode 100644 index 96494c2..0000000 --- a/Foundation/GTMNSDictionary+CaseInsensitive.m +++ /dev/null @@ -1,116 +0,0 @@ -// -// GTMNSDictionary+CaseInsensitive.m -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSDictionary+CaseInsensitive.h" -#import "GTMDefines.h" -#import <CoreFoundation/CoreFoundation.h> - -@interface NSMutableDictionary (GTMNSMutableDictionaryCaseInsensitiveAdditions) - -// Returns a mutable equivalent to GTMNSDictionaryCaseInsensitiveAdditions. -- (id)gtm_initWithDictionaryCaseInsensitive:(NSDictionary *)dictionary; - -@end - -static Boolean CaseInsensitiveEqualCallback(const void *a, const void *b) { - id idA = (id)a; - id idB = (id)b; - Boolean ret = FALSE; - if ([idA isKindOfClass:[NSString class]] && - [idB isKindOfClass:[NSString class]]) { - ret = ([idA compare:idB options:NSCaseInsensitiveSearch|NSLiteralSearch] - == NSOrderedSame); - } else { - ret = [idA isEqual:idB]; - } - return ret; -} - -static CFHashCode CaseInsensitiveHashCallback(const void *value) { - id idValue = (id)value; - CFHashCode ret = 0; - if ([idValue isKindOfClass:[NSString class]]) { - ret = [[idValue lowercaseString] hash]; - } else { - ret = [idValue hash]; - } - return ret; -} - -@implementation NSDictionary (GTMNSDictionaryCaseInsensitiveAdditions) - -- (id)gtm_initWithDictionaryCaseInsensitive:(NSDictionary *)dictionary { - [self release]; - self = nil; - - CFIndex count = 0; - void *keys = NULL; - void *values = NULL; - - if (dictionary) { - count = CFDictionaryGetCount((CFDictionaryRef)dictionary); - - if (count) { - keys = malloc(count * sizeof(void *)); - values = malloc(count * sizeof(void *)); - if (!keys || !values) { - free(keys); - free(values); - return self; - } - - CFDictionaryGetKeysAndValues((CFDictionaryRef)dictionary, keys, values); - } - } - - CFDictionaryKeyCallBacks keyCallbacks = kCFCopyStringDictionaryKeyCallBacks; - _GTMDevAssert(keyCallbacks.version == 0, - @"CFDictionaryKeyCallBacks structure updated"); - keyCallbacks.equal = CaseInsensitiveEqualCallback; - keyCallbacks.hash = CaseInsensitiveHashCallback; - - self = (id)CFDictionaryCreate(kCFAllocatorDefault, - keys, values, count, &keyCallbacks, - &kCFTypeDictionaryValueCallBacks); - - free(keys); - free(values); - - return self; -} - -+ (id)gtm_dictionaryWithDictionaryCaseInsensitive:(NSDictionary *)dictionary { - return [[[self alloc] - gtm_initWithDictionaryCaseInsensitive:dictionary] autorelease]; -} - -@end - -@implementation NSMutableDictionary (GTMNSMutableDictionaryCaseInsensitiveAdditions) - -- (id)gtm_initWithDictionaryCaseInsensitive:(NSDictionary *)dictionary { - if ((self = [super gtm_initWithDictionaryCaseInsensitive:dictionary])) { - id copy = (id)CFDictionaryCreateMutableCopy(kCFAllocatorDefault, 0, - (CFDictionaryRef)self); - [self release]; - self = copy; - } - return self; -} - -@end diff --git a/Foundation/GTMNSDictionary+CaseInsensitiveTest.m b/Foundation/GTMNSDictionary+CaseInsensitiveTest.m deleted file mode 100644 index 67584ff..0000000 --- a/Foundation/GTMNSDictionary+CaseInsensitiveTest.m +++ /dev/null @@ -1,119 +0,0 @@ -// -// GTMNSDictionary+CaseInsensitiveTest.m -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMNSDictionary+CaseInsensitive.h" - -@interface GTMNSDictionary_CaseInsensitiveTest : GTMTestCase -@end - -@implementation GTMNSDictionary_CaseInsensitiveTest - -- (void)testNSDictionaryCaseInsensitiveAdditions { - NSURL *objKey = [NSURL URLWithString:@"http://WWW.Google.COM/"]; - NSURL *lcObjKey = [NSURL URLWithString:[[objKey absoluteString] - lowercaseString]]; - - NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: - @"value", @"key", - @"value", @"KEY", - @"bar", @"FOO", - @"yes", objKey, - nil]; - - NSDictionary *ciDict = - [NSDictionary gtm_dictionaryWithDictionaryCaseInsensitive:dict]; - - STAssertNotNil(ciDict, @"gtm_dictionaryWithDictionaryCaseInsensitive failed"); - - STAssertTrue([ciDict count] == 3, - @"wrong count, multiple 'key' entries should be folded."); - - STAssertEqualStrings([ciDict objectForKey:@"foo"], @"bar", - @"case insensitive key lookup failed"); - - STAssertEqualStrings([ciDict objectForKey:@"kEy"], @"value", - @"case insensitive key lookup failed"); - - STAssertNotNil([ciDict objectForKey:objKey], - @"exact matches on non-NSString objects should still work."); - - STAssertNil([ciDict objectForKey:lcObjKey], - @"only NSString and subclasses are case-insensitive."); - - STAssertNotNil([NSDictionary gtm_dictionaryWithDictionaryCaseInsensitive: - [NSDictionary dictionary]], - @"empty dictionary should not return nil"); - - STAssertNotNil([NSDictionary gtm_dictionaryWithDictionaryCaseInsensitive: - nil], - @"nil dictionary should return empty dictionary"); - - STAssertNotNil([[[NSDictionary alloc] gtm_initWithDictionaryCaseInsensitive: - nil] autorelease], - @"nil dictionary should return empty dictionary"); -} - -- (void)testNSMutableDictionaryCaseInsensitiveAdditions { - NSURL *objKey = [NSURL URLWithString:@"http://WWW.Google.COM/"]; - NSURL *lcObjKey = [NSURL URLWithString:[[objKey absoluteString] - lowercaseString]]; - - NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: - @"value", @"key", - @"value", @"KEY", - @"bar", @"FOO", - @"yes", objKey, - nil]; - - NSMutableDictionary *ciDict = - [NSMutableDictionary gtm_dictionaryWithDictionaryCaseInsensitive:dict]; - - STAssertNotNil(ciDict, @"gtm_dictionaryWithDictionaryCaseInsensitive failed"); - - STAssertTrue([ciDict count] == 3, - @"wrong count, multiple 'key' entries should be folded."); - - STAssertEqualStrings([ciDict objectForKey:@"foo"], @"bar", - @"case insensitive key lookup failed"); - - STAssertEqualStrings([ciDict objectForKey:@"kEy"], @"value", - @"case insensitive key lookup failed"); - - STAssertNotNil([ciDict objectForKey:objKey], - @"exact matches on non-NSString objects should still work."); - - STAssertNil([ciDict objectForKey:lcObjKey], - @"only NSString and subclasses are case-insensitive."); - - NSObject *obj = [[[NSObject alloc] init] autorelease]; - [ciDict setObject:obj forKey:@"kEy"]; - STAssertEquals([ciDict objectForKey:@"key"], obj, - @"mutable dictionary value not overwritten"); - - STAssertNotNil( - [NSMutableDictionary gtm_dictionaryWithDictionaryCaseInsensitive: - [NSDictionary dictionary]], - @"empty dictionary should not return nil"); - - STAssertNotNil( - [NSMutableDictionary gtm_dictionaryWithDictionaryCaseInsensitive:nil], - @"nil dictionary should return empty dictionary"); -} - -@end diff --git a/Foundation/GTMNSDictionary+URLArguments.m b/Foundation/GTMNSDictionary+URLArguments.m index 5a7aa5f..e9fa766 100644 --- a/Foundation/GTMNSDictionary+URLArguments.m +++ b/Foundation/GTMNSDictionary+URLArguments.m @@ -38,7 +38,7 @@ GTM_METHOD_CHECK(NSString, gtm_stringByUnescapingFromURLArgument); NSString* component; // Use reverse order so that the first occurrence of a key replaces // those subsequent. - GTM_FOREACH_ENUMEREE(component, [components reverseObjectEnumerator]) { + for (component in [components reverseObjectEnumerator]) { if ([component length] == 0) continue; NSRange pos = [component rangeOfString:@"="]; @@ -65,7 +65,7 @@ GTM_METHOD_CHECK(NSString, gtm_stringByUnescapingFromURLArgument); - (NSString *)gtm_httpArgumentsString { NSMutableArray* arguments = [NSMutableArray arrayWithCapacity:[self count]]; NSString* key; - GTM_FOREACH_KEY(key, self) { + for (key in self) { [arguments addObject:[NSString stringWithFormat:@"%@=%@", [key gtm_stringByEscapingForURLArgument], [[[self objectForKey:key] description] gtm_stringByEscapingForURLArgument]]]; diff --git a/Foundation/GTMNSDictionary+URLArgumentsTest.m b/Foundation/GTMNSDictionary+URLArgumentsTest.m index 8ec9520..11ceb8a 100644 --- a/Foundation/GTMNSDictionary+URLArgumentsTest.m +++ b/Foundation/GTMNSDictionary+URLArgumentsTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -26,42 +26,42 @@ @implementation GTMNSDictionary_URLArgumentsTest - (void)testFromArgumentsString { - STAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@""], - [NSDictionary dictionary], - @"- empty arguments string should give an empty dictionary"); - STAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"a"], - [NSDictionary dictionaryWithObject:@"" forKey:@"a"], - @"- missing '=' should result in an empty string value"); - STAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"a="], - [NSDictionary dictionaryWithObject:@"" forKey:@"a"], - @"- no value"); - STAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"&a=1"], - [NSDictionary dictionaryWithObject:@"1" forKey:@"a"], - @"- empty segment should be skipped"); - STAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"abc=123"], - [NSDictionary dictionaryWithObject:@"123" forKey:@"abc"], - @"- simple one-pair dictionary should work"); - STAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"a=1&a=2&a=3"], - [NSDictionary dictionaryWithObject:@"1" forKey:@"a"], - @"- only first occurrence of a key is returned"); + XCTAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@""], + [NSDictionary dictionary], + @"- empty arguments string should give an empty dictionary"); + XCTAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"a"], + [NSDictionary dictionaryWithObject:@"" forKey:@"a"], + @"- missing '=' should result in an empty string value"); + XCTAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"a="], + [NSDictionary dictionaryWithObject:@"" forKey:@"a"], + @"- no value"); + XCTAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"&a=1"], + [NSDictionary dictionaryWithObject:@"1" forKey:@"a"], + @"- empty segment should be skipped"); + XCTAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"abc=123"], + [NSDictionary dictionaryWithObject:@"123" forKey:@"abc"], + @"- simple one-pair dictionary should work"); + XCTAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"a=1&a=2&a=3"], + [NSDictionary dictionaryWithObject:@"1" forKey:@"a"], + @"- only first occurrence of a key is returned"); NSString* complex = @"a%2Bb=specialkey&complex=1%2B1%21%3D3%20%26%202%2A6%2F3%3D4&c"; NSDictionary* result = [NSDictionary dictionaryWithObjectsAndKeys: @"1+1!=3 & 2*6/3=4", @"complex", @"specialkey", @"a+b", @"", @"c", nil]; - STAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:complex], - result, - @"- keys and values should be unescaped correctly"); - STAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"a=%FC"], - [NSDictionary dictionaryWithObject:@"" forKey:@"a"], - @"- invalid UTF8 characters result in an empty value, not a crash"); + XCTAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:complex], + result, + @"- keys and values should be unescaped correctly"); + XCTAssertEqualObjects([NSDictionary gtm_dictionaryWithHttpArgumentsString:@"a=%FC"], + [NSDictionary dictionaryWithObject:@"" forKey:@"a"], + @"- invalid UTF8 characters result in an empty value, not a crash"); } - (void)testArgumentsString { - STAssertEqualObjects([[NSDictionary dictionary] gtm_httpArgumentsString], @"", - @"- empty dictionary should give an empty string"); - STAssertEqualObjects([[NSDictionary dictionaryWithObject:@"123" forKey:@"abc"] gtm_httpArgumentsString], + XCTAssertEqualObjects([[NSDictionary dictionary] gtm_httpArgumentsString], @"", + @"- empty dictionary should give an empty string"); + XCTAssertEqualObjects([[NSDictionary dictionaryWithObject:@"123" forKey:@"abc"] gtm_httpArgumentsString], @"abc=123", @"- simple one-pair dictionary should work"); NSDictionary* arguments = [NSDictionary dictionaryWithObjectsAndKeys: @@ -72,15 +72,15 @@ // check for individual pieces since order is not guaranteed NSString* component1 = @"a%2Bb=specialkey"; NSString* component2 = @"complex=1%2B1%21%3D3%20%26%202%2A6%2F3%3D4"; - STAssertNotEquals([argumentString rangeOfString:component1].location, (NSUInteger)NSNotFound, + XCTAssertNotEqual([argumentString rangeOfString:component1].location, (NSUInteger)NSNotFound, @"- '%@' not found in '%@'", component1, argumentString); - STAssertNotEquals([argumentString rangeOfString:component2].location, (NSUInteger)NSNotFound, + XCTAssertNotEqual([argumentString rangeOfString:component2].location, (NSUInteger)NSNotFound, @"- '%@' not found in '%@'", component2, argumentString); - STAssertNotEquals([argumentString rangeOfString:@"&"].location, (NSUInteger)NSNotFound, + XCTAssertNotEqual([argumentString rangeOfString:@"&"].location, (NSUInteger)NSNotFound, @"- special characters should be escaped"); - STAssertNotEquals([argumentString characterAtIndex:0], (unichar)'&', + XCTAssertNotEqual([argumentString characterAtIndex:0], (unichar)'&', @"- there should be no & at the beginning of the string"); - STAssertNotEquals([argumentString characterAtIndex:([argumentString length] - 1)], (unichar)'&', + XCTAssertNotEqual([argumentString characterAtIndex:([argumentString length] - 1)], (unichar)'&', @"- there should be no & at the end of the string"); } diff --git a/Foundation/GTMNSEnumerator+Filter.h b/Foundation/GTMNSEnumerator+Filter.h deleted file mode 100644 index 8e4a6b7..0000000 --- a/Foundation/GTMNSEnumerator+Filter.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// GTMNSEnumerator+Filter.h -// -// Copyright 2007-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> - -// A generic category for methods that allow us to filter enumeratable -// containers, inspired by C++ Standard Library's use of iterators. -// Like in C++, these assume the underlying container is not modified during -// the lifetime of the iterator. -// -@interface NSEnumerator (GTMEnumeratorFilterAdditions) - -// Performs -[element predicate:argument] on each object in self. -// Returns an enumerator where -[element predicate:argument] returned YES. -// Predicate must be of form -(BOOL)predicate:(id)argument. -- (NSEnumerator *)gtm_filteredEnumeratorByMakingEachObjectPerformSelector:(SEL)predicate - withObject:(id)argument; - -// Performs -[element selector:argument] on each object in self. -// Returns an enumerator of the return values of -[element selector:argument]. -// Selector must be of form -(id)selector:(id)argument. -- (NSEnumerator *)gtm_enumeratorByMakingEachObjectPerformSelector:(SEL)selector - withObject:(id)argument; - -// Performs -[target predicate:element] on each object in self. -// Returns an enumerator where -[target predicate:element] returned YES. -// Predicate must be of form -(BOOL)predicate:(id)element. -- (NSEnumerator *)gtm_filteredEnumeratorByTarget:(id)target - performOnEachSelector:(SEL)predicate; - -// Performs -[target predicate:element withObject:object] on each object in self. -// Returns an enumerator where -[target predicate:element withObject:object] -// returned YES. -// Predicate must be of form -(BOOL)predicate:(id)element withObject:(id)object. -- (NSEnumerator *)gtm_filteredEnumeratorByTarget:(id)target - performOnEachSelector:(SEL)predicate - withObject:(id)object; - -// Performs -[target selector:element] on each object in self. -// Returns an enumerator of the return values of -[target selector:element]. -// Selector must be of form -(id)selector:(id)element. -- (NSEnumerator *)gtm_enumeratorByTarget:(id)target - performOnEachSelector:(SEL)selector; - -// Performs -[target selector:element withObject:object] on each object in self. -// Returns an enumerator of the return values of -// -[target selector:element withObject:object]. -// Selector must be of form -(id)selector:(id)element withObject:(id)object. -- (NSEnumerator *)gtm_enumeratorByTarget:(id)target - performOnEachSelector:(SEL)selector - withObject:(id)object; - -@end - diff --git a/Foundation/GTMNSEnumerator+Filter.m b/Foundation/GTMNSEnumerator+Filter.m deleted file mode 100644 index cc1cb41..0000000 --- a/Foundation/GTMNSEnumerator+Filter.m +++ /dev/null @@ -1,221 +0,0 @@ -// -// GTMNSEnumerator+Filter.m -// -// Copyright 2007-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSEnumerator+Filter.h" -#import "GTMDebugSelectorValidation.h" -#import "GTMDefines.h" -#if GTM_IPHONE_SDK -#import <objc/message.h> -#import <objc/runtime.h> -#else -#import <objc/objc-runtime.h> -#endif - -// a private subclass of NSEnumerator that does all the work. -// public interface just returns one of these. -// This top level class contains all the additional boilerplate. Specific -// behavior is in the subclasses. -@interface GTMEnumeratorPrivateBase : NSEnumerator { - @protected - NSEnumerator *base_; - SEL operation_; // either a predicate or a transform depending on context. - id target_; // may be nil - id object_; // may be nil -} -@end - -@interface GTMEnumeratorPrivateBase (SubclassesMustProvide) -- (BOOL)filterObject:(id)obj returning:(id *)resultp; -@end - -@implementation GTMEnumeratorPrivateBase -- (id)initWithBase:(NSEnumerator *)base - sel:(SEL)filter - target:(id)optionalTarget - object:(id)optionalOther { - self = [super init]; - if (self) { - - // someone would have to subclass or directly create an object of this - // class, and this class is private to this impl. - _GTMDevAssert(base, @"can't initWithBase: a nil base enumerator"); - base_ = [base retain]; - operation_ = filter; - target_ = [optionalTarget retain]; - object_ = [optionalOther retain]; - } - return self; -} - -// we don't provide an init because this base class is private to this -// impl, and no one would be able to create it (if they do, they get whatever -// they happens...). - -- (void)dealloc { - [base_ release]; - [target_ release]; - [object_ release]; - [super dealloc]; -} - -- (id)nextObject { - for (id obj = [base_ nextObject]; obj; obj = [base_ nextObject]) { - id result = nil; - if ([self filterObject:obj returning:&result]) { - return result; - } - } - return nil; -} -@end - -// a transformer, for each item in the enumerator, returns a f(item). -@interface GTMEnumeratorTransformer : GTMEnumeratorPrivateBase -@end -@implementation GTMEnumeratorTransformer -- (BOOL)filterObject:(id)obj returning:(id *)resultp { - *resultp = [obj performSelector:operation_ withObject:object_]; - return nil != *resultp; -} -@end - -// a transformer, for each item in the enumerator, returns a f(item). -// a target transformer swaps the target and the argument. -@interface GTMEnumeratorTargetTransformer : GTMEnumeratorPrivateBase -@end -@implementation GTMEnumeratorTargetTransformer -- (BOOL)filterObject:(id)obj returning:(id *)resultp { - *resultp = [target_ performSelector:operation_ - withObject:obj - withObject:object_]; - return nil != *resultp; -} -@end - -// a filter, for each item in the enumerator, if(f(item)) { returns item. } -@interface GTMEnumeratorFilter : GTMEnumeratorPrivateBase -@end -@implementation GTMEnumeratorFilter -// We must take care here, since Intel leaves junk in high bytes of return -// register for predicates that return BOOL. -// For details see: -// http://developer.apple.com/legacy/mac/library/documentation/MacOSX/Conceptual/universal_binary/universal_binary_tips/universal_binary_tips.html#//apple_ref/doc/uid/TP40002217-CH239-280661 -// and -// http://www.red-sweater.com/blog/320/abusing-objective-c-with-class#comment-83187 -- (BOOL)filterObject:(id)obj returning:(id *)resultp { - *resultp = obj; - return ((BOOL (*)(id, SEL, id))objc_msgSend)(obj, operation_, object_); -} -@end - -// a target filter, for each item in the enumerator, if(f(item)) { returns item. } -// a target transformer swaps the target and the argument. -@interface GTMEnumeratorTargetFilter : GTMEnumeratorPrivateBase -@end -@implementation GTMEnumeratorTargetFilter -// We must take care here, since Intel leaves junk in high bytes of return -// register for predicates that return BOOL. -// For details see: -// http://developer.apple.com/legacy/mac/library/documentation/MacOSX/Conceptual/universal_binary/universal_binary_tips/universal_binary_tips.html#//apple_ref/doc/uid/TP40002217-CH239-280661 -// and -// http://www.red-sweater.com/blog/320/abusing-objective-c-with-class#comment-83187 -- (BOOL)filterObject:(id)obj returning:(id *)resultp { - *resultp = obj; - return ((BOOL (*)(id, SEL, id, id))objc_msgSend)(target_, operation_, obj, object_); -} -@end - -@implementation NSEnumerator (GTMEnumeratorFilterAdditions) - -- (NSEnumerator *)gtm_filteredEnumeratorByMakingEachObjectPerformSelector:(SEL)selector - withObject:(id)argument { - return [[[GTMEnumeratorFilter alloc] initWithBase:self - sel:selector - target:nil - object:argument] autorelease]; -} - -- (NSEnumerator *)gtm_enumeratorByMakingEachObjectPerformSelector:(SEL)selector - withObject:(id)argument { - return [[[GTMEnumeratorTransformer alloc] initWithBase:self - sel:selector - target:nil - object:argument] autorelease]; -} - - -- (NSEnumerator *)gtm_filteredEnumeratorByTarget:(id)target - performOnEachSelector:(SEL)predicate { - // make sure the object impls this selector taking an object as an arg. - GTMAssertSelectorNilOrImplementedWithReturnTypeAndArguments(target, predicate, - @encode(BOOL), - @encode(id), - NULL); - return [[[GTMEnumeratorTargetFilter alloc] initWithBase:self - sel:predicate - target:target - object:nil] autorelease]; -} - -- (NSEnumerator *)gtm_filteredEnumeratorByTarget:(id)target - performOnEachSelector:(SEL)predicate - withObject:(id)object { - // make sure the object impls this selector taking an object as an arg. - GTMAssertSelectorNilOrImplementedWithReturnTypeAndArguments(target, predicate, - @encode(BOOL), - @encode(id), - @encode(id), - NULL); - return [[[GTMEnumeratorTargetFilter alloc] initWithBase:self - sel:predicate - target:target - object:object] autorelease]; -} - -- (NSEnumerator *)gtm_enumeratorByTarget:(id)target - performOnEachSelector:(SEL)selector { - // make sure the object impls this selector taking an object as an arg. - GTMAssertSelectorNilOrImplementedWithReturnTypeAndArguments(target, selector, - @encode(id), - @encode(id), - NULL); - return [[[GTMEnumeratorTargetTransformer alloc] initWithBase:self - sel:selector - target:target - object:nil] - autorelease]; -} - -- (NSEnumerator *)gtm_enumeratorByTarget:(id)target - performOnEachSelector:(SEL)selector - withObject:(id)object { - // make sure the object impls this selector taking an object as an arg. - GTMAssertSelectorNilOrImplementedWithReturnTypeAndArguments(target, selector, - @encode(id), - @encode(id), - @encode(id), - NULL); - return [[[GTMEnumeratorTargetTransformer alloc] initWithBase:self - sel:selector - target:target - object:object] - autorelease]; -} - -@end - diff --git a/Foundation/GTMNSEnumerator+FilterTest.m b/Foundation/GTMNSEnumerator+FilterTest.m deleted file mode 100644 index 969a5a5..0000000 --- a/Foundation/GTMNSEnumerator+FilterTest.m +++ /dev/null @@ -1,208 +0,0 @@ -// -// GTMNSEnumerator+FilterTest.m -// -// Copyright 2007-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMNSEnumerator+Filter.h" - -@interface GTMNSEnumerator_FilterTest : GTMTestCase -@end - -@implementation GTMNSEnumerator_FilterTest - -- (void)testEnumeratorByMakingEachObjectPerformSelector { - // test w/ a set of strings - NSSet *numbers = [NSSet setWithObjects: @"1", @"2", @"3", nil]; - NSEnumerator *e = [[numbers objectEnumerator] - gtm_enumeratorByMakingEachObjectPerformSelector:@selector(stringByAppendingString:) - withObject:@" "]; - NSMutableSet *trailingSpaces = [NSMutableSet set]; - id obj; - while (nil != (obj = [e nextObject])) { - [trailingSpaces addObject:obj]; - } - NSSet *trailingSpacesGood = [NSSet setWithObjects: @"1 ", @"2 ", @"3 ", nil]; - STAssertEqualObjects(trailingSpaces, trailingSpacesGood, @""); - - // test an empty set - NSSet *empty = [NSSet set]; - e = [[empty objectEnumerator] - gtm_enumeratorByMakingEachObjectPerformSelector:@selector(stringByAppendingString:) - withObject:@" "]; - STAssertNil([e nextObject], - @"shouldn't have gotten anything from first advance of " - @"enumerator"); -} - -- (void)testFilteredEnumeratorByMakingEachObjectPerformSelector { - // test with a dict of strings - NSDictionary *testDict = [NSDictionary dictionaryWithObjectsAndKeys: - @"foo", @"1", - @"bar", @"2", - @"foobar", @"3", - nil]; - // test those that have prefixes - NSEnumerator *e = [[testDict objectEnumerator] - gtm_filteredEnumeratorByMakingEachObjectPerformSelector:@selector(hasPrefix:) - withObject:@"foo"]; - // since the dictionary iterates in any order, compare as sets - NSSet *filteredValues = [NSSet setWithArray:[e allObjects]]; - NSSet *expectedValues = [NSSet setWithObjects:@"foo", @"foobar", nil]; - STAssertEqualObjects(filteredValues, expectedValues, @""); - - // test an empty set - NSSet *empty = [NSSet set]; - e = [[empty objectEnumerator] - gtm_filteredEnumeratorByMakingEachObjectPerformSelector:@selector(hasPrefix:) - withObject:@"foo"]; - STAssertNil([e nextObject], - @"shouldn't have gotten anything from first advance of " - @"enumerator"); - - // test an set that will filter out - NSSet *filterAway = [NSSet setWithObjects:@"bar", @"baz", nil]; - e = [[filterAway objectEnumerator] - gtm_filteredEnumeratorByMakingEachObjectPerformSelector:@selector(hasPrefix:) - withObject:@"foo"]; - STAssertNil([e nextObject], - @"shouldn't have gotten anything from first advance of " - @"enumerator"); -} - -- (void)testEnumeratorByTargetPerformOnEachSelector { - // test w/ a set of strings - NSSet *numbers = [NSSet setWithObjects: @"1", @"2", @"3", nil]; - NSString *target = @"foo"; - NSEnumerator *e = [[numbers objectEnumerator] - gtm_enumeratorByTarget:target - performOnEachSelector:@selector(stringByAppendingString:)]; - // since the set iterates in any order, compare as sets - NSSet *collectedValues = [NSSet setWithArray:[e allObjects]]; - NSSet *expectedValues = [NSSet setWithObjects:@"foo1", @"foo2", @"foo3", nil]; - STAssertEqualObjects(collectedValues, expectedValues, @""); - - // test an empty set - NSSet *empty = [NSSet set]; - e = [[empty objectEnumerator] - gtm_enumeratorByTarget:target - performOnEachSelector:@selector(stringByAppendingString:)]; - STAssertNil([e nextObject], - @"shouldn't have gotten anything from first advance of " - @"enumerator"); -} - -- (id)prependString:(NSString*)pre toString:(NSString *)post { - return [pre stringByAppendingString:post]; -} - -- (void)testEnumeratorByTargetPerformOnEachSelectorWithObject { - // test w/ a set of strings - NSSet *numbers = [NSSet setWithObjects: @"1", @"2", @"3", nil]; - NSEnumerator *e = [[numbers objectEnumerator] - gtm_enumeratorByTarget:self - performOnEachSelector:@selector(prependString:toString:) - withObject:@"bar"]; - // since the set iterates in any order, compare as sets - NSSet *collectedValues = [NSSet setWithArray:[e allObjects]]; - NSSet *expectedValues = [NSSet setWithObjects:@"1bar", - @"2bar", - @"3bar", - nil]; - STAssertEqualObjects(collectedValues, expectedValues, @""); - - // test an empty set - NSSet *empty = [NSSet set]; - e = [[empty objectEnumerator] - gtm_enumeratorByTarget:self - performOnEachSelector:@selector(prependString:toString:) - withObject:@"bar"]; - STAssertNil([e nextObject], - @"shouldn't have gotten anything from first advance of " - @"enumerator"); -} - - -- (void)testFilteredEnumeratorByTargetPerformOnEachSelector { - // test w/ a set of strings - NSSet *numbers = [NSSet setWithObjects:@"1", @"2", @"3", @"4", nil]; - NSSet *target = [NSSet setWithObjects:@"2", @"4", @"6", nil]; - NSEnumerator *e = [[numbers objectEnumerator] - gtm_filteredEnumeratorByTarget:target - performOnEachSelector:@selector(containsObject:)]; - // since the set iterates in any order, compare as sets - NSSet *filteredValues = [NSSet setWithArray:[e allObjects]]; - NSSet *expectedValues = [NSSet setWithObjects:@"2", @"4", nil]; - STAssertEqualObjects(filteredValues, expectedValues, @""); - - // test an empty set - NSSet *empty = [NSSet set]; - e = [[empty objectEnumerator] - gtm_filteredEnumeratorByTarget:target - performOnEachSelector:@selector(containsObject:)]; - STAssertNil([e nextObject], - @"shouldn't have gotten anything from first advance of " - @"enumerator"); - - // test a set that will filter out - NSSet *filterAway = [NSSet setWithObjects:@"bar", @"baz", nil]; - e = [[filterAway objectEnumerator] - gtm_filteredEnumeratorByTarget:target - performOnEachSelector:@selector(containsObject:)]; - STAssertNil([e nextObject], - @"shouldn't have gotten anything from first advance of " - @"enumerator"); -} - -- (BOOL)is:(id)a equalTo:(id)b { - return [a isEqual:b]; -} - -- (void)testFilteredEnumeratorByTargetPerformOnEachSelectorWithObject { - // test w/ a set of strings - NSSet *numbers = [NSSet setWithObjects:@"1", @"2", @"3", @"4", nil]; - NSEnumerator *e = [[numbers objectEnumerator] - gtm_filteredEnumeratorByTarget:self - performOnEachSelector:@selector(is:equalTo:) - withObject:@"2"]; - // since the set iterates in any order, compare as sets - NSSet *filteredValues = [NSSet setWithArray:[e allObjects]]; - NSSet *expectedValues = [NSSet setWithObjects:@"2", nil]; - STAssertEqualObjects(filteredValues, expectedValues, @""); - - // test an empty set - NSSet *empty = [NSSet set]; - e = [[empty objectEnumerator] - gtm_filteredEnumeratorByTarget:self - performOnEachSelector:@selector(is:equalTo:) - withObject:@"2"]; - STAssertNil([e nextObject], - @"shouldn't have gotten anything from first advance of " - @"enumerator"); - - // test a set that will filter out - NSSet *filterAway = [NSSet setWithObjects:@"bar", @"baz", nil]; - e = [[filterAway objectEnumerator] - gtm_filteredEnumeratorByTarget:self - performOnEachSelector:@selector(is:equalTo:) - withObject:@"2"]; - STAssertNil([e nextObject], - @"shouldn't have gotten anything from first advance of " - @"enumerator"); -} - - -@end diff --git a/Foundation/GTMNSFileHandle+UniqueNameTest.m b/Foundation/GTMNSFileHandle+UniqueNameTest.m index 45cd8c7..0f0dc49 100644 --- a/Foundation/GTMNSFileHandle+UniqueNameTest.m +++ b/Foundation/GTMNSFileHandle+UniqueNameTest.m @@ -28,69 +28,63 @@ NSFileHandle *handle = [NSFileHandle gtm_fileHandleWithUniqueNameBasedOn:nil finalPath:nil]; - STAssertNil(handle, nil); + XCTAssertNil(handle); // Try and create a file where we shouldn't be able to. NSString *path = nil; handle = [NSFileHandle gtm_fileHandleWithUniqueNameBasedOn:@"/System/HappyXXX.txt" finalPath:&path]; - STAssertNil(handle, nil); - STAssertNil(path, nil); + XCTAssertNil(handle); + XCTAssertNil(path); NSFileManager *fm = [NSFileManager defaultManager]; NSString *tempDir = [fm gtm_createTemporaryDirectoryBasedOn:@"GTMNSFileHandle_UniqueNameTestXXXXXX"]; - STAssertNotNil(tempDir, nil); + XCTAssertNotNil(tempDir); BOOL isDirectory = NO; - STAssertTrue([fm fileExistsAtPath:tempDir isDirectory:&isDirectory] - && isDirectory, nil); + XCTAssertTrue([fm fileExistsAtPath:tempDir isDirectory:&isDirectory] && isDirectory); // Test with extension handle = [NSFileHandle gtm_fileHandleWithUniqueNameBasedOn:@"HappyXXX.txt" inDirectory:tempDir finalPath:&path]; - STAssertNotNil(handle, nil); - STAssertEqualObjects([path pathExtension], @"txt", nil); - STAssertTrue([fm fileExistsAtPath:path], nil); + XCTAssertNotNil(handle); + XCTAssertEqualObjects([path pathExtension], @"txt"); + XCTAssertTrue([fm fileExistsAtPath:path]); // Test without extension handle = [NSFileHandle gtm_fileHandleWithUniqueNameBasedOn:@"HappyXXX" inDirectory:tempDir finalPath:&path]; - STAssertNotNil(handle, nil); - STAssertEqualObjects([path pathExtension], @"", nil); - STAssertTrue([fm fileExistsAtPath:path], nil); + XCTAssertNotNil(handle); + XCTAssertEqualObjects([path pathExtension], @""); + XCTAssertTrue([fm fileExistsAtPath:path]); // Test passing in same name twice NSString *fullPath = [tempDir stringByAppendingPathComponent:@"HappyXXX"]; NSString *newPath = nil; handle = [NSFileHandle gtm_fileHandleWithUniqueNameBasedOn:fullPath finalPath:&newPath]; - STAssertNotNil(handle, nil); - STAssertNotNil(newPath, nil); - STAssertNotEqualObjects(path, newPath, nil); - STAssertTrue([fm fileExistsAtPath:newPath], nil); + XCTAssertNotNil(handle); + XCTAssertNotNil(newPath); + XCTAssertNotEqualObjects(path, newPath); + XCTAssertTrue([fm fileExistsAtPath:newPath]); // Test passing in same name twice with no template fullPath = [tempDir stringByAppendingPathComponent:@"Sad"]; newPath = nil; handle = [NSFileHandle gtm_fileHandleWithUniqueNameBasedOn:fullPath finalPath:&newPath]; - STAssertNotNil(handle, nil); - STAssertNotNil(newPath, nil); + XCTAssertNotNil(handle); + XCTAssertNotNil(newPath); newPath = nil; handle = [NSFileHandle gtm_fileHandleWithUniqueNameBasedOn:fullPath finalPath:&newPath]; - STAssertNil(handle, nil); - STAssertNil(newPath, nil); + XCTAssertNil(handle); + XCTAssertNil(newPath); -#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - [fm removeFileAtPath:tempDir handler:nil]; -#else // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 [fm removeItemAtPath:tempDir error:nil]; -#endif - } - (void)testFileHandleWithUniqueNameBasedOnInDirectorySearchMaskFinalPath { @@ -101,21 +95,17 @@ inDirectory:NSCachesDirectory domainMask:NSUserDomainMask finalPath:&path]; - STAssertNil(handle, nil); - STAssertNil(path, nil); + XCTAssertNil(handle); + XCTAssertNil(path); handle = [NSFileHandle gtm_fileHandleWithUniqueNameBasedOn:@"HappyXXX.txt" inDirectory:NSCachesDirectory domainMask:NSUserDomainMask finalPath:&path]; - STAssertNotNil(handle, nil); - STAssertNotNil(path, nil); - STAssertTrue([fm fileExistsAtPath:path], nil); -#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - [fm removeFileAtPath:path handler:nil]; -#else // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 + XCTAssertNotNil(handle); + XCTAssertNotNil(path); + XCTAssertTrue([fm fileExistsAtPath:path]); [fm removeItemAtPath:path error:nil]; -#endif } @end @@ -129,7 +119,7 @@ NSFileManager *fm = [NSFileManager defaultManager]; NSString *path = [fm gtm_createDirectoryWithUniqueNameBasedOn:@"/System/HappyXXX.txt"]; - STAssertNil(path, nil); + XCTAssertNil(path); } - (void)testCreateDirectoryWithUniqueNameBasedOnInDirectorySearchMask { @@ -137,20 +127,16 @@ NSString *path = [fm gtm_createDirectoryWithUniqueNameBasedOn:nil inDirectory:NSCachesDirectory domainMask:NSUserDomainMask]; - STAssertNil(path, nil); + XCTAssertNil(path); path = [fm gtm_createDirectoryWithUniqueNameBasedOn:@"HappyXXX.txt" inDirectory:NSCachesDirectory domainMask:NSUserDomainMask]; - STAssertNotNil(path, nil); + XCTAssertNotNil(path); BOOL isDirectory = NO; - STAssertTrue([fm fileExistsAtPath:path isDirectory:&isDirectory] - && isDirectory, nil); -#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - [fm removeFileAtPath:path handler:nil]; -#else // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - [fm removeItemAtPath:path error:nil]; -#endif + XCTAssertTrue([fm fileExistsAtPath:path isDirectory:&isDirectory] && isDirectory); + NSError *error; + XCTAssertTrue([fm removeItemAtPath:path error:&error], "%@", error); } @end diff --git a/Foundation/GTMNSFileManager+CarbonTest.m b/Foundation/GTMNSFileManager+CarbonTest.m index 95f8814..f42ece4 100644 --- a/Foundation/GTMNSFileManager+CarbonTest.m +++ b/Foundation/GTMNSFileManager+CarbonTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -18,62 +18,56 @@ #import "GTMSenTestCase.h" #import "GTMNSFileManager+Carbon.h" -#import "GTMUnitTestDevLog.h" #import <CoreServices/CoreServices.h> @interface GTMNSFileManager_CarbonTest : GTMTestCase @end - + @implementation GTMNSFileManager_CarbonTest - (void)testAliasPathFSRefConversion { NSString *path = NSHomeDirectory(); - STAssertNotNil(path, nil); + XCTAssertNotNil(path); NSFileManager *fileManager = [NSFileManager defaultManager]; FSRef *fsRef = [fileManager gtm_FSRefForPath:path]; - STAssertNotNULL(fsRef, nil); + XCTAssertNotNULL(fsRef); AliasHandle alias; - STAssertNoErr(FSNewAlias(nil, fsRef, &alias), nil); - STAssertNotNULL(alias, nil); - NSData *aliasData = [NSData dataWithBytes:*alias + XCTAssertNoErr(FSNewAlias(nil, fsRef, &alias)); + XCTAssertNotNULL(alias); + NSData *aliasData = [NSData dataWithBytes:*alias length:GetAliasSize(alias)]; - STAssertNotNil(aliasData, nil); + XCTAssertNotNil(aliasData); NSString *path2 = [fileManager gtm_pathFromAliasData:aliasData]; - STAssertEqualObjects(path, path2, nil); + XCTAssertEqualObjects(path, path2); path2 = [fileManager gtm_pathFromAliasData:aliasData resolve:YES withUI:NO]; - STAssertEqualObjects(path, path2, nil); - + XCTAssertEqualObjects(path, path2); + path2 = [fileManager gtm_pathFromAliasData:aliasData resolve:NO withUI:NO]; - STAssertEqualObjects(path, path2, nil); + XCTAssertEqualObjects(path, path2); NSData *aliasData2 = [fileManager gtm_aliasDataForPath:path2]; - STAssertNotNil(aliasData2, nil); + XCTAssertNotNil(aliasData2); NSString *path3 = [fileManager gtm_pathFromAliasData:aliasData2]; - STAssertEqualObjects(path2, path3, nil); + XCTAssertEqualObjects(path2, path3); NSString *path4 = [fileManager gtm_pathFromFSRef:fsRef]; - STAssertEqualObjects(path, path4, nil); - + XCTAssertEqualObjects(path, path4); + // Failure cases - [GTMUnitTestDevLogDebug expectPattern:@"DebugAssert: " - @"GoogleToolboxForMac: FSPathMakeRef.*"]; - STAssertNULL([fileManager gtm_FSRefForPath:@"/ptah/taht/dosent/esixt/"], - nil); + XCTAssertNULL([fileManager gtm_FSRefForPath:@"/ptah/taht/dosent/esixt/"]); + + XCTAssertNULL([fileManager gtm_FSRefForPath:@""]); + XCTAssertNULL([fileManager gtm_FSRefForPath:nil]); + XCTAssertNil([fileManager gtm_pathFromFSRef:nil]); + XCTAssertNil([fileManager gtm_pathFromAliasData:nil]); + XCTAssertNil([fileManager gtm_pathFromAliasData:[NSData data]]); - STAssertNULL([fileManager gtm_FSRefForPath:@""], nil); - STAssertNULL([fileManager gtm_FSRefForPath:nil], nil); - STAssertNil([fileManager gtm_pathFromFSRef:nil], nil); - STAssertNil([fileManager gtm_pathFromAliasData:nil], nil); - STAssertNil([fileManager gtm_pathFromAliasData:[NSData data]], nil); - - [GTMUnitTestDevLogDebug expectPattern:@"DebugAssert: " - @"GoogleToolboxForMac: FSPathMakeRef.*"]; - STAssertNil([fileManager gtm_aliasDataForPath:@"/ptah/taht/dosent/esixt/"], nil); - STAssertNil([fileManager gtm_aliasDataForPath:@""], nil); - STAssertNil([fileManager gtm_aliasDataForPath:nil], nil); + XCTAssertNil([fileManager gtm_aliasDataForPath:@"/ptah/taht/dosent/esixt/"]); + XCTAssertNil([fileManager gtm_aliasDataForPath:@""]); + XCTAssertNil([fileManager gtm_aliasDataForPath:nil]); } @end diff --git a/Foundation/GTMNSFileManager+Path.h b/Foundation/GTMNSFileManager+Path.h index 80977b3..eea55df 100644 --- a/Foundation/GTMNSFileManager+Path.h +++ b/Foundation/GTMNSFileManager+Path.h @@ -22,33 +22,6 @@ /// A few useful methods for dealing with paths. @interface NSFileManager (GMFileManagerPathAdditions) -#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - -/// For the Unix-y at heart, this is "mkdir -p". It tries to create -/// the directory specified by |path|, and any intervening directories that -/// are needed. Each directory that is created is created with |attributes| -/// (see other NSFileManager doco for the details on |attributes|). -/// -/// If you are building for 10.5 or later, you should just use the new api: -/// createDirectoryAtPath:withIntermediateDirectories:attributes:error: -/// -/// Also if you need more control over the creation of paths and their -/// attributes, look into using GTMPath. -/// -/// Args: -/// path - the path of the directory to create. -/// attributes - these are defined in the "Constants" section of Apple's -/// NSFileManager doco -/// -/// Returns: -/// YES if |path| exists or was able to be created successfully -/// NO otherwise -/// -- (BOOL)gtm_createFullPathToDirectory:(NSString *)path - attributes:(NSDictionary *)attributes; - -#endif // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - /// Return an the paths for all resources in |directoryPath| that have the /// |extension| file extension. /// diff --git a/Foundation/GTMNSFileManager+Path.m b/Foundation/GTMNSFileManager+Path.m index c29697b..165cee1 100644 --- a/Foundation/GTMNSFileManager+Path.m +++ b/Foundation/GTMNSFileManager+Path.m @@ -21,39 +21,6 @@ @implementation NSFileManager (GMFileManagerPathAdditions) -#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - -- (BOOL)gtm_createFullPathToDirectory:(NSString *)path - attributes:(NSDictionary *)attributes { - if (!path) return NO; - - BOOL isDir; - BOOL exists = [self fileExistsAtPath:path isDirectory:&isDir]; - - // Quick check for the case where we have nothing to do. - if (exists && isDir) - return YES; - - NSString *actualPath = @"/"; - NSString *directory; - - GTM_FOREACH_OBJECT(directory, [path pathComponents]) { - actualPath = [actualPath stringByAppendingPathComponent:directory]; - - if ([self fileExistsAtPath:actualPath isDirectory:&isDir] && isDir) { - continue; - } else if ([self createDirectoryAtPath:actualPath attributes:attributes]) { - continue; - } else { - return NO; - } - } - - return YES; -} - -#endif // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - - (NSArray *)gtm_filePathsWithExtension:(NSString *)extension inDirectory:(NSString *)directoryPath { NSArray *extensions = nil; @@ -73,12 +40,9 @@ } // |basenames| will contain only the matching file names, not their full paths. -#if GTM_IPHONE_SDK || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) NSArray *basenames = [self contentsOfDirectoryAtPath:directoryPath error:nil]; -#else - NSArray *basenames = [self directoryContentsAtPath:directoryPath]; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 + // Check if dir doesn't exist or couldn't be opened. if (!basenames) { @@ -94,7 +58,7 @@ NSString *basename; // Convert all the |basenames| to full paths. - GTM_FOREACH_OBJECT(basename, basenames) { + for (basename in basenames) { NSString *fullPath = [directoryPath stringByAppendingPathComponent:basename]; [paths addObject:fullPath]; } diff --git a/Foundation/GTMNSFileManager+PathTest.m b/Foundation/GTMNSFileManager+PathTest.m index 749c151..a0f61fb 100644 --- a/Foundation/GTMNSFileManager+PathTest.m +++ b/Foundation/GTMNSFileManager+PathTest.m @@ -39,53 +39,17 @@ if (baseDir_) { // clean up our directory NSFileManager *fm = [NSFileManager defaultManager]; -#if GTM_IPHONE_SDK || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) NSError *error = nil; [fm removeItemAtPath:baseDir_ error:&error]; - STAssertNil(error, - @"Unable to delete %@: %@", baseDir_, error); -#else - [fm removeFileAtPath:baseDir_ handler:nil]; -#endif + XCTAssertNil(error, @"Unable to delete %@: %@", baseDir_, error); [baseDir_ release]; baseDir_ = nil; } } -#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - -- (void)testCreateFullPathToDirectoryAttributes { - STAssertNotNil(baseDir_, @"setUp failed"); - - NSString *testPath = - [baseDir_ stringByAppendingPathComponent:@"/foo/bar/baz"]; - STAssertNotNil(testPath, nil); - NSFileManager *fm = [NSFileManager defaultManager]; - - STAssertFalse([fm fileExistsAtPath:testPath], - @"You must delete '%@' before running this test", testPath); - - STAssertFalse([fm gtm_createFullPathToDirectory:nil attributes:nil], - @"didn't fail on nil input"); - - STAssertTrue([fm gtm_createFullPathToDirectory:testPath attributes:nil], - @"Failed to create nested testPath"); - STAssertTrue([fm gtm_createFullPathToDirectory:testPath attributes:nil], - @"Failed to succeed on second create of testPath"); - - NSString *pathToFail = [@"/etc" stringByAppendingPathComponent:testPath]; - STAssertFalse([fm gtm_createFullPathToDirectory:pathToFail attributes:nil], - @"We were allowed to create a dir in '/etc'?!"); - - STAssertFalse([fm gtm_createFullPathToDirectory:nil attributes:nil], - @"Should have failed when passed (nil)"); -} - -#endif // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - - (void)testfilePathsWithExtensionsInDirectory { - STAssertNotNil(baseDir_, @"setUp failed"); + XCTAssertNotNil(baseDir_, @"setUp failed"); NSFileManager *fm = [NSFileManager defaultManager]; NSString *bogusPath = @"/some/place/that/does/not/exist"; @@ -94,23 +58,23 @@ // test fail cases first // single - STAssertNil([fm gtm_filePathsWithExtension:nil inDirectory:nil], - @"shouldn't have gotten anything for nil dir"); - STAssertNil([fm gtm_filePathsWithExtension:@"txt" inDirectory:nil], - @"shouldn't have gotten anything for nil dir"); - STAssertNil([fm gtm_filePathsWithExtension:@"txt" inDirectory:bogusPath], - @"shouldn't have gotten anything for a bogus dir"); + XCTAssertNil([fm gtm_filePathsWithExtension:nil inDirectory:nil], + @"shouldn't have gotten anything for nil dir"); + XCTAssertNil([fm gtm_filePathsWithExtension:@"txt" inDirectory:nil], + @"shouldn't have gotten anything for nil dir"); + XCTAssertNil([fm gtm_filePathsWithExtension:@"txt" inDirectory:bogusPath], + @"shouldn't have gotten anything for a bogus dir"); // array - STAssertNil([fm gtm_filePathsWithExtensions:nil inDirectory:nil], - @"shouldn't have gotten anything for nil dir"); - STAssertNil([fm gtm_filePathsWithExtensions:[NSArray array] inDirectory:nil], - @"shouldn't have gotten anything for nil dir"); - STAssertNil([fm gtm_filePathsWithExtensions:[NSArray arrayWithObject:@"txt"] - inDirectory:nil], - @"shouldn't have gotten anything for nil dir"); - STAssertNil([fm gtm_filePathsWithExtensions:[NSArray arrayWithObject:@"txt"] - inDirectory:bogusPath], - @"shouldn't have gotten anything for a bogus dir"); + XCTAssertNil([fm gtm_filePathsWithExtensions:nil inDirectory:nil], + @"shouldn't have gotten anything for nil dir"); + XCTAssertNil([fm gtm_filePathsWithExtensions:[NSArray array] inDirectory:nil], + @"shouldn't have gotten anything for nil dir"); + XCTAssertNil([fm gtm_filePathsWithExtensions:[NSArray arrayWithObject:@"txt"] + inDirectory:nil], + @"shouldn't have gotten anything for nil dir"); + XCTAssertNil([fm gtm_filePathsWithExtensions:[NSArray arrayWithObject:@"txt"] + inDirectory:bogusPath], + @"shouldn't have gotten anything for a bogus dir"); // -------------------------------------------------------------------------- // create some test data @@ -126,26 +90,22 @@ NSString *testDir = nil; if ([testDirs[i] length]) { testDir = [baseDir_ stringByAppendingPathComponent:testDirs[i]]; -#if GTM_IPHONE_SDK || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) NSError *error = nil; - STAssertTrue([fm createDirectoryAtPath:testDir - withIntermediateDirectories:YES - attributes:nil - error:&error], - @"Can't create %@ (%@)", testDir, error); -#else - STAssertTrue([fm createDirectoryAtPath:testDir attributes:nil], nil); -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 + XCTAssertTrue([fm createDirectoryAtPath:testDir + withIntermediateDirectories:YES + attributes:nil + error:&error], + @"Can't create %@ (%@)", testDir, error); } else { testDir = baseDir_; } for (size_t j = 0; j < sizeof(testFiles) / sizeof(NSString*); j++) { NSString *testFile = [testDir stringByAppendingPathComponent:testFiles[j]]; NSError *err = nil; - STAssertTrue([@"test" writeToFile:testFile - atomically:YES - encoding:NSUTF8StringEncoding - error:&err], @"Error: %@", err); + XCTAssertTrue([@"test" writeToFile:testFile + atomically:YES + encoding:NSUTF8StringEncoding + error:&err], @"Error: %@", err); } } @@ -173,23 +133,23 @@ // single matches = [fm gtm_filePathsWithExtension:nil inDirectory:baseDir_]; - STAssertEqualObjects([NSSet setWithArray:matches], - [NSSet setWithArray:allFiles], - @"didn't get all files for nil extension"); + XCTAssertEqualObjects([NSSet setWithArray:matches], + [NSSet setWithArray:allFiles], + @"didn't get all files for nil extension"); matches = [fm gtm_filePathsWithExtension:@"" inDirectory:baseDir_]; - STAssertEqualObjects([NSSet setWithArray:matches], - [NSSet setWithArray:allFiles], - @"didn't get all files for nil extension"); + XCTAssertEqualObjects([NSSet setWithArray:matches], + [NSSet setWithArray:allFiles], + @"didn't get all files for nil extension"); // array matches = [fm gtm_filePathsWithExtensions:nil inDirectory:baseDir_]; - STAssertEqualObjects([NSSet setWithArray:matches], - [NSSet setWithArray:allFiles], - @"didn't get all files for nil extension"); + XCTAssertEqualObjects([NSSet setWithArray:matches], + [NSSet setWithArray:allFiles], + @"didn't get all files for nil extension"); matches = [fm gtm_filePathsWithExtensions:[NSArray array] inDirectory:baseDir_]; - STAssertEqualObjects([NSSet setWithArray:matches], - [NSSet setWithArray:allFiles], - @"didn't get all files for nil extension"); + XCTAssertEqualObjects([NSSet setWithArray:matches], + [NSSet setWithArray:allFiles], + @"didn't get all files for nil extension"); // -------------------------------------------------------------------------- // test match something @@ -198,21 +158,21 @@ extensions = [NSArray arrayWithObject:@"txt"]; matches = [fm gtm_filePathsWithExtension:@"txt" inDirectory:baseDir_]; expectedMatches = [allFiles pathsMatchingExtensions:extensions]; - STAssertEqualObjects([NSSet setWithArray:matches], - [NSSet setWithArray:expectedMatches], - @"didn't get expected files"); + XCTAssertEqualObjects([NSSet setWithArray:matches], + [NSSet setWithArray:expectedMatches], + @"didn't get expected files"); // array matches = [fm gtm_filePathsWithExtensions:extensions inDirectory:baseDir_]; expectedMatches = [allFiles pathsMatchingExtensions:extensions]; - STAssertEqualObjects([NSSet setWithArray:matches], - [NSSet setWithArray:expectedMatches], - @"didn't get expected files"); + XCTAssertEqualObjects([NSSet setWithArray:matches], + [NSSet setWithArray:expectedMatches], + @"didn't get expected files"); extensions = [NSArray arrayWithObjects:@"txt", @"rtf", @"xyz", nil]; matches = [fm gtm_filePathsWithExtensions:extensions inDirectory:baseDir_]; expectedMatches = [allFiles pathsMatchingExtensions:extensions]; - STAssertEqualObjects([NSSet setWithArray:matches], - [NSSet setWithArray:expectedMatches], - @"didn't get expected files"); + XCTAssertEqualObjects([NSSet setWithArray:matches], + [NSSet setWithArray:expectedMatches], + @"didn't get expected files"); // -------------------------------------------------------------------------- // test match nothing @@ -221,43 +181,37 @@ extensions = [NSArray arrayWithObject:@"xyz"]; matches = [fm gtm_filePathsWithExtension:@"xyz" inDirectory:baseDir_]; expectedMatches = [allFiles pathsMatchingExtensions:extensions]; - STAssertEqualObjects([NSSet setWithArray:matches], - [NSSet setWithArray:expectedMatches], - @"didn't get expected files"); + XCTAssertEqualObjects([NSSet setWithArray:matches], + [NSSet setWithArray:expectedMatches], + @"didn't get expected files"); // array matches = [fm gtm_filePathsWithExtensions:extensions inDirectory:baseDir_]; expectedMatches = [allFiles pathsMatchingExtensions:extensions]; - STAssertEqualObjects([NSSet setWithArray:matches], - [NSSet setWithArray:expectedMatches], - @"didn't get expected files"); + XCTAssertEqualObjects([NSSet setWithArray:matches], + [NSSet setWithArray:expectedMatches], + @"didn't get expected files"); // -------------------------------------------------------------------------- // test match an empty dir // create the empty dir NSString *emptyDir = [baseDir_ stringByAppendingPathComponent:@"emptyDir"]; -#if GTM_IPHONE_SDK || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) NSError *error = nil; - STAssertTrue([fm createDirectoryAtPath:emptyDir - withIntermediateDirectories:YES - attributes:nil - error:&error], - @"Can't create %@ (%@)", emptyDir, error); -#else - STAssertTrue([fm createDirectoryAtPath:emptyDir attributes:nil], nil); -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - + XCTAssertTrue([fm createDirectoryAtPath:emptyDir + withIntermediateDirectories:YES + attributes:nil + error:&error], + @"Can't create %@ (%@)", emptyDir, error); // single matches = [fm gtm_filePathsWithExtension:@"txt" inDirectory:emptyDir]; - STAssertEqualObjects([NSSet setWithArray:matches], [NSSet set], - @"expected empty dir"); + XCTAssertEqualObjects([NSSet setWithArray:matches], [NSSet set], + @"expected empty dir"); // array matches = [fm gtm_filePathsWithExtensions:[NSArray arrayWithObject:@"txt"] inDirectory:emptyDir]; - STAssertEqualObjects([NSSet setWithArray:matches], [NSSet set], - @"expected empty dir"); - + XCTAssertEqualObjects([NSSet setWithArray:matches], [NSSet set], + @"expected empty dir"); } @end diff --git a/Foundation/GTMNSObject+KeyValueObserving.m b/Foundation/GTMNSObject+KeyValueObserving.m index c4a589d..45eb6fe 100644 --- a/Foundation/GTMNSObject+KeyValueObserving.m +++ b/Foundation/GTMNSObject+KeyValueObserving.m @@ -25,11 +25,13 @@ // This code is based on code by Michael Ash. // See comment in header. -#import "GTMDefines.h" #import "GTMNSObject+KeyValueObserving.h" + +#import <libkern/OSAtomic.h> +#include <objc/runtime.h> + #import "GTMDefines.h" #import "GTMDebugSelectorValidation.h" -#import "GTMObjC2Runtime.h" #import "GTMMethodCheck.h" // A singleton that works as a dispatch center for KVO @@ -172,9 +174,9 @@ static char* GTMKeyValueObservingHelperContext // and the other will set things up so that the failing thread // gets the shared center GTMKeyValueObservingCenter *newCenter = [[self alloc] init]; - if(!objc_atomicCompareAndSwapGlobalBarrier(nil, - newCenter, - (void *)¢er)) { + if(!OSAtomicCompareAndSwapPtrBarrier(NULL, + newCenter, + (void *)¢er)) { [newCenter release]; // COV_NF_LINE no guarantee we'll hit this line } } @@ -252,7 +254,7 @@ static char* GTMKeyValueObservingHelperContext @synchronized(self) { NSString *helperKey; - GTM_FOREACH_OBJECT(helperKey, [observerHelpers_ allKeys]) { + for (helperKey in [observerHelpers_ allKeys]) { if ([helperKey hasPrefix:key]) { [allValidHelperKeys addObject:helperKey]; } diff --git a/Foundation/GTMNSObject+KeyValueObservingTest.m b/Foundation/GTMNSObject+KeyValueObservingTest.m index 43a1bba..66ae799 100644 --- a/Foundation/GTMNSObject+KeyValueObservingTest.m +++ b/Foundation/GTMNSObject+KeyValueObservingTest.m @@ -29,7 +29,6 @@ #import "GTMSenTestCase.h" #import "GTMNSObject+KeyValueObserving.h" #import "GTMDefines.h" -#import "GTMUnitTestDevLog.h" @interface GTMNSObject_KeyValueObservingTest : GTMTestCase { int32_t count_; @@ -61,12 +60,12 @@ options:NSKeyValueObservingOptionNew]; expectedValue_ = @"bar"; [dict_ setObject:expectedValue_ forKey:@"key"]; - STAssertEquals(count_, (int32_t)1, nil); + XCTAssertEqual(count_, (int32_t)1); [dict_ gtm_removeObserver:self forKeyPath:@"key" selector:@selector(observeValueChange:)]; [dict_ setObject:@"foo" forKey:@"key"]; - STAssertEquals(count_, (int32_t)1, nil); + XCTAssertEqual(count_, (int32_t)1); } - (void)testStopObservingAllKeyPaths { @@ -78,17 +77,14 @@ options:NSKeyValueObservingOptionNew]; expectedValue_ = @"bar"; [dict_ setObject:expectedValue_ forKey:@"key"]; - STAssertEquals(count_, (int32_t)1, nil); + XCTAssertEqual(count_, (int32_t)1); [self gtm_stopObservingAllKeyPaths]; [dict_ setObject:@"foo" forKey:@"key"]; - STAssertEquals(count_, (int32_t)1, nil); + XCTAssertEqual(count_, (int32_t)1); } - (void)testRemoving { - [GTMUnitTestDevLogDebug expectPattern:@"-\\[GTMNSObject_KeyValueObservingTest" - @" testRemoving\\] was not observing.*"]; - [dict_ gtm_removeObserver:self forKeyPath:@"key" selector:@selector(observeValueChange:)]; @@ -100,8 +96,6 @@ selector:@selector(observeValueChange:) userInfo:@"userInfo" options:NSKeyValueObservingOptionNew]; - [GTMUnitTestDevLog expectPattern:@"-\\[GTMNSObject_KeyValueObservingTest" - @" testAdding\\] already observing.*"]; [dict_ gtm_addObserver:self forKeyPath:@"key" selector:@selector(observeValueChange:) @@ -113,17 +107,17 @@ } - (void)observeValueChange:(GTMKeyValueChangeNotification *)notification { - STAssertEqualObjects([notification userInfo], @"userInfo", nil); - STAssertEqualObjects([notification keyPath], @"key", nil); - STAssertEqualObjects([notification object], dict_, nil); + XCTAssertEqualObjects([notification userInfo], @"userInfo"); + XCTAssertEqualObjects([notification keyPath], @"key"); + XCTAssertEqualObjects([notification object], dict_); NSDictionary *change = [notification change]; NSString *value = [change objectForKey:NSKeyValueChangeNewKey]; - STAssertEqualObjects(value, expectedValue_, nil); + XCTAssertEqualObjects(value, expectedValue_); ++count_; GTMKeyValueChangeNotification *copy = [[notification copy] autorelease]; - STAssertEqualObjects(notification, copy, nil); - STAssertEquals([notification hash], [copy hash], nil); + XCTAssertEqualObjects(notification, copy); + XCTAssertEqual([notification hash], [copy hash]); } @end diff --git a/Foundation/GTMNSScanner+JSON.m b/Foundation/GTMNSScanner+JSON.m index 1216698..308eae2 100644 --- a/Foundation/GTMNSScanner+JSON.m +++ b/Foundation/GTMNSScanner+JSON.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -19,10 +19,15 @@ #import "GTMDefines.h" #import "GTMNSScanner+JSON.h" +// Export a nonsense symbol to suppress a libtool warning when this is linked +// alone in a static lib. +__attribute__((visibility("default"))) + char NSScanner_GTMNSScannerJSONAdditionsExportToSuppressLibToolWarning = 0; + @implementation NSScanner (GTMNSScannerJSONAdditions) -- (BOOL)gtm_scanJSONString:(NSString **)jsonString - startChar:(unichar)startChar +- (BOOL)gtm_scanJSONString:(NSString **)jsonString + startChar:(unichar)startChar endChar:(unichar)endChar { BOOL isGood = NO; NSRange jsonRange = { NSNotFound, 0 }; @@ -73,11 +78,11 @@ } - (BOOL)gtm_scanJSONObjectString:(NSString **)jsonString { - return [self gtm_scanJSONString:jsonString startChar:'{' endChar:'}']; + return [self gtm_scanJSONString:jsonString startChar:'{' endChar:'}']; } - (BOOL)gtm_scanJSONArrayString:(NSString**)jsonString { - return [self gtm_scanJSONString:jsonString startChar:'[' endChar:']']; + return [self gtm_scanJSONString:jsonString startChar:'[' endChar:']']; } @end diff --git a/Foundation/GTMNSScanner+JSONTest.m b/Foundation/GTMNSScanner+JSONTest.m index 8085148..d78f41d 100644 --- a/Foundation/GTMNSScanner+JSONTest.m +++ b/Foundation/GTMNSScanner+JSONTest.m @@ -86,27 +86,27 @@ struct { BOOL goodObject = [scanner gtm_scanJSONObjectString:&object]; if (testStrings[i].resultString_) { if (testStrings[i].isObject_) { - STAssertEqualStrings(testStrings[i].resultString_, - object, @"Test String: %@", - testStrings[i].testString_); - STAssertNil(array, @"Test String: %@", testStrings[i].testString_); - STAssertTrue(goodObject, @"Test String: %@", - testStrings[i].testString_); - STAssertFalse(goodArray, @"Test String: %@", + XCTAssertEqualStrings(testStrings[i].resultString_, + object, @"Test String: %@", + testStrings[i].testString_); + XCTAssertNil(array, @"Test String: %@", testStrings[i].testString_); + XCTAssertTrue(goodObject, @"Test String: %@", testStrings[i].testString_); + XCTAssertFalse(goodArray, @"Test String: %@", + testStrings[i].testString_); } else { - STAssertEqualStrings(testStrings[i].resultString_, array, - @"Test String: %@", testStrings[i].testString_); - STAssertNil(object, @"Test String: %@", testStrings[i].testString_); - STAssertTrue(goodArray, @"Test String: %@", testStrings[i].testString_); - STAssertFalse(goodObject, @"Test String: %@", - testStrings[i].testString_); + XCTAssertEqualStrings(testStrings[i].resultString_, array, + @"Test String: %@", testStrings[i].testString_); + XCTAssertNil(object, @"Test String: %@", testStrings[i].testString_); + XCTAssertTrue(goodArray, @"Test String: %@", testStrings[i].testString_); + XCTAssertFalse(goodObject, @"Test String: %@", + testStrings[i].testString_); } } else { - STAssertNil(object, @"Test String: %@", testStrings[i].testString_); - STAssertNil(array, @"Test String: %@", testStrings[i].testString_); - STAssertFalse(goodArray, @"Test String: %@", testStrings[i].testString_); - STAssertFalse(goodObject, @"Test String: %@", testStrings[i].testString_); + XCTAssertNil(object, @"Test String: %@", testStrings[i].testString_); + XCTAssertNil(array, @"Test String: %@", testStrings[i].testString_); + XCTAssertFalse(goodArray, @"Test String: %@", testStrings[i].testString_); + XCTAssertFalse(goodObject, @"Test String: %@", testStrings[i].testString_); } } } @@ -117,13 +117,13 @@ struct { NSScanner *scanner = [NSScanner scannerWithString:testString]; [scanner setCharactersToBeSkipped:alphaSet]; NSString *array = nil; - STAssertTrue([scanner gtm_scanJSONArrayString:&array], nil); - STAssertEqualStrings(array, @"[]", nil); + XCTAssertTrue([scanner gtm_scanJSONArrayString:&array]); + XCTAssertEqualStrings(array, @"[]"); NSString *nextValue = nil; - STAssertTrue([scanner scanString:@":," intoString:&nextValue], nil); - STAssertEqualStrings(@":,", nextValue, nil); + XCTAssertTrue([scanner scanString:@":," intoString:&nextValue]); + XCTAssertEqualStrings(@":,", nextValue); scanner = [NSScanner scannerWithString:testString]; - STAssertFalse([scanner gtm_scanJSONArrayString:&array], nil); + XCTAssertFalse([scanner gtm_scanJSONArrayString:&array]); } @end diff --git a/Foundation/GTMNSScanner+Unsigned.h b/Foundation/GTMNSScanner+Unsigned.h deleted file mode 100644 index 80fdcc4..0000000 --- a/Foundation/GTMNSScanner+Unsigned.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// GTMNSScanner+Unsigned.h -// -// Copyright 2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> - -#import "GTMDefines.h" - -// Adds support for working with unsigned values. Unsigned values are digits -// only [0-9]. There is no support for "+" or "-" signs. Overflow is handled -// by returning "YES" and the maximum value allowed for the type. -@interface NSScanner (GTMUnsignedAdditions) - -- (BOOL)gtm_scanUnsignedInt:(unsigned int *)value; -- (BOOL)gtm_scanUInteger:(NSUInteger *)value; -- (BOOL)gtm_scanUnsignedLongLong:(unsigned long long *)value; - -@end diff --git a/Foundation/GTMNSScanner+Unsigned.m b/Foundation/GTMNSScanner+Unsigned.m deleted file mode 100644 index 9228ba2..0000000 --- a/Foundation/GTMNSScanner+Unsigned.m +++ /dev/null @@ -1,60 +0,0 @@ -// -// GTMNSScanner+Unsigned.m -// -// Copyright 2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSScanner+Unsigned.h" -#include <stdlib.h> -#include <limits.h> - -@implementation NSScanner (GTMUnsignedAdditions) - -- (BOOL)gtm_scanUnsignedInt:(unsigned int *)value { - unsigned long long uLongLongValue = 0; - BOOL wasGood = [self gtm_scanUnsignedLongLong:&uLongLongValue]; - if (wasGood && value) { - if (uLongLongValue > UINT_MAX) { - *value = UINT_MAX; - } else { - *value = (unsigned int)uLongLongValue; - } - } - return wasGood; -} - -- (BOOL)gtm_scanUInteger:(NSUInteger *)value { -#if defined(__LP64__) && __LP64__ - return [self gtm_scanUnsignedLongLong:(unsigned long long*)value]; -#else - return [self gtm_scanUnsignedInt:value]; -#endif // defined(__LP64__) && __LP64__ -} - -- (BOOL)gtm_scanUnsignedLongLong:(unsigned long long *)value { - // Slow path - NSCharacterSet *decimalSet = [NSCharacterSet decimalDigitCharacterSet]; - NSString *digitString = nil; - BOOL wasGood = [self scanCharactersFromSet:decimalSet intoString:&digitString]; - if (wasGood) { - const char *digitChars = [digitString UTF8String]; - if (value) { - *value = strtoull(digitChars, NULL, 10); - } - } - return wasGood; -} - -@end diff --git a/Foundation/GTMNSScanner+UnsignedTest.m b/Foundation/GTMNSScanner+UnsignedTest.m deleted file mode 100644 index aab92f3..0000000 --- a/Foundation/GTMNSScanner+UnsignedTest.m +++ /dev/null @@ -1,116 +0,0 @@ -// -// GTMNSScanner+UnsignedTest.m -// -// Copyright 2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMNSScanner+Unsigned.h" - -@interface GTMNSScanner_UnsignedTest : GTMTestCase -@end - -@implementation GTMNSScanner_UnsignedTest - -#define TEST_BLOCK(A_MAX_VALUE) \ - { @"-1", 0, NO, 0 }, \ - { @"- 1", 0, NO, 0 }, \ - { @" - 1", 0, NO, 0 }, \ - { @"+ 1", 1, NO, 0 }, \ - { @" + 1", 1, NO, 0 }, \ - { @"0", 0, YES, 1 }, \ - { @"a", 0, NO, 0 }, \ - { @" ", 0, NO, 0 }, \ - { @"-1a", 0, NO, 0 }, \ - { @"a1", 0, NO, 0 }, \ - { @"1 ", 1, YES, 1 }, \ - { @"2 1 ", 2, YES, 1 }, \ - { @" 2 1 ", 2, YES, 2 }, \ - { @"99999999999999999999999999999999999", A_MAX_VALUE, YES, 35 } - -- (void)testScanUnsignedInt { - struct { - NSString *string; - unsigned int val; - BOOL goodScan; - NSUInteger location; - } testStruct[] = { - TEST_BLOCK(UINT_MAX), - }; - for (size_t i = 0; i < sizeof(testStruct) / sizeof(testStruct[0]); ++i) { - NSScanner *scanner = [NSScanner scannerWithString:testStruct[i].string]; - STAssertNotNil(scanner, nil); - unsigned int value; - BOOL isGood = [scanner gtm_scanUnsignedInt:&value]; - STAssertEquals((int)isGood, (int)testStruct[i].goodScan, - @"%@", testStruct[i].string); - if (isGood && testStruct[i].goodScan) { - STAssertEquals(value, testStruct[i].val, @"%@", testStruct[i].string); - } - STAssertEquals(testStruct[i].location, [scanner scanLocation], - @"%@", testStruct[i].string); - } -} - -- (void)testScanUInteger { - struct { - NSString *string; - NSUInteger val; - BOOL goodScan; - NSUInteger location; - } testStruct[] = { - TEST_BLOCK(NSUIntegerMax), - }; - for (size_t i = 0; i < sizeof(testStruct) / sizeof(testStruct[0]); ++i) { - NSScanner *scanner = [NSScanner scannerWithString:testStruct[i].string]; - STAssertNotNil(scanner, nil); - NSUInteger value; - BOOL isGood = [scanner gtm_scanUInteger:&value]; - STAssertEquals((int)isGood, (int)testStruct[i].goodScan, - @"%@", testStruct[i].string); - if (isGood && testStruct[i].goodScan) { - STAssertEquals(value, testStruct[i].val, @"%@", testStruct[i].string); - } - STAssertEquals(testStruct[i].location, [scanner scanLocation], - @"%@", testStruct[i].string); - } -} - -- (void)testScanUnsignedLongLong { - struct { - NSString *string; - unsigned long long val; - BOOL goodScan; - NSUInteger location; - } testStruct[] = { - TEST_BLOCK(ULLONG_MAX), - { @"4294967296", ((unsigned long long)UINT_MAX) + 1, YES, 10 } - }; - for (size_t i = 0; i < sizeof(testStruct) / sizeof(testStruct[0]); ++i) { - NSScanner *scanner = [NSScanner scannerWithString:testStruct[i].string]; - STAssertNotNil(scanner, nil); - unsigned long long value; - BOOL isGood = [scanner gtm_scanUnsignedLongLong:&value]; - STAssertEquals((int)isGood, (int)testStruct[i].goodScan, - @"%@", testStruct[i].string); - if (isGood && testStruct[i].goodScan) { - STAssertEquals(value, testStruct[i].val, @"%@", testStruct[i].string); - } - STAssertEquals(testStruct[i].location, [scanner scanLocation], - @"%@", testStruct[i].string); - } -} - -@end diff --git a/Foundation/GTMNSString+FindFolderTest.m b/Foundation/GTMNSString+FindFolderTest.m index aae48cb..2f53d76 100644 --- a/Foundation/GTMNSString+FindFolderTest.m +++ b/Foundation/GTMNSString+FindFolderTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -32,20 +32,20 @@ inDomain:kUserDomain doCreate:NO]; NSString *realPrefsPath = [@"~/Library/Preferences" stringByExpandingTildeInPath]; - STAssertEqualObjects(realPrefsPath, prefsPath, @"Found incorrect prefs path"); + XCTAssertEqualObjects(realPrefsPath, prefsPath, @"Found incorrect prefs path"); + - // test the subfolder method; it should return nil if we pass NO and the // subfolder doesn't already exist - + NSString *googCacheNoCreatePath = [NSString gtm_stringWithPathForFolder:kCachedDataFolderType subfolderName:@"GTMUnitTestDuzntExist" inDomain:kUserDomain doCreate:NO]; - STAssertNil(googCacheNoCreatePath, @"Should not exist: %@", googCacheNoCreatePath); + XCTAssertNil(googCacheNoCreatePath, @"Should not exist: %@", googCacheNoCreatePath); // test creating ~/Library/Cache/GTMUnitTestCreated - + NSString *folderName = @"GTMUnitTestCreated"; NSString *gtmCachePath = [NSString gtm_stringWithPathForFolder:kCachedDataFolderType subfolderName:folderName @@ -55,28 +55,28 @@ inDomain:kUserDomain doCreate:NO]; NSString *testPathAppended = [testPath stringByAppendingPathComponent:folderName]; - STAssertEqualObjects(gtmCachePath, testPathAppended, @"Unexpected path name"); - + XCTAssertEqualObjects(gtmCachePath, testPathAppended, @"Unexpected path name"); + NSFileManager* fileMgr = [NSFileManager defaultManager]; BOOL isDir = NO; BOOL pathExists = [fileMgr fileExistsAtPath:gtmCachePath isDirectory:&isDir] && isDir; - STAssertTrue(pathExists, @"Path %@ is not existing like it should", gtmCachePath); + XCTAssertTrue(pathExists, @"Path %@ is not existing like it should", gtmCachePath); // test finding it again w/o having to create it NSString *gtmCachePath2 = [NSString gtm_stringWithPathForFolder:kCachedDataFolderType subfolderName:folderName inDomain:kUserDomain doCreate:NO]; - STAssertEqualObjects(gtmCachePath2, gtmCachePath, nil); - + XCTAssertEqualObjects(gtmCachePath2, gtmCachePath); + #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 NSError *error = nil; BOOL didRemove = [fileMgr removeItemAtPath:gtmCachePath error:&error]; - STAssertTrue(didRemove, @"Error removing %@ (%@)", gtmCachePath, error); + XCTAssertTrue(didRemove, @"Error removing %@ (%@)", gtmCachePath, error); #else BOOL didRemove = [fileMgr removeFileAtPath:gtmCachePath handler:nil]; - STAssertTrue(didRemove, @"Error removing %@", gtmCachePath); + XCTAssertTrue(didRemove, @"Error removing %@", gtmCachePath); #endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 } diff --git a/Foundation/GTMNSString+HTML.m b/Foundation/GTMNSString+HTML.m index d580b9e..04ec23a 100644 --- a/Foundation/GTMNSString+HTML.m +++ b/Foundation/GTMNSString+HTML.m @@ -7,9 +7,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -20,6 +20,11 @@ #import "GTMDefines.h" #import "GTMNSString+HTML.h" +// Export a nonsense symbol to suppress a libtool warning when this is linked +// alone in a static lib. +__attribute__((visibility("default"))) + char GTMNSString_HTMLExportToSuppressLibToolWarning = 0; + typedef struct { NSString *escapeSequence; unichar uchar; @@ -34,105 +39,105 @@ static HTMLEscapeMap gAsciiHTMLEscapeMap[] = { { @"'", 39 }, { @"<", 60 }, { @">", 62 }, - + // A.2.1. Latin-1 characters - { @" ", 160 }, - { @"¡", 161 }, - { @"¢", 162 }, - { @"£", 163 }, - { @"¤", 164 }, - { @"¥", 165 }, - { @"¦", 166 }, - { @"§", 167 }, - { @"¨", 168 }, - { @"©", 169 }, - { @"ª", 170 }, - { @"«", 171 }, - { @"¬", 172 }, - { @"­", 173 }, - { @"®", 174 }, - { @"¯", 175 }, - { @"°", 176 }, - { @"±", 177 }, - { @"²", 178 }, - { @"³", 179 }, - { @"´", 180 }, - { @"µ", 181 }, - { @"¶", 182 }, - { @"·", 183 }, - { @"¸", 184 }, - { @"¹", 185 }, - { @"º", 186 }, - { @"»", 187 }, - { @"¼", 188 }, - { @"½", 189 }, - { @"¾", 190 }, - { @"¿", 191 }, - { @"À", 192 }, - { @"Á", 193 }, - { @"Â", 194 }, - { @"Ã", 195 }, - { @"Ä", 196 }, - { @"Å", 197 }, - { @"Æ", 198 }, - { @"Ç", 199 }, - { @"È", 200 }, - { @"É", 201 }, - { @"Ê", 202 }, - { @"Ë", 203 }, - { @"Ì", 204 }, - { @"Í", 205 }, - { @"Î", 206 }, - { @"Ï", 207 }, - { @"Ð", 208 }, - { @"Ñ", 209 }, - { @"Ò", 210 }, - { @"Ó", 211 }, - { @"Ô", 212 }, - { @"Õ", 213 }, - { @"Ö", 214 }, - { @"×", 215 }, - { @"Ø", 216 }, - { @"Ù", 217 }, - { @"Ú", 218 }, - { @"Û", 219 }, - { @"Ü", 220 }, - { @"Ý", 221 }, - { @"Þ", 222 }, - { @"ß", 223 }, - { @"à", 224 }, - { @"á", 225 }, - { @"â", 226 }, - { @"ã", 227 }, - { @"ä", 228 }, - { @"å", 229 }, - { @"æ", 230 }, - { @"ç", 231 }, - { @"è", 232 }, - { @"é", 233 }, - { @"ê", 234 }, - { @"ë", 235 }, - { @"ì", 236 }, - { @"í", 237 }, - { @"î", 238 }, - { @"ï", 239 }, - { @"ð", 240 }, - { @"ñ", 241 }, - { @"ò", 242 }, - { @"ó", 243 }, - { @"ô", 244 }, - { @"õ", 245 }, - { @"ö", 246 }, - { @"÷", 247 }, - { @"ø", 248 }, - { @"ù", 249 }, - { @"ú", 250 }, - { @"û", 251 }, - { @"ü", 252 }, - { @"ý", 253 }, - { @"þ", 254 }, + { @" ", 160 }, + { @"¡", 161 }, + { @"¢", 162 }, + { @"£", 163 }, + { @"¤", 164 }, + { @"¥", 165 }, + { @"¦", 166 }, + { @"§", 167 }, + { @"¨", 168 }, + { @"©", 169 }, + { @"ª", 170 }, + { @"«", 171 }, + { @"¬", 172 }, + { @"­", 173 }, + { @"®", 174 }, + { @"¯", 175 }, + { @"°", 176 }, + { @"±", 177 }, + { @"²", 178 }, + { @"³", 179 }, + { @"´", 180 }, + { @"µ", 181 }, + { @"¶", 182 }, + { @"·", 183 }, + { @"¸", 184 }, + { @"¹", 185 }, + { @"º", 186 }, + { @"»", 187 }, + { @"¼", 188 }, + { @"½", 189 }, + { @"¾", 190 }, + { @"¿", 191 }, + { @"À", 192 }, + { @"Á", 193 }, + { @"Â", 194 }, + { @"Ã", 195 }, + { @"Ä", 196 }, + { @"Å", 197 }, + { @"Æ", 198 }, + { @"Ç", 199 }, + { @"È", 200 }, + { @"É", 201 }, + { @"Ê", 202 }, + { @"Ë", 203 }, + { @"Ì", 204 }, + { @"Í", 205 }, + { @"Î", 206 }, + { @"Ï", 207 }, + { @"Ð", 208 }, + { @"Ñ", 209 }, + { @"Ò", 210 }, + { @"Ó", 211 }, + { @"Ô", 212 }, + { @"Õ", 213 }, + { @"Ö", 214 }, + { @"×", 215 }, + { @"Ø", 216 }, + { @"Ù", 217 }, + { @"Ú", 218 }, + { @"Û", 219 }, + { @"Ü", 220 }, + { @"Ý", 221 }, + { @"Þ", 222 }, + { @"ß", 223 }, + { @"à", 224 }, + { @"á", 225 }, + { @"â", 226 }, + { @"ã", 227 }, + { @"ä", 228 }, + { @"å", 229 }, + { @"æ", 230 }, + { @"ç", 231 }, + { @"è", 232 }, + { @"é", 233 }, + { @"ê", 234 }, + { @"ë", 235 }, + { @"ì", 236 }, + { @"í", 237 }, + { @"î", 238 }, + { @"ï", 239 }, + { @"ð", 240 }, + { @"ñ", 241 }, + { @"ò", 242 }, + { @"ó", 243 }, + { @"ô", 244 }, + { @"õ", 245 }, + { @"ö", 246 }, + { @"÷", 247 }, + { @"ø", 248 }, + { @"ù", 249 }, + { @"ú", 250 }, + { @"û", 251 }, + { @"ü", 252 }, + { @"ý", 253 }, + { @"þ", 254 }, { @"ÿ", 255 }, - + // A.2.2. Special characters cont'd { @"Œ", 338 }, { @"œ", 339 }, @@ -141,66 +146,66 @@ static HTMLEscapeMap gAsciiHTMLEscapeMap[] = { { @"Ÿ", 376 }, // A.2.3. Symbols - { @"ƒ", 402 }, + { @"ƒ", 402 }, // A.2.2. Special characters cont'd { @"ˆ", 710 }, { @"˜", 732 }, - + // A.2.3. Symbols cont'd - { @"Α", 913 }, - { @"Β", 914 }, - { @"Γ", 915 }, - { @"Δ", 916 }, - { @"Ε", 917 }, - { @"Ζ", 918 }, - { @"Η", 919 }, - { @"Θ", 920 }, - { @"Ι", 921 }, - { @"Κ", 922 }, - { @"Λ", 923 }, - { @"Μ", 924 }, - { @"Ν", 925 }, - { @"Ξ", 926 }, - { @"Ο", 927 }, - { @"Π", 928 }, - { @"Ρ", 929 }, - { @"Σ", 931 }, - { @"Τ", 932 }, - { @"Υ", 933 }, - { @"Φ", 934 }, - { @"Χ", 935 }, - { @"Ψ", 936 }, - { @"Ω", 937 }, - { @"α", 945 }, - { @"β", 946 }, - { @"γ", 947 }, - { @"δ", 948 }, - { @"ε", 949 }, - { @"ζ", 950 }, - { @"η", 951 }, - { @"θ", 952 }, - { @"ι", 953 }, - { @"κ", 954 }, - { @"λ", 955 }, - { @"μ", 956 }, - { @"ν", 957 }, - { @"ξ", 958 }, - { @"ο", 959 }, - { @"π", 960 }, - { @"ρ", 961 }, - { @"ς", 962 }, - { @"σ", 963 }, - { @"τ", 964 }, - { @"υ", 965 }, - { @"φ", 966 }, - { @"χ", 967 }, - { @"ψ", 968 }, - { @"ω", 969 }, - { @"ϑ", 977 }, - { @"ϒ", 978 }, - { @"ϖ", 982 }, - + { @"Α", 913 }, + { @"Β", 914 }, + { @"Γ", 915 }, + { @"Δ", 916 }, + { @"Ε", 917 }, + { @"Ζ", 918 }, + { @"Η", 919 }, + { @"Θ", 920 }, + { @"Ι", 921 }, + { @"Κ", 922 }, + { @"Λ", 923 }, + { @"Μ", 924 }, + { @"Ν", 925 }, + { @"Ξ", 926 }, + { @"Ο", 927 }, + { @"Π", 928 }, + { @"Ρ", 929 }, + { @"Σ", 931 }, + { @"Τ", 932 }, + { @"Υ", 933 }, + { @"Φ", 934 }, + { @"Χ", 935 }, + { @"Ψ", 936 }, + { @"Ω", 937 }, + { @"α", 945 }, + { @"β", 946 }, + { @"γ", 947 }, + { @"δ", 948 }, + { @"ε", 949 }, + { @"ζ", 950 }, + { @"η", 951 }, + { @"θ", 952 }, + { @"ι", 953 }, + { @"κ", 954 }, + { @"λ", 955 }, + { @"μ", 956 }, + { @"ν", 957 }, + { @"ξ", 958 }, + { @"ο", 959 }, + { @"π", 960 }, + { @"ρ", 961 }, + { @"ς", 962 }, + { @"σ", 963 }, + { @"τ", 964 }, + { @"υ", 965 }, + { @"φ", 966 }, + { @"χ", 967 }, + { @"ψ", 968 }, + { @"ω", 969 }, + { @"ϑ", 977 }, + { @"ϒ", 978 }, + { @"ϖ", 982 }, + // A.2.2. Special characters cont'd { @" ", 8194 }, { @" ", 8195 }, @@ -219,93 +224,93 @@ static HTMLEscapeMap gAsciiHTMLEscapeMap[] = { { @"„", 8222 }, { @"†", 8224 }, { @"‡", 8225 }, - // A.2.3. Symbols cont'd - { @"•", 8226 }, - { @"…", 8230 }, - + // A.2.3. Symbols cont'd + { @"•", 8226 }, + { @"…", 8230 }, + // A.2.2. Special characters cont'd { @"‰", 8240 }, - - // A.2.3. Symbols cont'd - { @"′", 8242 }, - { @"″", 8243 }, + + // A.2.3. Symbols cont'd + { @"′", 8242 }, + { @"″", 8243 }, // A.2.2. Special characters cont'd { @"‹", 8249 }, { @"›", 8250 }, - // A.2.3. Symbols cont'd - { @"‾", 8254 }, - { @"⁄", 8260 }, - + // A.2.3. Symbols cont'd + { @"‾", 8254 }, + { @"⁄", 8260 }, + // A.2.2. Special characters cont'd { @"€", 8364 }, - // A.2.3. Symbols cont'd + // A.2.3. Symbols cont'd { @"ℑ", 8465 }, - { @"℘", 8472 }, - { @"ℜ", 8476 }, - { @"™", 8482 }, - { @"ℵ", 8501 }, - { @"←", 8592 }, - { @"↑", 8593 }, - { @"→", 8594 }, - { @"↓", 8595 }, - { @"↔", 8596 }, - { @"↵", 8629 }, - { @"⇐", 8656 }, - { @"⇑", 8657 }, - { @"⇒", 8658 }, - { @"⇓", 8659 }, - { @"⇔", 8660 }, - { @"∀", 8704 }, - { @"∂", 8706 }, - { @"∃", 8707 }, - { @"∅", 8709 }, - { @"∇", 8711 }, - { @"∈", 8712 }, - { @"∉", 8713 }, - { @"∋", 8715 }, - { @"∏", 8719 }, - { @"∑", 8721 }, - { @"−", 8722 }, - { @"∗", 8727 }, - { @"√", 8730 }, - { @"∝", 8733 }, - { @"∞", 8734 }, - { @"∠", 8736 }, - { @"∧", 8743 }, - { @"∨", 8744 }, - { @"∩", 8745 }, - { @"∪", 8746 }, - { @"∫", 8747 }, - { @"∴", 8756 }, - { @"∼", 8764 }, - { @"≅", 8773 }, - { @"≈", 8776 }, - { @"≠", 8800 }, - { @"≡", 8801 }, - { @"≤", 8804 }, - { @"≥", 8805 }, - { @"⊂", 8834 }, - { @"⊃", 8835 }, - { @"⊄", 8836 }, - { @"⊆", 8838 }, - { @"⊇", 8839 }, - { @"⊕", 8853 }, - { @"⊗", 8855 }, - { @"⊥", 8869 }, - { @"⋅", 8901 }, - { @"⌈", 8968 }, - { @"⌉", 8969 }, - { @"⌊", 8970 }, - { @"⌋", 8971 }, - { @"⟨", 9001 }, - { @"⟩", 9002 }, - { @"◊", 9674 }, - { @"♠", 9824 }, - { @"♣", 9827 }, - { @"♥", 9829 }, + { @"℘", 8472 }, + { @"ℜ", 8476 }, + { @"™", 8482 }, + { @"ℵ", 8501 }, + { @"←", 8592 }, + { @"↑", 8593 }, + { @"→", 8594 }, + { @"↓", 8595 }, + { @"↔", 8596 }, + { @"↵", 8629 }, + { @"⇐", 8656 }, + { @"⇑", 8657 }, + { @"⇒", 8658 }, + { @"⇓", 8659 }, + { @"⇔", 8660 }, + { @"∀", 8704 }, + { @"∂", 8706 }, + { @"∃", 8707 }, + { @"∅", 8709 }, + { @"∇", 8711 }, + { @"∈", 8712 }, + { @"∉", 8713 }, + { @"∋", 8715 }, + { @"∏", 8719 }, + { @"∑", 8721 }, + { @"−", 8722 }, + { @"∗", 8727 }, + { @"√", 8730 }, + { @"∝", 8733 }, + { @"∞", 8734 }, + { @"∠", 8736 }, + { @"∧", 8743 }, + { @"∨", 8744 }, + { @"∩", 8745 }, + { @"∪", 8746 }, + { @"∫", 8747 }, + { @"∴", 8756 }, + { @"∼", 8764 }, + { @"≅", 8773 }, + { @"≈", 8776 }, + { @"≠", 8800 }, + { @"≡", 8801 }, + { @"≤", 8804 }, + { @"≥", 8805 }, + { @"⊂", 8834 }, + { @"⊃", 8835 }, + { @"⊄", 8836 }, + { @"⊆", 8838 }, + { @"⊇", 8839 }, + { @"⊕", 8853 }, + { @"⊗", 8855 }, + { @"⊥", 8869 }, + { @"⋅", 8901 }, + { @"⌈", 8968 }, + { @"⌉", 8969 }, + { @"⌊", 8970 }, + { @"⌋", 8971 }, + { @"⟨", 9001 }, + { @"⟩", 9002 }, + { @"◊", 9674 }, + { @"♠", 9824 }, + { @"♣", 9827 }, + { @"♥", 9829 }, { @"♦", 9830 } }; @@ -325,11 +330,11 @@ static HTMLEscapeMap gUnicodeHTMLEscapeMap[] = { { @"Š", 352 }, { @"š", 353 }, { @"Ÿ", 376 }, - + // Spacing Modifier Letters { @"ˆ", 710 }, { @"˜", 732 }, - + // General Punctuation { @" ", 8194 }, { @" ", 8195 }, @@ -372,14 +377,14 @@ static int EscapeMapCompare(const void *ucharVoid, const void *mapVoid) { @implementation NSString (GTMNSStringHTMLAdditions) -- (NSString *)gtm_stringByEscapingHTMLUsingTable:(HTMLEscapeMap*)table - ofSize:(NSUInteger)size - escapingUnicode:(BOOL)escapeUnicode { +- (NSString *)gtm_stringByEscapingHTMLUsingTable:(HTMLEscapeMap*)table + ofSize:(NSUInteger)size + escapingUnicode:(BOOL)escapeUnicode { NSUInteger length = [self length]; if (!length) { return self; } - + NSMutableString *finalString = [NSMutableString string]; NSMutableData *data2 = [NSMutableData dataWithCapacity:sizeof(unichar) * length]; @@ -405,19 +410,19 @@ static int EscapeMapCompare(const void *ucharVoid, const void *mapVoid) { return nil; // COV_NF_END } - + unichar *buffer2 = (unichar *)[data2 mutableBytes]; - + NSUInteger buffer2Length = 0; - + for (NSUInteger i = 0; i < length; ++i) { - HTMLEscapeMap *val = bsearch(&buffer[i], table, - size / sizeof(HTMLEscapeMap), + HTMLEscapeMap *val = bsearch(&buffer[i], table, + size / sizeof(HTMLEscapeMap), sizeof(HTMLEscapeMap), EscapeMapCompare); if (val || (escapeUnicode && buffer[i] > 127)) { if (buffer2Length) { - CFStringAppendCharacters((CFMutableStringRef)finalString, - buffer2, + CFStringAppendCharacters((CFMutableStringRef)finalString, + buffer2, buffer2Length); buffer2Length = 0; } @@ -434,29 +439,29 @@ static int EscapeMapCompare(const void *ucharVoid, const void *mapVoid) { } } if (buffer2Length) { - CFStringAppendCharacters((CFMutableStringRef)finalString, - buffer2, + CFStringAppendCharacters((CFMutableStringRef)finalString, + buffer2, buffer2Length); } return finalString; } - (NSString *)gtm_stringByEscapingForHTML { - return [self gtm_stringByEscapingHTMLUsingTable:gUnicodeHTMLEscapeMap - ofSize:sizeof(gUnicodeHTMLEscapeMap) + return [self gtm_stringByEscapingHTMLUsingTable:gUnicodeHTMLEscapeMap + ofSize:sizeof(gUnicodeHTMLEscapeMap) escapingUnicode:NO]; } // gtm_stringByEscapingHTML - (NSString *)gtm_stringByEscapingForAsciiHTML { - return [self gtm_stringByEscapingHTMLUsingTable:gAsciiHTMLEscapeMap - ofSize:sizeof(gAsciiHTMLEscapeMap) + return [self gtm_stringByEscapingHTMLUsingTable:gAsciiHTMLEscapeMap + ofSize:sizeof(gAsciiHTMLEscapeMap) escapingUnicode:YES]; } // gtm_stringByEscapingAsciiHTML - (NSString *)gtm_stringByUnescapingFromHTML { NSRange range = NSMakeRange(0, [self length]); NSRange subrange = [self rangeOfString:@"&" options:NSBackwardsSearch range:range]; - + // if no ampersands, we've got a quick way out if (subrange.length == 0) return self; NSMutableString *finalString = [NSMutableString stringWithString:self]; @@ -480,9 +485,9 @@ static int EscapeMapCompare(const void *ucharVoid, const void *mapVoid) { NSString *hexSequence = [escapeString substringWithRange:NSMakeRange(3, length - 4)]; NSScanner *scanner = [NSScanner scannerWithString:hexSequence]; unsigned value; - if ([scanner scanHexInt:&value] && + if ([scanner scanHexInt:&value] && value < USHRT_MAX && - value > 0 + value > 0 && [scanner scanLocation] == length - 4) { unichar uchar = (unichar)value; NSString *charString = [NSString stringWithCharacters:&uchar length:1]; @@ -494,9 +499,9 @@ static int EscapeMapCompare(const void *ucharVoid, const void *mapVoid) { NSString *numberSequence = [escapeString substringWithRange:NSMakeRange(2, length - 3)]; NSScanner *scanner = [NSScanner scannerWithString:numberSequence]; int value; - if ([scanner scanInt:&value] && + if ([scanner scanInt:&value] && value < USHRT_MAX && - value > 0 + value > 0 && [scanner scanLocation] == length - 3) { unichar uchar = (unichar)value; NSString *charString = [NSString stringWithCharacters:&uchar length:1]; diff --git a/Foundation/GTMNSString+HTMLTest.m b/Foundation/GTMNSString+HTMLTest.m index 1c7baf0..52c7b6a 100644 --- a/Foundation/GTMNSString+HTMLTest.m +++ b/Foundation/GTMNSString+HTMLTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -25,65 +25,65 @@ @implementation GTMNSString_HTMLTest - (void)testStringByEscapingHTML { - unichar chars[] = + unichar chars[] = { 34, 38, 39, 60, 62, 338, 339, 352, 353, 376, 710, 732, - 8194, 8195, 8201, 8204, 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, + 8194, 8195, 8201, 8204, 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, 8240, 8249, 8250, 8364, }; - + NSString *string1 = [NSString stringWithCharacters:chars length:sizeof(chars) / sizeof(unichar)]; - NSString *string2 = + NSString *string2 = @""&'<>ŒœŠšŸ" "ˆ˜   ‌‍‎‏–" "—‘’‚“”„†‡" "‰‹›€"; - STAssertEqualObjects([string1 gtm_stringByEscapingForHTML], - string2, - @"HTML escaping failed"); - - STAssertEqualObjects([@"<this & that>" gtm_stringByEscapingForHTML], - @"<this & that>", - @"HTML escaping failed"); + XCTAssertEqualObjects([string1 gtm_stringByEscapingForHTML], + string2, + @"HTML escaping failed"); + + XCTAssertEqualObjects([@"<this & that>" gtm_stringByEscapingForHTML], + @"<this & that>", + @"HTML escaping failed"); NSString *string = [NSString stringWithUTF8String:"パン・&ド・カンパーニュ"]; NSString *escapeStr = [NSString stringWithUTF8String:"パン・&ド・カンパーニュ"]; - STAssertEqualObjects([string gtm_stringByEscapingForHTML], - escapeStr, - @"HTML escaping failed"); - + XCTAssertEqualObjects([string gtm_stringByEscapingForHTML], + escapeStr, + @"HTML escaping failed"); + string = [NSString stringWithUTF8String:"abcا1ب<تdef&"]; - STAssertEqualObjects([string gtm_stringByEscapingForHTML], - [NSString stringWithUTF8String:"abcا1ب<تdef&"], - @"HTML escaping failed"); - + XCTAssertEqualObjects([string gtm_stringByEscapingForHTML], + [NSString stringWithUTF8String:"abcا1ب<تdef&"], + @"HTML escaping failed"); + // test empty string - STAssertEqualObjects([@"" gtm_stringByEscapingForHTML], @"", nil); + XCTAssertEqualObjects([@"" gtm_stringByEscapingForHTML], @""); } // testStringByEscapingHTML - (void)testStringByEscapingAsciiHTML { - unichar chars[] = + unichar chars[] = { 34, 38, 39, 60, 62, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 338, 339, 352, 353, 376, - 402, 710, 732, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, - 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, - 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, - 963, 964, 965, 966, 967, 968, 969, 977, 978, 982, 8194, 8195, 8201, 8204, - 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, - 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8254, 8260, 8364, 8472, 8465, 8476, - 8482, 8501, 8592, 8593, 8594, 8595, 8596, 8629, 8656, 8657, 8658, 8659, 8660, - 8704, 8706, 8707, 8709, 8711, 8712, 8713, 8715, 8719, 8721, 8722, 8727, 8730, - 8733, 8734, 8736, 8743, 8744, 8745, 8746, 8747, 8756, 8764, 8773, 8776, 8800, - 8801, 8804, 8805, 8834, 8835, 8836, 8838, 8839, 8853, 8855, 8869, 8901, 8968, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 338, 339, 352, 353, 376, + 402, 710, 732, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, + 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 977, 978, 982, 8194, 8195, 8201, 8204, + 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, + 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8254, 8260, 8364, 8472, 8465, 8476, + 8482, 8501, 8592, 8593, 8594, 8595, 8596, 8629, 8656, 8657, 8658, 8659, 8660, + 8704, 8706, 8707, 8709, 8711, 8712, 8713, 8715, 8719, 8721, 8722, 8727, 8730, + 8733, 8734, 8736, 8743, 8744, 8745, 8746, 8747, 8756, 8764, 8773, 8776, 8800, + 8801, 8804, 8805, 8834, 8835, 8836, 8838, 8839, 8853, 8855, 8869, 8901, 8968, 8969, 8970, 8971, 9001, 9002, 9674, 9824, 9827, 9829, 9830 }; - + NSString *string1 = [NSString stringWithCharacters:chars length:sizeof(chars) / sizeof(unichar)]; - NSString *string2 = + NSString *string2 = @""&'<> ¡¢£¤¥" "¦§¨©ª«¬­®¯°" "±²³´µ¶·¸¹" @@ -112,29 +112,29 @@ "⊂⊃⊄⊆⊇⊕⊗⊥⋅⌈" "⌉⌊⌋⟨⟩◊♠♣♥" "♦"; - - STAssertEqualObjects([string1 gtm_stringByEscapingForAsciiHTML], - string2, - @"HTML escaping failed"); - - STAssertEqualObjects([@"<this & that>" gtm_stringByEscapingForAsciiHTML], - @"<this & that>", - @"HTML escaping failed"); + + XCTAssertEqualObjects([string1 gtm_stringByEscapingForAsciiHTML], + string2, + @"HTML escaping failed"); + + XCTAssertEqualObjects([@"<this & that>" gtm_stringByEscapingForAsciiHTML], + @"<this & that>", + @"HTML escaping failed"); NSString *string = [NSString stringWithUTF8String:"パン・ド・カンパーニュ"]; - STAssertEqualObjects([string gtm_stringByEscapingForAsciiHTML], - @"パン・ド・カ" - "ンパーニュ", - @"HTML escaping failed"); - + XCTAssertEqualObjects([string gtm_stringByEscapingForAsciiHTML], + @"パン・ド・カ" + "ンパーニュ", + @"HTML escaping failed"); + // Mix in some right - to left string = [NSString stringWithUTF8String:"abcا1ب<تdef&"]; - STAssertEqualObjects([string gtm_stringByEscapingForAsciiHTML], - @"abcا1ب<تdef&", - @"HTML escaping failed"); + XCTAssertEqualObjects([string gtm_stringByEscapingForAsciiHTML], + @"abcا1ب<تdef&", + @"HTML escaping failed"); } // stringByEscapingAsciiHTML - (void)testStringByUnescapingHTML { - NSString *string1 = + NSString *string1 = @""&'<> ¡¢£¤¥" "¦§¨©ª«¬­®¯°" "±²³´µ¶·¸¹" @@ -163,80 +163,81 @@ "⊂⊃⊄⊆⊇⊕⊗⊥⋅⌈" "⌉⌊⌋⟨⟩◊♠♣♥" "♦"; - - unichar chars[] = + + unichar chars[] = { 34, 38, 39, 60, 62, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 338, 339, 352, 353, 376, - 402, 710, 732, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, - 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, - 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, - 963, 964, 965, 966, 967, 968, 969, 977, 978, 982, 8194, 8195, 8201, 8204, - 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, - 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8254, 8260, 8364, 8472, 8465, 8476, - 8482, 8501, 8592, 8593, 8594, 8595, 8596, 8629, 8656, 8657, 8658, 8659, 8660, - 8704, 8706, 8707, 8709, 8711, 8712, 8713, 8715, 8719, 8721, 8722, 8727, 8730, - 8733, 8734, 8736, 8743, 8744, 8745, 8746, 8747, 8756, 8764, 8773, 8776, 8800, - 8801, 8804, 8805, 8834, 8835, 8836, 8838, 8839, 8853, 8855, 8869, 8901, 8968, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 338, 339, 352, 353, 376, + 402, 710, 732, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, + 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 977, 978, 982, 8194, 8195, 8201, 8204, + 8205, 8206, 8207, 8211, 8212, 8216, 8217, 8218, 8220, 8221, 8222, 8224, 8225, + 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8254, 8260, 8364, 8472, 8465, 8476, + 8482, 8501, 8592, 8593, 8594, 8595, 8596, 8629, 8656, 8657, 8658, 8659, 8660, + 8704, 8706, 8707, 8709, 8711, 8712, 8713, 8715, 8719, 8721, 8722, 8727, 8730, + 8733, 8734, 8736, 8743, 8744, 8745, 8746, 8747, 8756, 8764, 8773, 8776, 8800, + 8801, 8804, 8805, 8834, 8835, 8836, 8838, 8839, 8853, 8855, 8869, 8901, 8968, 8969, 8970, 8971, 9001, 9002, 9674, 9824, 9827, 9829, 9830 }; - + NSString *string2 = [NSString stringWithCharacters:chars length:sizeof(chars) / sizeof(unichar)]; - STAssertEqualObjects([string1 gtm_stringByUnescapingFromHTML], - string2, - @"HTML unescaping failed"); - - STAssertEqualObjects([@"ABC" gtm_stringByUnescapingFromHTML], - @"ABC", @"HTML unescaping failed"); - - STAssertEqualObjects([@"" gtm_stringByUnescapingFromHTML], - @"", @"HTML unescaping failed"); - - STAssertEqualObjects([@"A&Bang;C" gtm_stringByUnescapingFromHTML], - @"A&Bang;C", @"HTML unescaping failed"); - - STAssertEqualObjects([@"A&Bang;C" gtm_stringByUnescapingFromHTML], - @"A&Bang;C", @"HTML unescaping failed"); - - STAssertEqualObjects([@"A&Bang;C" gtm_stringByUnescapingFromHTML], - @"A&Bang;C", @"HTML unescaping failed"); - - STAssertEqualObjects([@"AA;" gtm_stringByUnescapingFromHTML], - @"AA;", @"HTML unescaping failed"); - - STAssertEqualObjects([@"&" gtm_stringByUnescapingFromHTML], - @"&", @"HTML unescaping failed"); - - STAssertEqualObjects([@"&;" gtm_stringByUnescapingFromHTML], - @"&;", @"HTML unescaping failed"); - - STAssertEqualObjects([@"&x;" gtm_stringByUnescapingFromHTML], - @"&x;", @"HTML unescaping failed"); - - STAssertEqualObjects([@"&X;" gtm_stringByUnescapingFromHTML], - @"&X;", @"HTML unescaping failed"); - - STAssertEqualObjects([@";" gtm_stringByUnescapingFromHTML], - @";", @"HTML unescaping failed"); - - STAssertEqualObjects([@"<this & that>" gtm_stringByUnescapingFromHTML], - @"<this & that>", @"HTML unescaping failed"); - - + XCTAssertEqualObjects([string1 gtm_stringByUnescapingFromHTML], + string2, + @"HTML unescaping failed"); + + XCTAssertEqualObjects([@"ABC" gtm_stringByUnescapingFromHTML], + @"ABC", @"HTML unescaping failed"); + + XCTAssertEqualObjects([@"" gtm_stringByUnescapingFromHTML], + @"", @"HTML unescaping failed"); + + XCTAssertEqualObjects([@"A&Bang;C" gtm_stringByUnescapingFromHTML], + @"A&Bang;C", @"HTML unescaping failed"); + + XCTAssertEqualObjects([@"A&Bang;C" gtm_stringByUnescapingFromHTML], + @"A&Bang;C", @"HTML unescaping failed"); + + XCTAssertEqualObjects([@"A&Bang;C" gtm_stringByUnescapingFromHTML], + @"A&Bang;C", @"HTML unescaping failed"); + + XCTAssertEqualObjects([@"AA;" gtm_stringByUnescapingFromHTML], + @"AA;", @"HTML unescaping failed"); + + XCTAssertEqualObjects([@"&" gtm_stringByUnescapingFromHTML], + @"&", @"HTML unescaping failed"); + + XCTAssertEqualObjects([@"&;" gtm_stringByUnescapingFromHTML], + @"&;", @"HTML unescaping failed"); + + XCTAssertEqualObjects([@"&x;" gtm_stringByUnescapingFromHTML], + @"&x;", @"HTML unescaping failed"); + + XCTAssertEqualObjects([@"&X;" gtm_stringByUnescapingFromHTML], + @"&X;", @"HTML unescaping failed"); + + XCTAssertEqualObjects([@";" gtm_stringByUnescapingFromHTML], + @";", @"HTML unescaping failed"); + + XCTAssertEqualObjects([@"<this & that>" gtm_stringByUnescapingFromHTML], + @"<this & that>", @"HTML unescaping failed"); + + } // testStringByUnescapingHTML - (void)testStringRoundtrippingEscapedHTML { NSString *string = [NSString stringWithUTF8String:"This test ©™®๒०᠐٧"]; - STAssertEqualObjects(string, - [[string gtm_stringByEscapingForHTML] gtm_stringByUnescapingFromHTML], - @"HTML Roundtripping failed"); + XCTAssertEqualObjects(string, + [[string gtm_stringByEscapingForHTML] gtm_stringByUnescapingFromHTML], + @"HTML Roundtripping failed"); string = [NSString stringWithUTF8String:"This test ©™®๒०᠐٧"]; - STAssertEqualObjects(string, - [[string gtm_stringByEscapingForAsciiHTML] gtm_stringByUnescapingFromHTML], - @"HTML Roundtripping failed"); + XCTAssertEqualObjects(string, + [[string gtm_stringByEscapingForAsciiHTML] gtm_stringByUnescapingFromHTML], + @"HTML Roundtripping failed"); } + @end diff --git a/Foundation/GTMNSString+URLArgumentsTest.m b/Foundation/GTMNSString+URLArgumentsTest.m index 5555acf..308b5d6 100644 --- a/Foundation/GTMNSString+URLArgumentsTest.m +++ b/Foundation/GTMNSString+URLArgumentsTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -27,68 +27,68 @@ - (void)testEscaping { // should be done already by the basic code - STAssertEqualObjects([@"this that" gtm_stringByEscapingForURLArgument], @"this%20that", @"- space should be escaped"); - STAssertEqualObjects([@"this\"that" gtm_stringByEscapingForURLArgument], @"this%22that", @"- double quote should be escaped"); + XCTAssertEqualObjects([@"this that" gtm_stringByEscapingForURLArgument], @"this%20that", @"- space should be escaped"); + XCTAssertEqualObjects([@"this\"that" gtm_stringByEscapingForURLArgument], @"this%22that", @"- double quote should be escaped"); // make sure our additions are handled - STAssertEqualObjects([@"this!that" gtm_stringByEscapingForURLArgument], @"this%21that", @"- exclamation mark should be escaped"); - STAssertEqualObjects([@"this*that" gtm_stringByEscapingForURLArgument], @"this%2Athat", @"- asterisk should be escaped"); - STAssertEqualObjects([@"this'that" gtm_stringByEscapingForURLArgument], @"this%27that", @"- single quote should be escaped"); - STAssertEqualObjects([@"this(that" gtm_stringByEscapingForURLArgument], @"this%28that", @"- left paren should be escaped"); - STAssertEqualObjects([@"this)that" gtm_stringByEscapingForURLArgument], @"this%29that", @"- right paren should be escaped"); - STAssertEqualObjects([@"this;that" gtm_stringByEscapingForURLArgument], @"this%3Bthat", @"- semi-colon should be escaped"); - STAssertEqualObjects([@"this:that" gtm_stringByEscapingForURLArgument], @"this%3Athat", @"- colon should be escaped"); - STAssertEqualObjects([@"this@that" gtm_stringByEscapingForURLArgument], @"this%40that", @"- at sign should be escaped"); - STAssertEqualObjects([@"this&that" gtm_stringByEscapingForURLArgument], @"this%26that", @"- ampersand should be escaped"); - STAssertEqualObjects([@"this=that" gtm_stringByEscapingForURLArgument], @"this%3Dthat", @"- equals should be escaped"); - STAssertEqualObjects([@"this+that" gtm_stringByEscapingForURLArgument], @"this%2Bthat", @"- plus should be escaped"); - STAssertEqualObjects([@"this$that" gtm_stringByEscapingForURLArgument], @"this%24that", @"- dollar-sign should be escaped"); - STAssertEqualObjects([@"this,that" gtm_stringByEscapingForURLArgument], @"this%2Cthat", @"- comma should be escaped"); - STAssertEqualObjects([@"this/that" gtm_stringByEscapingForURLArgument], @"this%2Fthat", @"- slash should be escaped"); - STAssertEqualObjects([@"this?that" gtm_stringByEscapingForURLArgument], @"this%3Fthat", @"- question mark should be escaped"); - STAssertEqualObjects([@"this%that" gtm_stringByEscapingForURLArgument], @"this%25that", @"- percent should be escaped"); - STAssertEqualObjects([@"this#that" gtm_stringByEscapingForURLArgument], @"this%23that", @"- pound should be escaped"); - STAssertEqualObjects([@"this[that" gtm_stringByEscapingForURLArgument], @"this%5Bthat", @"- left bracket should be escaped"); - STAssertEqualObjects([@"this]that" gtm_stringByEscapingForURLArgument], @"this%5Dthat", @"- right bracket should be escaped"); + XCTAssertEqualObjects([@"this!that" gtm_stringByEscapingForURLArgument], @"this%21that", @"- exclamation mark should be escaped"); + XCTAssertEqualObjects([@"this*that" gtm_stringByEscapingForURLArgument], @"this%2Athat", @"- asterisk should be escaped"); + XCTAssertEqualObjects([@"this'that" gtm_stringByEscapingForURLArgument], @"this%27that", @"- single quote should be escaped"); + XCTAssertEqualObjects([@"this(that" gtm_stringByEscapingForURLArgument], @"this%28that", @"- left paren should be escaped"); + XCTAssertEqualObjects([@"this)that" gtm_stringByEscapingForURLArgument], @"this%29that", @"- right paren should be escaped"); + XCTAssertEqualObjects([@"this;that" gtm_stringByEscapingForURLArgument], @"this%3Bthat", @"- semi-colon should be escaped"); + XCTAssertEqualObjects([@"this:that" gtm_stringByEscapingForURLArgument], @"this%3Athat", @"- colon should be escaped"); + XCTAssertEqualObjects([@"this@that" gtm_stringByEscapingForURLArgument], @"this%40that", @"- at sign should be escaped"); + XCTAssertEqualObjects([@"this&that" gtm_stringByEscapingForURLArgument], @"this%26that", @"- ampersand should be escaped"); + XCTAssertEqualObjects([@"this=that" gtm_stringByEscapingForURLArgument], @"this%3Dthat", @"- equals should be escaped"); + XCTAssertEqualObjects([@"this+that" gtm_stringByEscapingForURLArgument], @"this%2Bthat", @"- plus should be escaped"); + XCTAssertEqualObjects([@"this$that" gtm_stringByEscapingForURLArgument], @"this%24that", @"- dollar-sign should be escaped"); + XCTAssertEqualObjects([@"this,that" gtm_stringByEscapingForURLArgument], @"this%2Cthat", @"- comma should be escaped"); + XCTAssertEqualObjects([@"this/that" gtm_stringByEscapingForURLArgument], @"this%2Fthat", @"- slash should be escaped"); + XCTAssertEqualObjects([@"this?that" gtm_stringByEscapingForURLArgument], @"this%3Fthat", @"- question mark should be escaped"); + XCTAssertEqualObjects([@"this%that" gtm_stringByEscapingForURLArgument], @"this%25that", @"- percent should be escaped"); + XCTAssertEqualObjects([@"this#that" gtm_stringByEscapingForURLArgument], @"this%23that", @"- pound should be escaped"); + XCTAssertEqualObjects([@"this[that" gtm_stringByEscapingForURLArgument], @"this%5Bthat", @"- left bracket should be escaped"); + XCTAssertEqualObjects([@"this]that" gtm_stringByEscapingForURLArgument], @"this%5Dthat", @"- right bracket should be escaped"); // make sure plus and space are handled in the right order - STAssertEqualObjects([@"this that+the other" gtm_stringByEscapingForURLArgument], @"this%20that%2Bthe%20other", @"- pluses and spaces should be different"); + XCTAssertEqualObjects([@"this that+the other" gtm_stringByEscapingForURLArgument], @"this%20that%2Bthe%20other", @"- pluses and spaces should be different"); // high char test NSString *tester = [NSString stringWithUTF8String:"caf\xC3\xA9"]; - STAssertNotNil(tester, @"failed to create from utf8 run"); - STAssertEqualObjects([tester gtm_stringByEscapingForURLArgument], @"caf%C3%A9", @"- high chars should work"); + XCTAssertNotNil(tester, @"failed to create from utf8 run"); + XCTAssertEqualObjects([tester gtm_stringByEscapingForURLArgument], @"caf%C3%A9", @"- high chars should work"); } - (void)testUnescaping { // should be done already by the basic code - STAssertEqualObjects([@"this%20that" gtm_stringByUnescapingFromURLArgument], @"this that", @"- space should be unescaped"); - STAssertEqualObjects([@"this%22that" gtm_stringByUnescapingFromURLArgument], @"this\"that", @"- double quote should be unescaped"); + XCTAssertEqualObjects([@"this%20that" gtm_stringByUnescapingFromURLArgument], @"this that", @"- space should be unescaped"); + XCTAssertEqualObjects([@"this%22that" gtm_stringByUnescapingFromURLArgument], @"this\"that", @"- double quote should be unescaped"); // make sure our additions are handled - STAssertEqualObjects([@"this%21that" gtm_stringByUnescapingFromURLArgument], @"this!that", @"- exclamation mark should be unescaped"); - STAssertEqualObjects([@"this%2Athat" gtm_stringByUnescapingFromURLArgument], @"this*that", @"- asterisk should be unescaped"); - STAssertEqualObjects([@"this%27that" gtm_stringByUnescapingFromURLArgument], @"this'that", @"- single quote should be unescaped"); - STAssertEqualObjects([@"this%28that" gtm_stringByUnescapingFromURLArgument], @"this(that", @"- left paren should be unescaped"); - STAssertEqualObjects([@"this%29that" gtm_stringByUnescapingFromURLArgument], @"this)that", @"- right paren should be unescaped"); - STAssertEqualObjects([@"this%3Bthat" gtm_stringByUnescapingFromURLArgument], @"this;that", @"- semi-colon should be unescaped"); - STAssertEqualObjects([@"this%3Athat" gtm_stringByUnescapingFromURLArgument], @"this:that", @"- colon should be unescaped"); - STAssertEqualObjects([@"this%40that" gtm_stringByUnescapingFromURLArgument], @"this@that", @"- at sign should be unescaped"); - STAssertEqualObjects([@"this%26that" gtm_stringByUnescapingFromURLArgument], @"this&that", @"- ampersand should be unescaped"); - STAssertEqualObjects([@"this%3Dthat" gtm_stringByUnescapingFromURLArgument], @"this=that", @"- equals should be unescaped"); - STAssertEqualObjects([@"this%2Bthat" gtm_stringByUnescapingFromURLArgument], @"this+that", @"- plus should be unescaped"); - STAssertEqualObjects([@"this%24that" gtm_stringByUnescapingFromURLArgument], @"this$that", @"- dollar-sign should be unescaped"); - STAssertEqualObjects([@"this%2Cthat" gtm_stringByUnescapingFromURLArgument], @"this,that", @"- comma should be unescaped"); - STAssertEqualObjects([@"this%2Fthat" gtm_stringByUnescapingFromURLArgument], @"this/that", @"- slash should be unescaped"); - STAssertEqualObjects([@"this%3Fthat" gtm_stringByUnescapingFromURLArgument], @"this?that", @"- question mark should be unescaped"); - STAssertEqualObjects([@"this%25that" gtm_stringByUnescapingFromURLArgument], @"this%that", @"- percent should be unescaped"); - STAssertEqualObjects([@"this%23that" gtm_stringByUnescapingFromURLArgument], @"this#that", @"- pound should be unescaped"); - STAssertEqualObjects([@"this%5Bthat" gtm_stringByUnescapingFromURLArgument], @"this[that", @"- left bracket should be unescaped"); - STAssertEqualObjects([@"this%5Dthat" gtm_stringByUnescapingFromURLArgument], @"this]that", @"- right bracket should be unescaped"); + XCTAssertEqualObjects([@"this%21that" gtm_stringByUnescapingFromURLArgument], @"this!that", @"- exclamation mark should be unescaped"); + XCTAssertEqualObjects([@"this%2Athat" gtm_stringByUnescapingFromURLArgument], @"this*that", @"- asterisk should be unescaped"); + XCTAssertEqualObjects([@"this%27that" gtm_stringByUnescapingFromURLArgument], @"this'that", @"- single quote should be unescaped"); + XCTAssertEqualObjects([@"this%28that" gtm_stringByUnescapingFromURLArgument], @"this(that", @"- left paren should be unescaped"); + XCTAssertEqualObjects([@"this%29that" gtm_stringByUnescapingFromURLArgument], @"this)that", @"- right paren should be unescaped"); + XCTAssertEqualObjects([@"this%3Bthat" gtm_stringByUnescapingFromURLArgument], @"this;that", @"- semi-colon should be unescaped"); + XCTAssertEqualObjects([@"this%3Athat" gtm_stringByUnescapingFromURLArgument], @"this:that", @"- colon should be unescaped"); + XCTAssertEqualObjects([@"this%40that" gtm_stringByUnescapingFromURLArgument], @"this@that", @"- at sign should be unescaped"); + XCTAssertEqualObjects([@"this%26that" gtm_stringByUnescapingFromURLArgument], @"this&that", @"- ampersand should be unescaped"); + XCTAssertEqualObjects([@"this%3Dthat" gtm_stringByUnescapingFromURLArgument], @"this=that", @"- equals should be unescaped"); + XCTAssertEqualObjects([@"this%2Bthat" gtm_stringByUnescapingFromURLArgument], @"this+that", @"- plus should be unescaped"); + XCTAssertEqualObjects([@"this%24that" gtm_stringByUnescapingFromURLArgument], @"this$that", @"- dollar-sign should be unescaped"); + XCTAssertEqualObjects([@"this%2Cthat" gtm_stringByUnescapingFromURLArgument], @"this,that", @"- comma should be unescaped"); + XCTAssertEqualObjects([@"this%2Fthat" gtm_stringByUnescapingFromURLArgument], @"this/that", @"- slash should be unescaped"); + XCTAssertEqualObjects([@"this%3Fthat" gtm_stringByUnescapingFromURLArgument], @"this?that", @"- question mark should be unescaped"); + XCTAssertEqualObjects([@"this%25that" gtm_stringByUnescapingFromURLArgument], @"this%that", @"- percent should be unescaped"); + XCTAssertEqualObjects([@"this%23that" gtm_stringByUnescapingFromURLArgument], @"this#that", @"- pound should be unescaped"); + XCTAssertEqualObjects([@"this%5Bthat" gtm_stringByUnescapingFromURLArgument], @"this[that", @"- left bracket should be unescaped"); + XCTAssertEqualObjects([@"this%5Dthat" gtm_stringByUnescapingFromURLArgument], @"this]that", @"- right bracket should be unescaped"); // make sure a plus come back out as a space - STAssertEqualObjects([@"this+that" gtm_stringByUnescapingFromURLArgument], @"this that", @"- plus should be unescaped"); + XCTAssertEqualObjects([@"this+that" gtm_stringByUnescapingFromURLArgument], @"this that", @"- plus should be unescaped"); // make sure plus and %2B are handled in the right order - STAssertEqualObjects([@"this+that%2Bthe%20other" gtm_stringByUnescapingFromURLArgument], @"this that+the other", @"- pluses and spaces should be different"); + XCTAssertEqualObjects([@"this+that%2Bthe%20other" gtm_stringByUnescapingFromURLArgument], @"this that+the other", @"- pluses and spaces should be different"); // high char test NSString *tester = [NSString stringWithUTF8String:"caf\xC3\xA9"]; - STAssertNotNil(tester, @"failed to create from utf8 run"); - STAssertEqualObjects([@"caf%C3%A9" gtm_stringByUnescapingFromURLArgument], tester, @"- high chars should work"); + XCTAssertNotNil(tester, @"failed to create from utf8 run"); + XCTAssertEqualObjects([@"caf%C3%A9" gtm_stringByUnescapingFromURLArgument], tester, @"- high chars should work"); } @end diff --git a/Foundation/GTMNSString+XML.m b/Foundation/GTMNSString+XML.m index 2e165e6..a9021ad 100644 --- a/Foundation/GTMNSString+XML.m +++ b/Foundation/GTMNSString+XML.m @@ -19,6 +19,10 @@ #import "GTMDefines.h" #import "GTMNSString+XML.h" +// Export a nonsense symbol to suppress a libtool warning when this is linked alone in a static lib. +__attribute__((visibility("default"))) + char NSString_GTMNSStringXMLAdditionsExportToSuppressLibToolWarning = 0; + enum { kGTMXMLCharModeEncodeQUOT = 0, kGTMXMLCharModeEncodeAMP = 1, diff --git a/Foundation/GTMNSString+XMLTest.m b/Foundation/GTMNSString+XMLTest.m index 7e37e31..1832d90 100644 --- a/Foundation/GTMNSString+XMLTest.m +++ b/Foundation/GTMNSString+XMLTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -39,10 +39,10 @@ [NSString stringWithFormat:@"zzzzz"z&z'z<z>z zzz%Czzz\nz\rz\tz", (unsigned short)0xE000]; - STAssertEqualObjects([string1 gtm_stringBySanitizingAndEscapingForXML], - string2, - @"Sanitize and Escape for XML failed"); - + XCTAssertEqualObjects([string1 gtm_stringBySanitizingAndEscapingForXML], + string2, + @"Sanitize and Escape for XML failed"); + // force the backing store of the NSString to test extraction paths char ascBuffer[] = "a\01bcde\nf"; NSString *ascString = @@ -50,12 +50,12 @@ length:sizeof(ascBuffer) / sizeof(char) encoding:NSASCIIStringEncoding freeWhenDone:NO] autorelease]; - STAssertEqualObjects([ascString gtm_stringBySanitizingAndEscapingForXML], - @"abcde\nf", - @"Sanitize and Escape for XML from asc buffer failed"); + XCTAssertEqualObjects([ascString gtm_stringBySanitizingAndEscapingForXML], + @"abcde\nf", + @"Sanitize and Escape for XML from asc buffer failed"); // test empty string - STAssertEqualObjects([@"" gtm_stringBySanitizingAndEscapingForXML], @"", nil); + XCTAssertEqualObjects([@"" gtm_stringBySanitizingAndEscapingForXML], @""); } - (void)testStringBySanitizingToXMLSpec { @@ -64,16 +64,16 @@ 'z', 0, 'z', 1, 'z', 4, 'z', 5, 'z', 34, 'z', 38, 'z', 39, 'z', 60, 'z', 62, 'z', ' ', 'z', 0xd800, 'z', 0xDFFF, 'z', 0xE000, 'z', 0xFFFE, 'z', 0xFFFF, 'z', '\n', 'z', '\r', 'z', '\t', 'z' }; - + NSString *string1 = [NSString stringWithCharacters:chars length:sizeof(chars) / sizeof(UniChar)]; NSString *string2 = [NSString stringWithFormat:@"zzzzz\"z&z'z<z>z zzz%Czzz\nz\rz\tz", (unsigned short)0xE000]; - - STAssertEqualObjects([string1 gtm_stringBySanitizingToXMLSpec], - string2, - @"Sanitize for XML failed"); + + XCTAssertEqualObjects([string1 gtm_stringBySanitizingToXMLSpec], + string2, + @"Sanitize for XML failed"); // force the backing store of the NSString to test extraction paths char ascBuffer[] = "a\01bcde\nf"; @@ -82,12 +82,12 @@ length:sizeof(ascBuffer) / sizeof(char) encoding:NSASCIIStringEncoding freeWhenDone:NO] autorelease]; - STAssertEqualObjects([ascString gtm_stringBySanitizingToXMLSpec], - @"abcde\nf", - @"Sanitize and Escape for XML from asc buffer failed"); + XCTAssertEqualObjects([ascString gtm_stringBySanitizingToXMLSpec], + @"abcde\nf", + @"Sanitize and Escape for XML from asc buffer failed"); // test empty string - STAssertEqualObjects([@"" gtm_stringBySanitizingToXMLSpec], @"", nil); + XCTAssertEqualObjects([@"" gtm_stringBySanitizingToXMLSpec], @""); } @end diff --git a/Foundation/GTMNSThread+Blocks.h b/Foundation/GTMNSThread+Blocks.h index 23e4e60..e3700bb 100644 --- a/Foundation/GTMNSThread+Blocks.h +++ b/Foundation/GTMNSThread+Blocks.h @@ -38,10 +38,6 @@ #endif // NS_BLOCKS_AVAILABLE -// [NSObject performSelector:onThread:...] 10.5 and later, so this makes no -// sense on any earlier SDK. -#if GTM_IPHONE_SDK || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) - // A simple thread that does nothing but handle performBlock and // performSelector calls. @interface GTMSimpleWorkerThread : NSThread { @@ -54,5 +50,3 @@ - (void)stop; @end - -#endif // GTM_IPHONE_SDK || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) diff --git a/Foundation/GTMNSThread+Blocks.m b/Foundation/GTMNSThread+Blocks.m index 2476ad5..4ab3ee5 100644 --- a/Foundation/GTMNSThread+Blocks.m +++ b/Foundation/GTMNSThread+Blocks.m @@ -53,17 +53,6 @@ #endif // NS_BLOCKS_AVAILABLE -#if GTM_IPHONE_SDK || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) - -// Only available 10.6 and later. -typedef int (*PThreadSetNameNPPTr)(const char*); -#if !GTM_IPHONE_SDK -static PThreadSetNameNPPTr gPThreadSetNameNP = NULL; -#else -// Defined on iPhone since 3.2 -static PThreadSetNameNPPTr gPThreadSetNameNP = pthread_setname_np; -#endif // !GTM_IPHONE_SDK - enum { kGTMSimpleThreadInitialized = 0, kGTMSimpleThreadStarting, @@ -74,15 +63,6 @@ enum { @implementation GTMSimpleWorkerThread -#if !GTM_IPHONE_SDK -+ (void)initialize { - if (self == [GTMSimpleWorkerThread class]) { - // Resolve pthread_setname_np() on 10.6 and later. - gPThreadSetNameNP = dlsym(RTLD_DEFAULT, "pthread_setname_np"); - } -} -#endif // !GTM_IPHONE_SDK - - (id)init { if ((self = [super init])) { runLock_ = @@ -100,12 +80,10 @@ enum { } - (void)setThreadDebuggerName:(NSString *)name { - if (gPThreadSetNameNP) { - if ([name length]) { - gPThreadSetNameNP([name UTF8String]); - } else { - gPThreadSetNameNP(""); - } + if ([name length]) { + pthread_setname_np([name UTF8String]); + } else { + pthread_setname_np(""); } } @@ -292,5 +270,3 @@ enum { } @end - -#endif // GTM_IPHONE_SDK || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) diff --git a/Foundation/GTMNSThread+BlocksTest.m b/Foundation/GTMNSThread+BlocksTest.m index 606de6d..4b685fd 100644 --- a/Foundation/GTMNSThread+BlocksTest.m +++ b/Foundation/GTMNSThread+BlocksTest.m @@ -20,8 +20,6 @@ #import "GTMSenTestCase.h" #import "GTMNSThread+Blocks.h" -#if GTM_IPHONE_SDK || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) - #import "GTMFoundationUnitTestingUtilities.h" @interface GTMNSThread_BlocksTest : GTMTestCase { @@ -56,8 +54,8 @@ runThread = [NSThread currentThread]; [context setShouldStop:YES]; }]; - STAssertEqualObjects(runThread, currentThread, nil); - STAssertTrue([context shouldStop], nil); + XCTAssertEqualObjects(runThread, currentThread); + XCTAssertTrue([context shouldStop]); // Block with waiting runs immediately as well. runThread = nil; @@ -66,8 +64,8 @@ runThread = [NSThread currentThread]; [context setShouldStop:YES]; }]; - STAssertEqualObjects(runThread, currentThread, nil); - STAssertTrue([context shouldStop], nil); + XCTAssertEqualObjects(runThread, currentThread); + XCTAssertTrue([context shouldStop]); // Block without waiting requires a runloop spin. runThread = nil; @@ -76,10 +74,10 @@ runThread = [NSThread currentThread]; [context setShouldStop:YES]; }]; - STAssertTrue([[NSRunLoop currentRunLoop] - gtm_runUpToSixtySecondsWithContext:context], nil); - STAssertEqualObjects(runThread, currentThread, nil); - STAssertTrue([context shouldStop], nil); + XCTAssertTrue([[NSRunLoop currentRunLoop] + gtm_runUpToSixtySecondsWithContext:context]); + XCTAssertEqualObjects(runThread, currentThread); + XCTAssertTrue([context shouldStop]); } - (void)testPerformBlockInBackground { @@ -90,52 +88,52 @@ runThread = [NSThread currentThread]; [context setShouldStop:YES]; }]; - STAssertTrue([[NSRunLoop currentRunLoop] - gtm_runUpToSixtySecondsWithContext:context], nil); - STAssertNotNil(runThread, nil); - STAssertNotEqualObjects(runThread, [NSThread currentThread], nil); + XCTAssertTrue([[NSRunLoop currentRunLoop] + gtm_runUpToSixtySecondsWithContext:context]); + XCTAssertNotNil(runThread); + XCTAssertNotEqualObjects(runThread, [NSThread currentThread]); } - (void)testWorkerThreadBasics { // Unstarted worker isn't running. GTMSimpleWorkerThread *worker = [[GTMSimpleWorkerThread alloc] init]; - STAssertFalse([worker isExecuting], nil); - STAssertFalse([worker isFinished], nil); + XCTAssertFalse([worker isExecuting]); + XCTAssertFalse([worker isFinished]); // Unstarted worker can be stopped without error. [worker stop]; - STAssertFalse([worker isExecuting], nil); - STAssertTrue([worker isFinished], nil); + XCTAssertFalse([worker isExecuting]); + XCTAssertTrue([worker isFinished]); // And can be stopped again [worker stop]; - STAssertFalse([worker isExecuting], nil); - STAssertTrue([worker isFinished], nil); + XCTAssertFalse([worker isExecuting]); + XCTAssertTrue([worker isFinished]); // A thread we start can be stopped with correct state. worker = [[GTMSimpleWorkerThread alloc] init]; - STAssertFalse([worker isExecuting], nil); - STAssertFalse([worker isFinished], nil); + XCTAssertFalse([worker isExecuting]); + XCTAssertFalse([worker isFinished]); [worker start]; - STAssertTrue([worker isExecuting], nil); - STAssertFalse([worker isFinished], nil); + XCTAssertTrue([worker isExecuting]); + XCTAssertFalse([worker isFinished]); [worker stop]; - STAssertFalse([worker isExecuting], nil); - STAssertTrue([worker isFinished], nil); + XCTAssertFalse([worker isExecuting]); + XCTAssertTrue([worker isFinished]); // A cancel is also honored worker = [[GTMSimpleWorkerThread alloc] init]; - STAssertFalse([worker isExecuting], nil); - STAssertFalse([worker isFinished], nil); + XCTAssertFalse([worker isExecuting]); + XCTAssertFalse([worker isFinished]); [worker start]; - STAssertTrue([worker isExecuting], nil); - STAssertFalse([worker isFinished], nil); + XCTAssertTrue([worker isExecuting]); + XCTAssertFalse([worker isFinished]); [worker cancel]; // And after some time we're done. We're generous here, this needs to // exceed the worker thread's runloop timeout. sleep(5); - STAssertFalse([worker isExecuting], nil); - STAssertTrue([worker isFinished], nil); + XCTAssertFalse([worker isExecuting]); + XCTAssertTrue([worker isFinished]); } - (void)testWorkerThreadStopTiming { @@ -146,14 +144,14 @@ [workerThread_ gtm_performBlock:^{ [threadLock lock]; [threadLock unlockWithCondition:1]; - sleep(10); + [NSThread sleepForTimeInterval:.25]; }]; [threadLock lockWhenCondition:1]; [threadLock unlock]; [workerThread_ stop]; - STAssertFalse([workerThread_ isExecuting], nil); - STAssertTrue([workerThread_ isFinished], nil); - STAssertEqualsWithAccuracy(-[start timeIntervalSinceNow], 10.0, 2.0, nil); + XCTAssertFalse([workerThread_ isExecuting]); + XCTAssertTrue([workerThread_ isFinished]); + XCTAssertEqualWithAccuracy(-[start timeIntervalSinceNow], 0.25, 0.25); } - (void)testPerformBlockOnWorkerThread { @@ -168,10 +166,10 @@ runThread = [NSThread currentThread]; [context setShouldStop:YES]; }]; - STAssertTrue([[NSRunLoop currentRunLoop] - gtm_runUpToSixtySecondsWithContext:context], nil); - STAssertNotNil(runThread, nil); - STAssertEqualObjects(runThread, workerThread_, nil); + XCTAssertTrue([[NSRunLoop currentRunLoop] + gtm_runUpToSixtySecondsWithContext:context]); + XCTAssertNotNil(runThread); + XCTAssertEqualObjects(runThread, workerThread_); // Other thread no wait. runThread = nil; @@ -180,10 +178,10 @@ runThread = [NSThread currentThread]; [context setShouldStop:YES]; }]; - STAssertTrue([[NSRunLoop currentRunLoop] - gtm_runUpToSixtySecondsWithContext:context], nil); - STAssertNotNil(runThread, nil); - STAssertEqualObjects(runThread, workerThread_, nil); + XCTAssertTrue([[NSRunLoop currentRunLoop] + gtm_runUpToSixtySecondsWithContext:context]); + XCTAssertNotNil(runThread); + XCTAssertEqualObjects(runThread, workerThread_); // Waiting requires no runloop spin runThread = nil; @@ -192,9 +190,9 @@ runThread = [NSThread currentThread]; [context setShouldStop:YES]; }]; - STAssertTrue([context shouldStop], nil); - STAssertNotNil(runThread, nil); - STAssertEqualObjects(runThread, workerThread_, nil); + XCTAssertTrue([context shouldStop]); + XCTAssertNotNil(runThread); + XCTAssertEqualObjects(runThread, workerThread_); } - (void)testExitingBlockIsExecuting { @@ -208,10 +206,10 @@ [threadLock lockWhenCondition:1]; [threadLock unlock]; // Give the pthread_exit() a bit of time - sleep(5); + [NSThread sleepForTimeInterval:.25]; // Did we notice the thread died? Does [... isExecuting] clean up? - STAssertFalse([workerThread_ isExecuting], nil); - STAssertTrue([workerThread_ isFinished], nil); + XCTAssertFalse([workerThread_ isExecuting]); + XCTAssertTrue([workerThread_ isFinished]); } - (void)testExitingBlockCancel { @@ -225,12 +223,12 @@ [threadLock lockWhenCondition:1]; [threadLock unlock]; // Give the pthread_exit() a bit of time - sleep(5); + [NSThread sleepForTimeInterval:.25]; // Cancel/stop the thread [workerThread_ stop]; // Did we notice the thread died? Did we clean up? - STAssertFalse([workerThread_ isExecuting], nil); - STAssertTrue([workerThread_ isFinished], nil); + XCTAssertFalse([workerThread_ isExecuting]); + XCTAssertTrue([workerThread_ isFinished]); } - (void)testStopFromThread { @@ -245,23 +243,20 @@ [threadLock lockWhenCondition:1]; [threadLock unlock]; // Still need to give the thread a moment to not be executing - sleep(5); - STAssertFalse([workerThread_ isExecuting], nil); - STAssertTrue([workerThread_ isFinished], nil); + sleep(1); + XCTAssertFalse([workerThread_ isExecuting]); + XCTAssertTrue([workerThread_ isFinished]); } - (void)testPThreadName { NSString *testName = @"InigoMontoya"; [workerThread_ setName:testName]; [workerThread_ gtm_performWaitingUntilDone:NO block:^{ - STAssertEqualObjects([workerThread_ name], testName, nil); + XCTAssertEqualObjects([workerThread_ name], testName); char threadName[100]; pthread_getname_np(pthread_self(), threadName, 100); - STAssertEqualObjects([NSString stringWithUTF8String:threadName], - testName, nil); + XCTAssertEqualObjects([NSString stringWithUTF8String:threadName], testName); }]; } @end - -#endif // GTM_IPHONE_SDK || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) diff --git a/Foundation/GTMObjC2Runtime.h b/Foundation/GTMObjC2Runtime.h index e4e2ac7..e14df70 100644 --- a/Foundation/GTMObjC2Runtime.h +++ b/Foundation/GTMObjC2Runtime.h @@ -16,98 +16,16 @@ // the License. // +// These headers only being pulled in to avoid breaking changes. + +#pragma GCC warning "GTMObjcRuntime.h is deprecated and should no longer be used." + #import <objc/objc-api.h> #import <objc/objc-auto.h> #import "GTMDefines.h" -// These functions exist for code that we want to compile on both the < 10.5 -// sdks and on the >= 10.5 sdks without warnings. It basically reimplements -// certain parts of the objc2 runtime in terms of the objc1 runtime. It is not -// a complete implementation as I've only implemented the routines I know we -// use. Feel free to add more as necessary. -// These functions are not documented because they conform to the documentation -// for the ObjC2 Runtime. - -#if OBJC_API_VERSION >= 2 // Only have optional and req'd keywords in ObjC2. -#define AT_OPTIONAL @optional -#define AT_REQUIRED @required -#else -#define AT_OPTIONAL -#define AT_REQUIRED -#endif - -// The file objc-runtime.h was moved to runtime.h and in Leopard, objc-runtime.h -// was just a wrapper around runtime.h. For the iPhone SDK, this objc-runtime.h -// is removed in the iPhoneOS2.0 SDK. -// -// The |Object| class was removed in the iPhone2.0 SDK too. -#if GTM_IPHONE_SDK #import <objc/message.h> #import <objc/runtime.h> -#else -#import <objc/objc-runtime.h> -#import <objc/Object.h> -#endif #import <libkern/OSAtomic.h> -#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) -#import "objc/Protocol.h" - -OBJC_EXPORT Class object_getClass(id obj); -OBJC_EXPORT const char *class_getName(Class cls); -OBJC_EXPORT BOOL class_conformsToProtocol(Class cls, Protocol *protocol); -OBJC_EXPORT BOOL class_respondsToSelector(Class cls, SEL sel); -OBJC_EXPORT Class class_getSuperclass(Class cls); -OBJC_EXPORT Method *class_copyMethodList(Class cls, unsigned int *outCount); -OBJC_EXPORT SEL method_getName(Method m); -OBJC_EXPORT void method_exchangeImplementations(Method m1, Method m2); -OBJC_EXPORT IMP method_getImplementation(Method method); -OBJC_EXPORT IMP method_setImplementation(Method method, IMP imp); -OBJC_EXPORT struct objc_method_description protocol_getMethodDescription(Protocol *p, - SEL aSel, - BOOL isRequiredMethod, - BOOL isInstanceMethod); -OBJC_EXPORT BOOL sel_isEqual(SEL lhs, SEL rhs); - -// If building for 10.4 but using the 10.5 SDK, don't include these. -#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 -// atomics -// On Leopard these are GC aware -// Intentionally did not include the non-barrier versions, because I couldn't -// come up with a case personally where you wouldn't want to use the -// barrier versions. -GTM_INLINE bool OSAtomicCompareAndSwapPtrBarrier(void *predicate, - void *replacement, - void * volatile *theValue) { -#if defined(__LP64__) && __LP64__ - return OSAtomicCompareAndSwap64Barrier((int64_t)predicate, - (int64_t)replacement, - (int64_t *)theValue); -#else // defined(__LP64__) && __LP64__ - return OSAtomicCompareAndSwap32Barrier((int32_t)predicate, - (int32_t)replacement, - (int32_t *)theValue); -#endif // defined(__LP64__) && __LP64__ -} - -#endif // MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 -#endif // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - -#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5) - -GTM_INLINE BOOL objc_atomicCompareAndSwapGlobalBarrier(id predicate, - id replacement, - volatile id *objectLocation) { - return OSAtomicCompareAndSwapPtrBarrier(predicate, - replacement, - (void * volatile *)objectLocation); -} -GTM_INLINE BOOL objc_atomicCompareAndSwapInstanceVariableBarrier(id predicate, - id replacement, - volatile id *objectLocation) { - return OSAtomicCompareAndSwapPtrBarrier(predicate, - replacement, - (void * volatile *)objectLocation); -} -#endif // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5) diff --git a/Foundation/GTMObjC2Runtime.m b/Foundation/GTMObjC2Runtime.m index 1475103..9bd937c 100644 --- a/Foundation/GTMObjC2Runtime.m +++ b/Foundation/GTMObjC2Runtime.m @@ -16,158 +16,6 @@ // the License. // -#import "GTMObjC2Runtime.h" +// This source file is no longer necessary. -// Export a nonsense symbol to suppress a libtool warning when this is linked alone in a static lib. -__attribute__((visibility("default"))) char GTMObjC2RuntimeExportToSuppressLibToolWarning = 0; - - -#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) && !__OBJC2__ -#import <objc/objc-runtime.h> -#import <stdlib.h> -#import <string.h> - -Class object_getClass(id obj) { - if (!obj) return NULL; - return obj->isa; -} - -const char *class_getName(Class cls) { - if (!cls) return "nil"; - return cls->name; -} - -BOOL class_conformsToProtocol(Class cls, Protocol *protocol) { - // We intentionally don't check cls as it crashes on Leopard so we want - // to crash on Tiger as well. - // I logged - // Radar 5572978 class_conformsToProtocol crashes when arg1 is passed as nil - // because it seems odd that this API won't accept nil for cls considering - // all the other apis will accept nil args. - // If this does get fixed, remember to enable the unit tests. - if (!protocol) return NO; - - struct objc_protocol_list *protos; - for (protos = cls->protocols; protos != NULL; protos = protos->next) { - for (long i = 0; i < protos->count; i++) { - if ([protos->list[i] conformsTo:protocol]) { - return YES; - } - } - } - return NO; -} - -Class class_getSuperclass(Class cls) { - if (!cls) return NULL; - return cls->super_class; -} - -BOOL class_respondsToSelector(Class cls, SEL sel) { - return class_getInstanceMethod(cls, sel) != nil; -} - -Method *class_copyMethodList(Class cls, unsigned int *outCount) { - if (!cls) return NULL; - - unsigned int count = 0; - void *iterator = NULL; - struct objc_method_list *mlist; - Method *methods = NULL; - if (outCount) *outCount = 0; - - while ( (mlist = class_nextMethodList(cls, &iterator)) ) { - if (mlist->method_count == 0) continue; - Method *new_methods = (Method *)realloc(methods, - sizeof(Method) * (count + mlist->method_count + 1)); - if (!new_methods) { - // COV_NF_START - //Memory alloc failed, so what can we do? - free(methods); - return NULL; - // COV_NF_END - } else { - methods = new_methods; - } - for (int i = 0; i < mlist->method_count; i++) { - methods[i + count] = &mlist->method_list[i]; - } - count += mlist->method_count; - } - - // List must be NULL terminated - if (methods) { - methods[count] = NULL; - } - if (outCount) *outCount = count; - return methods; -} - -SEL method_getName(Method method) { - if (!method) return NULL; - return method->method_name; -} - -IMP method_getImplementation(Method method) { - if (!method) return NULL; - return method->method_imp; -} - -IMP method_setImplementation(Method method, IMP imp) { - // We intentionally don't test method for nil. - // Leopard fails here, so should we. - // I logged this as Radar: - // 5572981 method_setImplementation crashes if you pass nil for the - // method arg (arg 1) - // because it seems odd that this API won't accept nil for method considering - // all the other apis will accept nil args. - // If this does get fixed, remember to enable the unit tests. - // This method works differently on SnowLeopard than - // on Leopard. If you pass in a nil for IMP on SnowLeopard - // it doesn't change anything. On Leopard it will. Since - // attempting to change a sel to nil is probably an error - // we follow the SnowLeopard way of doing things. - IMP oldImp = NULL; - if (imp) { - oldImp = method->method_imp; - method->method_imp = imp; - } - return oldImp; -} - -void method_exchangeImplementations(Method m1, Method m2) { - if (m1 == m2) return; - if (!m1 || !m2) return; - IMP imp2 = method_getImplementation(m2); - IMP imp1 = method_setImplementation(m1, imp2); - method_setImplementation(m2, imp1); -} - -struct objc_method_description protocol_getMethodDescription(Protocol *p, - SEL aSel, - BOOL isRequiredMethod, - BOOL isInstanceMethod) { - struct objc_method_description *descPtr = NULL; - // No such thing as required in ObjC1. - if (isInstanceMethod) { - descPtr = [p descriptionForInstanceMethod:aSel]; - } else { - descPtr = [p descriptionForClassMethod:aSel]; - } - - struct objc_method_description desc; - if (descPtr) { - desc = *descPtr; - } else { - bzero(&desc, sizeof(desc)); - } - return desc; -} - -BOOL sel_isEqual(SEL lhs, SEL rhs) { - // Apple (informally) promises this will work in the future: - // http://twitter.com/#!/gparker/status/2400099786 - return (lhs == rhs) ? YES : NO; -} - -#endif // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) +#pragma GCC warning "GTMObjc2Runtime.m is deprecated and should no longer be used." diff --git a/Foundation/GTMObjC2RuntimeTest.m b/Foundation/GTMObjC2RuntimeTest.m deleted file mode 100644 index 2e6362c..0000000 --- a/Foundation/GTMObjC2RuntimeTest.m +++ /dev/null @@ -1,445 +0,0 @@ -// -// GTMObjC2RuntimeTest.m -// -// Copyright 2007-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMObjC2Runtime.h" -#import "GTMSenTestCase.h" -#import "GTMSystemVersion.h" -#import "GTMTypeCasting.h" - -#import <string.h> - -@protocol GTMObjC2Runtime_TestProtocol -@end - -@protocol GTMObjC2Runtime_Test2Protocol -AT_OPTIONAL -- (NSString*)optional; -AT_REQUIRED -- (NSString*)required; -AT_OPTIONAL -+ (NSString*)class_optional; -AT_REQUIRED -+ (NSString*)class_required; -@end - -@interface GTMObjC2RuntimeTest : GTMTestCase { - Class cls_; -} -@end - -@interface GTMObjC2Runtime_TestClass : NSObject <GTMObjC2Runtime_TestProtocol> -- (NSString*)kwyjibo; - -@end - -@interface GTMObjC2Runtime_TestClass (GMObjC2Runtime_TestClassCategory) -- (NSString*)eatMyShorts; -@end - -@implementation GTMObjC2Runtime_TestClass - -+ (NSString*)dontHaveACow { - return @"dontHaveACow"; -} - -- (NSString*)kwyjibo { - return @"kwyjibo"; -} -@end - -@implementation GTMObjC2Runtime_TestClass (GMObjC2Runtime_TestClassCategory) -- (NSString*)eatMyShorts { - return @"eatMyShorts"; -} - -+ (NSString*)brokeHisBrain { - return @"brokeHisBrain"; -} - -@end - -@interface GTMObjC2NotificationWatcher : NSObject -- (void)startedTest:(NSNotification *)notification; -@end - -@implementation GTMObjC2NotificationWatcher -- (id)init { - if ((self = [super init])) { - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - // We release ourselves when we are notified. - [self retain]; - [nc addObserver:self - selector:@selector(startedTest:) - name:SenTestSuiteDidStartNotification - object:nil]; - - } - return self; -} - -- (void)startedTest:(NSNotification *)notification { - // Logs if we are testing on Tiger or Leopard runtime. - SenTestSuiteRun *suiteRun = GTM_STATIC_CAST(SenTestSuiteRun, - [notification object]); - NSString *testName = [[suiteRun test] name]; - NSString *className = NSStringFromClass([GTMObjC2RuntimeTest class]); - if ([testName isEqualToString:className]) { - NSString *runtimeString; -#ifndef OBJC2_UNAVAILABLE - runtimeString = @"ObjC1"; -#else - runtimeString = @"ObjC2"; -#endif - NSLog(@"Running GTMObjC2RuntimeTests using %@ runtime.", runtimeString); - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc removeObserver:self]; - [self autorelease]; - } -} -@end - -@implementation GTMObjC2RuntimeTest - -+ (void)initialize { - // This allows us to track which runtime we are actually testing. - [[[GTMObjC2NotificationWatcher alloc] init] autorelease]; -} - -- (void)setUp { - cls_ = [[GTMObjC2Runtime_TestClass class] retain]; -} - -- (void)tearDown { - [cls_ release]; -} - -- (void)test_object_getClass { - // Nil Checks - STAssertNil(object_getClass(nil), nil); - - // Standard use check - GTMObjC2Runtime_TestClass *test = [[[cls_ alloc] init] autorelease]; - Class cls = object_getClass(test); - STAssertEqualObjects(cls, cls_, nil); -} - -- (void)test_class_getName { - // Nil Checks - const char *name = class_getName(nil); - STAssertEqualCStrings(name, "nil", nil); - - // Standard use check - STAssertEqualCStrings(class_getName(cls_), "GTMObjC2Runtime_TestClass", nil); -} - -- (void)test_class_conformsToProtocol { - // Nil Checks - STAssertFalse(class_conformsToProtocol(cls_, @protocol(NSObject)), nil); - STAssertFalse(class_conformsToProtocol(cls_, nil), nil); - // The following two tests intentionally commented out as they fail on - // Leopard with a crash, so we fail on Tiger intentionally as well. - // STAssertFalse(class_conformsToProtocol(nil, @protocol(NSObject)), nil); - // STAssertFalse(class_conformsToProtocol(nil, nil), nil); - - // Standard use check - STAssertTrue(class_conformsToProtocol(cls_, - @protocol(GTMObjC2Runtime_TestProtocol)), - nil); -} - -- (void)test_class_respondsToSelector { - // Nil Checks - STAssertFalse(class_respondsToSelector(cls_, @selector(setUp)), nil); - STAssertFalse(class_respondsToSelector(cls_, nil), nil); - - // Standard use check - STAssertTrue(class_respondsToSelector(cls_, @selector(kwyjibo)), nil); -} - -- (void)test_class_getSuperclass { - // Nil Checks - STAssertNil(class_getSuperclass(nil), nil); - - // Standard use check - STAssertEqualObjects(class_getSuperclass(cls_), [NSObject class], nil); -} - -- (void)test_class_copyMethodList { - // Nil Checks - Method *list = class_copyMethodList(nil, nil); - STAssertNULL(list, nil); - - // Standard use check - list = class_copyMethodList(cls_, nil); - STAssertNotNULL(list, nil); - free(list); - unsigned int count = 0; - list = class_copyMethodList(cls_, &count); - STAssertNotNULL(list, nil); - STAssertEquals(count, 2U, nil); - STAssertNULL(list[count], nil); - free(list); - - // Now test meta class - count = 0; - list = class_copyMethodList((Class)objc_getMetaClass(class_getName(cls_)), - &count); - STAssertNotNULL(list, nil); - STAssertEquals(count, 2U, nil); - STAssertNULL(list[count], nil); - free(list); -} - -- (void)test_method_getName { - // Nil Checks - STAssertNULL(method_getName(nil), nil); - - // Standard use check - Method *list = class_copyMethodList(cls_, nil); - STAssertNotNULL(list, nil); - const char* selName1 = sel_getName(method_getName(list[0])); - const char* selName2 = sel_getName(@selector(kwyjibo)); - const char* selName3 = sel_getName(@selector(eatMyShorts)); - BOOL isGood = ((strcmp(selName1, selName2)) == 0 || (strcmp(selName1, selName3) == 0)); - STAssertTrue(isGood, nil); - free(list); -} - -- (void)test_method_exchangeImplementations { - // nil checks - method_exchangeImplementations(nil, nil); - - // Standard use check - GTMObjC2Runtime_TestClass *test = [[GTMObjC2Runtime_TestClass alloc] init]; - STAssertNotNil(test, nil); - - // Get initial values - NSString *val1 = [test kwyjibo]; - STAssertNotNil(val1, nil); - NSString *val2 = [test eatMyShorts]; - STAssertNotNil(val2, nil); - NSString *val3 = [GTMObjC2Runtime_TestClass dontHaveACow]; - STAssertNotNil(val3, nil); - NSString *val4 = [GTMObjC2Runtime_TestClass brokeHisBrain]; - STAssertNotNil(val4, nil); - - // exchange the imps - Method *list = class_copyMethodList(cls_, nil); - STAssertNotNULL(list, nil); - method_exchangeImplementations(list[0], list[1]); - - // test against initial values - NSString *val5 = [test kwyjibo]; - STAssertNotNil(val5, nil); - NSString *val6 = [test eatMyShorts]; - STAssertNotNil(val6, nil); - STAssertEqualStrings(val1, val6, nil); - STAssertEqualStrings(val2, val5, nil); - - // Check that other methods not affected - STAssertEqualStrings([GTMObjC2Runtime_TestClass dontHaveACow], val3, nil); - STAssertEqualStrings([GTMObjC2Runtime_TestClass brokeHisBrain], val4, nil); - - // exchange the imps back - method_exchangeImplementations(list[0], list[1]); - - // and test against initial values again - NSString *val7 = [test kwyjibo]; - STAssertNotNil(val7, nil); - NSString *val8 = [test eatMyShorts]; - STAssertNotNil(val8, nil); - STAssertEqualStrings(val1, val7, nil); - STAssertEqualStrings(val2, val8, nil); - - method_exchangeImplementations(list[0], nil); - method_exchangeImplementations(nil, list[0]); - - val7 = [test kwyjibo]; - STAssertNotNil(val7, nil); - val8 = [test eatMyShorts]; - STAssertNotNil(val8, nil); - STAssertEqualStrings(val1, val7, nil); - STAssertEqualStrings(val2, val8, nil); - - free(list); - [test release]; -} - -- (void)test_method_getImplementation { - // Nil Checks - STAssertNULL(method_getImplementation(nil), nil); - - // Standard use check - Method *list = class_copyMethodList(cls_, nil); - STAssertNotNULL(list, nil); - STAssertNotNULL(method_getImplementation(list[0]), nil); - free(list); -} - -- (void)test_method_setImplementation { - // Standard use check - GTMObjC2Runtime_TestClass *test = [[GTMObjC2Runtime_TestClass alloc] init]; - Method *list = class_copyMethodList(cls_, nil); - - // Get initial value - NSString *str1 = objc_msgSend(test, method_getName(list[0])); - STAssertNotNil(str1, nil); - - // set the imp to something else - IMP oldImp = method_setImplementation(list[0], method_getImplementation(list[1])); - STAssertNotNULL(oldImp, nil); - - // make sure they are different - NSString *str2 = objc_msgSend(test,method_getName(list[0])); - STAssertNotNil(str2, nil); - STAssertNotEqualStrings(str1, str2, nil); - - // reset the imp - IMP newImp = method_setImplementation(list[0], oldImp); - STAssertNotEquals(oldImp, newImp, nil); - - // test nils - // Apparently it was a bug that we could call setImplementation with a nil - // so we now test to make sure that setting to nil works as expected on - // all systems. -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - // Built for less then leopard gives us the behaviors we defined... - // (doesn't take nil) - IMP nullImp = method_setImplementation(list[0], nil); - STAssertNULL(nullImp, nil); - IMP testImp = method_setImplementation(list[0], newImp); - STAssertEquals(testImp, oldImp, nil); -#else - // Built for leopard or later means we get the os runtime behavior... - if ([GTMSystemVersion isLeopard]) { - // (takes nil) - oldImp = method_setImplementation(list[0], nil); - STAssertNotNULL(oldImp, nil); - newImp = method_setImplementation(list[0], oldImp); - STAssertNULL(newImp, nil); - } else { - // (doesn't take nil) - IMP nullImp = method_setImplementation(list[0], nil); - STAssertNULL(nullImp, nil); - IMP testImp = method_setImplementation(list[0], newImp); - STAssertEquals(testImp, oldImp, nil); - } -#endif - - // This case intentionally not tested. Passing nil to method_setImplementation - // on Leopard crashes. It does on Tiger as well. Half works on SnowLeopard. - // We made our Tiger implementation the same as the SnowLeopard - // implementation. - // Logged as radar 5572981. - if (![GTMSystemVersion isLeopardOrGreater]) { - STAssertNULL(method_setImplementation(nil, nil), nil); - } -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - if ([GTMSystemVersion isSnowLeopardOrGreater]) { - STAssertNULL(method_setImplementation(nil, newImp), nil); - } -#endif - - [test release]; - free(list); -} - -- (void)test_protocol_getMethodDescription { - // Check nil cases - struct objc_method_description desc = protocol_getMethodDescription(nil, nil, - YES, YES); - STAssertNULL(desc.name, nil); - desc = protocol_getMethodDescription(nil, @selector(optional), YES, YES); - STAssertNULL(desc.name, nil); - desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol), - nil, YES, YES); - STAssertNULL(desc.name, nil); - - // Instance Methods - // Check Required case. Only OBJC2 supports required. - desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol), - @selector(optional), YES, YES); -#if OBJC_API_VERSION >= 2 - STAssertNULL(desc.name, nil); -#else - STAssertNotNULL(desc.name, nil); -#endif - - // Check Required case. Only OBJC2 supports required. - desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol), - @selector(required), YES, YES); - - STAssertNotNULL(desc.name, nil); - - // Check Optional case. Only OBJC2 supports optional. - desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol), - @selector(optional), NO, YES); - - STAssertNotNULL(desc.name, nil); - - // Check Optional case. Only OBJC2 supports optional. - desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol), - @selector(required), NO, YES); -#if OBJC_API_VERSION >= 2 - STAssertNULL(desc.name, nil); -#else - STAssertNotNULL(desc.name, nil); -#endif - - // Class Methods - // Check Required case. Only OBJC2 supports required. - desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol), - @selector(class_optional), YES, NO); -#if OBJC_API_VERSION >= 2 - STAssertNULL(desc.name, nil); -#else - STAssertNotNULL(desc.name, nil); -#endif - - // Check Required case. Only OBJC2 supports required. - desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol), - @selector(class_required), YES, NO); - - STAssertNotNULL(desc.name, nil); - - // Check Optional case. Only OBJC2 supports optional. - desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol), - @selector(class_optional), NO, NO); - - STAssertNotNULL(desc.name, nil); - - // Check Optional case. Only OBJC2 supports optional. - desc = protocol_getMethodDescription(@protocol(GTMObjC2Runtime_Test2Protocol), - @selector(class_required), NO, NO); -#if OBJC_API_VERSION >= 2 - STAssertNULL(desc.name, nil); -#else - STAssertNotNULL(desc.name, nil); -#endif - -} - -- (void)test_sel_isEqual { - STAssertTrue(sel_isEqual(@selector(kwyjibo), @selector(kwyjibo)), nil); - STAssertFalse(sel_isEqual(@selector(kwyjibo), @selector(dontHaveACow)), nil); - STAssertTrue(sel_isEqual(_cmd, @selector(test_sel_isEqual)), nil); - STAssertTrue(sel_isEqual(_cmd, _cmd), nil); - STAssertFalse(sel_isEqual(_cmd, @selector(kwyjibo)), nil); -} - -@end diff --git a/Foundation/GTMPathTest.m b/Foundation/GTMPathTest.m index 54fa83b..dff1f02 100644 --- a/Foundation/GTMPathTest.m +++ b/Foundation/GTMPathTest.m @@ -18,7 +18,6 @@ #import "GTMSenTestCase.h" #import "GTMPath.h" -#import "GTMUnitTestDevLog.h" #import "GTMNSFileHandle+UniqueName.h" #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 diff --git a/Foundation/GTMRegex.m b/Foundation/GTMRegex.m index 238ca48..7ac4665 100644 --- a/Foundation/GTMRegex.m +++ b/Foundation/GTMRegex.m @@ -133,7 +133,7 @@ static NSString *const kReplacementPattern = - (id)initWithPattern:(NSString *)pattern options:(GTMRegexOptions)options withError:(NSError **)outErrorOrNULL { - + self = [super init]; if (!self) return nil; @@ -275,7 +275,7 @@ static NSString *const kReplacementPattern = - (NSString *)firstSubStringMatchedInString:(NSString *)str { NSString *result = nil; - + regmatch_t regMatch; const char *utf8Str = [str UTF8String]; if ([self runRegexOnUTF8:utf8Str @@ -380,7 +380,7 @@ static NSString *const kReplacementPattern = } else { // spin over the split up replacement GTMRegexStringSegment *replacementSegment = nil; - GTM_FOREACH_OBJECT(replacementSegment, replacements) { + for (replacementSegment in replacements) { if (![replacementSegment isMatch]) { // not a match, raw text to put in [result appendString:[replacementSegment string]]; @@ -687,14 +687,14 @@ static NSString *const kReplacementPattern = return nil; // pick off when it wasn't found - if ((regMatches_[patternIndex].rm_so == -1) && + if ((regMatches_[patternIndex].rm_so == -1) && (regMatches_[patternIndex].rm_eo == -1)) return nil; // fetch the string - const char *base = (const char*)[utf8StrBuf_ bytes] + const char *base = (const char*)[utf8StrBuf_ bytes] + regMatches_[patternIndex].rm_so; - regoff_t len = regMatches_[patternIndex].rm_eo + regoff_t len = regMatches_[patternIndex].rm_eo - regMatches_[patternIndex].rm_so; return [[[NSString alloc] initWithBytes:base length:(NSUInteger)len @@ -707,7 +707,7 @@ static NSString *const kReplacementPattern = [self class], self, (isMatch_ ? "YES" : "NO")]; for (NSUInteger x = 0; x <= numRegMatches_; ++x) { int length = (int)(regMatches_[x].rm_eo - regMatches_[x].rm_so); - const char* string + const char* string = (((const char*)[utf8StrBuf_ bytes]) + regMatches_[x].rm_so); if (x == 0) { [result appendFormat:@" \"%.*s\"", length , string]; diff --git a/Foundation/GTMRegexTest.m b/Foundation/GTMRegexTest.m index 6f41d60..65aadd5 100644 --- a/Foundation/GTMRegexTest.m +++ b/Foundation/GTMRegexTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -18,7 +18,6 @@ #import "GTMSenTestCase.h" #import "GTMRegex.h" -#import "GTMUnitTestDevLog.h" // // NOTE: @@ -36,104 +35,97 @@ @implementation GTMRegexTest - (void)testEscapedPatternForString { - STAssertEqualStrings([GTMRegex escapedPatternForString:@"abcdefghijklmnopqrstuvwxyz0123456789"], - @"abcdefghijklmnopqrstuvwxyz0123456789", - nil); - STAssertEqualStrings([GTMRegex escapedPatternForString:@"^.[$()|*+?{\\"], - @"\\^\\.\\[\\$\\(\\)\\|\\*\\+\\?\\{\\\\", - nil); - STAssertEqualStrings([GTMRegex escapedPatternForString:@"a^b.c[d$e(f)g|h*i+j?k{l\\m"], - @"a\\^b\\.c\\[d\\$e\\(f\\)g\\|h\\*i\\+j\\?k\\{l\\\\m", - nil); - - STAssertNil([GTMRegex escapedPatternForString:nil], nil); - STAssertEqualStrings([GTMRegex escapedPatternForString:@""], @"", nil); + XCTAssertEqualStrings([GTMRegex escapedPatternForString:@"abcdefghijklmnopqrstuvwxyz0123456789"], + @"abcdefghijklmnopqrstuvwxyz0123456789"); + XCTAssertEqualStrings([GTMRegex escapedPatternForString:@"^.[$()|*+?{\\"], + @"\\^\\.\\[\\$\\(\\)\\|\\*\\+\\?\\{\\\\"); + XCTAssertEqualStrings([GTMRegex escapedPatternForString:@"a^b.c[d$e(f)g|h*i+j?k{l\\m"], + @"a\\^b\\.c\\[d\\$e\\(f\\)g\\|h\\*i\\+j\\?k\\{l\\\\m"); + + XCTAssertNil([GTMRegex escapedPatternForString:nil]); + XCTAssertEqualStrings([GTMRegex escapedPatternForString:@""], @""); } - (void)testInit { // fail cases - STAssertNil([[[GTMRegex alloc] init] autorelease], nil); - STAssertNil([[[GTMRegex alloc] initWithPattern:nil] autorelease], nil); - STAssertNil([[[GTMRegex alloc] initWithPattern:nil - options:kGTMRegexOptionIgnoreCase] autorelease], nil); - [GTMUnitTestDevLog expectString:@"Invalid pattern \"(.\", error: \"parentheses not balanced\""]; - STAssertNil([[[GTMRegex alloc] initWithPattern:@"(."] autorelease], nil); - [GTMUnitTestDevLog expectString:@"Invalid pattern \"(.\", error: \"parentheses not balanced\""]; - STAssertNil([[[GTMRegex alloc] initWithPattern:@"(." - options:kGTMRegexOptionIgnoreCase] autorelease], nil); + XCTAssertNil([[[GTMRegex alloc] init] autorelease]); + XCTAssertNil([[[GTMRegex alloc] initWithPattern:nil] autorelease]); + XCTAssertNil([[[GTMRegex alloc] initWithPattern:nil + options:kGTMRegexOptionIgnoreCase] autorelease]); + XCTAssertNil([[[GTMRegex alloc] initWithPattern:@"(."] autorelease]); + XCTAssertNil([[[GTMRegex alloc] initWithPattern:@"(." + options:kGTMRegexOptionIgnoreCase] autorelease]); // fail cases w/ error param NSError *error = nil; - STAssertNil([[[GTMRegex alloc] initWithPattern:nil - options:kGTMRegexOptionIgnoreCase - withError:&error] autorelease], nil); - STAssertNil(error, @"no pattern, shouldn't get error object"); - STAssertNil([[[GTMRegex alloc] initWithPattern:@"(." - options:kGTMRegexOptionIgnoreCase - withError:&error] autorelease], nil); - STAssertNotNil(error, nil); - STAssertEqualObjects([error domain], kGTMRegexErrorDomain, nil); - STAssertEquals([error code], (NSInteger)kGTMRegexPatternParseFailedError, nil); + XCTAssertNil([[[GTMRegex alloc] initWithPattern:nil + options:kGTMRegexOptionIgnoreCase + withError:&error] autorelease]); + XCTAssertNil(error, @"no pattern, shouldn't get error object"); + XCTAssertNil([[[GTMRegex alloc] initWithPattern:@"(." + options:kGTMRegexOptionIgnoreCase + withError:&error] autorelease]); + XCTAssertNotNil(error); + XCTAssertEqualObjects([error domain], kGTMRegexErrorDomain); + XCTAssertEqual([error code], (NSInteger)kGTMRegexPatternParseFailedError); NSDictionary *userInfo = [error userInfo]; - STAssertNotNil(userInfo, @"failed to get userInfo from error"); - STAssertEqualObjects([userInfo objectForKey:kGTMRegexPatternErrorPattern], @"(.", nil); - STAssertNotNil([userInfo objectForKey:kGTMRegexPatternErrorErrorString], nil); + XCTAssertNotNil(userInfo, @"failed to get userInfo from error"); + XCTAssertEqualObjects([userInfo objectForKey:kGTMRegexPatternErrorPattern], @"(."); + XCTAssertNotNil([userInfo objectForKey:kGTMRegexPatternErrorErrorString]); // basic pattern w/ options - STAssertNotNil([[[GTMRegex alloc] initWithPattern:@"(.*)"] autorelease], nil); - STAssertNotNil([[[GTMRegex alloc] initWithPattern:@"(.*)" - options:0] autorelease], nil); - STAssertNotNil([[[GTMRegex alloc] initWithPattern:@"(.*)" - options:kGTMRegexOptionIgnoreCase] autorelease], nil); + XCTAssertNotNil([[[GTMRegex alloc] initWithPattern:@"(.*)"] autorelease]); + XCTAssertNotNil([[[GTMRegex alloc] initWithPattern:@"(.*)" + options:0] autorelease]); + XCTAssertNotNil([[[GTMRegex alloc] initWithPattern:@"(.*)" + options:kGTMRegexOptionIgnoreCase] autorelease]); error = nil; - STAssertNotNil([[[GTMRegex alloc] initWithPattern:@"(.*)" - options:kGTMRegexOptionIgnoreCase - withError:&error] autorelease], nil); - STAssertNil(error, @"shouldn't have been any error"); + XCTAssertNotNil([[[GTMRegex alloc] initWithPattern:@"(.*)" + options:kGTMRegexOptionIgnoreCase + withError:&error] autorelease]); + XCTAssertNil(error, @"shouldn't have been any error"); // fail cases (helper) - STAssertNil([GTMRegex regexWithPattern:nil], nil); - STAssertNil([GTMRegex regexWithPattern:nil - options:0], nil); - [GTMUnitTestDevLog expectString:@"Invalid pattern \"(.\", error: \"parentheses not balanced\""]; - STAssertNil([GTMRegex regexWithPattern:@"(."], nil); - [GTMUnitTestDevLog expectString:@"Invalid pattern \"(.\", error: \"parentheses not balanced\""]; - STAssertNil([GTMRegex regexWithPattern:@"(." - options:0], nil); + XCTAssertNil([GTMRegex regexWithPattern:nil]); + XCTAssertNil([GTMRegex regexWithPattern:nil + options:0]); + XCTAssertNil([GTMRegex regexWithPattern:@"(."]); + XCTAssertNil([GTMRegex regexWithPattern:@"(." + options:0]); // fail cases (helper) w/ error param - STAssertNil([GTMRegex regexWithPattern:nil - options:kGTMRegexOptionIgnoreCase - withError:&error], nil); - STAssertNil(error, @"no pattern, shouldn't get error object"); - STAssertNil([GTMRegex regexWithPattern:@"(." - options:kGTMRegexOptionIgnoreCase - withError:&error], nil); - STAssertNotNil(error, nil); - STAssertEqualObjects([error domain], kGTMRegexErrorDomain, nil); - STAssertEquals([error code], (NSInteger)kGTMRegexPatternParseFailedError, nil); + XCTAssertNil([GTMRegex regexWithPattern:nil + options:kGTMRegexOptionIgnoreCase + withError:&error]); + XCTAssertNil(error, @"no pattern, shouldn't get error object"); + XCTAssertNil([GTMRegex regexWithPattern:@"(." + options:kGTMRegexOptionIgnoreCase + withError:&error]); + XCTAssertNotNil(error); + XCTAssertEqualObjects([error domain], kGTMRegexErrorDomain); + XCTAssertEqual([error code], (NSInteger)kGTMRegexPatternParseFailedError); userInfo = [error userInfo]; - STAssertNotNil(userInfo, @"failed to get userInfo from error"); - STAssertEqualObjects([userInfo objectForKey:kGTMRegexPatternErrorPattern], @"(.", nil); - STAssertNotNil([userInfo objectForKey:kGTMRegexPatternErrorErrorString], nil); - + XCTAssertNotNil(userInfo, @"failed to get userInfo from error"); + XCTAssertEqualObjects([userInfo objectForKey:kGTMRegexPatternErrorPattern], @"(."); + XCTAssertNotNil([userInfo objectForKey:kGTMRegexPatternErrorErrorString]); + // basic pattern w/ options (helper) - STAssertNotNil([GTMRegex regexWithPattern:@"(.*)"], nil); - STAssertNotNil([GTMRegex regexWithPattern:@"(.*)" - options:0], nil); - STAssertNotNil([GTMRegex regexWithPattern:@"(.*)" - options:kGTMRegexOptionIgnoreCase], nil); + XCTAssertNotNil([GTMRegex regexWithPattern:@"(.*)"]); + XCTAssertNotNil([GTMRegex regexWithPattern:@"(.*)" + options:0]); + XCTAssertNotNil([GTMRegex regexWithPattern:@"(.*)" + options:kGTMRegexOptionIgnoreCase]); error = nil; - STAssertNotNil([GTMRegex regexWithPattern:@"(.*)" - options:kGTMRegexOptionIgnoreCase - withError:&error], nil); - STAssertNil(error, @"shouldn't have been any error"); - + XCTAssertNotNil([GTMRegex regexWithPattern:@"(.*)" + options:kGTMRegexOptionIgnoreCase + withError:&error]); + XCTAssertNil(error, @"shouldn't have been any error"); + // not really a test on GTMRegex, but make sure we block attempts to directly // alloc/init a GTMRegexStringSegment. - STAssertThrowsSpecificNamed([[[GTMRegexStringSegment alloc] init] autorelease], - NSException, NSInvalidArgumentException, - @"shouldn't have been able to alloc/init a GTMRegexStringSegment"); + XCTAssertThrowsSpecificNamed([[[GTMRegexStringSegment alloc] init] autorelease], + NSException, NSInvalidArgumentException, + @"shouldn't have been able to alloc/init a GTMRegexStringSegment"); } - (void)testOptions { @@ -142,767 +134,759 @@ // default options GTMRegex *regex = [GTMRegex regexWithPattern:@"a+"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); NSEnumerator *enumerator = [regex segmentEnumeratorForString:testString]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aaa" GTMRegexStringSegment *seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa"); // " AAA\nbbb BBB\n " seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @" AAA\nbbb BBB\n ", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @" AAA\nbbb BBB\n "); // "aaa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa"); // " " seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @" ", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @" "); // "a" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"a", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"a"); // "A" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"A", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"A"); // "a" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"a", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"a"); // "\n bbb BbB" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"\n bbb BbB", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"\n bbb BbB"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // kGTMRegexOptionIgnoreCase regex = [GTMRegex regexWithPattern:@"a+" options:kGTMRegexOptionIgnoreCase]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:testString]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aaa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa"); // " " seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @" ", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @" "); // "AAA" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"AAA", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"AAA"); // "\nbbb BBB\n " seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"\nbbb BBB\n ", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"\nbbb BBB\n "); // "aaa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa"); // " " seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @" ", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @" "); // "aAa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aAa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aAa"); // "\n bbb BbB" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"\n bbb BbB", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"\n bbb BbB"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // defaults w/ '^' regex = [GTMRegex regexWithPattern:@"^a+"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:testString]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aaa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa"); // " AAA\nbbb BBB\n aaa aAa\n bbb BbB" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @" AAA\nbbb BBB\n aaa aAa\n bbb BbB", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @" AAA\nbbb BBB\n aaa aAa\n bbb BbB"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // defaults w/ '$' regex = [GTMRegex regexWithPattern:@"B+$"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:testString]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aaa AAA\nbbb " seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa AAA\nbbb ", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa AAA\nbbb "); // "BBB" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"BBB", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"BBB"); // "\n aaa aAa\n bbb Bb" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"\n aaa aAa\n bbb Bb", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"\n aaa aAa\n bbb Bb"); // "B" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"B", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"B"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // kGTMRegexOptionIgnoreCase w/ '$' regex = [GTMRegex regexWithPattern:@"B+$" - options:kGTMRegexOptionIgnoreCase]; - STAssertNotNil(regex, nil); + options:kGTMRegexOptionIgnoreCase]; + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:testString]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aaa AAA\nbbb " seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa AAA\nbbb ", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa AAA\nbbb "); // "BBB" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"BBB", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"BBB"); // "\n aaa aAa\n bbb " seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"\n aaa aAa\n bbb ", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"\n aaa aAa\n bbb "); // "BbB" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"BbB", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"BbB"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test w/ kGTMRegexOptionSupressNewlineSupport and \n in the string regex = [GTMRegex regexWithPattern:@"a.*b" options:kGTMRegexOptionSupressNewlineSupport]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:testString]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aaa AAA\nbbb BBB\n aaa aAa\n bbb Bb" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa AAA\nbbb BBB\n aaa aAa\n bbb Bb", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa AAA\nbbb BBB\n aaa aAa\n bbb Bb"); // "B" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"B", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"B"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test w/o kGTMRegexOptionSupressNewlineSupport and \n in the string // (this is no match since it '.' can't match the '\n') regex = [GTMRegex regexWithPattern:@"a.*b"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:testString]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aaa AAA\nbbb BBB\n aaa aAa\n bbb BbB" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa AAA\nbbb BBB\n aaa aAa\n bbb BbB", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa AAA\nbbb BBB\n aaa aAa\n bbb BbB"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); - + XCTAssertNil(seg); + // kGTMRegexOptionSupressNewlineSupport w/ '^' regex = [GTMRegex regexWithPattern:@"^a+" options:kGTMRegexOptionSupressNewlineSupport]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:testString]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aaa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa"); // " AAA\nbbb BBB\n aaa aAa\n bbb BbB" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @" AAA\nbbb BBB\n aaa aAa\n bbb BbB", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @" AAA\nbbb BBB\n aaa aAa\n bbb BbB"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // kGTMRegexOptionSupressNewlineSupport w/ '$' regex = [GTMRegex regexWithPattern:@"B+$" options:kGTMRegexOptionSupressNewlineSupport]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:testString]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aaa AAA\nbbb BBB\n aaa aAa\n bbb Bb" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa AAA\nbbb BBB\n aaa aAa\n bbb Bb", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa AAA\nbbb BBB\n aaa aAa\n bbb Bb"); // "B" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"B", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"B"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); } - (void)testSubPatternCount { - STAssertEquals((NSUInteger)0, [[GTMRegex regexWithPattern:@".*"] subPatternCount], nil); - STAssertEquals((NSUInteger)1, [[GTMRegex regexWithPattern:@"(.*)"] subPatternCount], nil); - STAssertEquals((NSUInteger)1, [[GTMRegex regexWithPattern:@"[fo]*(.*)[bar]*"] subPatternCount], nil); - STAssertEquals((NSUInteger)3, [[GTMRegex regexWithPattern:@"([fo]*)(.*)([bar]*)"] subPatternCount], nil); - STAssertEquals((NSUInteger)7, [[GTMRegex regexWithPattern:@"(([bar]*)|([fo]*))(.*)(([bar]*)|([fo]*))"] subPatternCount], nil); + XCTAssertEqual((NSUInteger)0, [[GTMRegex regexWithPattern:@".*"] subPatternCount]); + XCTAssertEqual((NSUInteger)1, [[GTMRegex regexWithPattern:@"(.*)"] subPatternCount]); + XCTAssertEqual((NSUInteger)1, [[GTMRegex regexWithPattern:@"[fo]*(.*)[bar]*"] subPatternCount]); + XCTAssertEqual((NSUInteger)3, + [[GTMRegex regexWithPattern:@"([fo]*)(.*)([bar]*)"] subPatternCount]); + XCTAssertEqual((NSUInteger)7, + [[GTMRegex regexWithPattern:@"(([bar]*)|([fo]*))(.*)(([bar]*)|([fo]*))"] subPatternCount]); } - (void)testMatchesString { // simple pattern GTMRegex *regex = [GTMRegex regexWithPattern:@"foo.*bar"]; - STAssertNotNil(regex, nil); - STAssertTrue([regex matchesString:@"foobar"], nil); - STAssertTrue([regex matchesString:@"foobydoo spambar"], nil); - STAssertFalse([regex matchesString:@"zzfoobarzz"], nil); - STAssertFalse([regex matchesString:@"zzfoobydoo spambarzz"], nil); - STAssertFalse([regex matchesString:@"abcdef"], nil); - STAssertFalse([regex matchesString:@""], nil); - STAssertFalse([regex matchesString:nil], nil); + XCTAssertNotNil(regex); + XCTAssertTrue([regex matchesString:@"foobar"]); + XCTAssertTrue([regex matchesString:@"foobydoo spambar"]); + XCTAssertFalse([regex matchesString:@"zzfoobarzz"]); + XCTAssertFalse([regex matchesString:@"zzfoobydoo spambarzz"]); + XCTAssertFalse([regex matchesString:@"abcdef"]); + XCTAssertFalse([regex matchesString:@""]); + XCTAssertFalse([regex matchesString:nil]); // pattern w/ sub patterns regex = [GTMRegex regexWithPattern:@"(foo)(.*)(bar)"]; - STAssertNotNil(regex, nil); - STAssertTrue([regex matchesString:@"foobar"], nil); - STAssertTrue([regex matchesString:@"foobydoo spambar"], nil); - STAssertFalse([regex matchesString:@"zzfoobarzz"], nil); - STAssertFalse([regex matchesString:@"zzfoobydoo spambarzz"], nil); - STAssertFalse([regex matchesString:@"abcdef"], nil); - STAssertFalse([regex matchesString:@""], nil); - STAssertFalse([regex matchesString:nil], nil); + XCTAssertNotNil(regex); + XCTAssertTrue([regex matchesString:@"foobar"]); + XCTAssertTrue([regex matchesString:@"foobydoo spambar"]); + XCTAssertFalse([regex matchesString:@"zzfoobarzz"]); + XCTAssertFalse([regex matchesString:@"zzfoobydoo spambarzz"]); + XCTAssertFalse([regex matchesString:@"abcdef"]); + XCTAssertFalse([regex matchesString:@""]); + XCTAssertFalse([regex matchesString:nil]); } - (void)testSubPatternsOfString { GTMRegex *regex = [GTMRegex regexWithPattern:@"(fo(o+))((bar)|(baz))"]; - STAssertNotNil(regex, nil); - STAssertEquals((NSUInteger)5, [regex subPatternCount], nil); + XCTAssertNotNil(regex); + XCTAssertEqual((NSUInteger)5, [regex subPatternCount]); NSArray *subPatterns = [regex subPatternsOfString:@"foooooobaz"]; - STAssertNotNil(subPatterns, nil); - STAssertEquals((NSUInteger)6, [subPatterns count], nil); - STAssertEqualStrings(@"foooooobaz", [subPatterns objectAtIndex:0], nil); - STAssertEqualStrings(@"foooooo", [subPatterns objectAtIndex:1], nil); - STAssertEqualStrings(@"ooooo", [subPatterns objectAtIndex:2], nil); - STAssertEqualStrings(@"baz", [subPatterns objectAtIndex:3], nil); - STAssertEqualObjects([NSNull null], [subPatterns objectAtIndex:4], nil); - STAssertEqualStrings(@"baz", [subPatterns objectAtIndex:5], nil); + XCTAssertNotNil(subPatterns); + XCTAssertEqual((NSUInteger)6, [subPatterns count]); + XCTAssertEqualStrings(@"foooooobaz", [subPatterns objectAtIndex:0]); + XCTAssertEqualStrings(@"foooooo", [subPatterns objectAtIndex:1]); + XCTAssertEqualStrings(@"ooooo", [subPatterns objectAtIndex:2]); + XCTAssertEqualStrings(@"baz", [subPatterns objectAtIndex:3]); + XCTAssertEqualObjects([NSNull null], [subPatterns objectAtIndex:4]); + XCTAssertEqualStrings(@"baz", [subPatterns objectAtIndex:5]); // not there subPatterns = [regex subPatternsOfString:@"aaa"]; - STAssertNil(subPatterns, nil); + XCTAssertNil(subPatterns); // not extra stuff on either end subPatterns = [regex subPatternsOfString:@"ZZZfoooooobaz"]; - STAssertNil(subPatterns, nil); + XCTAssertNil(subPatterns); subPatterns = [regex subPatternsOfString:@"foooooobazZZZ"]; - STAssertNil(subPatterns, nil); + XCTAssertNil(subPatterns); subPatterns = [regex subPatternsOfString:@"ZZZfoooooobazZZZ"]; - STAssertNil(subPatterns, nil); + XCTAssertNil(subPatterns); } - (void)testFirstSubStringMatchedInString { // simple pattern GTMRegex *regex = [GTMRegex regexWithPattern:@"foo.*bar"]; - STAssertNotNil(regex, nil); - STAssertEqualStrings([regex firstSubStringMatchedInString:@"foobar"], - @"foobar", nil); - STAssertEqualStrings([regex firstSubStringMatchedInString:@"foobydoo spambar"], - @"foobydoo spambar", nil); - STAssertEqualStrings([regex firstSubStringMatchedInString:@"zzfoobarzz"], - @"foobar", nil); - STAssertEqualStrings([regex firstSubStringMatchedInString:@"zzfoobydoo spambarzz"], - @"foobydoo spambar", nil); - STAssertNil([regex firstSubStringMatchedInString:@"abcdef"], nil); - STAssertNil([regex firstSubStringMatchedInString:@""], nil); + XCTAssertNotNil(regex); + XCTAssertEqualStrings([regex firstSubStringMatchedInString:@"foobar"], + @"foobar"); + XCTAssertEqualStrings([regex firstSubStringMatchedInString:@"foobydoo spambar"], + @"foobydoo spambar"); + XCTAssertEqualStrings([regex firstSubStringMatchedInString:@"zzfoobarzz"], + @"foobar"); + XCTAssertEqualStrings([regex firstSubStringMatchedInString:@"zzfoobydoo spambarzz"], + @"foobydoo spambar"); + XCTAssertNil([regex firstSubStringMatchedInString:@"abcdef"]); + XCTAssertNil([regex firstSubStringMatchedInString:@""]); // pattern w/ sub patterns regex = [GTMRegex regexWithPattern:@"(foo)(.*)(bar)"]; - STAssertNotNil(regex, nil); - STAssertEqualStrings([regex firstSubStringMatchedInString:@"foobar"], - @"foobar", nil); - STAssertEqualStrings([regex firstSubStringMatchedInString:@"foobydoo spambar"], - @"foobydoo spambar", nil); - STAssertEqualStrings([regex firstSubStringMatchedInString:@"zzfoobarzz"], - @"foobar", nil); - STAssertEqualStrings([regex firstSubStringMatchedInString:@"zzfoobydoo spambarzz"], - @"foobydoo spambar", nil); - STAssertNil([regex firstSubStringMatchedInString:@"abcdef"], nil); - STAssertNil([regex firstSubStringMatchedInString:@""], nil); + XCTAssertNotNil(regex); + XCTAssertEqualStrings([regex firstSubStringMatchedInString:@"foobar"], + @"foobar"); + XCTAssertEqualStrings([regex firstSubStringMatchedInString:@"foobydoo spambar"], + @"foobydoo spambar"); + XCTAssertEqualStrings([regex firstSubStringMatchedInString:@"zzfoobarzz"], + @"foobar"); + XCTAssertEqualStrings([regex firstSubStringMatchedInString:@"zzfoobydoo spambarzz"], + @"foobydoo spambar"); + XCTAssertNil([regex firstSubStringMatchedInString:@"abcdef"]); + XCTAssertNil([regex firstSubStringMatchedInString:@""]); } - (void)testMatchesSubStringInString { // simple pattern GTMRegex *regex = [GTMRegex regexWithPattern:@"foo.*bar"]; - STAssertNotNil(regex, nil); - STAssertTrue([regex matchesSubStringInString:@"foobar"], nil); - STAssertTrue([regex matchesSubStringInString:@"foobydoo spambar"], nil); - STAssertTrue([regex matchesSubStringInString:@"zzfoobarzz"], nil); - STAssertTrue([regex matchesSubStringInString:@"zzfoobydoo spambarzz"], nil); - STAssertFalse([regex matchesSubStringInString:@"abcdef"], nil); - STAssertFalse([regex matchesSubStringInString:@""], nil); + XCTAssertNotNil(regex); + XCTAssertTrue([regex matchesSubStringInString:@"foobar"]); + XCTAssertTrue([regex matchesSubStringInString:@"foobydoo spambar"]); + XCTAssertTrue([regex matchesSubStringInString:@"zzfoobarzz"]); + XCTAssertTrue([regex matchesSubStringInString:@"zzfoobydoo spambarzz"]); + XCTAssertFalse([regex matchesSubStringInString:@"abcdef"]); + XCTAssertFalse([regex matchesSubStringInString:@""]); // pattern w/ sub patterns regex = [GTMRegex regexWithPattern:@"(foo)(.*)(bar)"]; - STAssertNotNil(regex, nil); - STAssertTrue([regex matchesSubStringInString:@"foobar"], nil); - STAssertTrue([regex matchesSubStringInString:@"foobydoo spambar"], nil); - STAssertTrue([regex matchesSubStringInString:@"zzfoobarzz"], nil); - STAssertTrue([regex matchesSubStringInString:@"zzfoobydoo spambarzz"], nil); - STAssertFalse([regex matchesSubStringInString:@"abcdef"], nil); - STAssertFalse([regex matchesSubStringInString:@""], nil); + XCTAssertNotNil(regex); + XCTAssertTrue([regex matchesSubStringInString:@"foobar"]); + XCTAssertTrue([regex matchesSubStringInString:@"foobydoo spambar"]); + XCTAssertTrue([regex matchesSubStringInString:@"zzfoobarzz"]); + XCTAssertTrue([regex matchesSubStringInString:@"zzfoobydoo spambarzz"]); + XCTAssertFalse([regex matchesSubStringInString:@"abcdef"]); + XCTAssertFalse([regex matchesSubStringInString:@""]); } - (void)testSegmentEnumeratorForString { GTMRegex *regex = [GTMRegex regexWithPattern:@"foo+ba+r"]; - STAssertNotNil(regex, nil); - + XCTAssertNotNil(regex); + // test odd input NSEnumerator *enumerator = [regex segmentEnumeratorForString:@""]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); enumerator = [regex segmentEnumeratorForString:nil]; - STAssertNil(enumerator, nil); - + XCTAssertNil(enumerator); + // on w/ the normal tests enumerator = [regex segmentEnumeratorForString:@"afoobarbfooobaarfoobarzz"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "a" GTMRegexStringSegment *seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"a", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"a"); // "foobar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); // "b" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"b", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"b"); // "fooobaar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"fooobaar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"fooobaar"); // "foobar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); // "zz" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"zz", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"zz"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test no match enumerator = [regex segmentEnumeratorForString:@"aaa"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa"); seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test only match enumerator = [regex segmentEnumeratorForString:@"foobar"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // now test the saved sub segments regex = [GTMRegex regexWithPattern:@"(foo)((bar)|(baz))"]; - STAssertNotNil(regex, nil); - STAssertEquals((NSUInteger)4, [regex subPatternCount], nil); + XCTAssertNotNil(regex); + XCTAssertEqual((NSUInteger)4, [regex subPatternCount]); enumerator = [regex segmentEnumeratorForString:@"foobarxxfoobaz"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "foobar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); - STAssertEqualStrings([seg subPatternString:0], @"foobar", nil); - STAssertEqualStrings([seg subPatternString:1], @"foo", nil); - STAssertEqualStrings([seg subPatternString:2], @"bar", nil); - STAssertEqualStrings([seg subPatternString:3], @"bar", nil); - STAssertNil([seg subPatternString:4], nil); // nothing matched "(baz)" - STAssertNil([seg subPatternString:5], nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); + XCTAssertEqualStrings([seg subPatternString:0], @"foobar"); + XCTAssertEqualStrings([seg subPatternString:1], @"foo"); + XCTAssertEqualStrings([seg subPatternString:2], @"bar"); + XCTAssertEqualStrings([seg subPatternString:3], @"bar"); + XCTAssertNil([seg subPatternString:4]); // nothing matched "(baz)" + XCTAssertNil([seg subPatternString:5]); // "xx" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"xx", nil); - STAssertEqualStrings([seg subPatternString:0], @"xx", nil); - STAssertNil([seg subPatternString:1], nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"xx"); + XCTAssertEqualStrings([seg subPatternString:0], @"xx"); + XCTAssertNil([seg subPatternString:1]); // "foobaz" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobaz", nil); - STAssertEqualStrings([seg subPatternString:0], @"foobaz", nil); - STAssertEqualStrings([seg subPatternString:1], @"foo", nil); - STAssertEqualStrings([seg subPatternString:2], @"baz", nil); - STAssertNil([seg subPatternString:3], nil); // (nothing matched "(bar)" - STAssertEqualStrings([seg subPatternString:4], @"baz", nil); - STAssertNil([seg subPatternString:5], nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobaz"); + XCTAssertEqualStrings([seg subPatternString:0], @"foobaz"); + XCTAssertEqualStrings([seg subPatternString:1], @"foo"); + XCTAssertEqualStrings([seg subPatternString:2], @"baz"); + XCTAssertNil([seg subPatternString:3]); // (nothing matched "(bar)" + XCTAssertEqualStrings([seg subPatternString:4], @"baz"); + XCTAssertNil([seg subPatternString:5]); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test all objects regex = [GTMRegex regexWithPattern:@"foo+ba+r"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:@"afoobarbfooobaarfoobarzz"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); NSArray *allSegments = [enumerator allObjects]; - STAssertNotNil(allSegments, nil); - STAssertEquals((NSUInteger)6, [allSegments count], nil); + XCTAssertNotNil(allSegments); + XCTAssertEqual((NSUInteger)6, [allSegments count]); // test we are getting the flags right for newline regex = [GTMRegex regexWithPattern:@"^a"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:@"aa\naa"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "a" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"a", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"a"); // "a\n" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"a\n", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"a\n"); // "a" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"a", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"a"); // "a" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"a", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"a"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test we are getting the flags right for newline, part 2 regex = [GTMRegex regexWithPattern:@"^a*$"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:@"aa\naa\nbb\naa"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aa"); // "\n" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"\n", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"\n"); // "aa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aa"); // "\nbb\n" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"\nbb\n", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"\nbb\n"); // "aa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aa"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // make sure the enum cleans up if not walked to the end regex = [GTMRegex regexWithPattern:@"b+"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex segmentEnumeratorForString:@"aabbcc"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aa", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aa"); // and done w/o walking the rest } - (void)testMatchSegmentEnumeratorForString { GTMRegex *regex = [GTMRegex regexWithPattern:@"foo+ba+r"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); // test odd input NSEnumerator *enumerator = [regex matchSegmentEnumeratorForString:@""]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); enumerator = [regex matchSegmentEnumeratorForString:nil]; - STAssertNil(enumerator, nil); - + XCTAssertNil(enumerator); + // on w/ the normal tests enumerator = [regex matchSegmentEnumeratorForString:@"afoobarbfooobaarfoobarzz"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "a" - skipped // "foobar" GTMRegexStringSegment *seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); // "b" - skipped // "fooobaar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"fooobaar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"fooobaar"); // "foobar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); // "zz" - skipped // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test no match enumerator = [regex matchSegmentEnumeratorForString:@"aaa"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); seg = [enumerator nextObject]; - STAssertNil(seg, nil); // should have gotten nothing + XCTAssertNil(seg); // should have gotten nothing // test only match enumerator = [regex matchSegmentEnumeratorForString:@"foobar"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // now test the saved sub segments regex = [GTMRegex regexWithPattern:@"(foo)((bar)|(baz))"]; - STAssertNotNil(regex, nil); - STAssertEquals((NSUInteger)4, [regex subPatternCount], nil); + XCTAssertNotNil(regex); + XCTAssertEqual((NSUInteger)4, [regex subPatternCount]); enumerator = [regex matchSegmentEnumeratorForString:@"foobarxxfoobaz"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "foobar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); - STAssertEqualStrings([seg subPatternString:0], @"foobar", nil); - STAssertEqualStrings([seg subPatternString:1], @"foo", nil); - STAssertEqualStrings([seg subPatternString:2], @"bar", nil); - STAssertEqualStrings([seg subPatternString:3], @"bar", nil); - STAssertNil([seg subPatternString:4], nil); // nothing matched "(baz)" - STAssertNil([seg subPatternString:5], nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); + XCTAssertEqualStrings([seg subPatternString:0], @"foobar"); + XCTAssertEqualStrings([seg subPatternString:1], @"foo"); + XCTAssertEqualStrings([seg subPatternString:2], @"bar"); + XCTAssertEqualStrings([seg subPatternString:3], @"bar"); + XCTAssertNil([seg subPatternString:4]); // nothing matched "(baz)" + XCTAssertNil([seg subPatternString:5]); // "xx" - skipped // "foobaz" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobaz", nil); - STAssertEqualStrings([seg subPatternString:0], @"foobaz", nil); - STAssertEqualStrings([seg subPatternString:1], @"foo", nil); - STAssertEqualStrings([seg subPatternString:2], @"baz", nil); - STAssertNil([seg subPatternString:3], nil); // (nothing matched "(bar)" - STAssertEqualStrings([seg subPatternString:4], @"baz", nil); - STAssertNil([seg subPatternString:5], nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobaz"); + XCTAssertEqualStrings([seg subPatternString:0], @"foobaz"); + XCTAssertEqualStrings([seg subPatternString:1], @"foo"); + XCTAssertEqualStrings([seg subPatternString:2], @"baz"); + XCTAssertNil([seg subPatternString:3]); // (nothing matched "(bar)" + XCTAssertEqualStrings([seg subPatternString:4], @"baz"); + XCTAssertNil([seg subPatternString:5]); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test all objects regex = [GTMRegex regexWithPattern:@"foo+ba+r"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex matchSegmentEnumeratorForString:@"afoobarbfooobaarfoobarzz"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); NSArray *allSegments = [enumerator allObjects]; - STAssertNotNil(allSegments, nil); - STAssertEquals((NSUInteger)3, [allSegments count], nil); - + XCTAssertNotNil(allSegments); + XCTAssertEqual((NSUInteger)3, [allSegments count]); + // test we are getting the flags right for newline regex = [GTMRegex regexWithPattern:@"^a"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex matchSegmentEnumeratorForString:@"aa\naa"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "a" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"a", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"a"); // "a\n" - skipped // "a" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"a", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"a"); // "a" - skipped // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test we are getting the flags right for newline, part 2 regex = [GTMRegex regexWithPattern:@"^a*$"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); enumerator = [regex matchSegmentEnumeratorForString:@"aa\naa\nbb\naa"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "aa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aa"); // "\n" - skipped // "aa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aa"); // "\nbb\n" - skipped // "aa" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aa", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aa"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); } - (void)testStringByReplacingMatchesInStringWithReplacement { GTMRegex *regex = [GTMRegex regexWithPattern:@"(foo)(.*)(bar)"]; - STAssertNotNil(regex, nil); + XCTAssertNotNil(regex); // the basics - STAssertEqualStrings(@"weeZbarZbydoo spamZfooZdoggies", - [regex stringByReplacingMatchesInString:@"weefoobydoo spambardoggies" - withReplacement:@"Z\\3Z\\2Z\\1Z"], - nil); + XCTAssertEqualStrings(@"weeZbarZbydoo spamZfooZdoggies", + [regex stringByReplacingMatchesInString:@"weefoobydoo spambardoggies" + withReplacement:@"Z\\3Z\\2Z\\1Z"]); // nil/empty replacement - STAssertEqualStrings(@"weedoggies", - [regex stringByReplacingMatchesInString:@"weefoobydoo spambardoggies" - withReplacement:nil], - nil); - STAssertEqualStrings(@"weedoggies", - [regex stringByReplacingMatchesInString:@"weefoobydoo spambardoggies" - withReplacement:@""], - nil); - STAssertEqualStrings(@"", - [regex stringByReplacingMatchesInString:@"" - withReplacement:@"abc"], - nil); - STAssertNil([regex stringByReplacingMatchesInString:nil - withReplacement:@"abc"], - nil); + XCTAssertEqualStrings(@"weedoggies", + [regex stringByReplacingMatchesInString:@"weefoobydoo spambardoggies" + withReplacement:nil]); + XCTAssertEqualStrings(@"weedoggies", + [regex stringByReplacingMatchesInString:@"weefoobydoo spambardoggies" + withReplacement:@""]); + XCTAssertEqualStrings(@"", + [regex stringByReplacingMatchesInString:@"" + withReplacement:@"abc"]); + XCTAssertNil([regex stringByReplacingMatchesInString:nil + withReplacement:@"abc"]); // use optional and invale subexpression parts to confirm that works regex = [GTMRegex regexWithPattern:@"(fo(o+))((bar)|(baz))"]; - STAssertNotNil(regex, nil); - STAssertEqualStrings(@"aaa baz bar bar foo baz aaa", - [regex stringByReplacingMatchesInString:@"aaa foooooobaz fooobar bar foo baz aaa" - withReplacement:@"\\4\\5"], - nil); - STAssertEqualStrings(@"aaa ZZZ ZZZ bar foo baz aaa", - [regex stringByReplacingMatchesInString:@"aaa foooooobaz fooobar bar foo baz aaa" - withReplacement:@"Z\\10Z\\12Z"], - nil); + XCTAssertNotNil(regex); + XCTAssertEqualStrings(@"aaa baz bar bar foo baz aaa", + [regex stringByReplacingMatchesInString:@"aaa foooooobaz fooobar bar foo baz aaa" + withReplacement:@"\\4\\5"]); + XCTAssertEqualStrings(@"aaa ZZZ ZZZ bar foo baz aaa", + [regex stringByReplacingMatchesInString:@"aaa foooooobaz fooobar bar foo baz aaa" + withReplacement:@"Z\\10Z\\12Z"]); // test slashes in replacement that aren't part of the subpattern reference regex = [GTMRegex regexWithPattern:@"a+"]; - STAssertNotNil(regex, nil); - STAssertEqualStrings(@"z\\\\0 \\\\a \\\\\\\\0z", - [regex stringByReplacingMatchesInString:@"zaz" - withReplacement:@"\\\\0 \\\\\\0 \\\\\\\\0"], - nil); - STAssertEqualStrings(@"z\\\\a \\\\\\\\0 \\\\\\\\az", - [regex stringByReplacingMatchesInString:@"zaz" - withReplacement:@"\\\\\\0 \\\\\\\\0 \\\\\\\\\\0"], - nil); - STAssertEqualStrings(@"z\\\\\\\\0 \\\\\\\\a \\\\\\\\\\\\0z", - [regex stringByReplacingMatchesInString:@"zaz" - withReplacement:@"\\\\\\\\0 \\\\\\\\\\0 \\\\\\\\\\\\0"], - nil); + XCTAssertNotNil(regex); + XCTAssertEqualStrings(@"z\\\\0 \\\\a \\\\\\\\0z", + [regex stringByReplacingMatchesInString:@"zaz" + withReplacement:@"\\\\0 \\\\\\0 \\\\\\\\0"]); + XCTAssertEqualStrings(@"z\\\\a \\\\\\\\0 \\\\\\\\az", + [regex stringByReplacingMatchesInString:@"zaz" + withReplacement:@"\\\\\\0 \\\\\\\\0 \\\\\\\\\\0"]); + XCTAssertEqualStrings(@"z\\\\\\\\0 \\\\\\\\a \\\\\\\\\\\\0z", + [regex stringByReplacingMatchesInString:@"zaz" + withReplacement:@"\\\\\\\\0 \\\\\\\\\\0 \\\\\\\\\\\\0"]); } - (void)testDescriptions { // default options GTMRegex *regex = [GTMRegex regexWithPattern:@"a+"]; - STAssertNotNil(regex, nil); - STAssertGreaterThan([[regex description] length], (NSUInteger)10, - @"failed to get a reasonable description for regex"); + XCTAssertNotNil(regex); + XCTAssertGreaterThan([[regex description] length], (NSUInteger)10, + @"failed to get a reasonable description for regex"); // enumerator NSEnumerator *enumerator = [regex segmentEnumeratorForString:@"aaabbbccc"]; - STAssertNotNil(enumerator, nil); - STAssertGreaterThan([[enumerator description] length], (NSUInteger)10, - @"failed to get a reasonable description for regex enumerator"); + XCTAssertNotNil(enumerator); + XCTAssertGreaterThan([[enumerator description] length], (NSUInteger)10, + @"failed to get a reasonable description for regex enumerator"); // string segment GTMRegexStringSegment *seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertGreaterThan([[seg description] length], (NSUInteger)10, - @"failed to get a reasonable description for regex string segment"); + XCTAssertNotNil(seg); + XCTAssertGreaterThan([[seg description] length], (NSUInteger)10, + @"failed to get a reasonable description for regex string segment"); // regex w/ other options regex = [GTMRegex regexWithPattern:@"a+" options:(kGTMRegexOptionIgnoreCase | kGTMRegexOptionSupressNewlineSupport)]; - STAssertNotNil(regex, nil); - STAssertGreaterThan([[regex description] length], (NSUInteger)10, - @"failed to get a reasonable description for regex w/ options"); + XCTAssertNotNil(regex); + XCTAssertGreaterThan([[regex description] length], (NSUInteger)10, + @"failed to get a reasonable description for regex w/ options"); } @end @@ -913,333 +897,324 @@ - (void)testMatchesPattern { // simple pattern - STAssertTrue([@"foobar" gtm_matchesPattern:@"foo.*bar"], nil); - STAssertTrue([@"foobydoo spambar" gtm_matchesPattern:@"foo.*bar"], nil); - STAssertFalse([@"zzfoobarzz" gtm_matchesPattern:@"foo.*bar"], nil); - STAssertFalse([@"zzfoobydoo spambarzz" gtm_matchesPattern:@"foo.*bar"], nil); - STAssertFalse([@"abcdef" gtm_matchesPattern:@"foo.*bar"], nil); - STAssertFalse([@"" gtm_matchesPattern:@"foo.*bar"], nil); + XCTAssertTrue([@"foobar" gtm_matchesPattern:@"foo.*bar"]); + XCTAssertTrue([@"foobydoo spambar" gtm_matchesPattern:@"foo.*bar"]); + XCTAssertFalse([@"zzfoobarzz" gtm_matchesPattern:@"foo.*bar"]); + XCTAssertFalse([@"zzfoobydoo spambarzz" gtm_matchesPattern:@"foo.*bar"]); + XCTAssertFalse([@"abcdef" gtm_matchesPattern:@"foo.*bar"]); + XCTAssertFalse([@"" gtm_matchesPattern:@"foo.*bar"]); // pattern w/ sub patterns - STAssertTrue([@"foobar" gtm_matchesPattern:@"(foo)(.*)(bar)"], nil); - STAssertTrue([@"foobydoo spambar" gtm_matchesPattern:@"(foo)(.*)(bar)"], nil); - STAssertFalse([@"zzfoobarzz" gtm_matchesPattern:@"(foo)(.*)(bar)"], nil); - STAssertFalse([@"zzfoobydoo spambarzz" gtm_matchesPattern:@"(foo)(.*)(bar)"], nil); - STAssertFalse([@"abcdef" gtm_matchesPattern:@"(foo)(.*)(bar)"], nil); - STAssertFalse([@"" gtm_matchesPattern:@"(foo)(.*)(bar)"], nil); + XCTAssertTrue([@"foobar" gtm_matchesPattern:@"(foo)(.*)(bar)"]); + XCTAssertTrue([@"foobydoo spambar" gtm_matchesPattern:@"(foo)(.*)(bar)"]); + XCTAssertFalse([@"zzfoobarzz" gtm_matchesPattern:@"(foo)(.*)(bar)"]); + XCTAssertFalse([@"zzfoobydoo spambarzz" gtm_matchesPattern:@"(foo)(.*)(bar)"]); + XCTAssertFalse([@"abcdef" gtm_matchesPattern:@"(foo)(.*)(bar)"]); + XCTAssertFalse([@"" gtm_matchesPattern:@"(foo)(.*)(bar)"]); } - (void)testSubPatternsOfPattern { NSArray *subPatterns = [@"foooooobaz" gtm_subPatternsOfPattern:@"(fo(o+))((bar)|(baz))"]; - STAssertNotNil(subPatterns, nil); - STAssertEquals((NSUInteger)6, [subPatterns count], nil); - STAssertEqualStrings(@"foooooobaz", [subPatterns objectAtIndex:0], nil); - STAssertEqualStrings(@"foooooo", [subPatterns objectAtIndex:1], nil); - STAssertEqualStrings(@"ooooo", [subPatterns objectAtIndex:2], nil); - STAssertEqualStrings(@"baz", [subPatterns objectAtIndex:3], nil); - STAssertEqualObjects([NSNull null], [subPatterns objectAtIndex:4], nil); - STAssertEqualStrings(@"baz", [subPatterns objectAtIndex:5], nil); + XCTAssertNotNil(subPatterns); + XCTAssertEqual((NSUInteger)6, [subPatterns count]); + XCTAssertEqualStrings(@"foooooobaz", [subPatterns objectAtIndex:0]); + XCTAssertEqualStrings(@"foooooo", [subPatterns objectAtIndex:1]); + XCTAssertEqualStrings(@"ooooo", [subPatterns objectAtIndex:2]); + XCTAssertEqualStrings(@"baz", [subPatterns objectAtIndex:3]); + XCTAssertEqualObjects([NSNull null], [subPatterns objectAtIndex:4]); + XCTAssertEqualStrings(@"baz", [subPatterns objectAtIndex:5]); // not there subPatterns = [@"aaa" gtm_subPatternsOfPattern:@"(fo(o+))((bar)|(baz))"]; - STAssertNil(subPatterns, nil); + XCTAssertNil(subPatterns); // not extra stuff on either end subPatterns = [@"ZZZfoooooobaz" gtm_subPatternsOfPattern:@"(fo(o+))((bar)|(baz))"]; - STAssertNil(subPatterns, nil); + XCTAssertNil(subPatterns); subPatterns = [@"foooooobazZZZ" gtm_subPatternsOfPattern:@"(fo(o+))((bar)|(baz))"]; - STAssertNil(subPatterns, nil); + XCTAssertNil(subPatterns); subPatterns = [@"ZZZfoooooobazZZZ" gtm_subPatternsOfPattern:@"(fo(o+))((bar)|(baz))"]; - STAssertNil(subPatterns, nil); + XCTAssertNil(subPatterns); } - (void)testFirstSubStringMatchedByPattern { // simple pattern - STAssertEqualStrings([@"foobar" gtm_firstSubStringMatchedByPattern:@"foo.*bar"], - @"foobar", nil); - STAssertEqualStrings([@"foobydoo spambar" gtm_firstSubStringMatchedByPattern:@"foo.*bar"], - @"foobydoo spambar", nil); - STAssertEqualStrings([@"zzfoobarzz" gtm_firstSubStringMatchedByPattern:@"foo.*bar"], - @"foobar", nil); - STAssertEqualStrings([@"zzfoobydoo spambarzz" gtm_firstSubStringMatchedByPattern:@"foo.*bar"], - @"foobydoo spambar", nil); - STAssertNil([@"abcdef" gtm_firstSubStringMatchedByPattern:@"foo.*bar"], nil); - STAssertNil([@"" gtm_firstSubStringMatchedByPattern:@"foo.*bar"], nil); + XCTAssertEqualStrings([@"foobar" gtm_firstSubStringMatchedByPattern:@"foo.*bar"], + @"foobar"); + XCTAssertEqualStrings([@"foobydoo spambar" gtm_firstSubStringMatchedByPattern:@"foo.*bar"], + @"foobydoo spambar"); + XCTAssertEqualStrings([@"zzfoobarzz" gtm_firstSubStringMatchedByPattern:@"foo.*bar"], + @"foobar"); + XCTAssertEqualStrings([@"zzfoobydoo spambarzz" gtm_firstSubStringMatchedByPattern:@"foo.*bar"], + @"foobydoo spambar"); + XCTAssertNil([@"abcdef" gtm_firstSubStringMatchedByPattern:@"foo.*bar"]); + XCTAssertNil([@"" gtm_firstSubStringMatchedByPattern:@"foo.*bar"]); // pattern w/ sub patterns - STAssertEqualStrings([@"foobar" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"], - @"foobar", nil); - STAssertEqualStrings([@"foobydoo spambar" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"], - @"foobydoo spambar", nil); - STAssertEqualStrings([@"zzfoobarzz" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"], - @"foobar", nil); - STAssertEqualStrings([@"zzfoobydoo spambarzz" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"], - @"foobydoo spambar", nil); - STAssertNil([@"abcdef" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"], nil); - STAssertNil([@"" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"], nil); + XCTAssertEqualStrings([@"foobar" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"], + @"foobar"); + XCTAssertEqualStrings([@"foobydoo spambar" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"], + @"foobydoo spambar"); + XCTAssertEqualStrings([@"zzfoobarzz" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"], + @"foobar"); + XCTAssertEqualStrings([@"zzfoobydoo spambarzz" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"], + @"foobydoo spambar"); + XCTAssertNil([@"abcdef" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"]); + XCTAssertNil([@"" gtm_firstSubStringMatchedByPattern:@"(foo)(.*)(bar)"]); } - (void)testSubStringMatchesPattern { // simple pattern - STAssertTrue([@"foobar" gtm_subStringMatchesPattern:@"foo.*bar"], nil); - STAssertTrue([@"foobydoo spambar" gtm_subStringMatchesPattern:@"foo.*bar"], nil); - STAssertTrue([@"zzfoobarzz" gtm_subStringMatchesPattern:@"foo.*bar"], nil); - STAssertTrue([@"zzfoobydoo spambarzz" gtm_subStringMatchesPattern:@"foo.*bar"], nil); - STAssertFalse([@"abcdef" gtm_subStringMatchesPattern:@"foo.*bar"], nil); - STAssertFalse([@"" gtm_subStringMatchesPattern:@"foo.*bar"], nil); + XCTAssertTrue([@"foobar" gtm_subStringMatchesPattern:@"foo.*bar"]); + XCTAssertTrue([@"foobydoo spambar" gtm_subStringMatchesPattern:@"foo.*bar"]); + XCTAssertTrue([@"zzfoobarzz" gtm_subStringMatchesPattern:@"foo.*bar"]); + XCTAssertTrue([@"zzfoobydoo spambarzz" gtm_subStringMatchesPattern:@"foo.*bar"]); + XCTAssertFalse([@"abcdef" gtm_subStringMatchesPattern:@"foo.*bar"]); + XCTAssertFalse([@"" gtm_subStringMatchesPattern:@"foo.*bar"]); // pattern w/ sub patterns - STAssertTrue([@"foobar" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"], nil); - STAssertTrue([@"foobydoo spambar" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"], nil); - STAssertTrue([@"zzfoobarzz" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"], nil); - STAssertTrue([@"zzfoobydoo spambarzz" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"], nil); - STAssertFalse([@"abcdef" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"], nil); - STAssertFalse([@"" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"], nil); + XCTAssertTrue([@"foobar" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"]); + XCTAssertTrue([@"foobydoo spambar" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"]); + XCTAssertTrue([@"zzfoobarzz" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"]); + XCTAssertTrue([@"zzfoobydoo spambarzz" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"]); + XCTAssertFalse([@"abcdef" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"]); + XCTAssertFalse([@"" gtm_subStringMatchesPattern:@"(foo)(.*)(bar)"]); } - (void)testSegmentEnumeratorForPattern { NSEnumerator *enumerator = [@"afoobarbfooobaarfoobarzz" gtm_segmentEnumeratorForPattern:@"foo+ba+r"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "a" GTMRegexStringSegment *seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"a", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"a"); // "foobar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); // "b" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"b", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"b"); // "fooobaar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"fooobaar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"fooobaar"); // "foobar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); // "zz" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"zz", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"zz"); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test no match enumerator = [@"aaa" gtm_segmentEnumeratorForPattern:@"foo+ba+r"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"aaa", nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"aaa"); seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test only match enumerator = [@"foobar" gtm_segmentEnumeratorForPattern:@"foo+ba+r"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // now test the saved sub segments enumerator = [@"foobarxxfoobaz" gtm_segmentEnumeratorForPattern:@"(foo)((bar)|(baz))"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "foobar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); - STAssertEqualStrings([seg subPatternString:0], @"foobar", nil); - STAssertEqualStrings([seg subPatternString:1], @"foo", nil); - STAssertEqualStrings([seg subPatternString:2], @"bar", nil); - STAssertEqualStrings([seg subPatternString:3], @"bar", nil); - STAssertNil([seg subPatternString:4], nil); // nothing matched "(baz)" - STAssertNil([seg subPatternString:5], nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); + XCTAssertEqualStrings([seg subPatternString:0], @"foobar"); + XCTAssertEqualStrings([seg subPatternString:1], @"foo"); + XCTAssertEqualStrings([seg subPatternString:2], @"bar"); + XCTAssertEqualStrings([seg subPatternString:3], @"bar"); + XCTAssertNil([seg subPatternString:4]); // nothing matched "(baz)" + XCTAssertNil([seg subPatternString:5]); // "xx" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertFalse([seg isMatch], nil); - STAssertEqualStrings([seg string], @"xx", nil); - STAssertEqualStrings([seg subPatternString:0], @"xx", nil); - STAssertNil([seg subPatternString:1], nil); + XCTAssertNotNil(seg); + XCTAssertFalse([seg isMatch]); + XCTAssertEqualStrings([seg string], @"xx"); + XCTAssertEqualStrings([seg subPatternString:0], @"xx"); + XCTAssertNil([seg subPatternString:1]); // "foobaz" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobaz", nil); - STAssertEqualStrings([seg subPatternString:0], @"foobaz", nil); - STAssertEqualStrings([seg subPatternString:1], @"foo", nil); - STAssertEqualStrings([seg subPatternString:2], @"baz", nil); - STAssertNil([seg subPatternString:3], nil); // (nothing matched "(bar)" - STAssertEqualStrings([seg subPatternString:4], @"baz", nil); - STAssertNil([seg subPatternString:5], nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobaz"); + XCTAssertEqualStrings([seg subPatternString:0], @"foobaz"); + XCTAssertEqualStrings([seg subPatternString:1], @"foo"); + XCTAssertEqualStrings([seg subPatternString:2], @"baz"); + XCTAssertNil([seg subPatternString:3]); // (nothing matched "(bar)" + XCTAssertEqualStrings([seg subPatternString:4], @"baz"); + XCTAssertNil([seg subPatternString:5]); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test all objects enumerator = [@"afoobarbfooobaarfoobarzz" gtm_segmentEnumeratorForPattern:@"foo+ba+r"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); NSArray *allSegments = [enumerator allObjects]; - STAssertNotNil(allSegments, nil); - STAssertEquals((NSUInteger)6, [allSegments count], nil); + XCTAssertNotNil(allSegments); + XCTAssertEqual((NSUInteger)6, [allSegments count]); } - (void)testMatchSegmentEnumeratorForPattern { NSEnumerator *enumerator = [@"afoobarbfooobaarfoobarzz" gtm_matchSegmentEnumeratorForPattern:@"foo+ba+r"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "a" - skipped // "foobar" GTMRegexStringSegment *seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); // "b" - skipped // "fooobaar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"fooobaar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"fooobaar"); // "foobar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); // "zz" - skipped // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test no match enumerator = [@"aaa" gtm_matchSegmentEnumeratorForPattern:@"foo+ba+r"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test only match enumerator = [@"foobar" gtm_matchSegmentEnumeratorForPattern:@"foo+ba+r"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // now test the saved sub segments enumerator = [@"foobarxxfoobaz" gtm_matchSegmentEnumeratorForPattern:@"(foo)((bar)|(baz))"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); // "foobar" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobar", nil); - STAssertEqualStrings([seg subPatternString:0], @"foobar", nil); - STAssertEqualStrings([seg subPatternString:1], @"foo", nil); - STAssertEqualStrings([seg subPatternString:2], @"bar", nil); - STAssertEqualStrings([seg subPatternString:3], @"bar", nil); - STAssertNil([seg subPatternString:4], nil); // nothing matched "(baz)" - STAssertNil([seg subPatternString:5], nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobar"); + XCTAssertEqualStrings([seg subPatternString:0], @"foobar"); + XCTAssertEqualStrings([seg subPatternString:1], @"foo"); + XCTAssertEqualStrings([seg subPatternString:2], @"bar"); + XCTAssertEqualStrings([seg subPatternString:3], @"bar"); + XCTAssertNil([seg subPatternString:4]); // nothing matched "(baz)" + XCTAssertNil([seg subPatternString:5]); // "xx" - skipped // "foobaz" seg = [enumerator nextObject]; - STAssertNotNil(seg, nil); - STAssertTrue([seg isMatch], nil); - STAssertEqualStrings([seg string], @"foobaz", nil); - STAssertEqualStrings([seg subPatternString:0], @"foobaz", nil); - STAssertEqualStrings([seg subPatternString:1], @"foo", nil); - STAssertEqualStrings([seg subPatternString:2], @"baz", nil); - STAssertNil([seg subPatternString:3], nil); // (nothing matched "(bar)" - STAssertEqualStrings([seg subPatternString:4], @"baz", nil); - STAssertNil([seg subPatternString:5], nil); + XCTAssertNotNil(seg); + XCTAssertTrue([seg isMatch]); + XCTAssertEqualStrings([seg string], @"foobaz"); + XCTAssertEqualStrings([seg subPatternString:0], @"foobaz"); + XCTAssertEqualStrings([seg subPatternString:1], @"foo"); + XCTAssertEqualStrings([seg subPatternString:2], @"baz"); + XCTAssertNil([seg subPatternString:3]); // (nothing matched "(bar)" + XCTAssertEqualStrings([seg subPatternString:4], @"baz"); + XCTAssertNil([seg subPatternString:5]); // (end) seg = [enumerator nextObject]; - STAssertNil(seg, nil); + XCTAssertNil(seg); // test all objects enumerator = [@"afoobarbfooobaarfoobarzz" gtm_matchSegmentEnumeratorForPattern:@"foo+ba+r"]; - STAssertNotNil(enumerator, nil); + XCTAssertNotNil(enumerator); NSArray *allSegments = [enumerator allObjects]; - STAssertNotNil(allSegments, nil); - STAssertEquals((NSUInteger)3, [allSegments count], nil); + XCTAssertNotNil(allSegments); + XCTAssertEqual((NSUInteger)3, [allSegments count]); } - (void)testAllSubstringsMatchedByPattern { NSArray *segments = [@"afoobarbfooobaarfoobarzz" gtm_allSubstringsMatchedByPattern:@"foo+ba+r"]; - STAssertNotNil(segments, nil); - STAssertEquals((NSUInteger)3, [segments count], nil); - STAssertEqualStrings([segments objectAtIndex:0], @"foobar", nil); - STAssertEqualStrings([segments objectAtIndex:1], @"fooobaar", nil); - STAssertEqualStrings([segments objectAtIndex:2], @"foobar", nil); + XCTAssertNotNil(segments); + XCTAssertEqual((NSUInteger)3, [segments count]); + XCTAssertEqualStrings([segments objectAtIndex:0], @"foobar"); + XCTAssertEqualStrings([segments objectAtIndex:1], @"fooobaar"); + XCTAssertEqualStrings([segments objectAtIndex:2], @"foobar"); // test no match segments = [@"aaa" gtm_allSubstringsMatchedByPattern:@"foo+ba+r"]; - STAssertNotNil(segments, nil); - STAssertEquals((NSUInteger)0, [segments count], nil); + XCTAssertNotNil(segments); + XCTAssertEqual((NSUInteger)0, [segments count]); // test only match segments = [@"foobar" gtm_allSubstringsMatchedByPattern:@"foo+ba+r"]; - STAssertNotNil(segments, nil); - STAssertEquals((NSUInteger)1, [segments count], nil); - STAssertEqualStrings([segments objectAtIndex:0], @"foobar", nil); + XCTAssertNotNil(segments); + XCTAssertEqual((NSUInteger)1, [segments count]); + XCTAssertEqualStrings([segments objectAtIndex:0], @"foobar"); } - (void)testStringByReplacingMatchesOfPatternWithReplacement { // the basics - STAssertEqualStrings(@"weeZbarZbydoo spamZfooZdoggies", - [@"weefoobydoo spambardoggies" gtm_stringByReplacingMatchesOfPattern:@"(foo)(.*)(bar)" - withReplacement:@"Z\\3Z\\2Z\\1Z"], - nil); + XCTAssertEqualStrings(@"weeZbarZbydoo spamZfooZdoggies", + [@"weefoobydoo spambardoggies" gtm_stringByReplacingMatchesOfPattern:@"(foo)(.*)(bar)" + withReplacement:@"Z\\3Z\\2Z\\1Z"]); // nil/empty replacement - STAssertEqualStrings(@"weedoggies", - [@"weefoobydoo spambardoggies" gtm_stringByReplacingMatchesOfPattern:@"(foo)(.*)(bar)" - withReplacement:nil], - nil); - STAssertEqualStrings(@"weedoggies", - [@"weefoobydoo spambardoggies" gtm_stringByReplacingMatchesOfPattern:@"(foo)(.*)(bar)" - withReplacement:@""], - nil); - STAssertEqualStrings(@"", - [@"" gtm_stringByReplacingMatchesOfPattern:@"(foo)(.*)(bar)" - withReplacement:@"abc"], - nil); + XCTAssertEqualStrings(@"weedoggies", + [@"weefoobydoo spambardoggies" gtm_stringByReplacingMatchesOfPattern:@"(foo)(.*)(bar)" + withReplacement:nil]); + XCTAssertEqualStrings(@"weedoggies", + [@"weefoobydoo spambardoggies" gtm_stringByReplacingMatchesOfPattern:@"(foo)(.*)(bar)" + withReplacement:@""]); + XCTAssertEqualStrings(@"", + [@"" gtm_stringByReplacingMatchesOfPattern:@"(foo)(.*)(bar)" + withReplacement:@"abc"]); // use optional and invale subexpression parts to confirm that works - STAssertEqualStrings(@"aaa baz bar bar foo baz aaa", - [@"aaa foooooobaz fooobar bar foo baz aaa" gtm_stringByReplacingMatchesOfPattern:@"(fo(o+))((bar)|(baz))" - withReplacement:@"\\4\\5"], - nil); - STAssertEqualStrings(@"aaa ZZZ ZZZ bar foo baz aaa", - [@"aaa foooooobaz fooobar bar foo baz aaa" gtm_stringByReplacingMatchesOfPattern:@"(fo(o+))((bar)|(baz))" - withReplacement:@"Z\\10Z\\12Z"], - nil); + XCTAssertEqualStrings(@"aaa baz bar bar foo baz aaa", + [@"aaa foooooobaz fooobar bar foo baz aaa" gtm_stringByReplacingMatchesOfPattern:@"(fo(o+))((bar)|(baz))" + withReplacement:@"\\4\\5"]); + XCTAssertEqualStrings(@"aaa ZZZ ZZZ bar foo baz aaa", + [@"aaa foooooobaz fooobar bar foo baz aaa" gtm_stringByReplacingMatchesOfPattern:@"(fo(o+))((bar)|(baz))" + withReplacement:@"Z\\10Z\\12Z"]); // test slashes in replacement that aren't part of the subpattern reference - STAssertEqualStrings(@"z\\\\0 \\\\a \\\\\\\\0z", - [@"zaz" gtm_stringByReplacingMatchesOfPattern:@"a+" - withReplacement:@"\\\\0 \\\\\\0 \\\\\\\\0"], - nil); - STAssertEqualStrings(@"z\\\\a \\\\\\\\0 \\\\\\\\az", - [@"zaz" gtm_stringByReplacingMatchesOfPattern:@"a+" - withReplacement:@"\\\\\\0 \\\\\\\\0 \\\\\\\\\\0"], - nil); - STAssertEqualStrings(@"z\\\\\\\\0 \\\\\\\\a \\\\\\\\\\\\0z", - [@"zaz" gtm_stringByReplacingMatchesOfPattern:@"a+" - withReplacement:@"\\\\\\\\0 \\\\\\\\\\0 \\\\\\\\\\\\0"], - nil); + XCTAssertEqualStrings(@"z\\\\0 \\\\a \\\\\\\\0z", + [@"zaz" gtm_stringByReplacingMatchesOfPattern:@"a+" + withReplacement:@"\\\\0 \\\\\\0 \\\\\\\\0"]); + XCTAssertEqualStrings(@"z\\\\a \\\\\\\\0 \\\\\\\\az", + [@"zaz" gtm_stringByReplacingMatchesOfPattern:@"a+" + withReplacement:@"\\\\\\0 \\\\\\\\0 \\\\\\\\\\0"]); + XCTAssertEqualStrings(@"z\\\\\\\\0 \\\\\\\\a \\\\\\\\\\\\0z", + [@"zaz" gtm_stringByReplacingMatchesOfPattern:@"a+" + withReplacement:@"\\\\\\\\0 \\\\\\\\\\0 \\\\\\\\\\\\0"]); } @end diff --git a/Foundation/GTMSQLite.h b/Foundation/GTMSQLite.h index 0697d5a..0daa02c 100644 --- a/Foundation/GTMSQLite.h +++ b/Foundation/GTMSQLite.h @@ -92,12 +92,6 @@ // or ranges between single UniChars. // -// SQLite is preinstalled on 10.4 only. As long as we're using the OS version -// of the library, limit ourself to Tiger+ -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_4 -#error SQLite support is Tiger or later -#endif - #import <Foundation/Foundation.h> #import <sqlite3.h> diff --git a/Foundation/GTMSQLite.m b/Foundation/GTMSQLite.m index 502a5cc..aa5d5f5 100644 --- a/Foundation/GTMSQLite.m +++ b/Foundation/GTMSQLite.m @@ -20,9 +20,6 @@ #import <Foundation/Foundation.h> -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -#import <dlfcn.h> -#endif #import "GTMSQLite.h" #import "GTMMethodCheck.h" #import "GTMDefines.h" @@ -44,22 +41,6 @@ typedef struct { int textRep; } LikeGlobUserArgs; -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -// While we want to be compatible with Tiger, some operations are more -// efficient when implemented with Leopard APIs. We look those up dynamically. -// CFStringCreateWithBytesNoCopy -static const char* const kCFStringCreateWithBytesNoCopySymbolName = - "CFStringCreateWithBytesNoCopy"; - -typedef CFStringRef (*CFStringCreateWithBytesNoCopyPtrType)(CFAllocatorRef, - const UInt8 *, - CFIndex, - CFStringEncoding, - Boolean, - CFAllocatorRef); -static CFStringCreateWithBytesNoCopyPtrType gCFStringCreateWithBytesNoCopySymbol = NULL; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - // Helper inline for SQLite text type to CF endcoding GTM_INLINE CFStringEncoding SqliteTextEncodingToCFStringEncoding(int enc) { // Default should never happen, but assume UTF 8 @@ -87,14 +68,12 @@ GTM_INLINE CFOptionFlags FilteredStringCompareFlags(CFOptionFlags inOptions) { if (inOptions & kCFCompareNonliteral) outOptions |= kCFCompareNonliteral; if (inOptions & kCFCompareLocalized) outOptions |= kCFCompareLocalized; if (inOptions & kCFCompareNumerically) outOptions |= kCFCompareNumerically; -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 if (inOptions & kCFCompareDiacriticInsensitive) { outOptions |= kCFCompareDiacriticInsensitive; } if (inOptions & kCFCompareWidthInsensitive) { outOptions |= kCFCompareWidthInsensitive; } -#endif return outOptions; } @@ -141,14 +120,6 @@ static CFLocaleRef gCurrentLocale = NULL; + (void)initialize { // Need the locale for some CFString enhancements gCurrentLocale = CFLocaleCopyCurrent(); - -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - // Compiling pre-Leopard try to find some symbols dynamically - gCFStringCreateWithBytesNoCopySymbol = - (CFStringCreateWithBytesNoCopyPtrType)dlsym( - RTLD_DEFAULT, - kCFStringCreateWithBytesNoCopySymbolName); -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 } + (int)sqliteVersionNumber { @@ -176,7 +147,7 @@ static CFLocaleRef gCurrentLocale = NULL; #else cfEncoding = kCFStringEncodingUTF16LE; #endif - NSStringEncoding nsEncoding + NSStringEncoding nsEncoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding); NSData *data = [path dataUsingEncoding:nsEncoding]; // Using -[NSString cStringUsingEncoding] causes sqlite3_open16 @@ -420,7 +391,7 @@ static CFLocaleRef gCurrentLocale = NULL; - (CFOptionFlags)likeComparisonOptions { CFOptionFlags flags = 0; - if (hasCFAdditions_) + if (hasCFAdditions_) flags = likeOptions_; return flags; } @@ -510,7 +481,7 @@ static CFLocaleRef gCurrentLocale = NULL; } - (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p - %@>", + return [NSString stringWithFormat:@"<%@: %p - %@>", [self class], self, path_]; } @end @@ -787,7 +758,7 @@ static void CollateNeeded(void *userContext, sqlite3 *db, int textRep, [collationName componentsSeparatedByString:@"_"]; NSString *collationFlag = nil; BOOL atLeastOneValidFlag = NO; - GTM_FOREACH_OBJECT(collationFlag, collationComponents) { + for (collationFlag in collationComponents) { if ([collationFlag isEqualToString:@"reverse"]) { userArgs->reverse = YES; atLeastOneValidFlag = YES; @@ -803,19 +774,12 @@ static void CollateNeeded(void *userContext, sqlite3 *db, int textRep, } else if ([collationFlag isEqualToString:@"numeric"]) { userArgs->compareOptions |= kCFCompareNumerically; atLeastOneValidFlag = YES; -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 } else if ([collationFlag isEqualToString:@"nodiacritic"]) { userArgs->compareOptions |= kCFCompareDiacriticInsensitive; atLeastOneValidFlag = YES; } else if ([collationFlag isEqualToString:@"widthinsensitive"]) { userArgs->compareOptions |= kCFCompareWidthInsensitive; atLeastOneValidFlag = YES; -#else - } else if (([collationFlag isEqualToString:@"nodiacritic"]) || - ([collationFlag isEqualToString:@"widthinsensitive"])) { - _GTMDevLog(@"GTMSQLiteDatabase 10.5 collating not " - @"available on 10.4 or earlier"); -#endif } } @@ -874,34 +838,6 @@ static int Collate8(void *userContext, int length1, const void *str1, // creation function, we'll use it when we can but we want to stay compatible // with Tiger. CFStringRef string1 = NULL, string2 = NULL; -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - if (gCFStringCreateWithBytesNoCopySymbol) { - string1 = gCFStringCreateWithBytesNoCopySymbol(kCFAllocatorDefault, - str1, - length1, - kCFStringEncodingUTF8, - false, - kCFAllocatorNull); - string2 = gCFStringCreateWithBytesNoCopySymbol(kCFAllocatorDefault, - str2, - length2, - kCFStringEncodingUTF8, - false, - kCFAllocatorNull); - } else { - // Have to use the copy-based variants - string1 = CFStringCreateWithBytes(kCFAllocatorDefault, - str1, - length1, - kCFStringEncodingUTF8, - false); - string2 = CFStringCreateWithBytes(kCFAllocatorDefault, - str2, - length2, - kCFStringEncodingUTF8, - false); - } -#else // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 string1 = CFStringCreateWithBytesNoCopy(kCFAllocatorDefault, str1, length1, @@ -914,7 +850,6 @@ static int Collate8(void *userContext, int length1, const void *str1, kCFStringEncodingUTF8, false, kCFAllocatorNull); -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 GTMCFAutorelease(string1); GTMCFAutorelease(string2); // Allocation failures can't really be sanely handled from a collator @@ -937,7 +872,7 @@ static int Collate8(void *userContext, int length1, const void *str1, if (userArgs->reverse && sqliteResult) { sqliteResult = -sqliteResult; } - + } return sqliteResult; } @@ -1025,7 +960,7 @@ static int Collate16(void *userContext, int length1, const void *str1, string2, userArgs->compareOptions); - sqliteResult = (int)result; + sqliteResult = (int)result; //Reverse if (userArgs->reverse && sqliteResult) { sqliteResult = -sqliteResult; @@ -1052,8 +987,8 @@ static void LikeGlobCompare(sqlite3_context *context, // Setup for pattern walk CFIndex patternLength = CFStringGetLength(pattern); CFStringInlineBuffer patternBuffer; - CFStringInitInlineBuffer(pattern, - &patternBuffer, + CFStringInitInlineBuffer(pattern, + &patternBuffer, CFRangeMake(0, patternLength)); UniChar patternChar; CFIndex patternIndex = 0; @@ -1128,7 +1063,7 @@ static void LikeGlobCompare(sqlite3_context *context, } // There's at least one character, try to match the remainder of the // string using a CFCharacterSet - CFMutableCharacterSetRef charSet + CFMutableCharacterSetRef charSet = CFCharacterSetCreateMutable(kCFAllocatorDefault); GTMCFAutorelease(charSet); if (!charSet) { @@ -1776,8 +1711,8 @@ static void Glob16(sqlite3_context *context, int argc, sqlite3_value **argv) { - (int)bindBlobAtPosition:(int)position data:(NSData *)data { if (!statement_ || !data || !position) return SQLITE_MISUSE; int blobLength = (int)[data length]; - _GTMDevAssert((blobLength < INT_MAX), - @"sqlite methods do not support data lengths " + _GTMDevAssert((blobLength < INT_MAX), + @"sqlite methods do not support data lengths " @"exceeding 32 bit sizes"); return [self bindBlobAtPosition:position bytes:(void *)[data bytes] @@ -1822,8 +1757,8 @@ static void Glob16(sqlite3_context *context, int argc, sqlite3_value **argv) { } return sqlite3_bind_text(statement_, position, - [string UTF8String], - -1, + [string UTF8String], + -1, SQLITE_TRANSIENT); } diff --git a/Foundation/GTMSQLiteTest.m b/Foundation/GTMSQLiteTest.m index 8a5f18d..2537dd6 100644 --- a/Foundation/GTMSQLiteTest.m +++ b/Foundation/GTMSQLiteTest.m @@ -19,7 +19,6 @@ #import "GTMSQLite.h" #import "GTMSenTestCase.h" -#import "GTMUnitTestDevLog.h" @interface GTMSQLiteTest : GTMTestCase @end @@ -48,66 +47,66 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); autorelease]; err = [db executeSQL:@"CREATE TABLE foo (bar TEXT COLLATE NOCASE_NONLITERAL);"]; - STAssertEquals(err, SQLITE_OK, @"Failed to create table"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table"); int changeCount = [db lastChangeCount]; - STAssertEquals(changeCount, 0, + XCTAssertEqual(changeCount, 0, @"Change count was not 0 after creating database/table!"); err = [db executeSQL:@"insert into foo (bar) values ('blah!');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); changeCount = [db lastChangeCount]; - STAssertEquals(changeCount, 1, @"Change count was not 1!"); + XCTAssertEqual(changeCount, 1, @"Change count was not 1!"); // Test last row id! unsigned long long lastRowId; lastRowId = [db lastInsertRowID]; - STAssertEquals(lastRowId, (unsigned long long)1L, + XCTAssertEqual(lastRowId, (unsigned long long)1L, @"First row in database was not 1?"); // Test setting busy and retrieving it! int busyTimeout = 10000; err = [db setBusyTimeoutMS:busyTimeout]; - STAssertEquals(err, SQLITE_OK, @"Error setting busy timeout"); + XCTAssertEqual(err, SQLITE_OK, @"Error setting busy timeout"); int retrievedBusyTimeout; retrievedBusyTimeout = [db busyTimeoutMS]; - STAssertEquals(retrievedBusyTimeout, busyTimeout, + XCTAssertEqual(retrievedBusyTimeout, busyTimeout, @"Retrieved busy time out was not equal to what we set it" @" to!"); BOOL xactOpSucceeded; xactOpSucceeded = [db beginDeferredTransaction]; - STAssertTrue(xactOpSucceeded, @"beginDeferredTransaction failed!"); + XCTAssertTrue(xactOpSucceeded, @"beginDeferredTransaction failed!"); err = [db executeSQL:@"insert into foo (bar) values ('blah!');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); changeCount = [db lastChangeCount]; - STAssertEquals(changeCount, 1, + XCTAssertEqual(changeCount, 1, @"Change count didn't stay the same" @"when inserting during transaction"); xactOpSucceeded = [db rollback]; - STAssertTrue(xactOpSucceeded, @"could not rollback!"); + XCTAssertTrue(xactOpSucceeded, @"could not rollback!"); changeCount = [db lastChangeCount]; - STAssertEquals(changeCount, 1, @"Change count isn't 1 after rollback :-("); + XCTAssertEqual(changeCount, 1, @"Change count isn't 1 after rollback :-("); xactOpSucceeded = [db beginDeferredTransaction]; - STAssertTrue(xactOpSucceeded, @"beginDeferredTransaction failed!"); + XCTAssertTrue(xactOpSucceeded, @"beginDeferredTransaction failed!"); for (unsigned int i = 0; i < 100; i++) { err = [db executeSQL:@"insert into foo (bar) values ('blah!');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); } xactOpSucceeded = [db commit]; - STAssertTrue(xactOpSucceeded, @"could not commit!"); + XCTAssertTrue(xactOpSucceeded, @"could not commit!"); changeCount = [db totalChangeCount]; - STAssertEquals(changeCount, 102, @"Change count isn't 102 after commit :-("); + XCTAssertEqual(changeCount, 102, @"Change count isn't 102 after commit :-("); } - (void)testSQLiteWithoutCFAdditions { @@ -118,14 +117,14 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); errorCode:&err] autorelease]; - STAssertNotNil(dbNoCFAdditions, @"Failed to create DB"); - STAssertEquals(err, SQLITE_OK, @"Failed to create DB"); + XCTAssertNotNil(dbNoCFAdditions, @"Failed to create DB"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create DB"); err = [dbNoCFAdditions executeSQL:nil]; - STAssertEquals(err, SQLITE_MISUSE, @"Nil SQL did not return error"); + XCTAssertEqual(err, SQLITE_MISUSE, @"Nil SQL did not return error"); err = [dbNoCFAdditions executeSQL:@"SELECT UPPER('Fred');"]; - STAssertEquals(err, SQLITE_OK, @"Nil SQL did not return error"); + XCTAssertEqual(err, SQLITE_OK, @"Nil SQL did not return error"); } - (void)testSynchronousAPI { @@ -147,8 +146,8 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); errorCode:&err] autorelease]; - STAssertNotNil(db8, @"Failed to create DB"); - STAssertEquals(err, SQLITE_OK, @"Failed to create DB"); + XCTAssertNotNil(db8, @"Failed to create DB"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create DB"); GTMSQLiteDatabase *db16 = [[[GTMSQLiteDatabase alloc] initInMemoryWithCFAdditions:YES @@ -156,27 +155,27 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); errorCode:&err] autorelease]; - STAssertNotNil(db16, @"Failed to create DB"); - STAssertEquals(err, SQLITE_OK, @"Failed to create DB"); + XCTAssertNotNil(db16, @"Failed to create DB"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create DB"); NSArray *databases = [NSArray arrayWithObjects:db8, db16, nil]; GTMSQLiteDatabase *db; - GTM_FOREACH_OBJECT(db, databases) { + for (db in databases) { err = [db executeSQL: @"CREATE TABLE foo (bar TEXT COLLATE NOCASE_NONLITERAL," @" barrev text collate reverse);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for collation test"); // Create blank rows to test matching inside collation functions err = [db executeSQL:@"insert into foo (bar, barrev) values ('','');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); // Insert one row we want to match err = [db executeSQL: @"INSERT INTO foo (bar, barrev) VALUES " @"('teststring','teststring');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); NSString *matchString = @"foobar"; GTMSQLiteStatement *statement = @@ -184,29 +183,29 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); @"SELECT bar FROM foo WHERE bar == '%@';", matchString] inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); [statement stepRow]; [statement finalizeStatement]; - + statement = [GTMSQLiteStatement statementWithSQL:[NSString stringWithFormat: @"SELECT bar FROM foo WHERE barrev == '%@' order by barrev;", matchString] inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); [statement stepRow]; [statement finalizeStatement]; - + statement = [GTMSQLiteStatement statementWithSQL:[NSString stringWithFormat: @"SELECT bar FROM foo WHERE bar == '';"] inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); [statement stepRow]; [statement finalizeStatement]; @@ -215,8 +214,8 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); @"SELECT bar FROM foo WHERE barrev == '' order by barrev;"] inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); [statement stepRow]; [statement finalizeStatement]; } @@ -230,24 +229,24 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); errorCode:&err] autorelease]; - STAssertNotNil(db, @"Failed to create DB"); - STAssertEquals(err, SQLITE_OK, @"Failed to create DB"); + XCTAssertNotNil(db, @"Failed to create DB"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create DB"); err = [db executeSQL:@"CREATE TABLE foo (bar TEXT COLLATE NOCASE_NONLITERAL);"]; - STAssertEquals(err, SQLITE_OK, @"Failed to create table for collation test"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for collation test"); // Insert one row we want to match err = [db executeSQL:[NSString stringWithFormat: @"INSERT INTO foo (bar) VALUES ('%@');", [NSString stringWithCString:"Frédéric" encoding:NSUTF8StringEncoding]]]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); // Create blank rows to test matching inside collation functions err = [db executeSQL:@"insert into foo (bar) values ('');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); err = [db executeSQL:@"insert into foo (bar) values ('');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); // Loop over a few things all of which should match NSArray *testArray = [NSArray arrayWithObjects: @@ -259,19 +258,19 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); encoding:NSUTF8StringEncoding], nil]; NSString *testString = nil; - GTM_FOREACH_OBJECT(testString, testArray) { + for (testString in testArray) { GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:[NSString stringWithFormat: @"SELECT bar FROM foo WHERE bar == '%@';", testString] inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); int count = 0; while ([statement stepRow] == SQLITE_ROW) { count++; } - STAssertEquals(count, 1, @"Wrong number of collated rows for \"%@\"", + XCTAssertEqual(count, 1, @"Wrong number of collated rows for \"%@\"", testString); [statement finalizeStatement]; } @@ -281,8 +280,8 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); while ([statement stepRow] == SQLITE_ROW) ; [statement finalizeStatement]; @@ -299,33 +298,33 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); utf8:YES errorCode:&err] autorelease]; - STAssertNotNil(db, @"Failed to create DB"); - STAssertEquals(err, SQLITE_OK, @"Failed to create DB"); + XCTAssertNotNil(db, @"Failed to create DB"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create DB"); GTMSQLiteStatement *statement = nil; // Test simple ASCII statement = [GTMSQLiteStatement statementWithSQL:@"SELECT LOWER('Fred');" inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"Failed to step row"); - STAssertEqualObjects([statement resultStringAtPosition:0], - @"fred", - @"LOWER failed for ASCII string"); + XCTAssertEqual(err, SQLITE_ROW, @"Failed to step row"); + XCTAssertEqualObjects([statement resultStringAtPosition:0], + @"fred", + @"LOWER failed for ASCII string"); [statement finalizeStatement]; statement = [GTMSQLiteStatement statementWithSQL:@"SELECT UPPER('Fred');" inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"Failed to step row"); - STAssertEqualObjects([statement resultStringAtPosition:0], - @"FRED", - @"UPPER failed for ASCII string"); + XCTAssertEqual(err, SQLITE_ROW, @"Failed to step row"); + XCTAssertEqualObjects([statement resultStringAtPosition:0], + @"FRED", + @"UPPER failed for ASCII string"); [statement finalizeStatement]; // Test UTF-8, have to do some dancing to make the compiler take @@ -344,13 +343,13 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); [NSString stringWithFormat:@"SELECT LOWER('%@');", utfNormalString] inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"Failed to step row"); - STAssertEqualObjects([statement resultStringAtPosition:0], - utfLowerString, - @"UPPER failed for UTF8 string"); + XCTAssertEqual(err, SQLITE_ROW, @"Failed to step row"); + XCTAssertEqualObjects([statement resultStringAtPosition:0], + utfLowerString, + @"UPPER failed for UTF8 string"); [statement finalizeStatement]; statement = @@ -358,15 +357,15 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); [NSString stringWithFormat:@"SELECT UPPER('%@');", utfNormalString] inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"Failed to step row"); - STAssertEqualObjects([statement resultStringAtPosition:0], - utfUpperString, - @"UPPER failed for UTF8 string"); + XCTAssertEqual(err, SQLITE_ROW, @"Failed to step row"); + XCTAssertEqualObjects([statement resultStringAtPosition:0], + utfUpperString, + @"UPPER failed for UTF8 string"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_DONE, @"Should be done"); + XCTAssertEqual(err, SQLITE_DONE, @"Should be done"); [statement finalizeStatement]; } @@ -380,33 +379,33 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql); utf8:NO errorCode:&err] autorelease]; - STAssertNotNil(db, @"Failed to create DB"); - STAssertEquals(err, SQLITE_OK, @"Failed to create DB"); + XCTAssertNotNil(db, @"Failed to create DB"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create DB"); GTMSQLiteStatement *statement = nil; // Test simple ASCII statement = [GTMSQLiteStatement statementWithSQL:@"SELECT LOWER('Fred');" inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"Failed to step row"); - STAssertEqualObjects([statement resultStringAtPosition:0], - @"fred", - @"LOWER failed for ASCII string"); + XCTAssertEqual(err, SQLITE_ROW, @"Failed to step row"); + XCTAssertEqualObjects([statement resultStringAtPosition:0], + @"fred", + @"LOWER failed for ASCII string"); [statement finalizeStatement]; statement = [GTMSQLiteStatement statementWithSQL:@"SELECT UPPER('Fred');" inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"Failed to step row"); - STAssertEqualObjects([statement resultStringAtPosition:0], - @"FRED", - @"UPPER failed for ASCII string"); + XCTAssertEqual(err, SQLITE_ROW, @"Failed to step row"); + XCTAssertEqualObjects([statement resultStringAtPosition:0], + @"FRED", + @"UPPER failed for ASCII string"); [statement finalizeStatement]; } @@ -450,7 +449,7 @@ static void TestUpperLower16Impl(sqlite3_context *context, customUpperLower[i].function, NULL, NULL); - STAssertEquals(rc, SQLITE_OK, + XCTAssertEqual(rc, SQLITE_OK, @"Failed to register upper function" @"with SQLite db"); } @@ -459,12 +458,12 @@ static void TestUpperLower16Impl(sqlite3_context *context, GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:@"SELECT UPPER('Fred');" inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"Failed to step row"); - STAssertTrue(customUpperFunctionCalled, - @"Custom upper function was not called!"); + XCTAssertEqual(err, SQLITE_ROW, @"Failed to step row"); + XCTAssertTrue(customUpperFunctionCalled, + @"Custom upper function was not called!"); [statement finalizeStatement]; } @@ -483,7 +482,7 @@ static void TestUpperLower16Impl(sqlite3_context *context, NSArray *databases = [NSArray arrayWithObjects:db8, db16, nil]; GTMSQLiteDatabase *db; - GTM_FOREACH_OBJECT(db, databases) { + for (db in databases) { CFOptionFlags c = 0, oldFlags; oldFlags = [db likeComparisonOptions]; @@ -492,22 +491,18 @@ static void TestUpperLower16Impl(sqlite3_context *context, // case insensitive [db setLikeComparisonOptions:c]; - STAssertTrue([db likeComparisonOptions] == 0, - @"LIKE Comparison options setter/getter does not work!"); + XCTAssertTrue([db likeComparisonOptions] == 0, + @"LIKE Comparison options setter/getter does not work!"); NSString *createString = nil; -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 createString = @"CREATE TABLE foo (bar NODIACRITIC_WIDTHINSENSITIVE TEXT);"; -#else - createString = @"CREATE TABLE foo (bar TEXT);"; -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 err = [db executeSQL:createString]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for like comparison options test"); err = [db executeSQL:@"insert into foo values('test like test');"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create row for like comparison options test"); GTMSQLiteStatement *statement = @@ -515,22 +510,20 @@ static void TestUpperLower16Impl(sqlite3_context *context, inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"failed to create statement"); + XCTAssertNotNil(statement, @"failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_DONE, @"failed to retrieve row!"); + XCTAssertEqual(err, SQLITE_DONE, @"failed to retrieve row!"); // Now change it back to case insensitive and rerun the same query c |= kCFCompareCaseInsensitive; [db setLikeComparisonOptions:c]; err = [statement reset]; - STAssertEquals(err, SQLITE_OK, @"failed to reset select statement"); + XCTAssertEqual(err, SQLITE_OK, @"failed to reset select statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"failed to retrieve row!"); + XCTAssertEqual(err, SQLITE_ROW, @"failed to retrieve row!"); -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - // Now try adding in 10.5 only flags c |= (kCFCompareDiacriticInsensitive | kCFCompareWidthInsensitive); [db setLikeComparisonOptions:c]; // Make a new statement @@ -539,14 +532,13 @@ static void TestUpperLower16Impl(sqlite3_context *context, [GTMSQLiteStatement statementWithSQL:@"select * from foo where bar like '%LIKE%'" inDatabase:db errorCode:&err]; - - STAssertNotNil(statement, @"failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"failed to create statement"); - + + XCTAssertNotNil(statement, @"failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"failed to create statement"); + err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"failed to retrieve row!"); -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - + XCTAssertEqual(err, SQLITE_ROW, @"failed to retrieve row!"); + // Now reset comparison options [db setLikeComparisonOptions:oldFlags]; @@ -567,15 +559,15 @@ static void TestUpperLower16Impl(sqlite3_context *context, [db setGlobComparisonOptions:c]; - STAssertTrue([db globComparisonOptions] == 0, - @"GLOB Comparison options setter/getter does not work!"); + XCTAssertTrue([db globComparisonOptions] == 0, + @"GLOB Comparison options setter/getter does not work!"); err = [db executeSQL:@"CREATE TABLE foo (bar TEXT);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for glob comparison options test"); err = [db executeSQL:@"insert into foo values('test like test');"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create row for glob comparison options test"); GTMSQLiteStatement *statement = @@ -583,19 +575,19 @@ static void TestUpperLower16Impl(sqlite3_context *context, inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"failed to create statement"); + XCTAssertNotNil(statement, @"failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_DONE, @"failed to retrieve row!"); + XCTAssertEqual(err, SQLITE_DONE, @"failed to retrieve row!"); // Now change it back to case insensitive and rerun the same query c |= kCFCompareCaseInsensitive; [db setGlobComparisonOptions:c]; err = [statement reset]; - STAssertEquals(err, SQLITE_OK, @"failed to reset select statement"); + XCTAssertEqual(err, SQLITE_OK, @"failed to reset select statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"failed to retrieve row!"); + XCTAssertEqual(err, SQLITE_ROW, @"failed to retrieve row!"); [statement finalizeStatement]; @@ -611,38 +603,38 @@ static void TestUpperLower16Impl(sqlite3_context *context, errorCode:&err] autorelease]; err = [db executeSQL:@"CREATE table foo_reverse (bar TEXT COLLATE REVERSE);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for reverse collation test"); err = [db executeSQL:@"insert into foo_reverse values('a2');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); err = [db executeSQL:@"insert into foo_reverse values('b1');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:@"SELECT bar from foo_reverse order by bar" inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"failed to advance row"); + XCTAssertEqual(err, SQLITE_ROW, @"failed to advance row"); NSString *oneRow = [statement resultStringAtPosition:0]; - STAssertEqualStrings(oneRow, @"b1", @"b did not come first!"); + XCTAssertEqualStrings(oneRow, @"b1", @"b did not come first!"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"failed to advance row!"); + XCTAssertEqual(err, SQLITE_ROW, @"failed to advance row!"); - STAssertEquals(err, [db lastErrorCode], + XCTAssertEqual(err, [db lastErrorCode], @"lastErrorCode API did not match what last API returned!"); // Calling lastErrorCode resets API error, so the next string will not indicate any error - STAssertEqualStrings(@"not an error", [db lastErrorString], - @"lastErrorString API did not match expected string!"); + XCTAssertEqualStrings(@"unknown error", [db lastErrorString], + @"lastErrorString API did not match expected string!"); oneRow = [statement resultStringAtPosition:0]; - STAssertEqualStrings(oneRow, @"a2", @"a did not come second!"); + XCTAssertEqualStrings(oneRow, @"a2", @"a did not come second!"); [statement finalizeStatement]; } @@ -657,32 +649,32 @@ static void TestUpperLower16Impl(sqlite3_context *context, err = [db executeSQL: @"CREATE table numeric_test_table " @"(numeric_sort TEXT COLLATE NUMERIC, lexographic_sort TEXT);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for numeric collation test"); err = [db executeSQL:@"insert into numeric_test_table values('4','17');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); err = [db executeSQL:@"insert into numeric_test_table values('17','4');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:@"SELECT numeric_sort from numeric_test_table order by numeric_sort" inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"failed to advance row"); + XCTAssertEqual(err, SQLITE_ROW, @"failed to advance row"); NSString *oneRow = [statement resultStringAtPosition:0]; - STAssertEqualStrings(oneRow, @"4", @"4 did not come first!"); + XCTAssertEqualStrings(oneRow, @"4", @"4 did not come first!"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"failed to advance row!"); + XCTAssertEqual(err, SQLITE_ROW, @"failed to advance row!"); oneRow = [statement resultStringAtPosition:0]; - STAssertEqualStrings(oneRow, @"17", @"17 did not come second!"); + XCTAssertEqualStrings(oneRow, @"17", @"17 did not come second!"); [statement finalizeStatement]; @@ -693,18 +685,18 @@ static void TestUpperLower16Impl(sqlite3_context *context, inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"failed to create statement for lexographic sort"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"failed to create statement for lexographic sort"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"failed to advance row"); + XCTAssertEqual(err, SQLITE_ROW, @"failed to advance row"); oneRow = [statement resultStringAtPosition:0]; - STAssertEqualStrings(oneRow, @"17", @"17 did not come first!"); + XCTAssertEqualStrings(oneRow, @"17", @"17 did not come first!"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, @"failed to advance row!"); + XCTAssertEqual(err, SQLITE_ROW, @"failed to advance row!"); oneRow = [statement resultStringAtPosition:0]; - STAssertEqualStrings(oneRow, @"4", @"4 did not come second!"); + XCTAssertEqualStrings(oneRow, @"4", @"4 did not come second!"); [statement finalizeStatement]; } @@ -718,18 +710,18 @@ static void TestUpperLower16Impl(sqlite3_context *context, [[GTMSQLiteDatabase alloc] initInMemoryWithCFAdditions:YES utf8:YES errorCode:&err]; - STAssertNotNil(db, @"Failed to create DB"); - STAssertEquals(err, SQLITE_OK, @"Failed to create DB"); + XCTAssertNotNil(db, @"Failed to create DB"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create DB"); err = [db executeSQL: @"CREATE TABLE foo (bar TEXT COLLATE NOCASE_NONLITERAL_LOCALIZED);"]; - STAssertEquals(err, SQLITE_OK, @"Failed to create table for collation test"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for collation test"); // Insert one row we want to match err = [db executeSQL:[NSString stringWithFormat: @"INSERT INTO foo (bar) VALUES ('%@');", [NSString stringWithCString:"Frédéric" encoding:NSUTF8StringEncoding]]]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute SQL"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute SQL"); // Loop over a few things all of which should match NSArray *testArray = [NSArray arrayWithObjects: @@ -742,19 +734,19 @@ static void TestUpperLower16Impl(sqlite3_context *context, nil]; NSString *testString = nil; - GTM_FOREACH_OBJECT(testString, testArray) { + for (testString in testArray) { GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:[NSString stringWithFormat: @"SELECT bar FROM foo WHERE bar == '%@';", testString] inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); int count = 0; while ([statement stepRow] == SQLITE_ROW) { count++; } - STAssertEquals(count, 1, @"Wrong number of collated rows for \"%@\"", + XCTAssertEqual(count, 1, @"Wrong number of collated rows for \"%@\"", testString); [statement finalizeStatement]; } @@ -765,23 +757,20 @@ static void TestUpperLower16Impl(sqlite3_context *context, } - (void)testDiacriticAndWidthInsensitiveCollations { - // Diacritic & width insensitive collations are not supported - // on Tiger, so most of the test is Leopard or later -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 int err; GTMSQLiteDatabase *db = [[[GTMSQLiteDatabase alloc] initInMemoryWithCFAdditions:YES utf8:YES errorCode:&err] autorelease]; - STAssertNotNil(db, @"Failed to create DB"); - STAssertEquals(err, SQLITE_OK, @"Failed to create DB"); + XCTAssertNotNil(db, @"Failed to create DB"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create DB"); NSString *tableSQL = @"CREATE TABLE FOOBAR (collated TEXT COLLATE NODIACRITIC_WIDTHINSENSITIVE, " @" noncollated TEXT);"; err = [db executeSQL:tableSQL]; - STAssertEquals(err, SQLITE_OK, @"error creating table"); + XCTAssertEqual(err, SQLITE_OK, @"error creating table"); NSString *testStringValue = [NSString stringWithCString:"Frédéric" encoding:NSUTF8StringEncoding]; @@ -797,11 +786,11 @@ static void TestUpperLower16Impl(sqlite3_context *context, @" WHERE noncollated == 'Frederic';"] inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); // Make sure the comparison query didn't return a row because // we're doing a comparison on the row without the collation - STAssertEquals([statement stepRow], SQLITE_DONE, + XCTAssertEqual([statement stepRow], SQLITE_DONE, @"Comparison with diacritics did not succeed"); [statement finalizeStatement]; @@ -812,34 +801,11 @@ static void TestUpperLower16Impl(sqlite3_context *context, @" WHERE collated == 'Frederic';"] inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); - STAssertEquals([statement stepRow], SQLITE_ROW, + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertEqual([statement stepRow], SQLITE_ROW, @"Comparison ignoring diacritics did not succeed"); [statement finalizeStatement]; -#else - // On Tiger just make sure it causes the dev log. - int err; - GTMSQLiteDatabase *db = - [[[GTMSQLiteDatabase alloc] initInMemoryWithCFAdditions:YES - utf8:YES - errorCode:&err] autorelease]; - STAssertNotNil(db, @"Failed to create DB"); - STAssertEquals(err, SQLITE_OK, @"Failed to create DB"); - - NSString *tableSQL = - @"CREATE TABLE FOOBAR (collated TEXT" - @" COLLATE NODIACRITIC_WIDTHINSENSITIVE_NOCASE," - @" noncollated TEXT);"; - - // Expect one log for each unsupported flag - [GTMUnitTestDevLog expect:2 - casesOfString:@"GTMSQLiteDatabase 10.5 collating not available " - @"on 10.4 or earlier"]; - err = [db executeSQL:tableSQL]; - STAssertEquals(err, SQLITE_OK, @"error creating table"); - -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 } - (void)testCFStringLikeGlob { @@ -852,8 +818,8 @@ static void TestUpperLower16Impl(sqlite3_context *context, errorCode:&err] autorelease]; - STAssertNotNil(db8, @"Failed to create database"); - STAssertEquals(err, SQLITE_OK, @"Failed to create database"); + XCTAssertNotNil(db8, @"Failed to create database"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create database"); GTMSQLiteDatabase *db16 = [[[GTMSQLiteDatabase alloc] initInMemoryWithCFAdditions:YES @@ -861,164 +827,164 @@ static void TestUpperLower16Impl(sqlite3_context *context, errorCode:&err] autorelease]; - STAssertNotNil(db16, @"Failed to create database"); - STAssertEquals(err, SQLITE_OK, @"Failed to create database"); + XCTAssertNotNil(db16, @"Failed to create database"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create database"); NSArray *databases = [NSArray arrayWithObjects:db8, db16, nil]; GTMSQLiteDatabase *db; - GTM_FOREACH_OBJECT(db, databases) { + for (db in databases) { err = [db executeSQL:@"CREATE TABLE t1 (x TEXT);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for LIKE/GLOB test"); // Insert data set err = [db executeSQL:@"INSERT INTO t1 VALUES ('a');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t1 VALUES ('ab');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t1 VALUES ('abc');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t1 VALUES ('abcd');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t1 VALUES ('acd');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t1 VALUES ('abd');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t1 VALUES ('bc');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t1 VALUES ('bcd');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t1 VALUES ('xyz');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t1 VALUES ('ABC');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t1 VALUES ('CDE');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t1 VALUES ('ABC abc xyz');"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); // Section 1, case tests - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE 'abc' ORDER BY 1;"), ([NSArray arrayWithObjects:@"ABC", @"abc", nil]), @"Fail on LIKE test 1.1"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x GLOB 'abc' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", nil]), @"Fail on LIKE test 1.2"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE 'ABC' ORDER BY 1;"), ([NSArray arrayWithObjects:@"ABC", @"abc", nil]), @"Fail on LIKE test 1.3"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE 'abc%' ORDER BY 1;"), ([NSArray arrayWithObjects:@"ABC", @"ABC abc xyz", @"abc", @"abcd", nil]), @"Fail on LIKE test 3.1"); [db setLikeComparisonOptions:(kCFCompareNonliteral)]; err = [db executeSQL:@"CREATE INDEX i1 ON t1(x);"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); - STAssertEqualObjects( + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE 'abc%' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"abcd", nil]), @"Fail on LIKE test 3.3"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE 'a_c' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", nil]), @"Fail on LIKE test 3.5"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE 'ab%d' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abcd", @"abd", nil]), @"Fail on LIKE test 3.7"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE 'a_c%' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"abcd", nil]), @"Fail on LIKE test 3.9"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE '%bcd' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abcd", @"bcd", nil]), @"Fail on LIKE test 3.11"); [db setLikeComparisonOptions:(kCFCompareNonliteral | kCFCompareCaseInsensitive)]; - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE 'abc%' ORDER BY 1;"), ([NSArray arrayWithObjects:@"ABC", @"ABC abc xyz", @"abc", @"abcd", nil]), @"Fail on LIKE test 3.13"); [db setLikeComparisonOptions:(kCFCompareNonliteral)]; err = [db executeSQL:@"DROP INDEX i1;"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); - STAssertEqualObjects( + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE 'abc%' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"abcd", nil]), @"Fail on LIKE test 3.15"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x GLOB 'abc*' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"abcd", nil]), @"Fail on LIKE test 3.17"); err = [db executeSQL:@"CREATE INDEX i1 ON t1(x);"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); - STAssertEqualObjects( + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x GLOB 'abc*' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"abcd", nil]), @"Fail on LIKE test 3.19"); [db setLikeComparisonOptions:(kCFCompareNonliteral)]; - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x GLOB 'abc*' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"abcd", nil]), @"Fail on LIKE test 3.21"); [db setLikeComparisonOptions:(kCFCompareNonliteral | kCFCompareCaseInsensitive)]; - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x GLOB 'a[bc]d' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abd", @"acd", nil]), @"Fail on LIKE test 3.23"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x from t1 where x GLOB 'a[^xyz]d' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abd", @"acd", nil]), @"Fail on glob inverted character set test 3.24"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x from t1 where x GLOB 'a[^' ORDER BY 1;"), ([NSArray array]), @"Fail on glob inverted character set test 3.25"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x from t1 where x GLOB 'a['"), ([NSArray array]), @"Unclosed glob character set did not return empty result set 3.26"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x from t1 where x GLOB 'a[^]'"), ([NSArray array]), @"Unclosed glob inverted character set did not return empty " @"result set 3.27"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x from t1 where x GLOB 'a[^]c]d'"), ([NSArray arrayWithObjects:@"abd", nil]), @"Glob character set with inverted set not matching ] did not " @"return right rows 3.28"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x from t1 where x GLOB 'a[bcdefg'"), ([NSArray array]), @@ -1026,36 +992,36 @@ static void TestUpperLower16Impl(sqlite3_context *context, // Section 4 [db setLikeComparisonOptions:(kCFCompareNonliteral)]; - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE 'abc%' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"abcd", nil]), @"Fail on LIKE test 4.1"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE +x LIKE 'abc%' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"abcd", nil]), @"Fail on LIKE test 4.2"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE ('ab' || 'c%') ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"abcd", nil]), @"Fail on LIKE test 4.3"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x from t1 where x LIKE 'a[xyz]\%' ESCAPE ''"), ([NSArray array]), @"0-Character escape clause did not return empty set 4.4"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x from t1 where x LIKE " @"'a[xyz]\%' ESCAPE NULL"), ([NSArray array]), @"Null escape did not return empty set 4.5"); - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x from t1 where x LIKE 'a[xyz]\\%' " @"ESCAPE '\\'"), @@ -1066,22 +1032,22 @@ static void TestUpperLower16Impl(sqlite3_context *context, // Section 5 [db setLikeComparisonOptions:(kCFCompareNonliteral | kCFCompareCaseInsensitive)]; - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x LIKE 'abc%' ORDER BY 1;"), ([NSArray arrayWithObjects:@"ABC", @"ABC abc xyz", @"abc", @"abcd", nil]), @"Fail on LIKE test 5.1"); err = [db executeSQL:@"CREATE TABLE t2(x COLLATE NOCASE);"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"INSERT INTO t2 SELECT * FROM t1;"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); err = [db executeSQL:@"CREATE INDEX i2 ON t2(x COLLATE NOCASE);"]; - STAssertEquals(err, SQLITE_OK, @"Failed to execute sql"); - STAssertEqualObjects( + XCTAssertEqual(err, SQLITE_OK, @"Failed to execute sql"); + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t2 WHERE x LIKE 'abc%' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"ABC", @"ABC abc xyz", @"abcd", nil]), @@ -1089,7 +1055,7 @@ static void TestUpperLower16Impl(sqlite3_context *context, [db setLikeComparisonOptions:(kCFCompareNonliteral)]; - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t2 WHERE x LIKE 'abc%' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"abcd", nil]), @@ -1097,14 +1063,14 @@ static void TestUpperLower16Impl(sqlite3_context *context, [db setLikeComparisonOptions:(kCFCompareNonliteral | kCFCompareCaseInsensitive)]; - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t2 WHERE x GLOB 'abc*' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abc", @"abcd", nil]), @"Fail on LIKE test 5.5"); // Non standard tests not from the SQLite source - STAssertEqualObjects( + XCTAssertEqualObjects( LikeGlobTestHelper(db, @"SELECT x FROM t1 WHERE x GLOB 'a[b-d]d' ORDER BY 1;"), ([NSArray arrayWithObjects:@"abd", @"acd", nil]), @@ -1119,34 +1085,34 @@ static void TestUpperLower16Impl(sqlite3_context *context, utf8:YES errorCode:&err] autorelease]; - - STAssertNotNil(db8, @"Failed to create database"); - STAssertEquals(err, SQLITE_OK, @"Failed to create database"); - STAssertNotNil([db8 description], nil); + + XCTAssertNotNil(db8, @"Failed to create database"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create database"); + XCTAssertNotNil([db8 description]); } // // From GTMSQLite.m // CFStringEncoding SqliteTextEncodingToCFStringEncoding(int enc); // - (void)testEncodingMappingIsCorrect { -// STAssertTrue(SqliteTextEncodingToCFStringEncoding(SQLITE_UTF8) == -// kCFStringEncodingUTF8, -// @"helper method didn't return right encoding for " -// @"kCFStringEncodingUTF8"); - -// STAssertTrue(SqliteTextEncodingToCFStringEncoding(SQLITE_UTF16BE) -// == kCFStringEncodingUTF16BE, -// @"helper method didn't return right encoding for " -// @"kCFStringEncodingUTF16BE"); - -// STAssertTrue(SqliteTextEncodingToCFStringEncoding(SQLITE_UTF16LE) -// == kCFStringEncodingUTF16LE, -// @"helper method didn't return right encoding for " -// @"kCFStringEncodingUTF16LE"); - -// STAssertTrue(SqliteTextEncodingToCFStringEncoding(9999) -// == kCFStringEncodingUTF8, @"helper method didn't " -// @"return default encoding for invalid input"); +// XCTAssertTrue(SqliteTextEncodingToCFStringEncoding(SQLITE_UTF8) == +// kCFStringEncodingUTF8, +// @"helper method didn't return right encoding for " +// @"kCFStringEncodingUTF8"); + +// XCTAssertTrue(SqliteTextEncodingToCFStringEncoding(SQLITE_UTF16BE) +// == kCFStringEncodingUTF16BE, +// @"helper method didn't return right encoding for " +// @"kCFStringEncodingUTF16BE"); + +// XCTAssertTrue(SqliteTextEncodingToCFStringEncoding(SQLITE_UTF16LE) +// == kCFStringEncodingUTF16LE, +// @"helper method didn't return right encoding for " +// @"kCFStringEncodingUTF16LE"); + +// XCTAssertTrue(SqliteTextEncodingToCFStringEncoding(9999) +// == kCFStringEncodingUTF8, @"helper method didn't " +// @"return default encoding for invalid input"); // } @end @@ -1182,8 +1148,8 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:nil inDatabase:nil errorCode:&err]; - STAssertNil(statement, @"Create statement succeeded with nil SQL string"); - STAssertEquals(err, SQLITE_MISUSE, @"Err was not SQLITE_MISUSE on nil " + XCTAssertNil(statement, @"Create statement succeeded with nil SQL string"); + XCTAssertEqual(err, SQLITE_MISUSE, @"Err was not SQLITE_MISUSE on nil " @"SQL string"); GTMSQLiteDatabase *db = @@ -1196,8 +1162,8 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { inDatabase:db errorCode:&err]; - STAssertNil(statement, @"Select statement succeeded with invalid table"); - STAssertNotEquals(err, SQLITE_OK, + XCTAssertNil(statement, @"Select statement succeeded with invalid table"); + XCTAssertNotEqual(err, SQLITE_OK, @"Err was not SQLITE_MISUSE on invalid table"); [statement finalizeStatement]; @@ -1219,7 +1185,7 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { err = [db executeSQL:tableCreateSQL]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for collation test"); NSString *insert = @"insert into foo (tc, ic, rc, bc) values (:tc, :ic, :rc, :bc);"; @@ -1227,9 +1193,9 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:insert inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); - STAssertEquals([statement parameterCount], 4, + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertEqual([statement parameterCount], 4, @"Bound parameter count was not 4"); [statement sqlite3Statement]; @@ -1253,7 +1219,7 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { NSArray *databases = [NSArray arrayWithObjects:dbWithCF, dbWithoutCF, nil]; GTMSQLiteDatabase *db; - GTM_FOREACH_OBJECT(db, databases) { + for (db in databases) { NSString *tableCreateSQL = @"CREATE TABLE foo (tc TEXT," @"ic integer," @@ -1261,7 +1227,7 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { @"bc blob);"; err = [db executeSQL:tableCreateSQL]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for collation test"); NSString *insert = @"insert into foo (tc, ic, rc, bc) " @@ -1270,8 +1236,8 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:insert inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create statement"); + XCTAssertNotNil(statement, @"Failed to create statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create statement"); NSArray *parameterNames = [NSArray arrayWithObjects:@":tc", @":ic", @@ -1280,15 +1246,15 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { for (unsigned int i = 1; i <= [parameterNames count]; i++) { NSString *paramName = [parameterNames objectAtIndex:i-1]; - // Cast to signed int to avoid type errors from STAssertEquals - STAssertEquals((int)i, + // Cast to signed int to avoid type errors from XCTAssertEqual + XCTAssertEqual((int)i, [statement positionOfParameterNamed:paramName], @"positionOfParameterNamed API did not return correct " @"results"); - STAssertEqualStrings(paramName, - [statement nameOfParameterAtPosition:i], - @"nameOfParameterAtPosition API did not return " - @"correct name"); + XCTAssertEqualStrings(paramName, + [statement nameOfParameterAtPosition:i], + @"nameOfParameterAtPosition API did not return " + @"correct name"); } [statement finalizeStatement]; } @@ -1311,21 +1277,21 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { NSArray *databases = [NSArray arrayWithObjects:dbWithCF, dbWithoutCF, nil]; GTMSQLiteDatabase *db; - GTM_FOREACH_OBJECT(db, databases) { + for (db in databases) { // Test strategy is to create a table with 3 columns // Insert some values, and use the result collection APIs // to make sure we get the same values back err = [db executeSQL: @"CREATE TABLE blobby (bc blob);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for BLOB binding test"); NSString *insert = @"insert into blobby (bc) values (:bc);"; GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:insert inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create insert statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create insert statement"); + XCTAssertNotNil(statement, @"Failed to create insert statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create insert statement"); char bytes[] = "DEADBEEF"; NSUInteger bytesLen = strlen(bytes); @@ -1333,10 +1299,10 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { err = [statement bindBlobAtPosition:1 data:originalBytes]; - STAssertEquals(err, SQLITE_OK, @"error binding BLOB at position 1"); + XCTAssertEqual(err, SQLITE_OK, @"error binding BLOB at position 1"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_DONE, @"failed to insert BLOB for BLOB test"); + XCTAssertEqual(err, SQLITE_DONE, @"failed to insert BLOB for BLOB test"); [statement finalizeStatement]; @@ -1344,30 +1310,30 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { statement = [GTMSQLiteStatement statementWithSQL:selectSQL inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create select statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create select statement"); + XCTAssertNotNil(statement, @"Failed to create select statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create select statement"); err = [statement stepRow]; // Check that we got at least one row back - STAssertEquals(err, SQLITE_ROW, @"did not retrieve a row from db :-("); - STAssertEquals([statement resultColumnCount], 1, + XCTAssertEqual(err, SQLITE_ROW, @"did not retrieve a row from db :-("); + XCTAssertEqual([statement resultColumnCount], 1, @"result had more columns than the table had?"); - STAssertEqualStrings([statement resultColumnNameAtPosition:BLOB_COLUMN], - @"bc", - @"column name dictionary was not correct"); + XCTAssertEqualStrings([statement resultColumnNameAtPosition:BLOB_COLUMN], + @"bc", + @"column name dictionary was not correct"); - STAssertEquals([statement rowDataCount], + XCTAssertEqual([statement rowDataCount], 1, @"More than one column returned?"); - STAssertEquals([statement resultColumnTypeAtPosition:BLOB_COLUMN], + XCTAssertEqual([statement resultColumnTypeAtPosition:BLOB_COLUMN], SQLITE_BLOB, @"Query for column 1 of test table was not BLOB!"); NSData *returnedbytes = [statement resultBlobDataAtPosition:BLOB_COLUMN]; - STAssertTrue([originalBytes isEqualToData:returnedbytes], - @"Queried data was not equal :-("); + XCTAssertTrue([originalBytes isEqualToData:returnedbytes], + @"Queried data was not equal :-("); [statement finalizeStatement]; } } @@ -1383,22 +1349,22 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { err = [db executeSQL: @"CREATE TABLE foo (tc TEXT);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for NULL binding test"); NSString *insert = @"insert into foo (tc) values (:tc);"; GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:insert inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create insert statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create insert statement"); + XCTAssertNotNil(statement, @"Failed to create insert statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create insert statement"); err = [statement bindSQLNullAtPosition:1]; - STAssertEquals(err, SQLITE_OK, @"error binding NULL at position 1"); + XCTAssertEqual(err, SQLITE_OK, @"error binding NULL at position 1"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_DONE, @"failed to insert NULL for Null Binding test"); + XCTAssertEqual(err, SQLITE_DONE, @"failed to insert NULL for Null Binding test"); [statement finalizeStatement]; @@ -1406,12 +1372,12 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { statement = [GTMSQLiteStatement statementWithSQL:selectSQL inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create select statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create select statement"); + XCTAssertNotNil(statement, @"Failed to create select statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create select statement"); err = [statement stepRow]; // Check that we got at least one row back - STAssertEquals(err, SQLITE_ROW, @"did not retrieve a row from db :-("); + XCTAssertEqual(err, SQLITE_ROW, @"did not retrieve a row from db :-("); [statement finalizeStatement]; } @@ -1434,26 +1400,26 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { err = [db executeSQL: @"CREATE TABLE realTable (rc1 REAL, rc2 REAL);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for double binding test"); NSString *insert = @"insert into realTable (rc1, rc2) values (:rc1, :rc2);"; GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:insert inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create insert statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create insert statement"); + XCTAssertNotNil(statement, @"Failed to create insert statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create insert statement"); err = [statement bindDoubleAtPosition:1 value:testVal]; - STAssertEquals(err, SQLITE_OK, @"error binding double at position 1"); + XCTAssertEqual(err, SQLITE_OK, @"error binding double at position 1"); err = [statement bindNumberAsDoubleAtPosition:2 number:doubleValue]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"error binding number as double at " @"position 2"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_DONE, + XCTAssertEqual(err, SQLITE_DONE, @"failed to insert doubles for double " @"binding test"); @@ -1463,20 +1429,20 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { statement = [GTMSQLiteStatement statementWithSQL:selectSQL inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create select statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create select statement"); + XCTAssertNotNil(statement, @"Failed to create select statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create select statement"); err = [statement stepRow]; // Check that we got at least one row back - STAssertEquals(err, SQLITE_ROW, @"did not retrieve a row from db :-("); + XCTAssertEqual(err, SQLITE_ROW, @"did not retrieve a row from db :-("); double retrievedValue = [statement resultDoubleAtPosition:0]; - STAssertEquals(retrievedValue, testVal, - @"Retrieved double did not equal " - @"original"); + XCTAssertEqualWithAccuracy(retrievedValue, testVal, 0.01, + @"Retrieved double did not equal " + @"original"); NSNumber *retrievedNumber = [statement resultNumberAtPosition:1]; - STAssertEqualObjects(retrievedNumber, doubleValue, - @"Retrieved NSNumber object did not equal"); + XCTAssertEqualObjects(retrievedNumber, doubleValue, + @"Retrieved NSNumber object did not equal"); [statement finalizeStatement]; } @@ -1497,14 +1463,14 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { NSArray *databases = [NSArray arrayWithObjects:dbWithCF, dbWithoutCF, nil]; GTMSQLiteDatabase *db; - GTM_FOREACH_OBJECT(db, databases) { + for (db in databases) { // Test strategy is to create a table with 3 columns // Insert some values, and use the result collection APIs // to make sure we get the same values back err = [db executeSQL: @"CREATE TABLE test (a integer, b text, c blob, d text);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for result collection test"); NSString *insert = @@ -1514,8 +1480,8 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:insert inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create insert statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create insert statement"); + XCTAssertNotNil(statement, @"Failed to create insert statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create insert statement"); char blobChars[] = "DEADBEEF"; @@ -1523,10 +1489,10 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { NSData *blobData = [NSData dataWithBytes:blobChars length:blobLength]; err = [statement bindBlobAtPosition:1 data:blobData]; - STAssertEquals(err, SQLITE_OK, @"error binding BLOB at position 1"); + XCTAssertEqual(err, SQLITE_OK, @"error binding BLOB at position 1"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_DONE, + XCTAssertEqual(err, SQLITE_DONE, @"failed to insert doubles for double " @"binding test"); @@ -1537,16 +1503,16 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { statement = [GTMSQLiteStatement statementWithSQL:selectSQL inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create select statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create select statement"); + XCTAssertNotNil(statement, @"Failed to create select statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create select statement"); err = [statement stepRow]; // Check that we got at least one row back - STAssertEquals(err, SQLITE_ROW, @"did not retrieve a row from db :-("); - STAssertNotNil([statement resultRowArray], - @"Failed to retrieve result array"); - STAssertNotNil([statement resultRowDictionary], - @"Failed to retrieve result dictionary"); + XCTAssertEqual(err, SQLITE_ROW, @"did not retrieve a row from db :-("); + XCTAssertNotNil([statement resultRowArray], + @"Failed to retrieve result array"); + XCTAssertNotNil([statement resultRowDictionary], + @"Failed to retrieve result dictionary"); [statement finalizeStatement]; } } @@ -1570,7 +1536,7 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { err = [db executeSQL: @"CREATE TABLE integerTable (ic1 integer, ic2 integer);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for integer binding test"); NSString *insert = @"insert into integerTable (ic1, ic2) values (:ic1, :ic2);"; @@ -1578,19 +1544,19 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:insert inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create insert statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create insert statement"); + XCTAssertNotNil(statement, @"Failed to create insert statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create insert statement"); err = [statement bindInt32AtPosition:1 value:testVal]; - STAssertEquals(err, SQLITE_OK, @"error binding integer at position 1"); + XCTAssertEqual(err, SQLITE_OK, @"error binding integer at position 1"); err = [statement bindNumberAsInt32AtPosition:2 number:intValue]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"error binding number as integer at " @"position 2"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_DONE, + XCTAssertEqual(err, SQLITE_DONE, @"failed to insert integers for integer " @"binding test"); @@ -1600,20 +1566,20 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { statement = [GTMSQLiteStatement statementWithSQL:selectSQL inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create select statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create select statement"); + XCTAssertNotNil(statement, @"Failed to create select statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create select statement"); err = [statement stepRow]; // Check that we got at least one row back - STAssertEquals(err, SQLITE_ROW, @"did not retrieve a row from db :-("); + XCTAssertEqual(err, SQLITE_ROW, @"did not retrieve a row from db :-("); int retrievedValue = [statement resultInt32AtPosition:0]; - STAssertEquals(retrievedValue, testVal, + XCTAssertEqual(retrievedValue, testVal, @"Retrieved integer did not equal " @"original"); NSNumber *retrievedNumber = [statement resultNumberAtPosition:1]; - STAssertEqualObjects(retrievedNumber, intValue, - @"Retrieved NSNumber object did not equal"); + XCTAssertEqualObjects(retrievedNumber, intValue, + @"Retrieved NSNumber object did not equal"); [statement finalizeStatement]; } @@ -1635,9 +1601,9 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { NSNumber *longlongValue = [NSNumber numberWithLongLong:testVal]; err = [db executeSQL: - @"CREATE TABLE longlongTable (llc1 integer, llc2 integer);"]; + @"CREATE TABLE longlongTable (llc1 integer, llc2 integer);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for long long binding test"); NSString *insert = @"insert into longlongTable (llc1, llc2) " @@ -1646,19 +1612,19 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:insert inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create insert statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create insert statement"); + XCTAssertNotNil(statement, @"Failed to create insert statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create insert statement"); err = [statement bindLongLongAtPosition:1 value:testVal]; - STAssertEquals(err, SQLITE_OK, @"error binding long long at position 1"); + XCTAssertEqual(err, SQLITE_OK, @"error binding long long at position 1"); err = [statement bindNumberAsLongLongAtPosition:2 number:longlongValue]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"error binding number as long long at " @"position 2"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_DONE, + XCTAssertEqual(err, SQLITE_DONE, @"failed to insert long longs for long long " @"binding test"); @@ -1669,20 +1635,20 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { statement = [GTMSQLiteStatement statementWithSQL:selectSQL inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create select statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create select statement"); + XCTAssertNotNil(statement, @"Failed to create select statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create select statement"); err = [statement stepRow]; // Check that we got at least one row back - STAssertEquals(err, SQLITE_ROW, @"did not retrieve a row from db :-("); + XCTAssertEqual(err, SQLITE_ROW, @"did not retrieve a row from db :-("); long long retrievedValue = [statement resultLongLongAtPosition:0]; - STAssertEquals(retrievedValue, testVal, + XCTAssertEqual(retrievedValue, testVal, @"Retrieved long long did not equal " @"original"); NSNumber *retrievedNumber = [statement resultNumberAtPosition:1]; - STAssertEqualObjects(retrievedNumber, longlongValue, - @"Retrieved NSNumber object did not equal"); + XCTAssertEqualObjects(retrievedNumber, longlongValue, + @"Retrieved NSNumber object did not equal"); [statement finalizeStatement]; } @@ -1701,7 +1667,7 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { err = [db executeSQL: @"CREATE TABLE stringTable (sc1 text);"]; - STAssertEquals(err, SQLITE_OK, + XCTAssertEqual(err, SQLITE_OK, @"Failed to create table for string binding test"); NSString *insert = @@ -1711,15 +1677,15 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { GTMSQLiteStatement *statement = [GTMSQLiteStatement statementWithSQL:insert inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create insert statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create insert statement"); + XCTAssertNotNil(statement, @"Failed to create insert statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create insert statement"); NSString *testVal = @"this is a test string"; err = [statement bindStringAtPosition:1 string:testVal]; - STAssertEquals(err, SQLITE_OK, @"error binding string at position 1"); + XCTAssertEqual(err, SQLITE_OK, @"error binding string at position 1"); err = [statement stepRow]; - STAssertEquals(err, SQLITE_DONE, + XCTAssertEqual(err, SQLITE_DONE, @"failed to insert string for string binding test"); [statement finalizeStatement]; @@ -1731,14 +1697,14 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { statement = [GTMSQLiteStatement statementWithSQL:selectSQL inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create select statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create select statement"); + XCTAssertNotNil(statement, @"Failed to create select statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create select statement"); err = [statement stepRow]; // Check that we got at least one row back - STAssertEquals(err, SQLITE_ROW, @"did not retrieve a row from db :-("); + XCTAssertEqual(err, SQLITE_ROW, @"did not retrieve a row from db :-("); err = [statement stepRow]; - STAssertEquals(err, SQLITE_DONE, @"retrieved more than 1 row from db :-("); + XCTAssertEqual(err, SQLITE_DONE, @"retrieved more than 1 row from db :-("); [statement finalizeStatement]; } @@ -1752,61 +1718,54 @@ static NSArray* LikeGlobTestHelper(GTMSQLiteDatabase *db, NSString *sql) { errorCode:&err] autorelease]; - STAssertNotNil(db, @"Failed to create database"); + XCTAssertNotNil(db, @"Failed to create database"); sqlite3 *sqlite3DB = [db sqlite3DB]; - + NSString *selectSQL = @"select 1"; GTMSQLiteStatement *statement; statement = [GTMSQLiteStatement statementWithSQL:selectSQL inDatabase:db errorCode:&err]; - STAssertNotNil(statement, @"Failed to create select statement"); - STAssertEquals(err, SQLITE_OK, @"Failed to create select statement"); + XCTAssertNotNil(statement, @"Failed to create select statement"); + XCTAssertEqual(err, SQLITE_OK, @"Failed to create select statement"); sqlite3_stmt *sqlite3Statment = [statement sqlite3Statement]; err = [statement stepRow]; - STAssertEquals(err, SQLITE_ROW, + XCTAssertEqual(err, SQLITE_ROW, @"failed to step row for finalize test"); - - NSString *expectedLog = - @"-[GTMSQLiteStatement finalizeStatement] must be called " - @"when statement is no longer needed"; - - [GTMUnitTestDevLog expectString:@"%@", expectedLog]; - [GTMUnitTestDevLog expectPattern:@"Unable to close .*"]; [localPool drain]; - + // Clean up leaks. Since we hadn't finalized the statement above we // were unable to clean up the sqlite databases. Since the pool is drained // all of our objective-c objects are gone, so we have to call the // sqlite3 api directly. - STAssertEquals(sqlite3_finalize(sqlite3Statment), SQLITE_OK, nil); - STAssertEquals(sqlite3_close(sqlite3DB), SQLITE_OK, nil); + XCTAssertEqual(sqlite3_finalize(sqlite3Statment), SQLITE_OK); + XCTAssertEqual(sqlite3_close(sqlite3DB), SQLITE_OK); } - (void)testCompleteSQLString { NSString *str = @"CREATE TABLE longlongTable (llc1 integer, llc2 integer);"; BOOL isComplete = [GTMSQLiteStatement isCompleteStatement:str]; - STAssertTrue(isComplete, nil); + XCTAssertTrue(isComplete); isComplete = [GTMSQLiteStatement isCompleteStatement:@""]; - STAssertTrue(isComplete, nil); + XCTAssertFalse(isComplete); isComplete = [GTMSQLiteStatement isCompleteStatement:@"CR"]; - STAssertFalse(isComplete, nil); + XCTAssertFalse(isComplete); } - (void)testQuotingSQLString { NSString *str = @"This is wild! It's fun!"; NSString *str2 = [GTMSQLiteStatement quoteAndEscapeString:str]; - STAssertEqualObjects(str2, @"'This is wild! It''s fun!'", nil); + XCTAssertEqualObjects(str2, @"'This is wild! It''s fun!'"); str2 = [GTMSQLiteStatement quoteAndEscapeString:@""]; - STAssertEqualObjects(str2, @"''", nil); + XCTAssertEqualObjects(str2, @"''"); } - (void)testVersion { - STAssertGreaterThan([GTMSQLiteDatabase sqliteVersionNumber], 0, nil); - STAssertNotNil([GTMSQLiteDatabase sqliteVersionString], nil); + XCTAssertGreaterThan([GTMSQLiteDatabase sqliteVersionNumber], 0); + XCTAssertNotNil([GTMSQLiteDatabase sqliteVersionString]); } @end diff --git a/Foundation/GTMScriptRunnerTest.m b/Foundation/GTMScriptRunnerTest.m index 07928c2..c8050f5 100644 --- a/Foundation/GTMScriptRunnerTest.m +++ b/Foundation/GTMScriptRunnerTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -20,10 +20,9 @@ #import <unistd.h> #import "GTMSenTestCase.h" #import "GTMScriptRunner.h" -#import "GTMUnitTestDevLog.h" @interface GTMScriptRunnerTest : GTMTestCase { - @private + @private NSString *shScript_; NSString *perlScript_; NSString *shOutputScript_; @@ -45,7 +44,7 @@ @"fi\n" @"echo $i\n" writeToFile:shScript_ atomically:YES encoding:NSUTF8StringEncoding error:nil]; - + perlScript_ = [NSString stringWithFormat:@"/tmp/script_runner_unittest_%d_%d_pl", geteuid(), getpid()]; [@"#!/usr/bin/perl\n" @"use strict;\n" @@ -99,176 +98,179 @@ - (void)testBcCommands { GTMScriptRunner *sr = [GTMScriptRunner runnerWithInterpreter:@"/usr/bin/bc" withArgs:[NSArray arrayWithObject:@"-lq"]]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *output = nil; - + // Simple expression (NOTE that bc requires that commands end with a newline) output = [sr run:@"1 + 2\n"]; - STAssertEqualObjects(output, @"3", @"output should equal '3'"); - + XCTAssertEqualObjects(output, @"3", @"output should equal '3'"); + // Simple expression with variables and multiple statements output = [sr run:@"i=1; i+2\n"]; - STAssertEqualObjects(output, @"3", @"output should equal '3'"); - + XCTAssertEqualObjects(output, @"3", @"output should equal '3'"); + // Simple expression with base conversion output = [sr run:@"obase=2; 2^5\n"]; - STAssertEqualObjects(output, @"100000", @"output should equal '100000'"); - + XCTAssertEqualObjects(output, @"100000", @"output should equal '100000'"); + // Simple expression with sine and cosine functions output = [sr run:@"scale=3;s(0)+c(0)\n"]; - STAssertEqualObjects(output, @"1.000", @"output should equal '1.000'"); + XCTAssertEqualObjects(output, @"1.000", @"output should equal '1.000'"); } - (void)testPerlCommands { GTMScriptRunner *sr = [GTMScriptRunner runnerWithPerl]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *output = nil; - + // Simple print output = [sr run:@"print 'hi'"]; - STAssertEqualObjects(output, @"hi", @"output should equal 'hi'"); - + XCTAssertEqualObjects(output, @"hi", @"output should equal 'hi'"); + // Simple print x4 output = [sr run:@"print 'A'x4"]; - STAssertEqualObjects(output, @"AAAA", @"output should equal 'AAAA'"); - + XCTAssertEqualObjects(output, @"AAAA", @"output should equal 'AAAA'"); + // Simple perl-y stuff output = [sr run:@"my $i=0; until ($i++==41){} print $i"]; - STAssertEqualObjects(output, @"42", @"output should equal '42'"); + XCTAssertEqualObjects(output, @"42", @"output should equal '42'"); } - (void)testPythonCommands { GTMScriptRunner *sr = [GTMScriptRunner runnerWithPython]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *output = nil; - + // Simple print output = [sr run:@"print 'hi'"]; - STAssertEqualObjects(output, @"hi", @"output should equal 'hi'"); - + XCTAssertEqualObjects(output, @"hi", @"output should equal 'hi'"); + // Simple python expression output = [sr run:@"print '-'.join(['a', 'b', 'c'])"]; - STAssertEqualObjects(output, @"a-b-c", @"output should equal 'a-b-c'"); + XCTAssertEqualObjects(output, @"a-b-c", @"output should equal 'a-b-c'"); } - (void)testBashScript { GTMScriptRunner *sr = [GTMScriptRunner runnerWithBash]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *output = nil; - + // Simple sh script output = [sr runScript:shScript_]; - STAssertEqualObjects(output, @"1", @"output should equal '1'"); - + XCTAssertEqualObjects(output, @"1", @"output should equal '1'"); + // Simple sh script with 1 command line argument output = [sr runScript:shScript_ withArgs:[NSArray arrayWithObject:@"2"]]; - STAssertEqualObjects(output, @"2", @"output should equal '2'"); + XCTAssertEqualObjects(output, @"2", @"output should equal '2'"); } - (void)testPerlScript { GTMScriptRunner *sr = [GTMScriptRunner runnerWithPerl]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *output = nil; - + // Simple Perl script output = [sr runScript:perlScript_]; - STAssertEqualObjects(output, @"1", @"output should equal '1'"); - + XCTAssertEqualObjects(output, @"1", @"output should equal '1'"); + // Simple perl script with 1 command line argument output = [sr runScript:perlScript_ withArgs:[NSArray arrayWithObject:@"2"]]; - STAssertEqualObjects(output, @"2", @"output should equal '2'"); + XCTAssertEqualObjects(output, @"2", @"output should equal '2'"); } - (void)testEnvironment { GTMScriptRunner *sr = [GTMScriptRunner runner]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *output = nil; NSString *error = nil; - STAssertNil([sr environment], @"should start w/ empty env"); - + XCTAssertNil([sr environment], @"should start w/ empty env"); + output = [sr run:@"/usr/bin/env | wc -l" standardError:&error]; int numVars = [output intValue]; - STAssertGreaterThan(numVars, 0, - @"numVars should be positive. StdErr %@", error); + XCTAssertGreaterThan(numVars, 0, + @"numVars should be positive. StdErr %@", error); // By default the environment is wiped clean, however shells often add a few - // of their own env vars after things have been wiped. For example, sh will + // of their own env vars after things have been wiped. For example, sh will // add about 3 env vars (PWD, _, and SHLVL). - STAssertLessThan(numVars, 5, @"Our env should be almost empty"); - + XCTAssertLessThan(numVars, 5, @"Our env should be almost empty"); + NSDictionary *newEnv = [NSDictionary dictionaryWithObject:@"bar" forKey:@"foo"]; [sr setEnvironment:newEnv]; output = [sr run:@"/usr/bin/env | wc -l" standardError:&error]; - STAssertEquals([output intValue], numVars + 1, - @"should have one more env var now. StdErr %@", error); - + XCTAssertEqual([output intValue], numVars + 1, + @"should have one more env var now. StdErr %@", error); + [sr setEnvironment:nil]; output = [sr run:@"/usr/bin/env | wc -l" standardError:&error]; - STAssertEquals([output intValue], numVars, - @"should be back down to %d vars. StdErr:%@", numVars, error); - - NSMutableDictionary *currVars + XCTAssertEqual([output intValue], numVars, + @"should be back down to %d vars. StdErr:%@", numVars, error); + + NSMutableDictionary *currVars = [[[[NSProcessInfo processInfo] environment] mutableCopy] autorelease]; - + // When debugging a release build _ was not in the processInfo environment // causing the assert below to fail. Not sure why, but it appeared // to be harmless, and easy to account for. [currVars setObject:@"/usr/bin/env" forKey:@"_"]; [sr setEnvironment:currVars]; - + + // Account for the shell level. + [currVars setObject:@"1" forKey:@"SHLVL"]; + output = [sr run:@"/usr/bin/env | /usr/bin/sort" standardError:&error]; NSArray *lineArray = [output componentsSeparatedByString:@"\n"]; - STAssertEquals([lineArray count], [currVars count], - @"StdErr:%@\nCurrentEnvironment:\n%@\nExpected environment:\n%@", - error, output, currVars); + XCTAssertEqual([lineArray count], [currVars count], + @"StdErr:%@\nCurrentEnvironment:\n%@\nExpected environment:\n%@", + error, output, currVars); } - (void)testDescription { // make sure description doesn't choke GTMScriptRunner *sr = [GTMScriptRunner runner]; - STAssertNotNil(sr, @"Script runner must not be nil"); - STAssertGreaterThan([[sr description] length], (NSUInteger)10, - @"expected a description of at least 10 chars"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertGreaterThan([[sr description] length], (NSUInteger)10, + @"expected a description of at least 10 chars"); } - (void)testRunCommandOutputHandling { // Test whitespace trimming & stdout vs. stderr w/ run command api - + GTMScriptRunner *sr = [GTMScriptRunner runnerWithBash]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *output = nil; NSString *err = nil; - + // w/o whitespace trimming { [sr setTrimsWhitespace:NO]; - STAssertFalse([sr trimsWhitespace], @"setTrimsWhitespace to NO failed"); - + XCTAssertFalse([sr trimsWhitespace], @"setTrimsWhitespace to NO failed"); + // test stdout output = [sr run:@"echo \" on out \"" standardError:&err]; - STAssertEqualObjects(output, @" on out \n", @"failed to get stdout output"); - STAssertNil(err, @"stderr should have been empty"); - + XCTAssertEqualObjects(output, @" on out \n", @"failed to get stdout output"); + XCTAssertNil(err, @"stderr should have been empty"); + // test stderr output = [sr run:@"echo \" on err \" > /dev/stderr" standardError:&err]; - STAssertNil(output, @"stdout should have been empty"); - STAssertEqualObjects(err, @" on err \n", nil); + XCTAssertNil(output, @"stdout should have been empty"); + XCTAssertEqualObjects(err, @" on err \n"); } - + // w/ whitespace trimming { [sr setTrimsWhitespace:YES]; - STAssertTrue([sr trimsWhitespace], @"setTrimsWhitespace to YES failed"); - + XCTAssertTrue([sr trimsWhitespace], @"setTrimsWhitespace to YES failed"); + // test stdout output = [sr run:@"echo \" on out \"" standardError:&err]; - STAssertEqualObjects(output, @"on out", @"failed to get stdout output"); - STAssertNil(err, @"stderr should have been empty"); - + XCTAssertEqualObjects(output, @"on out", @"failed to get stdout output"); + XCTAssertNil(err, @"stderr should have been empty"); + // test stderr output = [sr run:@"echo \" on err \" > /dev/stderr" standardError:&err]; - STAssertNil(output, @"stdout should have been empty"); - STAssertEqualObjects(err, @"on err", nil); + XCTAssertNil(output, @"stdout should have been empty"); + XCTAssertEqualObjects(err, @"on err"); } } @@ -276,102 +278,96 @@ // Test whitespace trimming & stdout vs. stderr w/ script api GTMScriptRunner *sr = [GTMScriptRunner runner]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *output = nil; NSString *err = nil; // w/o whitespace trimming { [sr setTrimsWhitespace:NO]; - STAssertFalse([sr trimsWhitespace], @"setTrimsWhitespace to NO failed"); - + XCTAssertFalse([sr trimsWhitespace], @"setTrimsWhitespace to NO failed"); + // test stdout output = [sr runScript:shOutputScript_ withArgs:[NSArray arrayWithObject:@"out"] standardError:&err]; - STAssertEqualObjects(output, @" on out \n", nil); - STAssertNil(err, @"stderr should have been empty"); - + XCTAssertEqualObjects(output, @" on out \n"); + XCTAssertNil(err, @"stderr should have been empty"); + // test stderr output = [sr runScript:shOutputScript_ withArgs:[NSArray arrayWithObject:@"err"] standardError:&err]; - STAssertNil(output, @"stdout should have been empty"); - STAssertEqualObjects(err, @" on err \n", nil); + XCTAssertNil(output, @"stdout should have been empty"); + XCTAssertEqualObjects(err, @" on err \n"); } - + // w/ whitespace trimming { [sr setTrimsWhitespace:YES]; - STAssertTrue([sr trimsWhitespace], @"setTrimsWhitespace to YES failed"); - + XCTAssertTrue([sr trimsWhitespace], @"setTrimsWhitespace to YES failed"); + // test stdout output = [sr runScript:shOutputScript_ withArgs:[NSArray arrayWithObject:@"out"] standardError:&err]; - STAssertEqualObjects(output, @"on out", nil); - STAssertNil(err, @"stderr should have been empty"); - + XCTAssertEqualObjects(output, @"on out"); + XCTAssertNil(err, @"stderr should have been empty"); + // test stderr output = [sr runScript:shOutputScript_ withArgs:[NSArray arrayWithObject:@"err"] standardError:&err]; - STAssertNil(output, @"stdout should have been empty"); - STAssertEqualObjects(err, @"on err", nil); + XCTAssertNil(output, @"stdout should have been empty"); + XCTAssertEqualObjects(err, @"on err"); } } - (void)testBadRunCommandInput { GTMScriptRunner *sr = [GTMScriptRunner runner]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *err = nil; - - STAssertNil([sr run:nil standardError:&err], nil); - STAssertNil(err, nil); + + XCTAssertNil([sr run:nil standardError:&err]); + XCTAssertNil(err); } - (void)testBadScriptInput { GTMScriptRunner *sr = [GTMScriptRunner runner]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *err = nil; - - STAssertNil([sr runScript:nil withArgs:nil standardError:&err], nil); - STAssertNil(err, nil); - STAssertNil([sr runScript:@"/path/that/does/not/exists/foo/bar/baz" - withArgs:nil standardError:&err], nil); - STAssertNotNil(err, - @"should have gotten something about the path not existing"); + + XCTAssertNil([sr runScript:nil withArgs:nil standardError:&err]); + XCTAssertNil(err); + XCTAssertNil([sr runScript:@"/path/that/does/not/exists/foo/bar/baz" + withArgs:nil standardError:&err]); + XCTAssertNotNil(err, + @"should have gotten something about the path not existing"); } - (void)testBadCmdInterpreter { GTMScriptRunner *sr = [GTMScriptRunner runnerWithInterpreter:@"/path/that/does/not/exists/interpreter"]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *err = nil; - - STAssertNil([sr run:nil standardError:&err], nil); - STAssertNil(err, nil); - [GTMUnitTestDevLog expectString:@"Failed to launch interpreter " - "'/path/that/does/not/exists/interpreter' due to: launch path not accessible"]; - STAssertNil([sr run:@"ls /" standardError:&err], nil); - STAssertNil(err, nil); + + XCTAssertNil([sr run:nil standardError:&err]); + XCTAssertNil(err); + XCTAssertNil([sr run:@"ls /" standardError:&err]); + XCTAssertNil(err); } - (void)testBadScriptInterpreter { GTMScriptRunner *sr = [GTMScriptRunner runnerWithInterpreter:@"/path/that/does/not/exists/interpreter"]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *err = nil; - - [GTMUnitTestDevLog expectString:@"Failed to launch interpreter " - "'/path/that/does/not/exists/interpreter' due to: launch path not accessible"]; - STAssertNil([sr runScript:shScript_ withArgs:nil standardError:&err], nil); - STAssertNil(err, nil); - [GTMUnitTestDevLog expectString:@"Failed to launch interpreter " - "'/path/that/does/not/exists/interpreter' due to: launch path not accessible"]; - STAssertNil([sr runScript:@"/path/that/does/not/exists/foo/bar/baz" - withArgs:nil standardError:&err], nil); - STAssertNil(err, nil); + + XCTAssertNil([sr runScript:shScript_ withArgs:nil standardError:&err]); + XCTAssertNil(err); + XCTAssertNil([sr runScript:@"/path/that/does/not/exists/foo/bar/baz" + withArgs:nil standardError:&err]); + XCTAssertNil(err); } - (void)testLargeOutput { @@ -379,9 +375,9 @@ // http://code.google.com/p/google-toolbox-for-mac/issues/detail?id=25 GTMScriptRunner *sr = [GTMScriptRunner runnerWithPython]; - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *output = nil, *err = nil, *cmd = nil; - + #define GENERATOR_FORMAT_STR \ @"import sys\n" \ @"block = '.' * 512\n" \ @@ -393,33 +389,33 @@ @" sys.stdout.write(block)\n" \ @" if to_where in [ 'e', 'b' ]:\n" \ @" sys.stderr.write(block)\n" - + // Make sure we get both blocks cmd = [NSString stringWithFormat:GENERATOR_FORMAT_STR, @"'b1'"]; - STAssertNotNil(cmd, nil); + XCTAssertNotNil(cmd); output = [sr run:cmd standardError:&err]; - STAssertEquals([output length], (NSUInteger)512, nil); - STAssertEquals([err length], (NSUInteger)512, nil); - + XCTAssertEqual([output length], (NSUInteger)512); + XCTAssertEqual([err length], (NSUInteger)512); + // Test a large amount of data on only one connections at a time. cmd = [NSString stringWithFormat:GENERATOR_FORMAT_STR, @"'b1', 'o200'"]; - STAssertNotNil(cmd, nil); + XCTAssertNotNil(cmd); output = [sr run:cmd standardError:&err]; - STAssertEquals([output length], (NSUInteger)(512 + 512*200), nil); - STAssertEquals([err length], (NSUInteger)512, nil); + XCTAssertEqual([output length], (NSUInteger)(512 + 512*200)); + XCTAssertEqual([err length], (NSUInteger)512); cmd = [NSString stringWithFormat:GENERATOR_FORMAT_STR, @"'b1', 'e200'"]; - STAssertNotNil(cmd, nil); + XCTAssertNotNil(cmd); output = [sr run:cmd standardError:&err]; - STAssertEquals([output length], (NSUInteger)512, nil); - STAssertEquals([err length], (NSUInteger)(512 + 512*200), nil); + XCTAssertEqual([output length], (NSUInteger)512); + XCTAssertEqual([err length], (NSUInteger)(512 + 512*200)); // Now send a large amount down both to make sure we spool it all in. cmd = [NSString stringWithFormat:GENERATOR_FORMAT_STR, @"'b200'"]; - STAssertNotNil(cmd, nil); + XCTAssertNotNil(cmd); output = [sr run:cmd standardError:&err]; - STAssertEquals([output length], (NSUInteger)(512*200), nil); - STAssertEquals([err length], (NSUInteger)(512*200), nil); + XCTAssertEqual([output length], (NSUInteger)(512*200)); + XCTAssertEqual([err length], (NSUInteger)(512*200)); } @@ -428,44 +424,44 @@ @implementation GTMScriptRunnerTest (PrivateMethods) - (void)helperTestBourneShellUsingScriptRunner:(GTMScriptRunner *)sr { - STAssertNotNil(sr, @"Script runner must not be nil"); + XCTAssertNotNil(sr, @"Script runner must not be nil"); NSString *output = nil; - + // Simple command output = [sr run:@"ls /etc/passwd"]; - STAssertEqualObjects(output, @"/etc/passwd", @"output should equal '/etc/passwd'"); - + XCTAssertEqualObjects(output, @"/etc/passwd", @"output should equal '/etc/passwd'"); + // Simple command pipe-line - output = [sr run:@"ls /etc/ | grep passwd | tail -1"]; - STAssertEqualObjects(output, @"passwd", @"output should equal 'passwd'"); - + output = [sr run:@"ls /etc/ | grep cups | tail -1"]; + XCTAssertEqualObjects(output, @"cups", @"output should equal 'cups'"); + // Simple pipe-line with quotes and awk variables output = [sr run:@"ps jaxww | awk '{print $2}' | sort -nr | tail -2 | head -1"]; - STAssertEqualObjects(output, @"1", @"output should equal '1'"); - + XCTAssertEqualObjects(output, @"1", @"output should equal '1'"); + // Simple shell loop with variables output = [sr run:@"i=0; while [ $i -lt 100 ]; do i=$((i+1)); done; echo $i"]; - STAssertEqualObjects(output, @"100", @"output should equal '100'"); - + XCTAssertEqualObjects(output, @"100", @"output should equal '100'"); + // Simple command with newlines output = [sr run:@"i=1\necho $i"]; - STAssertEqualObjects(output, @"1", @"output should equal '1'"); - + XCTAssertEqualObjects(output, @"1", @"output should equal '1'"); + // Simple full shell script output = [sr run:@"#!/bin/sh\ni=1\necho $i\n"]; - STAssertEqualObjects(output, @"1", @"output should equal '1'"); - + XCTAssertEqualObjects(output, @"1", @"output should equal '1'"); + NSString *err = nil; - + // Test getting standard error with no stdout output = [sr run:@"ls /etc/does-not-exist" standardError:&err]; - STAssertNil(output, @"output should be nil due to expected error"); - STAssertEqualObjects(err, @"ls: /etc/does-not-exist: No such file or directory", @""); - + XCTAssertNil(output, @"output should be nil due to expected error"); + XCTAssertEqualObjects(err, @"ls: /etc/does-not-exist: No such file or directory", @""); + // Test getting standard output along with some standard error output = [sr run:@"ls /etc/does-not-exist /etc/passwd" standardError:&err]; - STAssertEqualObjects(output, @"/etc/passwd", @""); - STAssertEqualObjects(err, @"ls: /etc/does-not-exist: No such file or directory", @""); + XCTAssertEqualObjects(output, @"/etc/passwd", @""); + XCTAssertEqualObjects(err, @"ls: /etc/does-not-exist: No such file or directory", @""); } @end diff --git a/Foundation/GTMServiceManagement.c b/Foundation/GTMServiceManagement.c index 5e41ba0..dfd0dc6 100644 --- a/Foundation/GTMServiceManagement.c +++ b/Foundation/GTMServiceManagement.c @@ -382,8 +382,11 @@ CFTypeRef GTMCFTypeCreateFromLaunchData(launch_data_t ldata, } case LAUNCH_DATA_OPAQUE: { - size_t size = launch_data_get_opaque_size(ldata); + // Must get the data before we get the size. + // Otherwise the size will come back faulty on macOS 10.11.6. + // Radar: 28509492 launch_data_get_opaque_size gives wrong size void *data = launch_data_get_opaque(ldata); + size_t size = launch_data_get_opaque_size(ldata); cf_type_ref = CFDataCreate(kCFAllocatorDefault, data, size); break; } @@ -784,46 +787,4 @@ CFDictionaryRef GTMSMCopyAllJobDictionaries(void) { return dict; } -// Some private SPIs defined by apple in the launchd sources -// http://opensource.apple.com/source/launchd/launchd-258.25/launchd/src/ -// and -// http://opensource.apple.com/source/launchd/launchd-329.3/launchd/src/ -// It turns out that they renamed the enum that I need to use between 10.5 and -// 10.6. Luckily if we request the 10_5 value on 10_6 we get an error -// so we just ask for the 10_5 value first, and then the 10_6 value second. - -typedef enum { - VPROC_GSK_ENVIRONMENT_10_5 = 10, - VPROC_GSK_ENVIRONMENT_10_6 = 11 -} vproc_gsk_t; - -extern vproc_err_t vproc_swap_complex(vproc_t vp, - vproc_gsk_t key, - launch_data_t inval, - launch_data_t *outval); - -CFDictionaryRef GTMCopyLaunchdExports(void) { - launch_data_t resp; - CFDictionaryRef dict = NULL; - vproc_err_t err = vproc_swap_complex(NULL, - VPROC_GSK_ENVIRONMENT_10_5, - NULL, - &resp); - if (err) { - err = vproc_swap_complex(NULL, VPROC_GSK_ENVIRONMENT_10_6, NULL, &resp); - } - if (err == NULL) { - CFErrorRef error = NULL; - dict = GTMCFTypeCreateFromLaunchData(resp, false, &error); - if (error) { -#ifdef DEBUG - CFShow(error); -#endif // DEBUG - CFRelease(error); - } - launch_data_free(resp); - } - return dict; -} - #endif // if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4 diff --git a/Foundation/GTMServiceManagement.h b/Foundation/GTMServiceManagement.h index 11fc4b5..aea0cbf 100644 --- a/Foundation/GTMServiceManagement.h +++ b/Foundation/GTMServiceManagement.h @@ -68,10 +68,6 @@ CFTypeRef GTMCFTypeCreateFromLaunchData(launch_data_t ldata, bool convert_non_standard_objects, CFErrorRef *error); -// Returns the list of exports defined by launchd. -// Caller is takes ownership of the returned type. -CFDictionaryRef GTMCopyLaunchdExports(); - GTM_EXTERN_C_END #endif // if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_4 diff --git a/Foundation/GTMServiceManagementTest.m b/Foundation/GTMServiceManagementTest.m index 95ef0b4..79881f3 100644 --- a/Foundation/GTMServiceManagementTest.m +++ b/Foundation/GTMServiceManagementTest.m @@ -23,7 +23,6 @@ #import "GTMSenTestCase.h" #import <servers/bootstrap.h> -#define STANDARD_JOB_LABEL "com.apple.launchctl.Background" #define OUR_JOB_LABEL "com.google.gtm.GTMServiceManagementTest.job" #define BAD_JOB_LABEL "com.google.gtm.GTMServiceManagementTest.badjob" #define TEST_HARNESS_LABEL "com.google.gtm.GTMServiceManagementTestHarness" @@ -58,68 +57,87 @@ static NSString const *kGTMSocketName nil]; CFErrorRef error = NULL; launch_data_t launchDict = GTMLaunchDataCreateFromCFType(topDict, &error); - STAssertNotNULL(launchDict, nil); - STAssertNULL(error, @"Error: %@", error); + XCTAssertNotNULL(launchDict); + XCTAssertNULL(error, @"Error: %@", error); NSDictionary *nsDict = GTMCFAutorelease(GTMCFTypeCreateFromLaunchData(launchDict, NO, &error)); - STAssertNotNil(nsDict, nil); - STAssertNULL(error, @"Error: %@", error); - STAssertEqualObjects(nsDict, topDict, @""); + XCTAssertNotNil(nsDict); + XCTAssertNULL(error, @"Error: %@", error); + XCTAssertEqualObjects(nsDict, topDict, @""); launch_data_free(launchDict); // Test a bad type NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; - STAssertNotNil(url, nil); + XCTAssertNotNil(url); launchDict = GTMLaunchDataCreateFromCFType(url, &error); - STAssertNULL(launchDict, nil); - STAssertNotNULL(error, nil); - STAssertEqualObjects((id)CFErrorGetDomain(error), - (id)kCFErrorDomainPOSIX, nil); - STAssertEquals(CFErrorGetCode(error), (CFIndex)EINVAL, nil); - CFRelease(error); + XCTAssertNULL(launchDict); + XCTAssertNotNULL(error); + XCTAssertEqualObjects((id)CFErrorGetDomain(error), + (id)kCFErrorDomainPOSIX); + XCTAssertEqual(CFErrorGetCode(error), (CFIndex)EINVAL); + if (error) { + CFRelease(error); + } + CFTypeRef cfType = GTMCFTypeCreateFromLaunchData(NULL, YES, &error); - STAssertNULL(cfType, nil); - STAssertNotNULL(error, nil); - CFRelease(error); + XCTAssertNULL(cfType); + XCTAssertNotNULL(error); + if (error) { + CFRelease(error); + } } - (void)testJobDictionaries { NSDictionary *jobs = GTMCFAutorelease(GTMSMCopyAllJobDictionaries()); - STAssertNotNil(jobs, nil); - // A job that should always be around + XCTAssertNotNil(jobs); + + // Grab an existing job + NSString *jobName = [[jobs allKeys] objectAtIndex:0]; NSDictionary *job - = GTMCFAutorelease(GTMSMJobCopyDictionary(CFSTR(STANDARD_JOB_LABEL))); - STAssertNotNil(job, nil); + = GTMCFAutorelease(GTMSMJobCopyDictionary((CFStringRef)jobName)); + XCTAssertNotNil(job); // A job that should never be around CFTypeRef type = GTMSMJobCopyDictionary(CFSTR(BAD_JOB_LABEL)); - STAssertNULL(type, nil); + XCTAssertNULL(type); } - (void)testLaunching { CFErrorRef error = NULL; Boolean isGood = GTMSMJobSubmit(NULL, &error); - STAssertFalse(isGood, nil); - STAssertNotNULL(error, nil); - CFRelease(error); + XCTAssertFalse(isGood); + XCTAssertNotNULL(error); + if (error) { + CFRelease(error); + } + NSDictionary *empty = [NSDictionary dictionary]; isGood = GTMSMJobSubmit((CFDictionaryRef)empty, &error); - STAssertFalse(isGood, nil); - STAssertNotNULL(error, nil); - CFRelease(error); + XCTAssertFalse(isGood); + XCTAssertNotNULL(error); + if (error) { + CFRelease(error); + } + + // Grab an existing job + NSDictionary *jobs = GTMCFAutorelease(GTMSMCopyAllJobDictionaries()); + XCTAssertNotNil(jobs); + NSString *jobName = [[jobs allKeys] objectAtIndex:0]; NSDictionary *alreadyThere - = [NSDictionary dictionaryWithObject:@STANDARD_JOB_LABEL + = [NSDictionary dictionaryWithObject:jobName forKey:@LAUNCH_JOBKEY_LABEL]; isGood = GTMSMJobSubmit((CFDictionaryRef)alreadyThere, &error); - STAssertFalse(isGood, nil); - STAssertEquals([(NSError *)error code], (NSInteger)EEXIST, nil); - CFRelease(error); + XCTAssertFalse(isGood); + XCTAssertEqual([(NSError *)error code], (NSInteger)EEXIST); + if (error) { + CFRelease(error); + } NSDictionary *goodJob = [NSDictionary dictionaryWithObjectsAndKeys: @@ -127,26 +145,20 @@ static NSString const *kGTMSocketName @"/bin/test", @LAUNCH_JOBKEY_PROGRAM, nil]; isGood = GTMSMJobSubmit((CFDictionaryRef)goodJob, &error); - STAssertTrue(isGood, nil); - STAssertNULL(error, nil); + XCTAssertTrue(isGood); + XCTAssertNULL(error); isGood = GTMSMJobRemove(CFSTR(OUR_JOB_LABEL), &error); - STAssertTrue(isGood, - @"You may need to run launchctl remove %s", OUR_JOB_LABEL); - STAssertNULL(error, nil); + XCTAssertTrue(isGood, + @"You may need to run launchctl remove %s", OUR_JOB_LABEL); + XCTAssertNULL(error); isGood = GTMSMJobRemove(CFSTR(OUR_JOB_LABEL), &error); - STAssertFalse(isGood, nil); - STAssertNotNULL(error, nil); - CFRelease(error); -} - -- (void)testCopyExports { - CFDictionaryRef exports = GTMCopyLaunchdExports(); - STAssertNotNULL(exports, nil); - NSString *user = [(NSDictionary *)exports objectForKey:@"USER"]; - STAssertEqualObjects(user, NSUserName(), nil); - CFRelease(exports); + XCTAssertFalse(isGood); + XCTAssertNotNULL(error); + if (error) { + CFRelease(error); + } } - (void)testCheckin { @@ -154,16 +166,19 @@ static NSString const *kGTMSocketName // Can't check ourselves in NSDictionary *badTest = GTMCFAutorelease(GTMSMCopyJobCheckInDictionary(&error)); - STAssertNil(badTest, nil); - STAssertNotNULL(error, nil); - CFRelease(error); + XCTAssertNil(badTest); + XCTAssertNotNULL(error); + if (error) { + CFRelease(error); + } + NSBundle *testBundle = [NSBundle bundleForClass:[self class]]; - STAssertNotNil(testBundle, nil); + XCTAssertNotNil(testBundle); NSString *testHarnessPath = [testBundle pathForResource:@"GTMServiceManagementTestingHarness" ofType:nil]; - STAssertNotNil(testHarnessPath, nil); + XCTAssertNotNil(testHarnessPath); NSDictionary *machServices = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], @GTM_MACH_PORT_NAME, @@ -195,22 +210,7 @@ static NSString const *kGTMSocketName GTMSMJobRemove(CFSTR(TEST_HARNESS_LABEL), NULL); BOOL isGood = GTMSMJobSubmit((CFDictionaryRef)job, &error); - STAssertTrue(isGood, @"Error %@", error); - - NSDictionary* exports = GTMCFAutorelease(GTMCopyLaunchdExports()); - STAssertNotNULL(exports, nil); - NSString *socketPath = [exports objectForKey:kGTMSocketKey]; - STAssertNotNULL(socketPath, nil); - STAssertEqualObjects([socketPath lastPathComponent], kGTMSocketName, nil); - - mach_port_t sp = 0; - kern_return_t rt = bootstrap_look_up(bootstrap_port, - (char*)GTM_MACH_PORT_NAME, - &sp); - STAssertNotEquals(sp, (mach_port_t)0, nil); - STAssertEquals(rt, KERN_SUCCESS, nil); - isGood = GTMSMJobRemove(CFSTR(TEST_HARNESS_LABEL), &error); - STAssertTrue(isGood, @"Error %@", error); + XCTAssertTrue(isGood, @"Error %@", error); } @end diff --git a/Foundation/GTMSignalHandlerTest.m b/Foundation/GTMSignalHandlerTest.m index 5cddcb5..bd70ecf 100644 --- a/Foundation/GTMSignalHandlerTest.m +++ b/Foundation/GTMSignalHandlerTest.m @@ -18,7 +18,6 @@ #import "GTMSenTestCase.h" #import "GTMSignalHandler.h" -#import "GTMUnitTestDevLog.h" #import "GTMFoundationUnitTestingUtilities.h" @interface GTMSignalHandlerTest : GTMTestCase @@ -66,56 +65,54 @@ @implementation GTMSignalHandlerTest - (void)nomnomnom:(int)blah { - STFail(@"Should never be called!"); + XCTFail(@"Should never be called!"); } - (void)testNillage { GTMSignalHandler *handler; // Just an init should return nil. - [GTMUnitTestDevLog expectString:@"Don't call init, use " - @"initWithSignal:target:action:"]; handler = [[[GTMSignalHandler alloc] init] autorelease]; - STAssertNil(handler, nil); + XCTAssertNil(handler); // Zero signal should return nil as well. handler = [[[GTMSignalHandler alloc] initWithSignal:0 target:self action:@selector(nomnomnom:)] autorelease]; - STAssertNil(handler, nil); + XCTAssertNil(handler); } - (void)testSingleHandler { SignalCounter *counter = [SignalCounter signalCounter]; - STAssertNotNil(counter, nil); + XCTAssertNotNil(counter); GTMSignalHandler *handler = [[[GTMSignalHandler alloc] initWithSignal:SIGWINCH target:counter action:@selector(countSignal:)] autorelease]; - STAssertNotNil(handler, nil); + XCTAssertNotNil(handler); raise(SIGWINCH); NSRunLoop *rl = [NSRunLoop currentRunLoop]; [rl gtm_runUpToSixtySecondsWithContext:counter]; - STAssertEquals([counter count], 1, nil); - STAssertEquals([counter lastSeen], SIGWINCH, nil); + XCTAssertEqual([counter count], 1); + XCTAssertEqual([counter lastSeen], SIGWINCH); [counter resetShouldStop]; raise(SIGWINCH); [rl gtm_runUpToSixtySecondsWithContext:counter]; - STAssertEquals([counter count], 2, nil); - STAssertEquals([counter lastSeen], SIGWINCH, nil); + XCTAssertEqual([counter count], 2); + XCTAssertEqual([counter lastSeen], SIGWINCH); [counter resetShouldStop]; // create a second one to make sure we're seding data where we want SignalCounter *counter2 = [SignalCounter signalCounter]; - STAssertNotNil(counter2, nil); + XCTAssertNotNil(counter2); [[[GTMSignalHandler alloc] initWithSignal:SIGUSR1 target:counter2 action:@selector(countSignal:)] autorelease]; @@ -123,10 +120,10 @@ raise(SIGUSR1); [rl gtm_runUpToSixtySecondsWithContext:counter2]; - STAssertEquals([counter count], 2, nil); - STAssertEquals([counter lastSeen], SIGWINCH, nil); - STAssertEquals([counter2 count], 1, nil); - STAssertEquals([counter2 lastSeen], SIGUSR1, nil); + XCTAssertEqual([counter count], 2); + XCTAssertEqual([counter lastSeen], SIGWINCH); + XCTAssertEqual([counter2 count], 1); + XCTAssertEqual([counter2 lastSeen], SIGUSR1); [handler invalidate]; @@ -135,16 +132,16 @@ raise(SIGWINCH); [rl runUntilDate:[NSDate dateWithTimeIntervalSinceNow:.2]]; - STAssertEquals([counter count], 2, nil); - STAssertEquals([counter lastSeen], SIGWINCH, nil); - STAssertEquals([counter2 count], 1, nil); - STAssertEquals([counter2 lastSeen], SIGUSR1, nil); + XCTAssertEqual([counter count], 2); + XCTAssertEqual([counter lastSeen], SIGWINCH); + XCTAssertEqual([counter2 count], 1); + XCTAssertEqual([counter2 lastSeen], SIGUSR1); } - (void)testIgnore { SignalCounter *counter = [SignalCounter signalCounter]; - STAssertNotNil(counter, nil); + XCTAssertNotNil(counter); [[[GTMSignalHandler alloc] initWithSignal:SIGUSR1 target:counter @@ -153,7 +150,7 @@ raise(SIGUSR1); NSRunLoop *rl = [NSRunLoop currentRunLoop]; [rl runUntilDate:[NSDate dateWithTimeIntervalSinceNow:.2]]; - STAssertEquals([counter count], 0, nil); + XCTAssertEqual([counter count], 0); } diff --git a/Foundation/GTMStackTrace.h b/Foundation/GTMStackTrace.h index eb86a66..61398ab 100644 --- a/Foundation/GTMStackTrace.h +++ b/Foundation/GTMStackTrace.h @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -32,10 +32,10 @@ struct GTMAddressDescriptor { }; // Returns a string containing a nicely formatted stack trace. -// +// // This function gets the stack trace for the current thread. It will // be from the caller of GTMStackTrace upwards to the top the calling stack. -// Typically this function will be used along with some logging, +// Typically this function will be used along with some logging, // as in the following: // // MyAppLogger(@"Should never get here:\n%@", GTMStackTrace()); @@ -53,41 +53,18 @@ struct GTMAddressDescriptor { NSString *GTMStackTrace(void); -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 || \ - __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_2_0 // Returns a string containing a nicely formatted stack trace from the -// exception. Only available on 10.5 or later, uses +// exception. Only available on 10.5 or later, uses // -[NSException callStackReturnAddresses]. // NSString *GTMStackTraceFromException(NSException *e); -#endif - -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 -// Returns an array of program counters from the current thread's stack. -// *** You should probably use GTMStackTrace() instead of this function *** -// However, if you actually want all the PCs in "void *" form, then this -// funtion is more convenient. This will include PCs of GTMStaceTrace and -// its inner utility functions that you may want to strip out. -// -// You can use +[NSThread callStackReturnAddresses] in 10.5 or later. -// -// Args: -// outPcs - an array of "void *" pointers to the program counters found on the -// current thread's stack. -// count - the number of entries in the outPcs array -// -// Returns: -// The number of program counters actually added to outPcs. -// -NSUInteger GTMGetStackProgramCounters(void *outPcs[], NSUInteger count); -#endif // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 // Returns an array of GTMAddressDescriptors from the current thread's stack. // *** You should probably use GTMStackTrace() instead of this function *** // However, if you actually want all the PCs with symbols, this is the way // to get them. There is no memory allocations done, so no clean up is required // except for the caller to free outDescs if they allocated it themselves. -// This will include PCs of GTMStaceTrace and its inner utility functions that +// This will include PCs of GTMStaceTrace and its inner utility functions that // you may want to strip out. // // Args: @@ -98,7 +75,7 @@ NSUInteger GTMGetStackProgramCounters(void *outPcs[], NSUInteger count); // Returns: // The number of program counters actually added to outPcs. // -NSUInteger GTMGetStackAddressDescriptors(struct GTMAddressDescriptor outDescs[], +NSUInteger GTMGetStackAddressDescriptors(struct GTMAddressDescriptor outDescs[], NSUInteger count); #ifdef __cplusplus diff --git a/Foundation/GTMStackTrace.m b/Foundation/GTMStackTrace.m index 3e34ed0..4470a11 100644 --- a/Foundation/GTMStackTrace.m +++ b/Foundation/GTMStackTrace.m @@ -19,8 +19,9 @@ #include <stdlib.h> #include <dlfcn.h> #include <mach-o/nlist.h> +#include <objc/runtime.h> + #include "GTMStackTrace.h" -#include "GTMObjC2Runtime.h" struct GTMClassDescription { const char *class_name; @@ -202,73 +203,10 @@ static NSString *GTMStackTraceFromAddressDescriptors(struct GTMAddressDescriptor #pragma mark Public functions -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 -// Before 10.5, we have to do this ourselves. 10.5 adds -// +[NSThread callStackReturnAddresses]. - -// Structure representing a small portion of a stack, starting from the saved -// frame pointer, and continuing through the saved program counter. -struct GTMStackFrame { - void *saved_fp; -#if defined (__ppc__) || defined(__ppc64__) - void *padding; -#endif - void *saved_pc; -}; - -// __builtin_frame_address(0) is a gcc builtin that returns a pointer to the -// current frame pointer. We then use the frame pointer to walk the stack -// picking off program counters and other saved frame pointers. This works -// great on i386, but PPC requires a little more work because the PC (or link -// register) isn't always stored on the stack. -// -NSUInteger GTMGetStackProgramCounters(void *outPcs[], NSUInteger count) { - if (!outPcs || (count < 1)) return 0; - - struct GTMStackFrame *fp; -#if defined (__ppc__) || defined(__ppc64__) - outPcs[0] = __builtin_return_address(0); - fp = (struct GTMStackFrame *)__builtin_frame_address(1); -#elif defined (__i386__) || defined(__x86_64__) - fp = (struct GTMStackFrame *)__builtin_frame_address(0); -#else -#error architecture not supported -#endif - - NSUInteger level = 0; - while (level < count) { - if (fp == NULL) { - level--; - break; - } - outPcs[level] = fp->saved_pc; - level++; - fp = (struct GTMStackFrame *)fp->saved_fp; - } - - return level; -} -#endif // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - NSUInteger GTMGetStackAddressDescriptors(struct GTMAddressDescriptor outDescs[], NSUInteger count) { if (count < 1 || !outDescs) return 0; NSUInteger result = 0; - -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - // Before 10.5, we collect the stack ourselves. - - void **pcs = calloc(count, sizeof(void*)); - if (!pcs) return 0; - - NSUInteger newSize = GTMGetStackProgramCounters(pcs, count); - - result = GTMGetStackAddressDescriptorsForAddresses(pcs, outDescs, newSize); - free(pcs); - -#else // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - // Use +[NSThread callStackReturnAddresses] - NSArray *addresses = [NSThread callStackReturnAddresses]; NSUInteger addrCount = [addresses count]; if (addrCount) { @@ -288,7 +226,6 @@ NSUInteger GTMGetStackAddressDescriptors(struct GTMAddressDescriptor outDescs[], } free(pcs); } -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 return result; } @@ -296,27 +233,6 @@ NSUInteger GTMGetStackAddressDescriptors(struct GTMAddressDescriptor outDescs[], NSString *GTMStackTrace(void) { // If we don't have enough frames, return an empty string NSString *result = @""; - -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - // Before 10.5, we collect the stack ourselves. - - // The maximum number of stack frames that we will walk. We limit this so - // that super-duper recursive functions (or bugs) don't send us for an - // infinite loop. - struct GTMAddressDescriptor descs[100]; - size_t depth = sizeof(descs) / sizeof(struct GTMAddressDescriptor); - depth = GTMGetStackAddressDescriptors(descs, depth); - - // Start at the second item so that GTMStackTrace and it's utility calls (of - // which there is currently 1) is not included in the output. - const size_t kTracesToStrip = 2; - if (depth > kTracesToStrip) { - result = GTMStackTraceFromAddressDescriptors(&descs[kTracesToStrip], - (depth - kTracesToStrip)); - } -#else // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - // Use +[NSThread callStackReturnAddresses] - NSArray *addresses = [NSThread callStackReturnAddresses]; NSUInteger count = [addresses count]; if (count) { @@ -344,14 +260,10 @@ NSString *GTMStackTrace(void) { free(pcs); free(descs); } -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 return result; } -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 || \ - (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && \ - (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_2_0)) NSString *GTMStackTraceFromException(NSException *e) { NSString *trace = @""; @@ -382,5 +294,3 @@ NSString *GTMStackTraceFromException(NSException *e) { return trace; } -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - //__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_2_0 diff --git a/Foundation/GTMStackTraceTest.m b/Foundation/GTMStackTraceTest.m index a581c76..7b1c038 100644 --- a/Foundation/GTMStackTraceTest.m +++ b/Foundation/GTMStackTraceTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -36,27 +36,27 @@ NSString *stacktrace = GTMStackTrace(); NSArray *stacklines = [stacktrace componentsSeparatedByString:@"\n"]; - STAssertGreaterThan([stacklines count], (NSUInteger)3, - @"stack trace must have > 3 lines"); - STAssertLessThan([stacklines count], (NSUInteger)35, - @"stack trace must have < 35 lines"); - + XCTAssertGreaterThan([stacklines count], (NSUInteger)3, + @"stack trace must have > 3 lines"); + XCTAssertLessThan([stacklines count], (NSUInteger)35, + @"stack trace must have < 35 lines"); + NSString *firstFrame = [stacklines objectAtIndex:0]; NSRange range = [firstFrame rangeOfString:@"testStackTraceBasic"]; - STAssertNotEquals(range.location, (NSUInteger)NSNotFound, + XCTAssertNotEqual(range.location, (NSUInteger)NSNotFound, @"First frame should contain testStackTraceBasic," " stack trace: %@", stacktrace); range = [firstFrame rangeOfString:@"#0"]; - STAssertNotEquals(range.location, (NSUInteger)NSNotFound, - @"First frame should contain #0, stack trace: %@", + XCTAssertNotEqual(range.location, (NSUInteger)NSNotFound, + @"First frame should contain #0, stack trace: %@", stacktrace); - + range = [firstFrame rangeOfString:@"-"]; - STAssertNotEquals(range.location, (NSUInteger)NSNotFound, + XCTAssertNotEqual(range.location, (NSUInteger)NSNotFound, @"First frame should contain - since it's " @"an instance method: %@", stacktrace); - STAssertTrue([[self class] classMethodTest], @"First frame should contain" - @"+ since it's a class method"); + XCTAssertTrue([[self class] classMethodTest], @"First frame should contain" + @"+ since it's a class method"); } -(void)testGetStackAddressDescriptors { @@ -64,28 +64,26 @@ size_t depth = sizeof(descs) / sizeof(struct GTMAddressDescriptor); depth = GTMGetStackAddressDescriptors(descs, depth); // Got atleast 4... - STAssertGreaterThan(depth, (size_t)4, nil); + XCTAssertGreaterThan(depth, (size_t)4); // All that we got have symbols for (NSUInteger lp = 0 ; lp < depth ; ++lp) { - STAssertNotNULL(descs[lp].symbol, @"didn't get a symbol at depth %lu", - (unsigned long)lp); + XCTAssertNotNULL(descs[lp].symbol, @"didn't get a symbol at depth %lu", + (unsigned long)lp); } - + // Do it again, but don't give it enough space (to make sure it handles that) size_t fullDepth = depth; - STAssertGreaterThan(fullDepth, (size_t)4, nil); + XCTAssertGreaterThan(fullDepth, (size_t)4); depth -= 2; depth = GTMGetStackAddressDescriptors(descs, depth); - STAssertLessThan(depth, fullDepth, nil); + XCTAssertLessThan(depth, fullDepth); // All that we got have symbols for (NSUInteger lp = 0 ; lp < depth ; ++lp) { - STAssertNotNULL(descs[lp].symbol, @"didn't get a symbol at depth %lu", - (unsigned long)lp); + XCTAssertNotNULL(descs[lp].symbol, @"didn't get a symbol at depth %lu", + (unsigned long)lp); } - -} -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 +} - (void)helperThatThrows { [NSException raise:@"TestException" format:@"TestExceptionDescription"]; @@ -99,67 +97,25 @@ @catch (NSException * e) { exception = e; } - STAssertNotNil(exception, nil); + XCTAssertNotNil(exception); NSString *stacktrace = GTMStackTraceFromException(exception); NSArray *stacklines = [stacktrace componentsSeparatedByString:@"\n"]; - - STAssertGreaterThan([stacklines count], (NSUInteger)4, - @"stack trace must have > 4 lines"); - STAssertLessThan([stacklines count], (NSUInteger)35, - @"stack trace must have < 35 lines"); - STAssertEquals([stacklines count], + + XCTAssertGreaterThan([stacklines count], (NSUInteger)4, + @"stack trace must have > 4 lines\n%@", stacktrace); + XCTAssertLessThan([stacklines count], (NSUInteger)40, + @"stack trace must have < 40 lines\n%@", stacktrace); + XCTAssertEqual([stacklines count], [[exception callStackReturnAddresses] count], @"stack trace should have the same number of lines as the " @" array of return addresses. stack trace: %@", stacktrace); - + // we can't look for it on a specific frame because NSException doesn't // really document how deep the stack will be NSRange range = [stacktrace rangeOfString:@"testStackExceptionTrace"]; - STAssertNotEquals(range.location, (NSUInteger)NSNotFound, + XCTAssertNotEqual(range.location, (NSUInteger)NSNotFound, @"Stack trace should contain testStackExceptionTrace," " stack trace: %@", stacktrace); } -#endif - -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - -- (void)testProgramCountersBasic { - void *pcs[10]; - NSUInteger depth = 10; - depth = GTMGetStackProgramCounters(pcs, depth); - - STAssertGreaterThan(depth, (NSUInteger)3, @"stack trace must have > 3 lines"); - STAssertLessThanOrEqual(depth, (NSUInteger)10, - @"stack trace must have < 10 lines"); - - // pcs is an array of program counters from the stack. pcs[0] should match - // the call into GTMGetStackProgramCounters, which is tough for us to check. - // However, we can verify that pcs[1] is equal to our current return address - // for our current function. - void *current_pc = __builtin_return_address(0); - STAssertEquals(pcs[1], current_pc, @"pcs[1] should equal the current PC"); -} - -- (void)testProgramCountersMore { - void *pcs0[0]; - NSUInteger depth0 = 0; - depth0 = GTMGetStackProgramCounters(pcs0, depth0); - STAssertEquals(depth0, (NSUInteger)0, @"stack trace must have 0 lines"); - - void *pcs1[1]; - NSUInteger depth1 = 1; - depth1 = GTMGetStackProgramCounters(pcs1, depth1); - STAssertEquals(depth1, (NSUInteger)1, @"stack trace must have 1 lines"); - - void *pcs2[2]; - NSUInteger depth2 = 2; - depth2 = GTMGetStackProgramCounters(pcs2, depth2); - STAssertEquals(depth2, (NSUInteger)2, @"stack trace must have 2 lines"); - void *current_pc = __builtin_return_address(0); - STAssertEquals(pcs2[1], current_pc, @"pcs[1] should equal the current PC"); -} - -#endif // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - @end diff --git a/Foundation/GTMStringEncoding.h b/Foundation/GTMStringEncoding.h index b74f2d9..24fa0bc 100644 --- a/Foundation/GTMStringEncoding.h +++ b/Foundation/GTMStringEncoding.h @@ -78,11 +78,35 @@ - (void)setPaddingChar:(char)c; // Encode a raw binary buffer to a 7-bit ASCII string. -- (NSString *)encode:(NSData *)data; -- (NSString *)encodeString:(NSString *)string; +- (NSString *)encode:(NSData *)data __attribute__((deprecated("Use encode:error:"))); +- (NSString *)encodeString:(NSString *)string __attribute__((deprecated("Use encodeString:error:"))); + +- (NSString *)encode:(NSData *)data error:(NSError **)error; +- (NSString *)encodeString:(NSString *)string error:(NSError **)error; // Decode a 7-bit ASCII string to a raw binary buffer. -- (NSData *)decode:(NSString *)string; -- (NSString *)stringByDecoding:(NSString *)string; +- (NSData *)decode:(NSString *)string __attribute__((deprecated("Use decode:error:"))); +- (NSString *)stringByDecoding:(NSString *)string __attribute__((deprecated("Use stringByDecoding:error:"))); + +- (NSData *)decode:(NSString *)string error:(NSError **)error; +- (NSString *)stringByDecoding:(NSString *)string error:(NSError **)error; @end + +FOUNDATION_EXPORT NSString *const GTMStringEncodingErrorDomain; +FOUNDATION_EXPORT NSString *const GTMStringEncodingBadCharacterIndexKey; // NSNumber + +typedef NS_ENUM(NSInteger, GTMStringEncodingError) { + // Unable to convert a buffer to NSASCIIStringEncoding. + GTMStringEncodingErrorUnableToConverToAscii = 1024, + // Unable to convert a buffer to NSUTF8StringEncoding. + GTMStringEncodingErrorUnableToConverToUTF8, + // Encountered a bad character. + // GTMStringEncodingBadCharacterIndexKey will have the index of the character. + GTMStringEncodingErrorUnknownCharacter, + // The data had a padding character in the middle of the data. Padding characters + // can only be at the end. + GTMStringEncodingErrorExpectedPadding, + // There is unexpected data at the end of the data that could not be decoded. + GTMStringEncodingErrorIncompleteTrailingData, +}; diff --git a/Foundation/GTMStringEncoding.m b/Foundation/GTMStringEncoding.m index 1cd6352..7578e86 100644 --- a/Foundation/GTMStringEncoding.m +++ b/Foundation/GTMStringEncoding.m @@ -18,6 +18,9 @@ #import "GTMStringEncoding.h" +NSString *const GTMStringEncodingErrorDomain = @"com.google.GTMStringEncodingErrorDomain"; +NSString *const GTMStringEncodingBadCharacterIndexKey = @"GTMStringEncodingBadCharacterIndexKey"; + enum { kUnknownChar = -1, kPaddingChar = -2, @@ -174,9 +177,12 @@ GTM_INLINE int lcm(int a, int b) { } - (NSString *)encode:(NSData *)inData { + return [self encode:inData error:NULL]; +} + +- (NSString *)encode:(NSData *)inData error:(NSError **)error { NSUInteger inLen = [inData length]; if (inLen <= 0) { - _GTMDevLog(@"Empty input"); return @""; } unsigned char *inBuf = (unsigned char *)[inData bytes]; @@ -214,21 +220,52 @@ GTM_INLINE int lcm(int a, int b) { outBuf[outPos++] = paddingChar_; } - _GTMDevAssert(outPos == outLen, @"Underflowed output buffer"); [outData setLength:outPos]; - return [[[NSString alloc] initWithData:outData - encoding:NSASCIIStringEncoding] autorelease]; + NSString *value = [[[NSString alloc] initWithData:outData + encoding:NSASCIIStringEncoding] autorelease]; + if (!value) { + if (error) { + *error = [NSError errorWithDomain:GTMStringEncodingErrorDomain + code:GTMStringEncodingErrorUnableToConverToAscii + userInfo:nil]; + + } + } + return value; } - (NSString *)encodeString:(NSString *)inString { - return [self encode:[inString dataUsingEncoding:NSUTF8StringEncoding]]; + return [self encodeString:inString error:NULL]; +} + +- (NSString *)encodeString:(NSString *)inString error:(NSError **)error { + NSData *data = [inString dataUsingEncoding:NSUTF8StringEncoding]; + if (!data) { + if (error) { + *error = [NSError errorWithDomain:GTMStringEncodingErrorDomain + code:GTMStringEncodingErrorUnableToConverToUTF8 + userInfo:nil]; + + } + return nil; + } + return [self encode:data error:error]; } - (NSData *)decode:(NSString *)inString { + return [self decode:inString error:NULL]; +} + +- (NSData *)decode:(NSString *)inString error:(NSError **)error { char *inBuf = (char *)[inString cStringUsingEncoding:NSASCIIStringEncoding]; if (!inBuf) { - _GTMDevLog(@"unable to convert buffer to ASCII"); + if (error) { + *error = [NSError errorWithDomain:GTMStringEncodingErrorDomain + code:GTMStringEncodingErrorUnableToConverToAscii + userInfo:nil]; + + } return nil; } NSUInteger inLen = strlen(inBuf); @@ -249,12 +286,27 @@ GTM_INLINE int lcm(int a, int b) { case kPaddingChar: expectPad = YES; break; - case kUnknownChar: - _GTMDevLog(@"Unexpected data in input pos %lu", (unsigned long)i); + case kUnknownChar: { + if (error) { + NSDictionary *userInfo = + [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInteger:i] + forKey:GTMStringEncodingBadCharacterIndexKey]; + *error = [NSError errorWithDomain:GTMStringEncodingErrorDomain + code:GTMStringEncodingErrorUnknownCharacter + userInfo:userInfo]; + } return nil; + } default: if (expectPad) { - _GTMDevLog(@"Expected further padding characters"); + if (error) { + NSDictionary *userInfo = + [NSDictionary dictionaryWithObject:[NSNumber numberWithUnsignedInteger:i] + forKey:GTMStringEncodingBadCharacterIndexKey]; + *error = [NSError errorWithDomain:GTMStringEncodingErrorDomain + code:GTMStringEncodingErrorExpectedPadding + userInfo:userInfo]; + } return nil; } buffer <<= shift_; @@ -269,21 +321,33 @@ GTM_INLINE int lcm(int a, int b) { } if (bitsLeft && buffer & ((1 << bitsLeft) - 1)) { - _GTMDevLog(@"Incomplete trailing data"); + if (error) { + *error = [NSError errorWithDomain:GTMStringEncodingErrorDomain + code:GTMStringEncodingErrorIncompleteTrailingData + userInfo:nil]; + + } return nil; } // Shorten buffer if needed due to padding chars - _GTMDevAssert(outPos <= outLen, @"Overflowed buffer"); [outData setLength:outPos]; return outData; } - (NSString *)stringByDecoding:(NSString *)inString { - NSData *ret = [self decode:inString]; - return [[[NSString alloc] initWithData:ret - encoding:NSUTF8StringEncoding] autorelease]; + return [self stringByDecoding:inString error:NULL]; +} + +- (NSString *)stringByDecoding:(NSString *)inString error:(NSError **)error { + NSData *ret = [self decode:inString error:error]; + NSString *value = nil; + if (ret) { + value = [[[NSString alloc] initWithData:ret + encoding:NSUTF8StringEncoding] autorelease]; + } + return value; } @end diff --git a/Foundation/GTMStringEncodingTest.m b/Foundation/GTMStringEncodingTest.m index e2cada7..2e843d6 100644 --- a/Foundation/GTMStringEncodingTest.m +++ b/Foundation/GTMStringEncodingTest.m @@ -18,7 +18,6 @@ #import "GTMSenTestCase.h" #import "GTMStringEncoding.h" -#import "GTMUnitTestDevLog.h" @interface GTMStringEncodingTest : GTMTestCase @end @@ -29,22 +28,31 @@ - (void)testEmptyInputs { GTMStringEncoding *coder = [GTMStringEncoding stringEncodingWithString:@"01"]; - [GTMUnitTestDevLog expectString:@"Empty input"]; - STAssertEqualStrings([coder encode:[NSData data]], @"", nil); - [GTMUnitTestDevLog expectString:@"Empty input"]; - STAssertEqualObjects([coder encodeString:@""], @"", nil); - STAssertEqualObjects([coder decode:@""], [NSData data], nil); - STAssertEqualStrings([coder stringByDecoding:@""], @"", nil); + NSError *error = nil; + XCTAssertEqualStrings([coder encode:[NSData data] error:&error], @""); + XCTAssertNil(error); + error = nil; + XCTAssertEqualObjects([coder encodeString:@"" error:&error], @""); + XCTAssertNil(error); + error = nil; + XCTAssertEqualObjects([coder decode:@"" error:&error], [NSData data]); + XCTAssertNil(error); + error = nil; + XCTAssertEqualStrings([coder stringByDecoding:@"" error:&error], @""); + XCTAssertNil(error); } // Invalid inputs should result in nil outputs. - (void)testInvalidInputs { GTMStringEncoding *coder = [GTMStringEncoding stringEncodingWithString:@"01"]; - - [GTMUnitTestDevLog expectString:@"unable to convert buffer to ASCII"]; - STAssertNil([coder decode:nil], nil); - [GTMUnitTestDevLog expectString:@"Unexpected data in input pos 0"]; - STAssertNil([coder decode:@"banana"], nil); + NSError *error = nil; + + XCTAssertNil([coder decode:nil error:&error]); + XCTAssertEqual([error code], GTMStringEncodingErrorUnableToConverToAscii); + XCTAssertNil([coder decode:@"banana" error:&error]); + XCTAssertEqual([error code], GTMStringEncodingErrorUnknownCharacter); + XCTAssertEqualObjects([[error userInfo] objectForKey:GTMStringEncodingBadCharacterIndexKey], + [NSNumber numberWithUnsignedInteger:0]); } // Ignored inputs should be silently ignored. @@ -54,27 +62,42 @@ char aa = 0xaa; NSData *aaData = [NSData dataWithBytes:&aa length:sizeof(aa)]; - STAssertEqualObjects([coder decode:@"10101010"], aaData, nil); + NSError *error = nil; + XCTAssertEqualObjects([coder decode:@"10101010" error:&error], aaData); + XCTAssertNil(error); + error = nil; // Inputs with ignored characters - STAssertEqualObjects([coder decode:@"1010 1010"], aaData, nil); - STAssertEqualObjects([coder decode:@"1010-1010"], aaData, nil); - STAssertEqualObjects([coder decode:@"1010\n1010"], aaData, nil); + XCTAssertEqualObjects([coder decode:@"1010 1010" error:&error], aaData); + XCTAssertNil(error); + error = nil; + XCTAssertEqualObjects([coder decode:@"1010-1010" error:&error], aaData); + XCTAssertNil(error); + error = nil; + XCTAssertEqualObjects([coder decode:@"1010\n1010" error:&error], aaData); + XCTAssertNil(error); + error = nil; // Invalid inputs - [GTMUnitTestDevLog expectString:@"Unexpected data in input pos 4"]; - STAssertNil([coder decode:@"1010+1010"], nil); + XCTAssertNil([coder decode:@"1010+1010" error:&error]); + XCTAssertEqual([error code], GTMStringEncodingErrorUnknownCharacter); + XCTAssertEqualObjects([[error userInfo] objectForKey:GTMStringEncodingBadCharacterIndexKey], + [NSNumber numberWithUnsignedInteger:4]); } #define ASSERT_ENCODE_DECODE_STRING(coder, decoded, encoded) do { \ - STAssertEqualStrings([coder encodeString:decoded], encoded, nil); \ - STAssertEqualStrings([coder stringByDecoding:encoded], decoded, nil); \ + XCTAssertEqualStrings([coder encodeString:decoded error:&error], encoded); \ + XCTAssertNil(error); \ + error = nil; \ + XCTAssertEqualStrings([coder stringByDecoding:encoded error:&error], decoded); \ + XCTAssertNil(error); \ + error = nil; \ } while (0) - (void)testBinary { GTMStringEncoding *coder = [GTMStringEncoding binaryStringEncoding]; + NSError *error = nil; - [GTMUnitTestDevLog expectString:@"Empty input"]; ASSERT_ENCODE_DECODE_STRING(coder, @"", @""); ASSERT_ENCODE_DECODE_STRING(coder, @"f", @"01100110"); ASSERT_ENCODE_DECODE_STRING(coder, @"fo", @"0110011001101111"); @@ -122,15 +145,18 @@ NSData *allValuesData = [NSData dataWithBytes:&allValuesBytes length:sizeof(allValuesBytes)]; - STAssertEqualObjects([coder decode:allValues], allValuesData, nil); - STAssertEqualStrings([coder encode:allValuesData], allValues, nil); + XCTAssertEqualObjects([coder decode:allValues error:&error], allValuesData); + XCTAssertNil(error); + error = nil; + XCTAssertEqualStrings([coder encode:allValuesData error:&error], allValues); + XCTAssertNil(error); } - (void)testBase64 { // RFC4648 test vectors GTMStringEncoding *coder = [GTMStringEncoding rfc4648Base64StringEncoding]; + NSError *error = nil; - [GTMUnitTestDevLog expectString:@"Empty input"]; ASSERT_ENCODE_DECODE_STRING(coder, @"", @""); ASSERT_ENCODE_DECODE_STRING(coder, @"f", @"Zg=="); ASSERT_ENCODE_DECODE_STRING(coder, @"fo", @"Zm8="); @@ -153,8 +179,11 @@ NSData *allValuesData = [NSData dataWithBytes:&allValuesBytes length:sizeof(allValuesBytes)]; - STAssertEqualObjects([coder decode:allValues], allValuesData, nil); - STAssertEqualStrings([coder encode:allValuesData], allValues, nil); + XCTAssertEqualObjects([coder decode:allValues error:&error], allValuesData); + XCTAssertNil(error); + error = nil; + XCTAssertEqualStrings([coder encode:allValuesData error:&error], allValues); + XCTAssertNil(error); } - (void)testBase64Websafe { @@ -162,7 +191,7 @@ GTMStringEncoding *coder = [GTMStringEncoding rfc4648Base64WebsafeStringEncoding]; - [GTMUnitTestDevLog expectString:@"Empty input"]; + NSError *error = nil; ASSERT_ENCODE_DECODE_STRING(coder, @"", @""); ASSERT_ENCODE_DECODE_STRING(coder, @"f", @"Zg=="); ASSERT_ENCODE_DECODE_STRING(coder, @"fo", @"Zm8="); @@ -185,15 +214,18 @@ NSData *allValuesData = [NSData dataWithBytes:&allValuesBytes length:sizeof(allValuesBytes)]; - STAssertEqualObjects([coder decode:allValues], allValuesData, nil); - STAssertEqualStrings([coder encode:allValuesData], allValues, nil); + XCTAssertEqualObjects([coder decode:allValues error:&error], allValuesData); + XCTAssertNil(error); + error = nil; + XCTAssertEqualStrings([coder encode:allValuesData error:&error], allValues); + XCTAssertNil(error); } - (void)testBase32 { // RFC4648 test vectors GTMStringEncoding *coder = [GTMStringEncoding rfc4648Base32StringEncoding]; - [GTMUnitTestDevLog expectString:@"Empty input"]; + NSError *error = nil; ASSERT_ENCODE_DECODE_STRING(coder, @"", @""); ASSERT_ENCODE_DECODE_STRING(coder, @"f", @"MY======"); ASSERT_ENCODE_DECODE_STRING(coder, @"fo", @"MZXQ===="); @@ -217,15 +249,18 @@ NSData *allValuesData = [NSData dataWithBytes:&allValuesBytes length:sizeof(allValuesBytes)]; - STAssertEqualObjects([coder decode:allValues], allValuesData, nil); - STAssertEqualStrings([coder encode:allValuesData], allValues, nil); + XCTAssertEqualObjects([coder decode:allValues error:&error], allValuesData); + XCTAssertNil(error); + error = nil; + XCTAssertEqualStrings([coder encode:allValuesData error:&error], allValues); + XCTAssertNil(error); } - (void)testBase32Hex { // RFC4648 test vectors GTMStringEncoding *coder = [GTMStringEncoding rfc4648Base32HexStringEncoding]; - [GTMUnitTestDevLog expectString:@"Empty input"]; + NSError *error = nil; ASSERT_ENCODE_DECODE_STRING(coder, @"", @""); ASSERT_ENCODE_DECODE_STRING(coder, @"f", @"CO======"); ASSERT_ENCODE_DECODE_STRING(coder, @"fo", @"CPNG===="); @@ -249,15 +284,18 @@ NSData *allValuesData = [NSData dataWithBytes:&allValuesBytes length:sizeof(allValuesBytes)]; - STAssertEqualObjects([coder decode:allValues], allValuesData, nil); - STAssertEqualStrings([coder encode:allValuesData], allValues, nil); + XCTAssertEqualObjects([coder decode:allValues error:&error], allValuesData); + XCTAssertNil(error); + error = nil; + XCTAssertEqualStrings([coder encode:allValuesData error:&error], allValues); + XCTAssertNil(error); } - (void)testHex { // RFC4648 test vectors GTMStringEncoding *coder = [GTMStringEncoding hexStringEncoding]; - [GTMUnitTestDevLog expectString:@"Empty input"]; + NSError *error = nil; ASSERT_ENCODE_DECODE_STRING(coder, @"", @""); ASSERT_ENCODE_DECODE_STRING(coder, @"f", @"66"); ASSERT_ENCODE_DECODE_STRING(coder, @"fo", @"666F"); @@ -282,28 +320,39 @@ NSData *allValuesData = [NSData dataWithBytes:&allValuesBytes length:sizeof(allValuesBytes)]; - STAssertEqualObjects([coder decode:allValues], allValuesData, nil); - STAssertEqualStrings([coder encode:allValuesData], allValues, nil); + XCTAssertEqualObjects([coder decode:allValues error:&error], allValuesData); + XCTAssertNil(error); + error = nil; + XCTAssertEqualStrings([coder encode:allValuesData error:&error], allValues); + XCTAssertNil(error); + error = nil; // Lower case - STAssertEqualObjects([coder decode:[allValues lowercaseString]], - allValuesData, nil); + XCTAssertEqualObjects([coder decode:[allValues lowercaseString] error:&error], + allValuesData); + XCTAssertNil(error); + error = nil; // Extra tests from GTMNSData+HexTest.m NSString *testString = @"1C2F0032F40123456789ABCDEF"; char testBytes[] = { 0x1c, 0x2f, 0x00, 0x32, 0xf4, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; NSData *testData = [NSData dataWithBytes:testBytes length:sizeof(testBytes)]; - STAssertEqualStrings([coder encode:testData], testString, nil); - STAssertEqualObjects([coder decode:testString], testData, nil); + error = nil; + XCTAssertEqualStrings([coder encode:testData error:&error], testString); + XCTAssertEqualObjects([coder decode:testString error:&error], testData); // Invalid inputs - [GTMUnitTestDevLog expectString:@"Incomplete trailing data"]; - STAssertNil([coder decode:@"1c2f003"], nil); - [GTMUnitTestDevLog expectString:@"Unexpected data in input pos 7"]; - STAssertNil([coder decode:@"1c2f00ft"], nil); - [GTMUnitTestDevLog expectString:@"Unexpected data in input pos 4"]; - STAssertNil([coder decode:@"abcd<C3><A9>f"], nil); + XCTAssertNil([coder decode:@"1c2f003" error:&error]); + XCTAssertEqual([error code], GTMStringEncodingErrorIncompleteTrailingData); + XCTAssertNil([coder decode:@"1c2f00ft" error:&error]); + XCTAssertEqual([error code], GTMStringEncodingErrorUnknownCharacter); + XCTAssertEqualObjects([[error userInfo] objectForKey:GTMStringEncodingBadCharacterIndexKey], + [NSNumber numberWithUnsignedInteger:7]); + XCTAssertNil([coder decode:@"abcd<C3><A9>f" error:&error]); + XCTAssertEqual([error code], GTMStringEncodingErrorUnknownCharacter); + XCTAssertEqualObjects([[error userInfo] objectForKey:GTMStringEncodingBadCharacterIndexKey], + [NSNumber numberWithUnsignedInteger:4]); } @end diff --git a/Foundation/GTMSystemVersion.m b/Foundation/GTMSystemVersion.m index f3a8559..5738d78 100644 --- a/Foundation/GTMSystemVersion.m +++ b/Foundation/GTMSystemVersion.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -17,7 +17,9 @@ // #import "GTMSystemVersion.h" -#import "GTMObjC2Runtime.h" + +#import <objc/message.h> + #if GTM_MACOS_SDK #import <CoreServices/CoreServices.h> #else @@ -51,29 +53,11 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ require_noerr(Gestalt(gestaltSystemVersionMajor, &sGTMSystemVersionMajor), failedGestalt); require_noerr(Gestalt(gestaltSystemVersionMinor, &sGTMSystemVersionMinor), failedGestalt); require_noerr(Gestalt(gestaltSystemVersionBugFix, &sGTMSystemVersionBugFix), failedGestalt); - + return; failedGestalt: ; -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_3 - // gestaltSystemVersionMajor et al are only on 10.4 and above, so they - // could fail when running on 10.3. - SInt32 binaryCodedDec; - OSStatus err = err = Gestalt(gestaltSystemVersion, &binaryCodedDec); - _GTMDevAssert(!err, @"Unable to get version from Gestalt"); - - // Note that this code will return x.9.9 for any system rev parts that are - // greater than 9 (i.e., 10.10.10 will be 10.9.9). This shouldn't ever be a - // problem as the code above takes care of 10.4+. - SInt32 msb = (binaryCodedDec & 0x0000F000L) >> 12; - msb *= 10; - SInt32 lsb = (binaryCodedDec & 0x00000F00L) >> 8; - sGTMSystemVersionMajor = msb + lsb; - sGTMSystemVersionMinor = (binaryCodedDec & 0x000000F0L) >> 4; - sGTMSystemVersionBugFix = (binaryCodedDec & 0x0000000FL); -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_3 - #else // GTM_MACOS_SDK NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *version = nil; @@ -81,7 +65,7 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ // The intent is for this file to be Foundation level, so don't directly // call out to UIDevice, but try to get it at runtime before falling back // to the plist. The problem with using the plist on the Simulator is that - // the path will be on the host system, and give us a MacOS (10.x.y) + // the path will be on the host system, and give us a MacOS (10.x.y) // version number instead of an iOS version number. Class uideviceClass = NSClassFromString(@"UIDevice"); if (uideviceClass) { @@ -98,10 +82,10 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ NSArray *versionInfo = [version componentsSeparatedByString:@"."]; NSUInteger length = [versionInfo count]; - _GTMDevAssert(length > 1 && length < 4, + _GTMDevAssert(length > 1 && length < 4, @"Unparseable version %@", version); sGTMSystemVersionMajor = [[versionInfo objectAtIndex:0] intValue]; - _GTMDevAssert(sGTMSystemVersionMajor != 0, + _GTMDevAssert(sGTMSystemVersionMajor != 0, @"Unknown version for %@", version); sGTMSystemVersionMinor = [[versionInfo objectAtIndex:1] intValue]; if (length == 3) { @@ -130,7 +114,7 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ // software to want this, and it costs a bit to get at startup. // This will mainly be for unit test cases. if (!sBuild) { - NSDictionary *systemVersionPlist + NSDictionary *systemVersionPlist = [NSDictionary dictionaryWithContentsOfFile:kSystemVersionPlistPath]; sBuild = [[systemVersionPlist objectForKey:@"ProductBuildVersion"] retain]; _GTMDevAssert(sBuild, @"Unable to get build version"); @@ -140,63 +124,51 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ } + (BOOL)isBuildLessThan:(NSString*)build { - NSComparisonResult result - = [[self build] compare:build + NSComparisonResult result + = [[self build] compare:build options:NSNumericSearch | NSCaseInsensitiveSearch]; return result == NSOrderedAscending; } - + + (BOOL)isBuildLessThanOrEqualTo:(NSString*)build { - NSComparisonResult result - = [[self build] compare:build + NSComparisonResult result + = [[self build] compare:build options:NSNumericSearch | NSCaseInsensitiveSearch]; return result != NSOrderedDescending; } + (BOOL)isBuildGreaterThan:(NSString*)build { - NSComparisonResult result - = [[self build] compare:build + NSComparisonResult result + = [[self build] compare:build options:NSNumericSearch | NSCaseInsensitiveSearch]; return result == NSOrderedDescending; } + (BOOL)isBuildGreaterThanOrEqualTo:(NSString*)build { - NSComparisonResult result - = [[self build] compare:build + NSComparisonResult result + = [[self build] compare:build options:NSNumericSearch | NSCaseInsensitiveSearch]; return result != NSOrderedAscending; } + (BOOL)isBuildEqualTo:(NSString *)build { - NSComparisonResult result - = [[self build] compare:build + NSComparisonResult result + = [[self build] compare:build options:NSNumericSearch | NSCaseInsensitiveSearch]; return result == NSOrderedSame; } #if GTM_MACOS_SDK + (BOOL)isPanther { -#if defined(__MAC_10_4) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_4 return NO; -#else - return sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor == 3; -#endif } + (BOOL)isTiger { -#if defined(__MAC_10_5) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_5 return NO; -#else - return sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor == 4; -#endif } + (BOOL)isLeopard { -#if defined(__MAC_10_6) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_6 return NO; -#else - return sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor == 5; -#endif } + (BOOL)isSnowLeopard { @@ -208,39 +180,19 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ } + (BOOL)isPantherOrGreater { -#if defined(__MAC_10_3) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_3 return YES; -#else - return (sGTMSystemVersionMajor > 10) || - (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 3); -#endif } + (BOOL)isTigerOrGreater { -#if defined(__MAC_10_4) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_4 return YES; -#else - return (sGTMSystemVersionMajor > 10) || - (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 4); -#endif } + (BOOL)isLeopardOrGreater { -#if defined(__MAC_10_5) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_5 return YES; -#else - return (sGTMSystemVersionMajor > 10) || - (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 5); -#endif } + (BOOL)isSnowLeopardOrGreater { -#if defined(__MAC_10_6) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_6 return YES; -#else - return (sGTMSystemVersionMajor > 10) || - (sGTMSystemVersionMajor == 10 && sGTMSystemVersionMinor >= 6); -#endif } #endif // GTM_MACOS_SDK @@ -272,9 +224,9 @@ static NSString *const kSystemVersionPlistPath = @"/System/Library/CoreServices/ architecture = kGTMArch_i386; #endif // __LP64__ #endif // !__POWERPC__ - + #endif // GTM_IPHONE_SDK return architecture; -} +} @end diff --git a/Foundation/GTMSystemVersionTest.m b/Foundation/GTMSystemVersionTest.m index 24e6aa5..b881233 100644 --- a/Foundation/GTMSystemVersionTest.m +++ b/Foundation/GTMSystemVersionTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -27,67 +27,67 @@ SInt32 major; SInt32 minor; SInt32 bugFix; - + [GTMSystemVersion getMajor:NULL minor:NULL bugFix:NULL]; [GTMSystemVersion getMajor:&major minor:NULL bugFix:NULL]; [GTMSystemVersion getMajor:NULL minor:&minor bugFix:NULL]; [GTMSystemVersion getMajor:NULL minor:NULL bugFix:&bugFix]; [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix]; #if GTM_IPHONE_SDK - STAssertTrue(major >= 2 && minor >= 0 && bugFix >= 0, nil); + XCTAssertTrue(major >= 2 && minor >= 0 && bugFix >= 0); #else - STAssertTrue(major >= 10 && minor >= 3 && bugFix >= 0, nil); + XCTAssertTrue(major >= 10 && minor >= 3 && bugFix >= 0); BOOL isPanther = (major == 10) && (minor == 3); BOOL isTiger = (major == 10) && (minor == 4); BOOL isLeopard = (major == 10) && (minor == 5); BOOL isSnowLeopard = (major == 10) && (minor == 6); - + BOOL isLater = (major > 10) || ((major == 10) && (minor > 6)); - STAssertEquals([GTMSystemVersion isPanther], isPanther, nil); - STAssertEquals([GTMSystemVersion isPantherOrGreater], - (BOOL)(isPanther || isTiger - || isLeopard || isSnowLeopard || isLater), nil); - STAssertEquals([GTMSystemVersion isTiger], isTiger, nil); - STAssertEquals([GTMSystemVersion isTigerOrGreater], - (BOOL)(isTiger || isLeopard || isSnowLeopard || isLater), nil); - STAssertEquals([GTMSystemVersion isLeopard], isLeopard, nil); - STAssertEquals([GTMSystemVersion isLeopardOrGreater], - (BOOL)(isLeopard || isSnowLeopard || isLater), nil); - STAssertEquals([GTMSystemVersion isSnowLeopard], isSnowLeopard, nil); - STAssertEquals([GTMSystemVersion isSnowLeopardOrGreater], - (BOOL)(isSnowLeopard || isLater), nil); -#endif + XCTAssertEqual([GTMSystemVersion isPanther], isPanther); + XCTAssertEqual([GTMSystemVersion isPantherOrGreater], + (BOOL)(isPanther || isTiger + || isLeopard || isSnowLeopard || isLater)); + XCTAssertEqual([GTMSystemVersion isTiger], isTiger); + XCTAssertEqual([GTMSystemVersion isTigerOrGreater], + (BOOL)(isTiger || isLeopard || isSnowLeopard || isLater)); + XCTAssertEqual([GTMSystemVersion isLeopard], isLeopard); + XCTAssertEqual([GTMSystemVersion isLeopardOrGreater], + (BOOL)(isLeopard || isSnowLeopard || isLater)); + XCTAssertEqual([GTMSystemVersion isSnowLeopard], isSnowLeopard); + XCTAssertEqual([GTMSystemVersion isSnowLeopardOrGreater], + (BOOL)(isSnowLeopard || isLater)); +#endif } - (void)testRuntimeArchitecture { // Not sure how to test this short of recoding it and verifying. // This at least executes the code for me. - STAssertNotNil([GTMSystemVersion runtimeArchitecture], nil); + XCTAssertNotNil([GTMSystemVersion runtimeArchitecture]); } - (void)testBuild { // Not sure how to test this short of coding up a large fragile table. // This at least executes the code for me. NSString *systemVersion = [GTMSystemVersion build]; - STAssertNotEquals([systemVersion length], (NSUInteger)0, nil); - + XCTAssertNotEqual([systemVersion length], (NSUInteger)0); + NSString *smallVersion = @"1A00"; NSString *largeVersion = @"100Z100"; - STAssertTrue([GTMSystemVersion isBuildGreaterThan:smallVersion], nil); - STAssertFalse([GTMSystemVersion isBuildGreaterThan:systemVersion], nil); - STAssertFalse([GTMSystemVersion isBuildGreaterThan:largeVersion], nil); - STAssertTrue([GTMSystemVersion isBuildGreaterThanOrEqualTo:smallVersion], nil); - STAssertTrue([GTMSystemVersion isBuildGreaterThanOrEqualTo:systemVersion], nil); - STAssertFalse([GTMSystemVersion isBuildGreaterThanOrEqualTo:largeVersion], nil); - STAssertFalse([GTMSystemVersion isBuildEqualTo:smallVersion], nil); - STAssertTrue([GTMSystemVersion isBuildEqualTo:systemVersion], nil); - STAssertFalse([GTMSystemVersion isBuildEqualTo:largeVersion], nil); - STAssertFalse([GTMSystemVersion isBuildLessThanOrEqualTo:smallVersion], nil); - STAssertTrue([GTMSystemVersion isBuildLessThanOrEqualTo:systemVersion], nil); - STAssertTrue([GTMSystemVersion isBuildLessThanOrEqualTo:largeVersion], nil); - STAssertFalse([GTMSystemVersion isBuildLessThan:smallVersion], nil); - STAssertFalse([GTMSystemVersion isBuildLessThan:systemVersion], nil); - STAssertTrue([GTMSystemVersion isBuildLessThan:largeVersion], nil); - + XCTAssertTrue([GTMSystemVersion isBuildGreaterThan:smallVersion]); + XCTAssertFalse([GTMSystemVersion isBuildGreaterThan:systemVersion]); + XCTAssertFalse([GTMSystemVersion isBuildGreaterThan:largeVersion]); + XCTAssertTrue([GTMSystemVersion isBuildGreaterThanOrEqualTo:smallVersion]); + XCTAssertTrue([GTMSystemVersion isBuildGreaterThanOrEqualTo:systemVersion]); + XCTAssertFalse([GTMSystemVersion isBuildGreaterThanOrEqualTo:largeVersion]); + XCTAssertFalse([GTMSystemVersion isBuildEqualTo:smallVersion]); + XCTAssertTrue([GTMSystemVersion isBuildEqualTo:systemVersion]); + XCTAssertFalse([GTMSystemVersion isBuildEqualTo:largeVersion]); + XCTAssertFalse([GTMSystemVersion isBuildLessThanOrEqualTo:smallVersion]); + XCTAssertTrue([GTMSystemVersion isBuildLessThanOrEqualTo:systemVersion]); + XCTAssertTrue([GTMSystemVersion isBuildLessThanOrEqualTo:largeVersion]); + XCTAssertFalse([GTMSystemVersion isBuildLessThan:smallVersion]); + XCTAssertFalse([GTMSystemVersion isBuildLessThan:systemVersion]); + XCTAssertTrue([GTMSystemVersion isBuildLessThan:largeVersion]); + } @end diff --git a/Foundation/GTMTransientRootPortProxy.h b/Foundation/GTMTransientRootPortProxy.h deleted file mode 100644 index 5dc0a56..0000000 --- a/Foundation/GTMTransientRootPortProxy.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// GTMTransientRootPortProxy.h -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> -#import "GTMTransientRootProxy.h" - -@interface GTMTransientRootPortProxy : GTMTransientRootProxy { - @private - NSPort *receivePort_; - NSPort *sendPort_; -} - -// Returns an autoreleased instance. See below for details on args. -+ (id)rootProxyWithReceivePort:(NSPort *)receivePort - sendPort:(NSPort *)sendPort - protocol:(Protocol *)protocol - requestTimeout:(NSTimeInterval)requestTimeout - replyTimeout:(NSTimeInterval)replyTimeout; - -// This function will return a GTMTransientRootProxy that is using NSPorts -// for the connection. The |receivePort| and |sendPort| conventions -// follow the same conventions as -[NSConnection initWithReceivePort:sendPort:]. -// Note that due to Radar 6676818 "NSConnection leaks when initialized with nil -// sendPort" that you will leak a connection if you pass in "nil" for your -// sendPort if you are using NSPorts (mach or socket) to communicate between -// threads. The leak occurs on 10.5.6, and SL 10A286. This simple answer -// is just to always use two ports to communicate. Check out the test to see -// how we do cross thread communication. -- (id)initWithReceivePort:(NSPort *)receivePort - sendPort:(NSPort *)sendPort - protocol:(Protocol *)protocol - requestTimeout:(NSTimeInterval)requestTimeout - replyTimeout:(NSTimeInterval)replyTimeout; - -@end diff --git a/Foundation/GTMTransientRootPortProxy.m b/Foundation/GTMTransientRootPortProxy.m deleted file mode 100644 index ee9093a..0000000 --- a/Foundation/GTMTransientRootPortProxy.m +++ /dev/null @@ -1,80 +0,0 @@ -// -// GTMTransientRootPortProxy.m -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMTransientRootPortProxy.h" -#import "GTMObjC2Runtime.h" - -@interface GTMTransientRootPortProxy (ProtectedMethods) -// Returns an NSConnection for NSPorts. This method overrides the one in -// the GTMTransientRootProxy which allows us to create a connection with a -// NSPort. -// -- (NSConnection *)makeConnection; -@end - - -@implementation GTMTransientRootPortProxy - -+ (id)rootProxyWithReceivePort:(NSPort *)receivePort - sendPort:(NSPort *)sendPort - protocol:(Protocol *)protocol - requestTimeout:(NSTimeInterval)requestTimeout - replyTimeout:(NSTimeInterval)replyTimeout { - return [[[self alloc] initWithReceivePort:receivePort - sendPort:sendPort - protocol:protocol - requestTimeout:requestTimeout - replyTimeout:replyTimeout] autorelease]; -} - -- (id)initWithReceivePort:(NSPort *)receivePort - sendPort:(NSPort *)sendPort - protocol:(Protocol *)protocol - requestTimeout:(NSTimeInterval)requestTimeout - replyTimeout:(NSTimeInterval)replyTimeout { - if ((!sendPort && !receivePort) || !protocol) { - [self release]; - return nil; - } - - requestTimeout_ = requestTimeout; - replyTimeout_ = replyTimeout; - - receivePort_ = [receivePort retain]; - sendPort_ = [sendPort retain]; - - protocol_ = protocol; // Protocols can't be retained - return self; -} - -- (void)dealloc { - [receivePort_ release]; - [sendPort_ release]; - [super dealloc]; -} - -@end - -@implementation GTMTransientRootPortProxy (ProtectedMethods) - -- (NSConnection *)makeConnection { - return [NSConnection connectionWithReceivePort:receivePort_ - sendPort:sendPort_]; -} - -@end diff --git a/Foundation/GTMTransientRootPortProxyTest.m b/Foundation/GTMTransientRootPortProxyTest.m deleted file mode 100644 index a85498f..0000000 --- a/Foundation/GTMTransientRootPortProxyTest.m +++ /dev/null @@ -1,182 +0,0 @@ -// -// GTMTransientRootPortProxyTest.m -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMTransientRootPortProxy.h" - -#define kDefaultTimeout 5.0 - -enum { - kGTMTransientThreadConditionStarting = 777, - kGTMTransientThreadConditionStarted, - kGTMTransientThreadConditionQuitting, - kGTMTransientThreadConditionQuitted -}; - -// === Start off declaring some auxillary data structures === - -// The @protocol that we'll use for testing with. -@protocol DOPortTestProtocol -- (oneway void)doOneWayVoid; -- (bycopy NSString *)doReturnStringBycopy; -@end - -// The "server" we'll use to test the DO connection. This server will implement -// our test protocol, and it will run in a separate thread from the main -// unit testing thread, so the DO requests can be serviced. -@interface DOPortTestServer : NSObject <DOPortTestProtocol> { - @private - NSPort *clientSendPort_; - NSPort *clientReceivePort_; -} -- (void)runThread:(NSConditionLock *)lock; -- (NSPort *)clientSendPort; -- (NSPort *)clientReceivePort; -@end - -@implementation DOPortTestServer - -- (void)runThread:(NSConditionLock *)lock { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSDate *future = [NSDate dateWithTimeIntervalSinceNow:kDefaultTimeout]; - if(![lock lockWhenCondition:kGTMTransientThreadConditionStarting - beforeDate:future]) { - _GTMDevLog(@"Unable to acquire lock in runThread! This is BAD!"); - [pool drain]; - [NSThread exit]; - } - - clientSendPort_ = [NSPort port]; - clientReceivePort_ = [NSPort port]; - - NSConnection *conn - = [[NSConnection alloc] initWithReceivePort:clientSendPort_ - sendPort:clientReceivePort_]; - [conn setRootObject:self]; - [lock unlockWithCondition:kGTMTransientThreadConditionStarted]; - while (![lock tryLockWhenCondition:kGTMTransientThreadConditionQuitting]) { - NSDate *runUntil = [NSDate dateWithTimeIntervalSinceNow:0.1]; - [[NSRunLoop currentRunLoop] runUntilDate:runUntil]; - } - [conn setRootObject:nil]; - [clientSendPort_ invalidate]; - [clientReceivePort_ invalidate]; - [conn release]; - [pool drain]; - [lock unlockWithCondition:kGTMTransientThreadConditionQuitted]; -} - -- (NSPort *)clientSendPort { - return clientSendPort_; -} - -- (NSPort *)clientReceivePort { - return clientReceivePort_; -} - -- (oneway void)doOneWayVoid { - // Do nothing -} -- (bycopy NSString *)doReturnStringBycopy { - return @"TestString"; -} - -@end - -// === Done with auxillary data structures, now for the main test class === - -@interface GTMTransientRootPortProxyTest : GTMTestCase { - DOPortTestServer *server_; - NSConditionLock *syncLock_; -} - -@end - -@implementation GTMTransientRootPortProxyTest - -- (void)testTransientRootPortProxy { - syncLock_ = [[[NSConditionLock alloc] - initWithCondition:kGTMTransientThreadConditionStarting] - autorelease]; - - // Setup our server. - server_ = [[[DOPortTestServer alloc] init] autorelease]; - [NSThread detachNewThreadSelector:@selector(runThread:) - toTarget:server_ - withObject:syncLock_]; - NSDate *future = [NSDate dateWithTimeIntervalSinceNow:kDefaultTimeout]; - STAssertTrue([syncLock_ lockWhenCondition:kGTMTransientThreadConditionStarted - beforeDate:future], - @"Unable to start thread"); - [syncLock_ unlockWithCondition:kGTMTransientThreadConditionStarted]; - - NSPort *receivePort = [server_ clientReceivePort]; - NSPort *sendPort = [server_ clientSendPort]; - - GTMTransientRootPortProxy<DOPortTestProtocol> *failProxy = - [GTMTransientRootPortProxy rootProxyWithReceivePort:nil - sendPort:nil - protocol:@protocol(DOPortTestProtocol) - requestTimeout:kDefaultTimeout - replyTimeout:kDefaultTimeout]; - STAssertNil(failProxy, @"should have failed w/o a port"); - failProxy = - [GTMTransientRootPortProxy rootProxyWithReceivePort:receivePort - sendPort:sendPort - protocol:nil - requestTimeout:kDefaultTimeout - replyTimeout:kDefaultTimeout]; - STAssertNil(failProxy, @"should have failed w/o a protocol"); - - GTMTransientRootPortProxy<DOPortTestProtocol> *proxy = - [GTMTransientRootPortProxy rootProxyWithReceivePort:receivePort - sendPort:sendPort - protocol:@protocol(DOPortTestProtocol) - requestTimeout:kDefaultTimeout - replyTimeout:kDefaultTimeout]; - - STAssertEqualObjects([proxy doReturnStringBycopy], - @"TestString", @"proxy should have returned " - @"'TestString'"); - - // Redo the *exact* same test to make sure we can have multiple instances - // in the same app. - proxy = - [GTMTransientRootPortProxy rootProxyWithReceivePort:receivePort - sendPort:sendPort - protocol:@protocol(DOPortTestProtocol) - requestTimeout:kDefaultTimeout - replyTimeout:kDefaultTimeout]; - - STAssertEqualObjects([proxy doReturnStringBycopy], - @"TestString", @"proxy should have returned " - @"'TestString'"); - [syncLock_ tryLockWhenCondition:kGTMTransientThreadConditionStarted]; - [syncLock_ unlockWithCondition:kGTMTransientThreadConditionQuitting]; - - // Wait for the server to shutdown so we clean up nicely. - // The max amount of time we will wait until we abort this test. - NSDate *timeout = [NSDate dateWithTimeIntervalSinceNow:kDefaultTimeout]; - // The server did not shutdown and we want to capture this as an error - STAssertTrue([syncLock_ lockWhenCondition:kGTMTransientThreadConditionQuitted - beforeDate:timeout], - @"The server did not shutdown gracefully before the timeout."); - [syncLock_ unlockWithCondition:kGTMTransientThreadConditionQuitted]; -} - -@end diff --git a/Foundation/GTMTransientRootProxy.h b/Foundation/GTMTransientRootProxy.h deleted file mode 100644 index 3ebb501..0000000 --- a/Foundation/GTMTransientRootProxy.h +++ /dev/null @@ -1,114 +0,0 @@ -// -// GTMTransientRootProxy.h -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Foundation/Foundation.h> -#import "GTMDefines.h" - -// Handle (re-)connecting to a transient root proxy object via DO. -// -// This class is designed to handle connecting and reconnecting to a Distributed -// Objects root proxy (NSDistantObject* instance). It is a replacement for using -// the NSDistantObject returned from NSConnection, directly. When the DO -// connection is up, messages sent to this class are forwarded to the real -// object (the NSDistantObject); when the DO connection is down, messages sent -// to this class are silently swallowed. You can use the -isConnected method on -// this class to see if the DO connection is up or down. -// -// This class may be useful when you need a DO connection, but the -// server you're connected to may be going up and down. For example, the -// web browser plugins in Google Desktop may need to connect to the Google -// Desktop local webserver, but we'd want the browser plugins to be able to -// gracefully handle the local Google Desktop webserver starting and stopping. -// -// === Example Usage === -// -// Old code: -// -// NSDistantObject<MyProto> *o = -// [NSConnection rootProxyForConnectionWithRegisteredName:@"server" -// host:nil]; -// [o setProtocolForProxy:@protocol(MyProto)]; -// [o someMethodInMyProto]; -// // ... write a bunch of code to handle error conditions -// -// New code: -// -// GTMTransientRootProxy<MyProto> *o = -// [GTMTransientRootProxy rootProxyWithRegisteredName:@"server" -// host:nil -// protocol:@protocol(MyProto) -// requestTimeout:5.0 -// replyTimeout:5.0]; -// [o someMethodInMyProto]; -// -// The 'Old code' requires you to handle all the error conditions that may -// arise when using DO (such as the server crashing, or network going down), -// handle properly tearing down the broken connection, and trying to reconnect -// when the server finally comes back online. The 'New code' handles all of -// those details for you. -// -// Also, when creating a GMTransientRootProxy object, you must tell it the -// @protocol that will be used for communication - this is not optional. And -// in order to quiet compiler warnings, you'll also want to staticly type -// the pointer with the protocol as well. -// -@interface GTMTransientRootProxy : NSProxy { - @protected - GTM_WEAK Protocol *protocol_; - NSDistantObject *realProxy_; - - NSString *registeredName_; - NSString *host_; - - NSTimeInterval requestTimeout_; - NSTimeInterval replyTimeout_; -} - -// Returns an autoreleased instance -+ (id)rootProxyWithRegisteredName:(NSString *)name - host:(NSString *)host - protocol:(Protocol *)protocol - requestTimeout:(NSTimeInterval)requestTimeout - replyTimeout:(NSTimeInterval)replyTimeout; - -// This function will return a GTMTransientRootProxy that is using Mach ports -// for the connection. The |name| and |host| arguments will be used to lookup -// the correct information to create the Mach port connection. -// -- (id)initWithRegisteredName:(NSString *)name - host:(NSString *)host - protocol:(Protocol *)protocol - requestTimeout:(NSTimeInterval)requestTimeout - replyTimeout:(NSTimeInterval)replyTimeout; - -// Returns YES if the DO connection is up and working, NO otherwise. -// -- (BOOL)isConnected; - -@end - -// Subclass of GTMTransientRootProxy that catches and ignores ALL exceptions. -// This class overrides GTMTransientRootProxy's -forwardInvocation: -// method, and wraps it in a try/catch block, and ignores all exceptions. -// -@interface GTMRootProxyCatchAll : GTMTransientRootProxy - -// Overridden, and ignores all thrown exceptions. -- (void)forwardInvocation:(NSInvocation *)invocation; - -@end diff --git a/Foundation/GTMTransientRootProxy.m b/Foundation/GTMTransientRootProxy.m deleted file mode 100644 index 2f7dfec..0000000 --- a/Foundation/GTMTransientRootProxy.m +++ /dev/null @@ -1,230 +0,0 @@ -// -// GTMTransientRootProxy.m -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMTransientRootProxy.h" -#import "GTMObjC2Runtime.h" - -// Private methods on NSMethodSignature that we need to call. This method has -// been available since 10.0, but Apple didn't add it to the headers until 10.5 -#if MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 -@interface NSMethodSignature (UndeclaredMethods) -+ (NSMethodSignature *)signatureWithObjCTypes:(const char *)types; -@end -#endif // MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 - -@interface GTMTransientRootProxy (PrivateMethods) -// Returns an NSConnection for NSMacPorts. This method is broken out to allow -// subclasses to override it to generate different types of NSConnections. -- (NSConnection *)makeConnection; - -// Returns the "real" proxy (stored in the realProxy_ ivar) associated with this -// instance. If realProxy_ is nil, then an attempt is made to make a connection -// to create the realProxy_. -// -- (NSDistantObject *)realProxy; - -// "Releases" the realProxy_ ivar, and removes |self| as an observer from -// the NSNotificationCenter. -// -- (void)releaseRealProxy; - -// Notification that a connection has died. -- (void)connectionDidDie:(NSNotification *)notification; -@end - -@implementation GTMTransientRootProxy - -+ (id)rootProxyWithRegisteredName:(NSString *)name - host:(NSString *)host - protocol:(Protocol *)protocol - requestTimeout:(NSTimeInterval)requestTimeout - replyTimeout:(NSTimeInterval)replyTimeout { - return [[[self alloc] initWithRegisteredName:name - host:host - protocol:protocol - requestTimeout:requestTimeout - replyTimeout:replyTimeout] autorelease]; -} - -- (id)initWithRegisteredName:(NSString *)name - host:(NSString *)host - protocol:(Protocol *)protocol - requestTimeout:(NSTimeInterval)requestTimeout - replyTimeout:(NSTimeInterval)replyTimeout { - if (!name || !protocol) { - [self release]; - return nil; - } - - requestTimeout_ = requestTimeout; - replyTimeout_ = replyTimeout; - - registeredName_ = [name copy]; - host_ = [host copy]; - - protocol_ = protocol; // Protocols can't be retained - - return self; -} - -- (id)init { - return [self initWithRegisteredName:nil - host:nil - protocol:nil - requestTimeout:0.0 - replyTimeout:0.0]; -} - -- (void)dealloc { - [self releaseRealProxy]; - [registeredName_ release]; - [host_ release]; - [super dealloc]; -} - -- (BOOL)isConnected { - BOOL result = NO; - @synchronized (self) { - result = [[[self realProxy] connectionForProxy] isValid]; - } - return result; -} - -- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { - struct objc_method_description mdesc; - mdesc = protocol_getMethodDescription(protocol_, selector, YES, YES); - NSMethodSignature *returnValue = nil; - if (mdesc.types == NULL) { - // COV_NF_START - _GTMDevLog(@"Unable to get the protocol method description. Returning " - @"nil."); - // COV_NF_END - } else { - returnValue = [NSMethodSignature signatureWithObjCTypes:mdesc.types]; - } - return returnValue; -} - -- (void)forwardInvocation:(NSInvocation *)invocation { - @try { - NSDistantObject *target = [self realProxy]; - [invocation invokeWithTarget:target]; - - // We need to catch NSException* here rather than "id" because we need to - // treat |ex| as an NSException when using the -name method. Also, we're - // only looking to catch a few types of exception here, all of which are - // NSException types; the rest we just rethrow. - } @catch (NSException *ex) { - NSString *exName = [ex name]; - // If we catch an exception who's name matches any of the following types, - // it's because the DO connection probably went down. So, we'll just - // release our realProxy_, and attempt to reconnect on the next call. - if ([exName isEqualToString:NSPortTimeoutException] - || [exName isEqualToString:NSInvalidSendPortException] - || [exName isEqualToString:NSInvalidReceivePortException] - || [exName isEqualToString:NSFailedAuthenticationException] - || [exName isEqualToString:NSPortSendException] - || [exName isEqualToString:NSPortReceiveException]) { - [self releaseRealProxy]; // COV_NF_LINE - } else { - // If the exception was any other type (commonly - // NSInvalidArgumentException) then we'll just re-throw it to the caller. - @throw; - } - } // COV_NF_LINE -} - -@end - -@implementation GTMTransientRootProxy (PrivateMethods) - -- (NSConnection *)makeConnection { - return [NSConnection connectionWithRegisteredName:registeredName_ host:host_]; -} - -- (NSDistantObject *)realProxy { - NSDistantObject *returnProxy = nil; - - @synchronized (self) { - // No change so no notification - if (realProxy_) return realProxy_; - - NSConnection *conn = [self makeConnection]; - [conn setRequestTimeout:requestTimeout_]; - [conn setReplyTimeout:replyTimeout_]; - @try { - // Try to get the root proxy for this connection's vended object. - realProxy_ = [conn rootProxy]; - } @catch (id ex) { - // We may fail here if we can't get the root proxy in the amount of time - // specified by the timeout above. This may happen, for example, if the - // server process is stopped (via SIGSTOP). We'll just ignore this, and - // try again at the next message. - [conn invalidate]; - return nil; - } - if (!realProxy_) { - [conn invalidate]; - // Again, no change in connection status - return nil; - } - [realProxy_ retain]; - [realProxy_ setProtocolForProxy:protocol_]; - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc addObserver:self - selector:@selector(connectionDidDie:) - name:NSConnectionDidDieNotification - object:conn]; - // Retain/autorelease so it lives at least the duration of this synchronize - returnProxy = [[realProxy_ retain] autorelease]; - } // @synchronized (self) - - return returnProxy; -} - -- (void)connectionDidDie:(NSNotification *)notification { - [self releaseRealProxy]; -} - -- (void)releaseRealProxy { - @synchronized (self) { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - // Only trigger if we had a proxy before - if (realProxy_) { - [realProxy_ release]; - realProxy_ = nil; - } - } -} - -@end - -@implementation GTMRootProxyCatchAll - -- (void)forwardInvocation:(NSInvocation *)invocation { - @try { - [super forwardInvocation:invocation]; - } - @catch (id ex) { - // Log for developers, but basically ignore it. - _GTMDevLog(@"Proxy for invoking %@ has caught and is ignoring exception: %@", - NSStringFromSelector([invocation selector]), ex); - } -} - -@end diff --git a/Foundation/GTMTransientRootProxyTest.m b/Foundation/GTMTransientRootProxyTest.m deleted file mode 100644 index 821faac..0000000 --- a/Foundation/GTMTransientRootProxyTest.m +++ /dev/null @@ -1,231 +0,0 @@ -// -// GMTransientRootProxyTest.m -// -// Copyright 2006-2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMTransientRootProxy.h" -#import "GTMUnitTestDevLog.h" - -#define kDefaultTimeout 5.0 - -// === Start off declaring some auxillary data structures === -static NSString *const kTestServerName = @"gtm_test_server"; -static NSString *const kGTMTransientRootNameKey = @"GTMTransientRootNameKey"; -static NSString *const kGTMTransientRootLockKey = @"GTMTransientRootLockKey"; - -enum { - kGTMTransientThreadConditionStarting = 777, - kGTMTransientThreadConditionStarted, - kGTMTransientThreadConditionQuitting, - kGTMTransientThreadConditionQuitted -}; - -// The @protocol that we'll use for testing with. -@protocol DOTestProtocol -- (oneway void)doOneWayVoid; -- (bycopy NSString *)doReturnStringBycopy; -- (void)throwException; -@end - -// The "server" we'll use to test the DO connection. This server will implement -// our test protocol, and it will run in a separate thread from the main -// unit testing thread, so the DO requests can be serviced. -@interface DOTestServer : NSObject <DOTestProtocol> -- (void)runThread:(NSDictionary *)args; -@end - -@implementation DOTestServer - -- (void)runThread:(NSDictionary *)args { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSConditionLock *lock = [args objectForKey:kGTMTransientRootLockKey]; - NSString *serverName = [args objectForKey:kGTMTransientRootNameKey]; - NSDate *future = [NSDate dateWithTimeIntervalSinceNow:kDefaultTimeout]; - if(![lock lockWhenCondition:kGTMTransientThreadConditionStarting - beforeDate:future]) { - _GTMDevLog(@"Unable to acquire lock in runThread! This is BAD!"); - [pool drain]; - [NSThread exit]; - } - - NSConnection *conn = [[[NSConnection alloc] init] autorelease]; - [conn setRootObject:self]; - if (![conn registerName:serverName]) { - _GTMDevLog(@"Failed to register DO root object with name '%@'", - serverName); - [pool drain]; - [NSThread exit]; - } - [lock unlockWithCondition:kGTMTransientThreadConditionStarted]; - while (![lock tryLockWhenCondition:kGTMTransientThreadConditionQuitting]) { - NSDate* runUntil = [NSDate dateWithTimeIntervalSinceNow:0.1]; - [[NSRunLoop currentRunLoop] runUntilDate:runUntil]; - } - [conn setRootObject:nil]; - [conn registerName:nil]; - [pool drain]; - [lock unlockWithCondition:kGTMTransientThreadConditionQuitted]; -} - -- (oneway void)doOneWayVoid { - // Do nothing -} -- (bycopy NSString *)doReturnStringBycopy { - return @"TestString"; -} - -- (void)throwException { - [NSException raise:@"testingException" format:@"for the unittest"]; -} - -@end - -// === Done with auxillary data structures, now for the main test class === - -@interface GTMTransientRootProxy (GTMTransientRootProxyTest) -- (id)init; -@end - -@interface GTMTransientRootProxyTest : GTMTestCase { - @private - DOTestServer *server_; - NSConditionLock *syncLock_; -} -@end - -@implementation GTMTransientRootProxyTest - -- (void)testTransientRootProxy { - // Setup our server and create a unqiue server name every time we run - NSTimeInterval timeStamp = [[NSDate date] timeIntervalSinceReferenceDate]; - NSString *serverName = - [NSString stringWithFormat:@"%@_%f", kTestServerName, timeStamp]; - server_ = [[[DOTestServer alloc] init] autorelease]; - syncLock_ = [[[NSConditionLock alloc] - initWithCondition:kGTMTransientThreadConditionStarting] - autorelease]; - NSDictionary *args = [NSDictionary dictionaryWithObjectsAndKeys: - syncLock_, kGTMTransientRootLockKey, - serverName, kGTMTransientRootNameKey, - nil]; - [NSThread detachNewThreadSelector:@selector(runThread:) - toTarget:server_ - withObject:args]; - NSDate *future = [NSDate dateWithTimeIntervalSinceNow:kDefaultTimeout]; - STAssertTrue([syncLock_ lockWhenCondition:kGTMTransientThreadConditionStarted - beforeDate:future], - @"Unable to start thread"); - [syncLock_ unlockWithCondition:kGTMTransientThreadConditionStarted]; - - GTMTransientRootProxy *failProxy = - [GTMTransientRootProxy rootProxyWithRegisteredName:nil - host:nil - protocol:@protocol(DOTestProtocol) - requestTimeout:kDefaultTimeout - replyTimeout:kDefaultTimeout]; - STAssertNil(failProxy, @"should have failed w/o a name"); - failProxy = - [GTMTransientRootProxy rootProxyWithRegisteredName:serverName - host:nil - protocol:nil - requestTimeout:kDefaultTimeout - replyTimeout:kDefaultTimeout]; - STAssertNil(failProxy, @"should have failed w/o a protocol"); - failProxy = [[[GTMTransientRootProxy alloc] init] autorelease]; - STAssertNil(failProxy, @"should have failed just calling init"); - - GTMTransientRootProxy<DOTestProtocol> *proxy = - [GTMTransientRootProxy rootProxyWithRegisteredName:serverName - host:nil - protocol:@protocol(DOTestProtocol) - requestTimeout:kDefaultTimeout - replyTimeout:kDefaultTimeout]; - - STAssertEqualObjects([proxy doReturnStringBycopy], @"TestString", - @"proxy should have returned 'TestString'"); - - // Redo the *exact* same test to make sure we can have multiple instances - // in the same app. - proxy = - [GTMTransientRootProxy rootProxyWithRegisteredName:serverName - host:nil - protocol:@protocol(DOTestProtocol) - requestTimeout:kDefaultTimeout - replyTimeout:kDefaultTimeout]; - STAssertEqualObjects([proxy doReturnStringBycopy], - @"TestString", @"proxy should have returned " - @"'TestString'"); - - // Test the GTMRootProxyCatchAll within this test so we don't have to rebuild - // the server again. - - GTMRootProxyCatchAll<DOTestProtocol> *catchProxy = - [GTMRootProxyCatchAll rootProxyWithRegisteredName:serverName - host:nil - protocol:@protocol(DOTestProtocol) - requestTimeout:kDefaultTimeout - replyTimeout:kDefaultTimeout]; - - [GTMUnitTestDevLog expectString:@"Proxy for invoking throwException has " - @"caught and is ignoring exception: [NOTE: this exception originated in " - @"the server.]\nfor the unittest"]; - id e = nil; - @try { - // Has the server throw an exception - [catchProxy throwException]; - } @catch (id ex) { - e = ex; - } - STAssertNil(e, @"The GTMRootProxyCatchAll did not catch the exception: %@.", - e); - - proxy = - [GTMTransientRootProxy rootProxyWithRegisteredName:@"FAKE_SERVER" - host:nil - protocol:@protocol(DOTestProtocol) - requestTimeout:kDefaultTimeout - replyTimeout:kDefaultTimeout]; - STAssertNotNil(proxy, @"proxy shouldn't be nil, even when registered w/ a " - @"fake server"); - STAssertFalse([proxy isConnected], @"the proxy shouldn't be connected due to " - @"the fake server"); - - // Now set up a proxy, and then kill our server. We put a super short time - // out on it, because we are expecting it to fail. - proxy = - [GTMTransientRootProxy rootProxyWithRegisteredName:serverName - host:nil - protocol:@protocol(DOTestProtocol) - requestTimeout:0.01 - replyTimeout:0.01]; - [syncLock_ tryLockWhenCondition:kGTMTransientThreadConditionStarted]; - [syncLock_ unlockWithCondition:kGTMTransientThreadConditionQuitting]; - - // Wait for the server to shutdown so we clean up nicely. - // The max amount of time we will wait until we abort this test. - NSDate *timeout = [NSDate dateWithTimeIntervalSinceNow:kDefaultTimeout]; - // The server did not shutdown and we want to capture this as an error - STAssertTrue([syncLock_ lockWhenCondition:kGTMTransientThreadConditionQuitted - beforeDate:timeout], - @"The server did not shutdown gracefully before the timeout."); - [syncLock_ unlockWithCondition:kGTMTransientThreadConditionQuitted]; - - // This should fail gracefully because the server is dead. - STAssertNil([proxy doReturnStringBycopy], @"proxy should have returned nil"); -} - -@end diff --git a/Foundation/GTMURITemplate.h b/Foundation/GTMURITemplate.h deleted file mode 100644 index d0e9cea..0000000 --- a/Foundation/GTMURITemplate.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (c) 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import <Foundation/Foundation.h> - -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - -// -// URI Template -// -// http://tools.ietf.org/html/draft-gregorio-uritemplate-04 -// -// NOTE: This implemention is only a subset of the spec. It should be able -// to parse any template that matches the spec, but if the template makes use -// of a feature that is not supported, it will fail with an error. -// - -@interface GTMURITemplate : NSObject - -// Process the template. If the template uses an unsupported feature, it will -// throw an exception to help catch that limitation. Currently unsupported -// feature is partial result modifiers (prefix/suffix). -// -// valueProvider should be anything that implements -objectForKey:. At the -// simplest level, this can be an NSDictionary. However, a custom class that -// implements valueForKey may be better for some uses (like if the values -// are coming out of some other structure). -+ (NSString *)expandTemplate:(NSString *)uriTemplate values:(id)valueProvider; - -@end - -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 diff --git a/Foundation/GTMURITemplate.m b/Foundation/GTMURITemplate.m deleted file mode 100644 index 5938b72..0000000 --- a/Foundation/GTMURITemplate.m +++ /dev/null @@ -1,521 +0,0 @@ -/* Copyright (c) 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GTMURITemplate.h" - -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - -// Key constants for handling variables. -static NSString *const kVariable = @"variable"; // NSString -static NSString *const kExplode = @"explode"; // NSString -static NSString *const kPartial = @"partial"; // NSString -static NSString *const kPartialValue = @"partialValue"; // NSNumber - -// Help for passing the Expansion info in one shot. -struct ExpansionInfo { - // Constant for the whole expansion. - unichar expressionOperator; - NSString *joiner; - BOOL allowReservedInEscape; - - // Update for each variable. - NSString *explode; -}; - -// Helper just to shorten the lines when needed. -static NSString *UnescapeString(NSString *str) { - return [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; -} - -static NSString *EscapeString(NSString *str, BOOL allowReserved) { - static CFStringRef kReservedChars = CFSTR(":/?#[]@!$&'()*+,;="); - CFStringRef allowedChars = allowReserved ? kReservedChars : NULL; - - // NSURL's stringByAddingPercentEscapesUsingEncoding: does not escape - // some characters that should be escaped in URL parameters, like / and ?; - // we'll use CFURL to force the encoding of those - // - // Reference: http://www.ietf.org/rfc/rfc3986.txt - static CFStringRef kCharsToForceEscape = CFSTR("!*'();:@&=+$,/?%#[]"); - static CFStringRef kCharsToForceEscapeSansReserved = CFSTR("%"); - CFStringRef forceEscapedChars = - allowReserved ? kCharsToForceEscapeSansReserved : kCharsToForceEscape; - - NSString *resultStr = str; - CFStringRef escapedStr = - CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, - (CFStringRef)str, - allowedChars, - forceEscapedChars, - kCFStringEncodingUTF8); - if (escapedStr) { - resultStr = [(NSString *)escapedStr autorelease]; - } - return resultStr; -} - -@interface GTMURITemplate () -+ (BOOL)parseExpression:(NSString *)expression - expressionOperator:(unichar*)outExpressionOperator - variables:(NSMutableArray **)outVariables - defaultValues:(NSMutableDictionary **)outDefaultValues; - -+ (NSString *)expandVariables:(NSArray *)variables - expressionOperator:(unichar)expressionOperator - values:(id)valueProvider - defaultValues:(NSMutableDictionary *)defaultValues; - -+ (NSString *)expandString:(NSString *)valueStr - variableName:(NSString *)variableName - expansionInfo:(struct ExpansionInfo *)expansionInfo; -+ (NSString *)expandArray:(NSArray *)valueArray - variableName:(NSString *)variableName - expansionInfo:(struct ExpansionInfo *)expansionInfo; -+ (NSString *)expandDictionary:(NSDictionary *)valueDict - variableName:(NSString *)variableName - expansionInfo:(struct ExpansionInfo *)expansionInfo; -@end - -@implementation GTMURITemplate - -#pragma mark Internal Helpers - -+ (BOOL)parseExpression:(NSString *)expression - expressionOperator:(unichar*)outExpressionOperator - variables:(NSMutableArray **)outVariables - defaultValues:(NSMutableDictionary **)outDefaultValues { - - // Please see the spec for full details, but here are the basics: - // - // URI-Template = *( literals / expression ) - // expression = "{" [ operator ] variable-list "}" - // variable-list = varspec *( "," varspec ) - // varspec = varname [ modifier ] [ "=" default ] - // varname = varchar *( varchar / "." ) - // modifier = explode / partial - // explode = ( "*" / "+" ) - // partial = ( substring / remainder ) offset - // - // Examples: - // http://www.example.com/foo{?query,number} - // http://maps.com/mapper{?address*} - // http://directions.org/directions{?from+,to+} - // http://search.org/query{?terms+=none} - // - - // http://tools.ietf.org/html/draft-gregorio-uritemplate-04#section-2.2 - // Operator and op-reserve characters - static NSCharacterSet *operatorSet = nil; - // http://tools.ietf.org/html/draft-gregorio-uritemplate-04#section-2.4.1 - // Explode characters - static NSCharacterSet *explodeSet = nil; - // http://tools.ietf.org/html/draft-gregorio-uritemplate-04#section-2.4.2 - // Partial (prefix/subset) characters - static NSCharacterSet *partialSet = nil; - - @synchronized(self) { - if (operatorSet == nil) { - operatorSet = [[NSCharacterSet characterSetWithCharactersInString:@"+./;?|!@"] retain]; - } - if (explodeSet == nil) { - explodeSet = [[NSCharacterSet characterSetWithCharactersInString:@"*+"] retain]; - } - if (partialSet == nil) { - partialSet = [[NSCharacterSet characterSetWithCharactersInString:@":^"] retain]; - } - } - - // http://tools.ietf.org/html/draft-gregorio-uritemplate-04#section-3.3 - // Empty expression inlines the expression. - if ([expression length] == 0) return NO; - - // Pull off any operator. - *outExpressionOperator = 0; - unichar firstChar = [expression characterAtIndex:0]; - if ([operatorSet characterIsMember:firstChar]) { - *outExpressionOperator = firstChar; - expression = [expression substringFromIndex:1]; - } - - if ([expression length] == 0) return NO; - - // Need to find at least one varspec for the expresssion to be considered - // valid. - BOOL gotAVarspec = NO; - - // Split the variable list. - NSArray *varspecs = [expression componentsSeparatedByString:@","]; - - // Extract the defaults, explodes and modifiers from the varspecs. - *outVariables = [NSMutableArray arrayWithCapacity:[varspecs count]]; - for (NSString *varspec in varspecs) { - NSString *defaultValue = nil; - - if ([varspec length] == 0) continue; - - NSMutableDictionary *varInfo = - [NSMutableDictionary dictionaryWithCapacity:4]; - - // Check for a default (foo=bar). - NSRange range = [varspec rangeOfString:@"="]; - if (range.location != NSNotFound) { - defaultValue = - UnescapeString([varspec substringFromIndex:range.location + 1]); - varspec = [varspec substringToIndex:range.location]; - - if ([varspec length] == 0) continue; - } - - // Check for explode (foo*). - NSUInteger lenLessOne = [varspec length] - 1; - if ([explodeSet characterIsMember:[varspec characterAtIndex:lenLessOne]]) { - [varInfo setObject:[varspec substringFromIndex:lenLessOne] forKey:kExplode]; - varspec = [varspec substringToIndex:lenLessOne]; - if ([varspec length] == 0) continue; - } else { - // Check for partial (prefix/suffix) (foo:12). - range = [varspec rangeOfCharacterFromSet:partialSet]; - if (range.location != NSNotFound) { - NSString *partialMode = [varspec substringWithRange:range]; - NSString *valueStr = [varspec substringFromIndex:range.location + 1]; - // If there wasn't a value for the partial, ignore it. - if ([valueStr length] > 0) { - [varInfo setObject:partialMode forKey:kPartial]; - // TODO: Should validate valueStr is just a number... - [varInfo setObject:[NSNumber numberWithInteger:[valueStr integerValue]] - forKey:kPartialValue]; - } - varspec = [varspec substringToIndex:range.location]; - if ([varspec length] == 0) continue; - } - } - - // Spec allows percent escaping in names, so undo that. - varspec = UnescapeString(varspec); - - // Save off the cleaned up variable name. - [varInfo setObject:varspec forKey:kVariable]; - [*outVariables addObject:varInfo]; - gotAVarspec = YES; - - // Now that the variable has been cleaned up, store its default. - if (defaultValue) { - if (*outDefaultValues == nil) { - *outDefaultValues = [NSMutableDictionary dictionary]; - } - [*outDefaultValues setObject:defaultValue forKey:varspec]; - } - } - // All done. - return gotAVarspec; -} - -+ (NSString *)expandVariables:(NSArray *)variables - expressionOperator:(unichar)expressionOperator - values:(id)valueProvider - defaultValues:(NSMutableDictionary *)defaultValues { - NSString *prefix = nil; - struct ExpansionInfo expansionInfo; - expansionInfo.expressionOperator = expressionOperator; - expansionInfo.joiner = nil; - expansionInfo.allowReservedInEscape = NO; - switch (expressionOperator) { - case 0: - expansionInfo.joiner = @","; - prefix = @""; - break; - case '+': - expansionInfo.joiner = @","; - prefix = @""; - // The reserved character are safe from escaping. - expansionInfo.allowReservedInEscape = YES; - break; - case '.': - expansionInfo.joiner = @"."; - prefix = @"."; - break; - case '/': - expansionInfo.joiner = @"/"; - prefix = @"/"; - break; - case ';': - expansionInfo.joiner = @";"; - prefix = @";"; - break; - case '?': - expansionInfo.joiner = @"&"; - prefix = @"?"; - break; - default: - [NSException raise:@"GTMURITemplateUnsupported" - format:@"Unknown expression operator '%C'", expressionOperator]; - break; - } - - NSMutableArray *results = [NSMutableArray arrayWithCapacity:[variables count]]; - - for (NSDictionary *varInfo in variables) { - NSString *variable = [varInfo objectForKey:kVariable]; - - expansionInfo.explode = [varInfo objectForKey:kExplode]; - // Look up the variable value. - id rawValue = [valueProvider objectForKey:variable]; - - // If the value is an empty array or dictionary, the default is still used. - if (([rawValue isKindOfClass:[NSArray class]] - || [rawValue isKindOfClass:[NSDictionary class]]) - && [rawValue count] == 0) { - rawValue = nil; - } - - // Got nothing? Check defaults. - if (rawValue == nil) { - rawValue = [defaultValues objectForKey:variable]; - } - - // If we didn't get any value, on to the next thing. - if (!rawValue) { - continue; - } - - // Time do to the work... - NSString *result = nil; - if ([rawValue isKindOfClass:[NSString class]]) { - result = [self expandString:rawValue - variableName:variable - expansionInfo:&expansionInfo]; - } else if ([rawValue isKindOfClass:[NSNumber class]]) { - // Turn the number into a string and send it on its way. - result = [self expandString:[rawValue stringValue] - variableName:variable - expansionInfo:&expansionInfo]; - } else if ([rawValue isKindOfClass:[NSArray class]]) { - result = [self expandArray:rawValue - variableName:variable - expansionInfo:&expansionInfo]; - } else if ([rawValue isKindOfClass:[NSDictionary class]]) { - result = [self expandDictionary:rawValue - variableName:variable - expansionInfo:&expansionInfo]; - } else { - [NSException raise:@"GTMURITemplateUnsupported" - format:@"Variable returned unsupported type (%@)", - NSStringFromClass([rawValue class])]; - } - - // Did it generate anything? - if (!result) - continue; - - // Apply partial. - // Defaults should get partial applied? - // ( http://tools.ietf.org/html/draft-gregorio-uritemplate-04#section-2.5 ) - NSString *partial = [varInfo objectForKey:kPartial]; - if ([partial length] > 0) { - [NSException raise:@"GTMURITemplateUnsupported" - format:@"Unsupported partial on expansion %@", partial]; - } - - // Add the result - [results addObject:result]; - } - - // Join and add any needed prefix. - NSString *joinedResults = - [results componentsJoinedByString:expansionInfo.joiner]; - if (([prefix length] > 0) && ([joinedResults length] > 0)) { - return [prefix stringByAppendingString:joinedResults]; - } - return joinedResults; -} - -+ (NSString *)expandString:(NSString *)valueStr - variableName:(NSString *)variableName - expansionInfo:(struct ExpansionInfo *)expansionInfo { - NSString *escapedValue = - EscapeString(valueStr, expansionInfo->allowReservedInEscape); - switch (expansionInfo->expressionOperator) { - case ';': - case '?': - if ([valueStr length] > 0) { - return [NSString stringWithFormat:@"%@=%@", variableName, escapedValue]; - } - return variableName; - default: - return escapedValue; - } -} - -+ (NSString *)expandArray:(NSArray *)valueArray - variableName:(NSString *)variableName - expansionInfo:(struct ExpansionInfo *)expansionInfo { - NSMutableArray *results = [NSMutableArray arrayWithCapacity:[valueArray count]]; - // When joining variable with value, use "var.val" except for 'path' and - // 'form' style expression, use 'var=val' then. - char variableValueJoiner = '.'; - char expressionOperator = expansionInfo->expressionOperator; - if ((expressionOperator == ';') || (expressionOperator == '?')) { - variableValueJoiner = '='; - } - // Loop over the values. - for (NSString *value in valueArray) { - // Escape it. - value = EscapeString(value, expansionInfo->allowReservedInEscape); - // Should variable names be used? - if ([expansionInfo->explode isEqual:@"+"]) { - value = [NSString stringWithFormat:@"%@%c%@", - variableName, variableValueJoiner, value]; - } - [results addObject:value]; - } - if ([results count] > 0) { - // Use the default joiner unless there was no explode request, then a list - // always gets comma seperated. - NSString *joiner = expansionInfo->joiner; - if (expansionInfo->explode == nil) { - joiner = @","; - } - // Join the values. - NSString *joined = [results componentsJoinedByString:joiner]; - // 'form' style without an explode gets the variable name set to the - // joined list of values. - if ((expressionOperator == '?') && (expansionInfo->explode == nil)) { - return [NSString stringWithFormat:@"%@=%@", variableName, joined]; - } - return joined; - } - return nil; -} - -+ (NSString *)expandDictionary:(NSDictionary *)valueDict - variableName:(NSString *)variableName - expansionInfo:(struct ExpansionInfo *)expansionInfo { - NSMutableArray *results = [NSMutableArray arrayWithCapacity:[valueDict count]]; - // When joining variable with value: - // - Default to the joiner... - // - No explode, always comma... - // - For 'path' and 'form' style expression, use 'var=val'. - NSString *keyValueJoiner = expansionInfo->joiner; - char expressionOperator = expansionInfo->expressionOperator; - if (!expansionInfo->explode) { - keyValueJoiner = @","; - } else if ((expressionOperator == ';') || (expressionOperator == '?')) { - keyValueJoiner = @"="; - } - // Loop over the sorted keys. - NSArray *sortedKeys = - [[valueDict allKeys] sortedArrayUsingSelector:@selector(compare:)]; - for (NSString *key in sortedKeys) { - NSString *value = [valueDict objectForKey:key]; - // Escape them. - key = EscapeString(key, expansionInfo->allowReservedInEscape); - value = EscapeString(value, expansionInfo->allowReservedInEscape); - // Should variable names be used? - if ([expansionInfo->explode isEqual:@"+"]) { - key = [NSString stringWithFormat:@"%@.%@", variableName, key]; - } - if ((expressionOperator == '?' || expressionOperator == ';') - && ([value length] == 0)) { - [results addObject:key]; - } else { - NSString *pair = [NSString stringWithFormat:@"%@%@%@", - key, keyValueJoiner, value]; - [results addObject:pair]; - } - } - if ([results count]) { - // Use the default joiner unless there was no explode request, then a list - // always gets comma seperated. - NSString *joiner = expansionInfo->joiner; - if (!expansionInfo->explode) { - joiner = @","; - } - // Join the values. - NSString *joined = [results componentsJoinedByString:joiner]; - // 'form' style without an explode gets the variable name set to the - // joined list of values. - if ((expressionOperator == '?') && (expansionInfo->explode == nil)) { - return [NSString stringWithFormat:@"%@=%@", variableName, joined]; - } - return joined; - } - return nil; -} - -#pragma mark Public API - -+ (NSString *)expandTemplate:(NSString *)uriTemplate values:(id)valueProvider { - NSMutableString *result = - [NSMutableString stringWithCapacity:[uriTemplate length]]; - - NSScanner *scanner = [NSScanner scannerWithString:uriTemplate]; - [scanner setCharactersToBeSkipped:nil]; - - // Defaults have to live through the full evaluation, so if any are encoured - // they are reused throughout the expansion calls. - NSMutableDictionary *defaultValues = nil; - - // Pull out the expressions for processing. - while (![scanner isAtEnd]) { - NSString *skipped = nil; - // Find the next '{'. - if ([scanner scanUpToString:@"{" intoString:&skipped]) { - // Add anything before it to the result. - [result appendString:skipped]; - } - // Advance over the '{'. - [scanner scanString:@"{" intoString:nil]; - // Collect the expression. - NSString *expression = nil; - if ([scanner scanUpToString:@"}" intoString:&expression]) { - // Collect the trailing '}' on the expression. - BOOL hasTrailingBrace = [scanner scanString:@"}" intoString:nil]; - - // Parse the expression. - NSMutableArray *variables = nil; - unichar expressionOperator = 0; - if ([self parseExpression:expression - expressionOperator:&expressionOperator - variables:&variables - defaultValues:&defaultValues]) { - // Do the expansion. - NSString *substitution = [self expandVariables:variables - expressionOperator:expressionOperator - values:valueProvider - defaultValues:defaultValues]; - if (substitution) { - [result appendString:substitution]; - } - } else { - // Failed to parse, add the raw expression to the output. - if (hasTrailingBrace) { - [result appendFormat:@"{%@}", expression]; - } else { - [result appendFormat:@"{%@", expression]; - } - } - } else if (![scanner isAtEnd]) { - // Empty expression ('{}'). Copy over the opening brace and the trailing - // one will be copied by the next cycle of the loop. - [result appendString:@"{"]; - } - } - - return result; -} - -@end - -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 diff --git a/Foundation/GTMURITemplateTest.m b/Foundation/GTMURITemplateTest.m deleted file mode 100644 index ba2c8fb..0000000 --- a/Foundation/GTMURITemplateTest.m +++ /dev/null @@ -1,133 +0,0 @@ -/* Copyright (c) 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#import "GTMURITemplate.h" - -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - -#import "GTMSenTestCase.h" -#import "GTMScriptRunner.h" - -@interface GTMURITemplateTest : GTMTestCase -- (NSDictionary *)loadTestSuitesNamed:(NSString *)testSuitesName; -- (NSDictionary *)parseJSONString:(NSString *)json error:(NSError **)error; -- (void)runTestSuites:(NSDictionary *)testSuites; -@end - -@implementation GTMURITemplateTest - -- (NSDictionary *)parseJSONString:(NSString *)json error:(NSError **)error { - NSDictionary *result = nil; - - // If we ever get a JSON parser in GTM (or the system gets one, next cat?), - // then we can skip this conversion dance. - - NSString *fileName = [NSString stringWithFormat:@"URITemplate_%u.plist", arc4random()]; - NSString *tempOutPath = [NSTemporaryDirectory() stringByAppendingPathComponent:fileName]; - - GTMScriptRunner *runner = [GTMScriptRunner runnerWithPython]; - NSString *command = [NSString stringWithFormat: - @"import Foundation\n" - @"import json\n" - @"str_of_json = \"\"\"%@\"\"\"\n" - @"Foundation.NSDictionary.dictionaryWithDictionary_(json.loads(str_of_json)).writeToFile_atomically_('%@', True)\n", - json, tempOutPath]; - NSString *errStr = nil; - NSString *outStr = [runner run:command standardError:&errStr]; - - STAssertNil(outStr, @"got something on stdout: %@", outStr); - STAssertNil(errStr, @"got something on stderr: %@", errStr); - result = [NSDictionary dictionaryWithContentsOfFile:tempOutPath]; - - [[NSFileManager defaultManager] removeItemAtPath:tempOutPath - error:NULL]; - - return result; -} - -- (NSDictionary *)loadTestSuitesNamed:(NSString *)testSuitesName { - NSBundle *testBundle = [NSBundle bundleForClass:[self class]]; - STAssertNotNil(testBundle, nil); - - NSString *testSuitesPath = [testBundle pathForResource:testSuitesName - ofType:nil]; - STAssertNotNil(testSuitesPath, @"%@ not found", testSuitesName); - - NSError *error = nil; - NSString *testSuitesStr = [NSString stringWithContentsOfFile:testSuitesPath - encoding:NSUTF8StringEncoding - error:&error]; - STAssertNil(error, @"Loading %@, error %@", testSuitesName, error); - STAssertNotNil(testSuitesStr, @"Loading %@", testSuitesName); - - NSDictionary *testSuites = [self parseJSONString:testSuitesStr - error:&error]; - STAssertNil(error, @"Parsing %@, error %@", testSuitesName, error); - STAssertNotNil(testSuites, @"failed to parse"); - - return testSuites; -} - -- (void)runTestSuites:(NSDictionary *)testSuites { - // The file holds a set of named suites... - for (NSString *suiteName in testSuites) { - NSDictionary *suite = [testSuites objectForKey:suiteName]; - // Each suite has variables and test cases... - NSDictionary *vars = [suite objectForKey:@"variables"]; - NSArray *testCases = [suite objectForKey:@"testcases"]; - STAssertTrue([vars count] != 0, @"'%@' no variables?", suiteName); - STAssertTrue([testCases count] != 0, @"'%@' no testcases?", suiteName); - NSUInteger idx = 0; - for (NSArray *testCase in testCases) { - // Each case is an array of the template and value... - STAssertEquals([testCase count], (NSUInteger)2, - @" test index %lu of '%@'", (unsigned long)idx, suiteName); - - NSString *testTemplate = [testCase objectAtIndex:0]; - NSString *expectedResult = [testCase objectAtIndex:1]; - - NSString *result = [GTMURITemplate expandTemplate:testTemplate - values:vars]; - STAssertEqualObjects(result, expectedResult, - @"template was '%@' (index %lu of '%@')", - testTemplate, (unsigned long)idx, suiteName); - ++idx; - } - } -} - -- (void)testRFCSuite { - // All of the examples from the RFC are in the python impl source as json - // test data. A copy is in the GTM tree as GTMURITemplateJSON.txt. The - // original can be found at: - // http://code.google.com/p/uri-templates/source/browse/trunk/testdata.json - NSDictionary *testSuites = [self loadTestSuitesNamed:@"GTMURITemplateRFCTests.json"]; - STAssertNotNil(testSuites, nil); - [self runTestSuites:testSuites]; -} - -- (void)testExtraSuite { - // These are follow up cases not explictly listed in the spec, but does - // as cases to confirm behaviors. The list was sent to the w3c uri list - // for confirmation: - // http://lists.w3.org/Archives/Public/uri/2010Sep/thread.html - NSDictionary *testSuites = [self loadTestSuitesNamed:@"GTMURITemplateExtraTests.json"]; - STAssertNotNil(testSuites, nil); - [self runTestSuites:testSuites]; -} - -@end - -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 diff --git a/Foundation/GTMURLBuilder.h b/Foundation/GTMURLBuilder.h index daa8d88..f333ec4 100644 --- a/Foundation/GTMURLBuilder.h +++ b/Foundation/GTMURLBuilder.h @@ -34,6 +34,10 @@ #import <Foundation/Foundation.h> #import "GTMDefines.h" +#if (!TARGET_OS_IPHONE && defined(MAC_OS_X_VERSION_10_10) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10) \ +|| (TARGET_OS_IPHONE && defined(__IPHONE_8_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0) +__deprecated_msg("GTMURLBuilder is obsolete; update your app to use NSURLComponents queryItems property instead.") +#endif @interface GTMURLBuilder : NSObject { @private NSMutableDictionary *params_; diff --git a/Foundation/GTMURLBuilder.m b/Foundation/GTMURLBuilder.m index 31572e8..4f1a419 100644 --- a/Foundation/GTMURLBuilder.m +++ b/Foundation/GTMURLBuilder.m @@ -27,17 +27,6 @@ @synthesize baseURLString = baseURLString_; -#if (!TARGET_OS_IPHONE && defined(MAC_OS_X_VERSION_10_10) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_10) \ - || (TARGET_OS_IPHONE && defined(__IPHONE_8_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0) -#if DEBUG -+ (void)load { - // Apps targeting iOS 8 and OS X 10.10 and higher should no longer use GTMURLBuilder. - NSLog(@"*** GTMURLBuilder is obsolete; update your app to use NSURLComponents" - @" queryItems property instead."); -} -#endif // DEBUG -#endif // iOS 8+/OS X 10.10+ - + (GTMURLBuilder *)builderWithString:(NSString *)URLString { GTMURLBuilder *URLBuilder = [[[GTMURLBuilder alloc] initWithString:URLString] autorelease]; diff --git a/Foundation/GTMURLBuilderTest.m b/Foundation/GTMURLBuilderTest.m index 4c0f128..0953a9e 100644 --- a/Foundation/GTMURLBuilderTest.m +++ b/Foundation/GTMURLBuilderTest.m @@ -29,34 +29,34 @@ GTMURLBuilder *URLBuilder = [[[GTMURLBuilder alloc] initWithString:@"http://google.com:8080/pathA/pathB?param=val"] autorelease]; - STAssertEqualStrings(@"http://google.com:8080/pathA/pathB?param=val", - [URLBuilder URLString], nil); - STAssertEqualStrings(@"val", [URLBuilder valueForParameter:@"param"], nil); + XCTAssertEqualStrings(@"http://google.com:8080/pathA/pathB?param=val", + [URLBuilder URLString]); + XCTAssertEqualStrings(@"val", [URLBuilder valueForParameter:@"param"]); URLBuilder = [GTMURLBuilder builderWithString: @"http://google.com:8080/pathA/pathB?param=val"]; - STAssertEqualStrings(@"http://google.com:8080/pathA/pathB?param=val", - [URLBuilder URLString], nil); - STAssertEqualStrings(@"val", [URLBuilder valueForParameter:@"param"], nil); + XCTAssertEqualStrings(@"http://google.com:8080/pathA/pathB?param=val", + [URLBuilder URLString]); + XCTAssertEqualStrings(@"val", [URLBuilder valueForParameter:@"param"]); URLBuilder = [GTMURLBuilder builderWithString: @"http://google.com:8080/path%3AA/pathB?param=val"]; - STAssertEqualStrings(@"http://google.com:8080/path%3AA/pathB?param=val", - [URLBuilder URLString], nil); - STAssertEqualStrings(@"val", [URLBuilder valueForParameter:@"param"], nil); + XCTAssertEqualStrings(@"http://google.com:8080/path%3AA/pathB?param=val", + [URLBuilder URLString]); + XCTAssertEqualStrings(@"val", [URLBuilder valueForParameter:@"param"]); URLBuilder = [GTMURLBuilder builderWithString: @"http://google.com:8080/pathA/pathB%2F?param=val"]; - STAssertEqualStrings(@"http://google.com:8080/pathA/pathB%2F?param=val", - [URLBuilder URLString], nil); - STAssertEqualStrings(@"val", [URLBuilder valueForParameter:@"param"], nil); + XCTAssertEqualStrings(@"http://google.com:8080/pathA/pathB%2F?param=val", + [URLBuilder URLString]); + XCTAssertEqualStrings(@"val", [URLBuilder valueForParameter:@"param"]); } - (void)testMailToHandling { GTMURLBuilder *URLBuilder = [GTMURLBuilder builderWithString:@"mailto:ytmapp-ios@google.com"]; [URLBuilder setValue:@"blah" forParameter:@"subject"]; - STAssertEqualStrings(@"mailto:ytmapp-ios@google.com?subject=blah", - [URLBuilder URLString], nil); + XCTAssertEqualStrings(@"mailto:ytmapp-ios@google.com?subject=blah", + [URLBuilder URLString]); } - (void)testIsEqualTo { @@ -66,12 +66,12 @@ [GTMURLBuilder builderWithString:@"http://google.com/pathA/pathB"]; [URLBuilderB setValue:@"d" forParameter:@"c"]; [URLBuilderB setValue:@"b" forParameter:@"a"]; - STAssertTrue([URLBuilderA isEqual:URLBuilderB], nil); + XCTAssertTrue([URLBuilderA isEqual:URLBuilderB]); [URLBuilderB setValue:@"c" forParameter:@"a"]; - STAssertFalse([URLBuilderA isEqual:URLBuilderB], nil); + XCTAssertFalse([URLBuilderA isEqual:URLBuilderB]); [URLBuilderB setValue:@"b" forParameter:@"a"]; [URLBuilderB setValue:@"f" forParameter:@"e"]; - STAssertFalse([URLBuilderA isEqual:URLBuilderB], nil); + XCTAssertFalse([URLBuilderA isEqual:URLBuilderB]); } - (void)testSetParameters { @@ -83,7 +83,7 @@ [NSDictionary dictionaryWithObjectsAndKeys:@"a", @"p1", @"b", @"p2", nil]; [URLBuilderA setParameters:params]; [URLBuilderA setValue:@"x" forParameter:@"p1"]; - STAssertTrue([URLBuilderA isEqual:URLBuilderB], nil); + XCTAssertTrue([URLBuilderA isEqual:URLBuilderB]); } - (void)testReplaceParameters { @@ -95,17 +95,17 @@ [NSDictionary dictionaryWithObjectsAndKeys:@"a", @"p1", @"b", @"p2", nil]; [URLBuilderA setParameters:params]; [URLBuilderA setValue:@"x" forParameter:@"p1"]; - STAssertTrue([URLBuilderA isEqual:URLBuilderB], nil); + XCTAssertTrue([URLBuilderA isEqual:URLBuilderB]); } - (void)testURLPathParsing { GTMURLBuilder *URLBuilder = [GTMURLBuilder builderWithString:@"http://google.com/"]; - STAssertEqualStrings(@"http://google.com/", [URLBuilder URLString], nil); + XCTAssertEqualStrings(@"http://google.com/", [URLBuilder URLString]); URLBuilder = [GTMURLBuilder builderWithString:@"http://google.com/pA/pB"]; - STAssertEqualStrings(@"http://google.com/pA/pB", [URLBuilder URLString], nil); + XCTAssertEqualStrings(@"http://google.com/pA/pB", [URLBuilder URLString]); URLBuilder = [GTMURLBuilder builderWithString:@"http://google.com/p%3AA/pB"]; - STAssertEqualStrings(@"http://google.com/p%3AA/pB", [URLBuilder URLString], nil); + XCTAssertEqualStrings(@"http://google.com/p%3AA/pB", [URLBuilder URLString]); } @end diff --git a/Foundation/GTMValidatingContainers.h b/Foundation/GTMValidatingContainers.h deleted file mode 100644 index e53b541..0000000 --- a/Foundation/GTMValidatingContainers.h +++ /dev/null @@ -1,196 +0,0 @@ -// -// GTMValidatingContainers.h -// -// Mutable containers that do verification of objects being added to them -// at runtime. Support for arrays, dictionaries and sets. -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -// GTMValidatingContainers are a set of mutable container classes that allow -// you to have a selector on a target that is called to verify that the objects -// being put into the container are valid. This can be controlled at compile -// time so that you don't take the performance hit in a release build using the -// GTM_CONTAINERS_VALIDATE macro. -// We have supplied validators for simple cases such as kindOfClass or -// conformsToProtocol. See GTMKindOfClassValidator et al. for details. -// -// Example of usage: -// id target = [GTMKindOfClassValidator validateAgainstClass:[NSString class]]; -// SEL selector = @selector(validateObject:forContainer:); -// GTMValidatingArray *array = [GTMValidatingArray validatingArrayWithTarget:target -// selector:selector]; -// [array addObject:@"foo"]; // Will be good -// [array addObject:[NSNumber numberWithInt:2]]; // Will fail -// -// By setting the GTM_CONTAINERS_VALIDATION_FAILED_LOG and -// GTM_CONTAINERS_VALIDATION_FAILED_ASSERT macros you can control what happens -// when a validation fails. If you implement your own validators, you may want -// to control their internals using the same macros for consistency. -// -// Note that the validating collection types retain their targets. - -#import <Foundation/Foundation.h> -#import "GTMDefines.h" - -// By default we only validate containers in debug. If you want to validate -// in release as well, #define GTM_CONTAINERS_VALIDATE in a prefix or build -// settings. -#ifndef GTM_CONTAINERS_VALIDATE -#if DEBUG -#define GTM_CONTAINERS_VALIDATE 1 -#else // DEBUG -#define GTM_CONTAINERS_VALIDATE 0 -#endif // DEBUG -#endif // GTM_CONTAINERS_VALIDATE - -// If GTM_CONTAINERS_VALIDATE is on, and log and assert are both turned off -// (see below), the object that failed validation will just not be added -// to the container. - -// If you don't want log to occur on validation failure define -// GTM_CONTAINERS_VALIDATION_FAILED_LOG to 0 in a prefix or build settings. -#ifndef GTM_CONTAINERS_VALIDATION_FAILED_LOG -#define GTM_CONTAINERS_VALIDATION_FAILED_LOG GTM_CONTAINERS_VALIDATE -#endif // GTM_CONTAINERS_VALIDATION_FAILED_LOG - -// If you don't want an assert to occur on validation failure define -// GTM_CONTAINERS_VALIDATION_FAILED_ASSERT to 0 in a prefix or build settings. -#ifndef GTM_CONTAINERS_VALIDATION_FAILED_ASSERT -#define GTM_CONTAINERS_VALIDATION_FAILED_ASSERT GTM_CONTAINERS_VALIDATE -#endif // GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - -// Sometimes you get a container back from somebody else and want to validate -// that it contains what you think it contains. _GTMValidateContainer -// allows you to do exactly that. _GTMValidateContainer... give you specialty -// functions for doing common types of validations. These all inline to nothing -// if GTM_CONTAINERS_VALIDATE is not defined. -#if GTM_CONTAINERS_VALIDATE -void _GTMValidateContainer(id container, id target, SEL selector); -void _GTMValidateContainerContainsKindOfClass(id container, Class cls); -void _GTMValidateContainerContainsMemberOfClass(id container, Class cls); -void _GTMValidateContainerConformsToProtocol(id container, Protocol *prot); -void _GTMValidateContainerItemsRespondToSelector(id container, SEL sel); -#else -GTM_INLINE void _GTMValidateContainer(id container, id target, SEL selector) { -} -GTM_INLINE void _GTMValidateContainerContainsKindOfClass(id container, - Class cls) { -} -GTM_INLINE void _GTMValidateContainerContainsMemberOfClass(id container, - Class cls) { -} -GTM_INLINE void _GTMValidateContainerConformsToProtocol(id container, - Protocol *prot) { -} -GTM_INLINE void _GTMValidateContainerItemsRespondToSelector(id container, - SEL sel) { -} -#endif - - -// See comments near top of file for class description. -@interface GTMValidatingArray : NSMutableArray { -#if GTM_CONTAINERS_VALIDATE - NSMutableArray *embeddedContainer_; - id target_; - SEL selector_; -#endif // #if GTM_CONTAINERS_VALIDATE -} -+ (id)validatingArrayWithTarget:(id)target selector:(SEL)sel; -+ (id)validatingArrayWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel; -- (id)initValidatingWithTarget:(id)target selector:(SEL)sel; -- (id)initValidatingWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel; -@end - -// See comments near top of file for class description. -@interface GTMValidatingDictionary : NSMutableDictionary { -#if GTM_CONTAINERS_VALIDATE - NSMutableDictionary *embeddedContainer_; - id target_; - SEL selector_; -#endif // #if GTM_CONTAINERS_VALIDATE -} -+ (id)validatingDictionaryWithTarget:(id)target selector:(SEL)sel; -+ (id)validatingDictionaryWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel; -- (id)initValidatingWithTarget:(id)target selector:(SEL)sel; -- (id)initValidatingWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel; -@end - -// See comments near top of file for class description. -@interface GTMValidatingSet : NSMutableSet { -#if GTM_CONTAINERS_VALIDATE - NSMutableSet *embeddedContainer_; - id target_; - SEL selector_; -#endif // #if GTM_CONTAINERS_VALIDATE -} -+ (id)validatingSetWithTarget:(id)target selector:(SEL)sel; -+ (id)validatingSetWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel; -- (id)initValidatingWithTarget:(id)target selector:(SEL)sel; -- (id)initValidatingWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel; -@end - -#pragma mark - -#pragma mark Simple Common Validators -// See comments near top of file for examples of how these are used. -@protocol GTMContainerValidatorProtocol -- (BOOL)validateObject:(id)object forContainer:(id)container; -@end - -// Validates that a given object is a kind of class (instance of class or an -// instance of any class that inherits from that class) -@interface GTMKindOfClassValidator : NSObject <GTMContainerValidatorProtocol> { - Class cls_; -} -+ (id)validateAgainstClass:(Class)cls; -- (id)initWithClass:(Class)cls; -@end - -// Validates that a given object is a member of class (exact instance of class) -@interface GTMMemberOfClassValidator : NSObject <GTMContainerValidatorProtocol> { - Class cls_; -} -+ (id)validateAgainstClass:(Class)cls; -- (id)initWithClass:(Class)cls; -@end - -// Validates that a given object conforms to a protocol -@interface GTMConformsToProtocolValidator : NSObject <GTMContainerValidatorProtocol> { - Protocol* prot_; -} -+ (id)validateAgainstProtocol:(Protocol*)prot; -- (id)initWithProtocol:(Protocol*)prot; -@end - -// Validates that a given object responds to a given selector -@interface GTMRespondsToSelectorValidator : NSObject <GTMContainerValidatorProtocol> { - SEL sel_; -} -+ (id)validateAgainstSelector:(SEL)sel; -- (id)initWithSelector:(SEL)sel; -@end diff --git a/Foundation/GTMValidatingContainers.m b/Foundation/GTMValidatingContainers.m deleted file mode 100644 index a227ad4..0000000 --- a/Foundation/GTMValidatingContainers.m +++ /dev/null @@ -1,491 +0,0 @@ -// -// GTMValidatingContainers.m -// -// Mutable containers that do verification of objects being added to them -// at runtime. Support for arrays, dictionaries and sets. -// -// Documentation on subclassing class clusters (which we are doing) is here: -// http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_9.html#//apple_ref/doc/uid/TP40002974-CH4-DontLinkElementID_105 -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMValidatingContainers.h" - -#if GTM_CONTAINERS_VALIDATE - -#import "GTMDebugSelectorValidation.h" -#if GTM_IPHONE_SDK -#import <objc/message.h> -#import <objc/runtime.h> -#else // GTM_IPHONE_SDK -#import <objc/objc-runtime.h> -#endif // GTM_IPHONE_SDK - -GTM_INLINE BOOL VerifyObjectWithTargetAndSelectorForContainer(id anObject, - id target, - SEL selector, - id container) { - // We must take care here, since Intel leaves junk in high bytes of return - // register for predicates that return BOOL. - // For details see: - // http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/universal_binary_tips/chapter_5_section_23.html - // and - // http://www.red-sweater.com/blog/320/abusing-objective-c-with-class#comment-83187 - BOOL isGood = ((BOOL (*)(id, SEL, id, id))objc_msgSend)(target, selector, - anObject, container); - if (!isGood) { -#if GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - _GTMDevAssert(isGood, @"%@ failed container verification for %@", - anObject, [container description]); -#endif // GTM_CONTAINERS_VALIDATION_FAILED_LOG -#if GTM_CONTAINERS_VALIDATION_FAILED_LOG - _GTMDevLog(@"%@ failed container verification for %@", anObject, - [container description]); -#endif // GTM_CONTAINERS_VALIDATION_FAILED_LOG - } - return isGood; -} - -GTM_INLINE void VerifySelectorOnTarget(SEL sel, id target) { - GTMAssertSelectorNilOrImplementedWithReturnTypeAndArguments(target, - sel, - @encode(BOOL), - @encode(id), - @encode(id), - nil); -} - -void _GTMValidateContainerContainsKindOfClass(id container, Class cls) { - GTMKindOfClassValidator *validator; - validator = [GTMKindOfClassValidator validateAgainstClass:cls]; - _GTMValidateContainer(container, - validator, - @selector(validateObject:forContainer:)); -} - -void _GTMValidateContainerContainsMemberOfClass(id container, Class cls) { - GTMMemberOfClassValidator *validator; - validator = [GTMMemberOfClassValidator validateAgainstClass:cls]; - _GTMValidateContainer(container, - validator, - @selector(validateObject:forContainer:)); -} - -void _GTMValidateContainerConformsToProtocol(id container, Protocol* prot) { - GTMConformsToProtocolValidator *validator; - validator = [GTMConformsToProtocolValidator validateAgainstProtocol:prot]; - _GTMValidateContainer(container, - validator, - @selector(validateObject:forContainer:)); -} - -void _GTMValidateContainerItemsRespondToSelector(id container, SEL sel) { - GTMRespondsToSelectorValidator *validator; - validator = [GTMRespondsToSelectorValidator validateAgainstSelector:sel]; - _GTMValidateContainer(container, - validator, - @selector(validateObject:forContainer:)); -} - -void _GTMValidateContainer(id container, id target, SEL selector) { - if ([container respondsToSelector:@selector(objectEnumerator)]) { - NSEnumerator *enumerator = [container objectEnumerator]; - id val; - while ((val = [enumerator nextObject])) { - VerifyObjectWithTargetAndSelectorForContainer(val, - target, - selector, - container); - } - } else { -#if GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - _GTMDevAssert(0, @"container %@ does not respond to -objectEnumerator", - [container description]); -#endif // GTM_CONTAINERS_VALIDATION_FAILED_LOG -#if GTM_CONTAINERS_VALIDATION_FAILED_LOG - _GTMDevLog(@"container does not respont to -objectEnumerator: %@", - [container description]); -#endif // GTM_CONTAINERS_VALIDATION_FAILED_LOG - } -} -#endif // GTM_CONTAINERS_VALIDATE - -@implementation GTMValidatingArray - -+ (id)validatingArrayWithTarget:(id)target selector:(SEL)sel { - return [self validatingArrayWithCapacity:0 target:target selector:sel]; -} - -+ (id)validatingArrayWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel { - return [[[self alloc] initValidatingWithCapacity:0 - target:target - selector:sel] autorelease]; -} - -- (id)initValidatingWithTarget:(id)target selector:(SEL)sel { - return [self initValidatingWithCapacity:0 target:target selector:sel]; -} - -#if GTM_CONTAINERS_VALIDATE -- (id)initValidatingWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel { - if ((self = [super init])) { - embeddedContainer_ = [[NSMutableArray alloc] initWithCapacity:capacity]; - target_ = [target retain]; - selector_ = sel; - VerifySelectorOnTarget(selector_, target_); - } - return self; -} - -- (void)dealloc { - [embeddedContainer_ release]; - [target_ release]; - [super dealloc]; -} - -- (NSUInteger)count { - return [embeddedContainer_ count]; -} - -- (id)objectAtIndex:(NSUInteger)idx { - return [embeddedContainer_ objectAtIndex:idx]; -} - -- (void)addObject:(id)anObject { - if (VerifyObjectWithTargetAndSelectorForContainer(anObject, target_, - selector_, self)) { - [embeddedContainer_ addObject:anObject]; - } -} - -- (void)insertObject:(id)anObject atIndex:(NSUInteger)idx { - if (VerifyObjectWithTargetAndSelectorForContainer(anObject, target_, - selector_, self)) { - [embeddedContainer_ insertObject:anObject atIndex:idx]; - } -} - -- (void)removeLastObject { - [embeddedContainer_ removeLastObject]; -} - -- (void)removeObjectAtIndex:(NSUInteger)idx { - [embeddedContainer_ removeObjectAtIndex:idx]; -} - -- (void)replaceObjectAtIndex:(NSUInteger)idx withObject:(id)anObject { - if (VerifyObjectWithTargetAndSelectorForContainer(anObject, target_, - selector_, self)) { - [embeddedContainer_ replaceObjectAtIndex:idx withObject:anObject]; - } -} - -- (NSString*)description { - return [NSString stringWithFormat:@"%@ - %@", - NSStringFromClass([self class]), - [embeddedContainer_ description]]; -} - -#else // GTM_CONTAINERS_VALIDATE -- (id)initValidatingWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel { - if ((self = [super init])) { - [self release]; - } - return (GTMValidatingArray*)[[NSMutableArray alloc] initWithCapacity:capacity]; -} -#endif // GTM_CONTAINERS_VALIDATE -@end - -@implementation GTMValidatingDictionary -+ (id)validatingDictionaryWithTarget:(id)target selector:(SEL)sel { - return [self validatingDictionaryWithCapacity:0 target:target selector:sel]; -} - -+ (id)validatingDictionaryWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel { - return [[[self alloc] initValidatingWithCapacity:0 - target:target - selector:sel] autorelease]; -} - -- (id)initValidatingWithTarget:(id)target selector:(SEL)sel { - return [self initValidatingWithCapacity:0 target:target selector:sel]; -} - -#if GTM_CONTAINERS_VALIDATE -- (id)initValidatingWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel { - if ((self = [super init])) { - embeddedContainer_ = [[NSMutableDictionary alloc] initWithCapacity:capacity]; - target_ = [target retain]; - selector_ = sel; - VerifySelectorOnTarget(selector_, target_); - } - return self; -} - -- (void)dealloc { - [target_ release]; - [embeddedContainer_ release]; - [super dealloc]; -} - -- (NSUInteger)count { - return [embeddedContainer_ count]; -} - -- (NSEnumerator *)keyEnumerator { - return [embeddedContainer_ keyEnumerator]; -} - -- (id)objectForKey:(id)aKey { - return [embeddedContainer_ objectForKey:aKey]; -} - -- (void)removeObjectForKey:(id)aKey { - [embeddedContainer_ removeObjectForKey:aKey]; -} - -- (void)setObject:(id)anObject forKey:(id)aKey { - if (VerifyObjectWithTargetAndSelectorForContainer(anObject, target_, - selector_, self)) { - [embeddedContainer_ setObject:anObject forKey:aKey]; - } -} - -- (NSString*)description { - return [NSString stringWithFormat:@"%@ - %@", - NSStringFromClass([self class]), - [embeddedContainer_ description]]; -} - -#else // GTM_CONTAINERS_VALIDATE -- (id)initValidatingWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel { - if ((self = [super init])) { - [self release]; - } - return (GTMValidatingDictionary*)[[NSMutableDictionary alloc] - initWithCapacity:capacity]; - -} -#endif // GTM_CONTAINERS_VALIDATE -@end - -@implementation GTMValidatingSet -+ (id)validatingSetWithTarget:(id)target selector:(SEL)sel { - return [self validatingSetWithCapacity:0 target:target selector:sel]; -} - -+ (id)validatingSetWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel { - return [[[self alloc] initValidatingWithCapacity:0 - target:target - selector:sel] autorelease]; -} -- (id)initValidatingWithTarget:(id)target selector:(SEL)sel { - return [self initValidatingWithCapacity:0 target:target selector:sel]; -} - -#if GTM_CONTAINERS_VALIDATE -- (id)initValidatingWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel { - if ((self = [super init])) { - embeddedContainer_ = [[NSMutableSet alloc] initWithCapacity:capacity]; - target_ = [target retain]; - selector_ = sel; - VerifySelectorOnTarget(selector_, target_); - } - return self; -} - -- (void)dealloc { - [target_ release]; - [embeddedContainer_ release]; - [super dealloc]; -} - -- (NSUInteger)count { - return [embeddedContainer_ count]; -} - -- (id)member:(id)object { - return [embeddedContainer_ member:object]; -} - -- (NSEnumerator *)objectEnumerator { - return [embeddedContainer_ objectEnumerator]; -} - -- (void)addObject:(id)object { - if (object && VerifyObjectWithTargetAndSelectorForContainer(object, - target_, - selector_, - self)) { - [embeddedContainer_ addObject:object]; - } -} - -- (void)removeObject:(id)object { - [embeddedContainer_ removeObject:object]; -} - -- (NSString*)description { - return [NSString stringWithFormat:@"%@ - %@", - NSStringFromClass([self class]), - [embeddedContainer_ description]]; -} - -#else // GTM_CONTAINERS_VALIDATE -- (id)initValidatingWithCapacity:(NSUInteger)capacity - target:(id)target - selector:(SEL)sel { - if ((self = [super init])) { - [self release]; - } - return (GTMValidatingSet*)[[NSMutableSet alloc] initWithCapacity:capacity]; -} -#endif // GTM_CONTAINERS_VALIDATE -@end - -#pragma mark - -#pragma mark Simple Common Validators -@implementation GTMKindOfClassValidator -+ (id)validateAgainstClass:(Class)cls { - return [[[self alloc] initWithClass:cls] autorelease]; -} - -- (id)initWithClass:(Class)cls { -#if GTM_CONTAINERS_VALIDATE - if ((self = [super init])) { - if (!cls) { - _GTMDevLog(@"nil class"); - [self release]; - return nil; - } - cls_ = cls; - } - return self; -#else // GTM_CONTAINERS_VALIDATE - if ((self = [super init])) { - [self release]; - } - return nil; -#endif // GTM_CONTAINERS_VALIDATE -} - -- (BOOL)validateObject:(id)object forContainer:(id)container { - return [object isKindOfClass:cls_]; -} -@end - -@implementation GTMMemberOfClassValidator -+ (id)validateAgainstClass:(Class)cls { - return [[[self alloc] initWithClass:cls] autorelease]; -} - -- (id)initWithClass:(Class)cls { -#if GTM_CONTAINERS_VALIDATE - if ((self = [super init])) { - if (!cls) { - _GTMDevLog(@"nil class"); - [self release]; - return nil; - } - cls_ = cls; - } - return self; -#else // GTM_CONTAINERS_VALIDATE - if ((self = [super init])) { - [self release]; - } - return nil; -#endif // GTM_CONTAINERS_VALIDATE -} - -- (BOOL)validateObject:(id)object forContainer:(id)container { - return [object isMemberOfClass:cls_]; -} -@end - -@implementation GTMConformsToProtocolValidator -+ (id)validateAgainstProtocol:(Protocol*)prot { - return [[[self alloc] initWithProtocol:prot] autorelease]; -} - -- (id)initWithProtocol:(Protocol*)prot { -#if GTM_CONTAINERS_VALIDATE - if ((self = [super init])) { - if (!prot) { - _GTMDevLog(@"nil protocol"); - [self release]; - return nil; - } - prot_ = prot; - } - return self; -#else // GTM_CONTAINERS_VALIDATE - if ((self = [super init])) { - [self release]; - } - return nil; -#endif // GTM_CONTAINERS_VALIDATE -} - -- (BOOL)validateObject:(id)object forContainer:(id)container { - return [object conformsToProtocol:prot_]; -} -@end - -@implementation GTMRespondsToSelectorValidator -+ (id)validateAgainstSelector:(SEL)sel { - return [[[self alloc] initWithSelector:sel] autorelease]; -} - -- (id)initWithSelector:(SEL)sel { -#if GTM_CONTAINERS_VALIDATE - if ((self = [super init])) { - if (!sel) { - _GTMDevLog(@"nil selector"); - [self release]; - return nil; - } - sel_ = sel; - } - return self; -#else // GTM_CONTAINERS_VALIDATE - if ((self = [super init])) { - [self release]; - } - return nil; -#endif // GTM_CONTAINERS_VALIDATE -} - -- (BOOL)validateObject:(id)object forContainer:(id)container { - return [object respondsToSelector:sel_]; -} -@end diff --git a/Foundation/GTMValidatingContainersTest.m b/Foundation/GTMValidatingContainersTest.m deleted file mode 100644 index 806ecb0..0000000 --- a/Foundation/GTMValidatingContainersTest.m +++ /dev/null @@ -1,378 +0,0 @@ -// -// GTMValidatingContainersTest.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMValidatingContainers.h" -#import "GTMSenTestCase.h" -#import "GTMUnitTestDevLog.h" - -#pragma mark Test Support Declarations -@protocol GTMVCTestProtocol -@end - -@interface GTMVCTestClass : NSObject -+ (id)instance; -@end - -@interface GTMVCTestSubClass : GTMVCTestClass <GTMVCTestProtocol> -- (void)foo; -@end - -@interface GTMVCValidatingTests : GTMTestCase { - GTMVCTestClass *testClass_; - GTMVCTestSubClass *testSubClass_; -} -@end - -@interface GTMVCValidatorTests : GTMVCValidatingTests -@end - -@interface GTMVCContainerTests : GTMVCValidatingTests { - GTMConformsToProtocolValidator *validator_; - SEL selector_; -} -@end - -@interface GTMVCArrayTests : GTMVCContainerTests -@end - -@interface GTMVCDictionaryTests : GTMVCContainerTests -@end - -@interface GTMVCSetTests : GTMVCContainerTests -@end - -@interface GTMValidateContainerTests : GTMTestCase -@end - -#pragma mark - -#pragma mark Test Support Definitions - -@implementation GTMVCTestClass -+ (id)instance { - return [[[self alloc] init] autorelease]; -} - -- (NSString*)description { - return NSStringFromClass([self class]); -} -@end - -@implementation GTMVCTestSubClass -- (void)foo { -} -@end - -@implementation GTMVCContainerTests -- (void)setUp { - [super setUp]; - Protocol *prot = @protocol(GTMVCTestProtocol); - validator_ = [[GTMConformsToProtocolValidator alloc] initWithProtocol:prot]; - selector_ = @selector(validateObject:forContainer:); -} - -- (void)tearDown { - [validator_ release]; - [super tearDown]; -} -@end - -@implementation GTMVCValidatingTests - -- (void)setUp { - [super setUp]; - testClass_ = [[GTMVCTestClass alloc] init]; - testSubClass_ = [[GTMVCTestSubClass alloc] init]; -} - -- (void)tearDown { - [testClass_ release]; - [testSubClass_ release]; - [super tearDown]; -} - -@end - -@implementation GTMVCValidatorTests - -- (void)testKindOfClassValidator { -#if GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - [GTMUnitTestDevLog expectString:@"nil class"]; - GTMKindOfClassValidator *validator; - validator = [GTMKindOfClassValidator validateAgainstClass:nil]; - STAssertNil(validator, @"should be nil"); - - Class cls = [GTMVCTestClass class]; - validator = [GTMKindOfClassValidator validateAgainstClass:cls]; - STAssertNotNil(validator, @"should be valid"); - - BOOL isGood = [validator validateObject:testClass_ forContainer:nil]; - STAssertTrue(isGood, @"should be validated"); - - isGood = [validator validateObject:testSubClass_ forContainer:nil]; - STAssertTrue(isGood, @"should be validated"); - - isGood = [validator validateObject:[NSNumber numberWithInt:0] - forContainer:nil]; - STAssertFalse(isGood, @"should fail"); -#else // GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - GTMKindOfClassValidator *validator; - validator = [GTMKindOfClassValidator validateAgainstClass:nil]; - STAssertNil(validator, @"should be nil"); - - Class cls = [GTMVCTestClass class]; - validator = [GTMKindOfClassValidator validateAgainstClass:cls]; - STAssertNil(validator, @"should be nil"); -#endif // GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT -} - -- (void)testMemberOfClassValidator { -#if GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - [GTMUnitTestDevLog expectString:@"nil class"]; - GTMMemberOfClassValidator *validator; - validator = [GTMMemberOfClassValidator validateAgainstClass:nil]; - STAssertNil(validator, @"should be nil"); - - Class cls = [GTMVCTestClass class]; - validator = [GTMMemberOfClassValidator validateAgainstClass:cls]; - STAssertNotNil(validator, @"should be valid"); - - BOOL isGood = [validator validateObject:testClass_ forContainer:nil]; - STAssertTrue(isGood, @"should be validated"); - - isGood = [validator validateObject:testSubClass_ forContainer:nil]; - STAssertFalse(isGood, @"should fail"); - - isGood = [validator validateObject:nil forContainer:nil]; - STAssertFalse(isGood, @"should fail"); - - isGood = [validator validateObject:[NSNumber numberWithInt:0] - forContainer:nil]; - STAssertFalse(isGood, @"should fail"); -#else // GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - GTMMemberOfClassValidator *validator; - validator = [GTMMemberOfClassValidator validateAgainstClass:nil]; - STAssertNil(validator, @"should be nil"); - - Class cls = [GTMVCTestClass class]; - validator = [GTMMemberOfClassValidator validateAgainstClass:cls]; - STAssertNil(validator, @"should be nil"); -#endif // GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT -} - -- (void)testConformsToProtocolValidator { -#if GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - [GTMUnitTestDevLog expectString:@"nil protocol"]; - GTMConformsToProtocolValidator *validator; - validator = [GTMConformsToProtocolValidator validateAgainstProtocol:nil]; - STAssertNil(validator, @"should be nil"); - - Protocol *prot = @protocol(GTMVCTestProtocol); - validator = [GTMConformsToProtocolValidator validateAgainstProtocol:prot]; - STAssertNotNil(validator, @"should be valid"); - - BOOL isGood = [validator validateObject:testClass_ forContainer:nil]; - STAssertFalse(isGood, @"should fail"); - - isGood = [validator validateObject:testSubClass_ forContainer:nil]; - STAssertTrue(isGood, @"should succeed"); - - isGood = [validator validateObject:nil forContainer:nil]; - STAssertFalse(isGood, @"should fail"); -#else // GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - GTMConformsToProtocolValidator *validator; - validator = [GTMConformsToProtocolValidator validateAgainstProtocol:nil]; - STAssertNil(validator, @"should be nil"); - - Protocol *prot = @protocol(GTMVCTestProtocol); - validator = [GTMConformsToProtocolValidator validateAgainstProtocol:prot]; - STAssertNil(validator, @"should be nil"); -#endif // GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT -} - -- (void)testRespondsToSelectorValidator { -#if GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - [GTMUnitTestDevLog expectString:@"nil selector"]; - GTMRespondsToSelectorValidator *validator; - validator = [GTMRespondsToSelectorValidator validateAgainstSelector:nil]; - STAssertNil(validator, @"should be nil"); - - SEL sel = @selector(foo); - validator = [GTMRespondsToSelectorValidator validateAgainstSelector:sel]; - STAssertNotNil(validator, @"should be valid"); - - BOOL isGood = [validator validateObject:testClass_ forContainer:nil]; - STAssertFalse(isGood, @"should fail"); - - isGood = [validator validateObject:testSubClass_ forContainer:nil]; - STAssertTrue(isGood, @"should succeed"); - - isGood = [validator validateObject:nil forContainer:nil]; - STAssertFalse(isGood, @"should fail"); -#else // GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT - GTMRespondsToSelectorValidator *validator; - validator = [GTMRespondsToSelectorValidator validateAgainstSelector:nil]; - STAssertNil(validator, @"should be nil"); - - SEL sel = @selector(foo); - validator = [GTMRespondsToSelectorValidator validateAgainstSelector:sel]; - STAssertNil(validator, @"should be nil"); -#endif // GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT -} - - -@end - -@implementation GTMVCArrayTests -- (void)testContainer { - GTMValidatingArray *array; - array = [GTMValidatingArray validatingArrayWithTarget:validator_ - selector:selector_]; - STAssertNotNil(array, @"should be valid"); - - array = [[[GTMValidatingArray alloc] initValidatingWithTarget:validator_ - selector:selector_] autorelease]; - STAssertNotNil(array, @"should be valid"); - - [GTMUnitTestDevLog expectPattern:@"GTMVCTestClass failed container verification for GTMValidatingArray .*"]; - [array addObject:testSubClass_]; - [array addObject:testClass_]; - STAssertEquals([array objectAtIndex:0], testSubClass_, @""); - - [GTMUnitTestDevLog expectPattern:@"GTMVCTestClass failed container verification for GTMValidatingArray .*"]; - [array insertObject:testClass_ atIndex:0]; - [array insertObject:testSubClass_ atIndex:0]; - [GTMUnitTestDevLog expectPattern:@"GTMVCTestClass failed container verification for GTMValidatingArray .*"]; - [array replaceObjectAtIndex:0 withObject:testClass_]; - [array replaceObjectAtIndex:0 withObject:testSubClass_]; - [array removeLastObject]; - [array removeObjectAtIndex:0]; - NSUInteger expectedCount = 0U; -#if !(GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT) - // If we're not validating, we don't expect any logs - [GTMUnitTestDevLog resetExpectedLogs]; - expectedCount = 2U; -#endif // !(GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT) - STAssertEquals([array count], expectedCount, @"should have no objects left"); - -} -@end - -@implementation GTMVCDictionaryTests -- (void)testContainer { - GTMValidatingDictionary *dictionary; - dictionary = [GTMValidatingDictionary validatingDictionaryWithTarget:validator_ - selector:selector_]; - STAssertNotNil(dictionary, @"should be valid"); - - dictionary = [[[GTMValidatingDictionary alloc] initValidatingWithTarget:validator_ - selector:selector_] autorelease]; - STAssertNotNil(dictionary, @"should be valid"); - - [GTMUnitTestDevLog expectPattern:@"GTMVCTestClass failed container verification for GTMValidatingDictionary .*"]; - [dictionary setObject:testClass_ forKey:@"Key1"]; - [dictionary setObject:testSubClass_ forKey:@"Key2"]; - STAssertEquals([dictionary objectForKey:@"Key2"], testSubClass_, @""); - STAssertNotNil([dictionary keyEnumerator], @""); - - [dictionary removeObjectForKey:@"Key2"]; - [dictionary removeObjectForKey:@"Key1"]; - STAssertEquals([dictionary count], (NSUInteger)0, @"should have no objects left"); - - // So we get full code coverage - [testSubClass_ foo]; -#if !(GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT) - // If we're not validating, we don't expect any logs - [GTMUnitTestDevLog resetExpectedLogs]; -#endif // !(GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT) -} -@end - -@implementation GTMVCSetTests -- (void)testContainer { - GTMValidatingSet *set; - set = [GTMValidatingSet validatingSetWithTarget:validator_ - selector:selector_]; - STAssertNotNil(set, @"should be valid"); - - set = [[[GTMValidatingSet alloc] initValidatingWithTarget:validator_ - selector:selector_] autorelease]; - STAssertNotNil(set, @"should be valid"); - - [GTMUnitTestDevLog expectPattern:@"GTMVCTestClass failed container verification for GTMValidatingSet .*"]; - [set addObject:testClass_]; - [set addObject:testSubClass_]; - STAssertEqualObjects([set member:testSubClass_], testSubClass_, @""); - STAssertNotNil([set objectEnumerator], @""); - - [set removeObject:testClass_]; - [set removeObject:testSubClass_]; -#if !(GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT) - // If we're not validating, we don't expect any logs - [GTMUnitTestDevLog resetExpectedLogs]; -#endif // !(GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT) - STAssertEquals([set count], (NSUInteger)0, @"should have no objects left"); -} -@end - -@implementation GTMValidateContainerTests -- (void)testValidatingContainers { - NSDictionary *homogenousDict = [NSDictionary dictionaryWithObjectsAndKeys: - [GTMVCTestSubClass instance], @"key1", - [GTMVCTestSubClass instance], @"key2", - nil]; - NSDictionary *heterogenousDict = [NSDictionary dictionaryWithObjectsAndKeys: - [GTMVCTestClass instance], @"key1", - [GTMVCTestSubClass instance], @"key2", - nil]; - - // Test bad container - [GTMUnitTestDevLog expectPattern:@"container does not respont to -objectEnumerator: .*"]; - _GTMValidateContainerContainsKindOfClass([NSString string], - [GTMVCTestSubClass class]); - - _GTMValidateContainerContainsKindOfClass(homogenousDict, - [GTMVCTestSubClass class]); - _GTMValidateContainerContainsKindOfClass(heterogenousDict, - [GTMVCTestClass class]); - [GTMUnitTestDevLog expectPattern:@"GTMVCTestClass failed container verification for .*"]; - _GTMValidateContainerContainsKindOfClass(heterogenousDict, - [GTMVCTestSubClass class]); - - _GTMValidateContainerContainsMemberOfClass(homogenousDict, - [GTMVCTestSubClass class]); - [GTMUnitTestDevLog expectPattern:@"GTMVCTestSubClass failed container verification for .*"]; - _GTMValidateContainerContainsMemberOfClass(heterogenousDict, - [GTMVCTestClass class]); - - _GTMValidateContainerConformsToProtocol(homogenousDict, - @protocol(GTMVCTestProtocol)); - [GTMUnitTestDevLog expectPattern:@"GTMVCTestClass failed container verification for .*"]; - _GTMValidateContainerConformsToProtocol(heterogenousDict, - @protocol(GTMVCTestProtocol)); - - _GTMValidateContainerItemsRespondToSelector(homogenousDict, - @selector(foo)); - [GTMUnitTestDevLog expectPattern:@"GTMVCTestClass failed container verification for .*"]; - _GTMValidateContainerItemsRespondToSelector(heterogenousDict, - @selector(foo)); -#if !(GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT) - // If we're not validating, we don't expect any logs - [GTMUnitTestDevLog resetExpectedLogs]; -#endif // !(GTM_CONTAINERS_VALIDATE && GTM_CONTAINERS_VALIDATION_FAILED_LOG && !GTM_CONTAINERS_VALIDATION_FAILED_ASSERT) -} -@end diff --git a/Foundation/TestData/GTMURITemplateExtraTests.json b/Foundation/TestData/GTMURITemplateExtraTests.json deleted file mode 100644 index e84ab90..0000000 --- a/Foundation/TestData/GTMURITemplateExtraTests.json +++ /dev/null @@ -1,222 +0,0 @@ -{ - "No varspec (section 3.3, paragraph 3)" : - { - "variables": { - "var" : "value" - }, - "testcases" : [ - ["{}", "{}"], - ["{,}", "{,}"], - ["{,,}", "{,,}"] - ] - }, - "Missing closing brace (section 3.3 paragraph 4)" : - { - "variables": { - "var" : "value", - "hello" : "Hello World!", - "list" : [ "val1", "val2", "val3" ], - "keys" : {"key1": "val1", "key2": "val2"}, - "x" : "1024", - "y" : "768" - }, - "testcases" : [ - ["{var", "value"], - ["{hello", "Hello%20World%21"], - ["{x,y", "1024,768"], - ["{var=default", "value"], - ["{undef=default", "default"], - ["{list", "val1,val2,val3"], - ["{list*", "val1,val2,val3"], - ["{list+", "list.val1,list.val2,list.val3"], - ["{keys", "key1,val1,key2,val2"], - ["{keys*", "key1,val1,key2,val2"], - ["{keys+", "keys.key1,val1,keys.key2,val2"] - ] - }, - "varspec of only operator and explodes (section 3.3?)" : - { - "variables": { - "var" : "value" - }, - "testcases" : [ - ["{+}", "{+}"], - ["{;}", "{;}"], - ["{?}", "{?}"], - ["{/}", "{/}"], - ["{.}", "{.}"], - ["{+,}", "{+,}"], - ["{;,}", "{;,}"], - ["{?,}", "{?,}"], - ["{/,}", "{/,}"], - ["{.,}", "{.,}"], - ["{++}", "{++}"], - ["{;+}", "{;+}"], - ["{?+}", "{?+}"], - ["{/+}", "{/+}"], - ["{.+}", "{.+}"], - ["{+*}", "{+*}"], - ["{;*}", "{;*}"], - ["{?*}", "{?*}"], - ["{/*}", "{/*}"], - ["{.*}", "{.*}"] - ] - }, - "One good varspec and bad varspecs (section 3.3, paragraph 3?)" : - { - "variables": { - "var" : "value" - }, - "testcases" : [ - ["{var,}", "value"], - ["{,var}", "value"], - ["{,var,,}", "value"], - ["{+var,,}", "value"], - ["{;var,,}", ";var=value"], - ["{?var,,}", "?var=value"], - ["{/var,,}", "/value"], - ["{.var,,}", ".value"], - ["{+,var,}", "value"], - ["{;,var,}", ";var=value"], - ["{?,var,}", "?var=value"], - ["{/,var,}", "/value"], - ["{.,var,}", ".value"], - ["{+,,var}", "value"], - ["{;,,var}", ";var=value"], - ["{?,,var}", "?var=value"], - ["{/,,var}", "/value"], - ["{.,,var}", ".value"] - ] - }, - "Multiple undefined variables (section 3.4)" : - { - "variables": { - "var" : "value" - }, - "testcases" : [ - ["{undef1,undef2}", ""], - ["{+undef1,undef2}", ""], - ["{;undef1,undef2}", ""], - ["{?undef1,undef2}", ""], - ["{/undef1,undef2}", ""], - ["{.undef1,undef2}", ""] - ] - }, - "Default with variable in varspec (just reported like above cases)" : - { - "variables": { - "var" : "value" - }, - "testcases" : [ - ["{=foo}", "{=foo}"] - ] - }, - "varspec with bad partial (partial gets ignored)" : - { - "variables": { - "var" : "value" - }, - "testcases" : [ - ["{var:}", "value"], - ["{var^}", "value"] - ] - }, - "Default of empty string and edge cases with empty strings" : - { - "variables": { - "empty" : "", - "x" : "1024", - "y" : "768" - }, - "testcases" : [ - ["{empty}", ""], - ["{;x,empty,y}", ";x=1024;empty;y=768"], - ["{?x,empty,y}", "?x=1024&empty&y=768"], - ["{x,empty,y}", "1024,,768"], - ["{+x,empty,y}", "1024,,768"], - ["{/x,empty,y}", "/1024//768"], - ["{.x,empty,y}", ".1024..768"], - ["{undef=}", ""], - ["{;x,undef=,y}", ";x=1024;undef;y=768"], - ["{?x,undef=,y}", "?x=1024&undef&y=768"], - ["{x,undef=,y}", "1024,,768"], - ["{+x,undef=,y}", "1024,,768"], - ["{/x,undef=,y}", "/1024//768"], - ["{.x,undef=,y}", ".1024..768"] - ] - }, - "Two defaults for one variable" : - { - "variables": { - "y" : "768" - }, - "testcases" : [ - ["1{undef=a}2{undef=b}3", "1a2b3"], - ["0{undef}1{undef=a}2{undef}3{undef=b}4{undef}5", "01a2a3b4b5"] - ] - }, - "Empty strings within arrays and associative arrays" : - { - "variables": { - "list" : [ "val1", "", "val3" ], - "keysA" : {"key1": "", "key2": "val2"}, - "keysB" : {"key1": "val1", "": "val2"} - }, - "testcases" : [ - ["{list}", "val1,,val3"], - ["{list*}", "val1,,val3"], - ["{list+}", "list.val1,list.,list.val3"], - ["{keysA}", "key1,,key2,val2"], - ["{keysA*}", "key1,,key2,val2"], - ["{keysA+}", "keysA.key1,,keysA.key2,val2"], - ["{keysB}", ",val2,key1,val1"], - ["{keysB*}", ",val2,key1,val1"], - ["{keysB+}", "keysB.,val2,keysB.key1,val1"], - ["{+list}", "val1,,val3"], - ["{+list*}", "val1,,val3"], - ["{+list+}", "list.val1,list.,list.val3"], - ["{+keysA}", "key1,,key2,val2"], - ["{+keysA*}", "key1,,key2,val2"], - ["{+keysA+}", "keysA.key1,,keysA.key2,val2"], - ["{+keysB}", ",val2,key1,val1"], - ["{+keysB*}", ",val2,key1,val1"], - ["{+keysB+}", "keysB.,val2,keysB.key1,val1"], - ["{;list}", ";val1,,val3"], - ["{;list*}", ";val1;;val3"], - ["{;list+}", ";list=val1;list=;list=val3"], - ["{;keysA}", ";key1,key2,val2"], - ["{;keysA*}", ";key1;key2=val2"], - ["{;keysA+}", ";keysA.key1;keysA.key2=val2"], - ["{;keysB}", ";,val2,key1,val1"], - ["{;keysB*}", ";=val2;key1=val1"], - ["{;keysB+}", ";keysB.=val2;keysB.key1=val1"], - ["{?list}", "?list=val1,,val3"], - ["{?list*}", "?val1&&val3"], - ["{?list+}", "?list=val1&list=&list=val3"], - ["{?keysA}", "?keysA=key1,key2,val2"], - ["{?keysA*}", "?key1&key2=val2"], - ["{?keysA+}", "?keysA.key1&keysA.key2=val2"], - ["{?keysB}", "?keysB=,val2,key1,val1"], - ["{?keysB*}", "?=val2&key1=val1"], - ["{?keysB+}", "?keysB.=val2&keysB.key1=val1"], - ["{/list}", "/val1,,val3"], - ["{/list*}", "/val1//val3"], - ["{/list+}", "/list.val1/list./list.val3"], - ["{/keysA}", "/key1,,key2,val2"], - ["{/keysA*}", "/key1//key2/val2"], - ["{/keysA+}", "/keysA.key1//keysA.key2/val2"], - ["{/keysB}", "/,val2,key1,val1"], - ["{/keysB*}", "//val2/key1/val1"], - ["{/keysB+}", "/keysB./val2/keysB.key1/val1"], - ["X{.list}", "X.val1,,val3"], - ["X{.list*}", "X.val1..val3"], - ["X{.list+}", "X.list.val1.list..list.val3"], - ["X{.keysA}", "X.key1,,key2,val2"], - ["X{.keysA*}", "X.key1..key2.val2"], - ["X{.keysA+}", "X.keysA.key1..keysA.key2.val2"], - ["X{.keysB}", "X.,val2,key1,val1"], - ["X{.keysB*}", "X..val2.key1.val1"], - ["X{.keysB+}", "X.keysB..val2.keysB.key1.val1"] - ] - } -} diff --git a/Foundation/TestData/GTMURITemplateRFCTests.json b/Foundation/TestData/GTMURITemplateRFCTests.json deleted file mode 100644 index 03fa22d..0000000 --- a/Foundation/TestData/GTMURITemplateRFCTests.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "Test Suite 1" : - { - "variables": { - "var" : "value", - "hello" : "Hello World!", - "empty" : "", - "list" : [ "val1", "val2", "val3" ], - "keys" : {"key1": "val1", "key2": "val2"}, - "path" : "/foo/bar", - "x" : "1024", - "y" : "768" - }, - "testcases" : [ - ["{var}", "value"], - ["{hello}", "Hello%20World%21"], - ["{path}/here", "%2Ffoo%2Fbar/here"], - ["{x,y}", "1024,768"], - ["{var=default}", "value"], - ["{undef=default}", "default"], - ["{list}", "val1,val2,val3"], - ["{list*}", "val1,val2,val3"], - ["{list+}", "list.val1,list.val2,list.val3"], - ["{keys}", "key1,val1,key2,val2"], - ["{keys*}", "key1,val1,key2,val2"], - ["{keys+}", "keys.key1,val1,keys.key2,val2"], - ["{+var}", "value"], - ["{+hello}", "Hello%20World!"], - ["{+path}/here", "/foo/bar/here"], - ["{+path,x}/here", "/foo/bar,1024/here"], - ["{+path}{x}/here", "/foo/bar1024/here"], - ["{+empty}/here", "/here"], - ["{+undef}/here", "/here"], - ["{+list}", "val1,val2,val3"], - ["{+list*}", "val1,val2,val3"], - ["{+list+}", "list.val1,list.val2,list.val3"], - ["{+keys}", "key1,val1,key2,val2"], - ["{+keys*}", "key1,val1,key2,val2"], - ["{+keys+}", "keys.key1,val1,keys.key2,val2"], - ["{;x,y}", ";x=1024;y=768"], - ["{;x,y,empty}", ";x=1024;y=768;empty"], - ["{;x,y,undef}", ";x=1024;y=768"], - ["{;list}", ";val1,val2,val3"], - ["{;list*}", ";val1;val2;val3"], - ["{;list+}", ";list=val1;list=val2;list=val3"], - ["{;keys}", ";key1,val1,key2,val2"], - ["{;keys*}", ";key1=val1;key2=val2"], - ["{;keys+}", ";keys.key1=val1;keys.key2=val2"], - ["{?x,y}", "?x=1024&y=768"], - ["{?x,y,empty}", "?x=1024&y=768&empty"], - ["{?x,y,undef}", "?x=1024&y=768"], - ["{?list}", "?list=val1,val2,val3"], - ["{?list*}", "?val1&val2&val3"], - ["{?list+}", "?list=val1&list=val2&list=val3"], - ["{?keys}", "?keys=key1,val1,key2,val2"], - ["{?keys*}", "?key1=val1&key2=val2"], - ["{?keys+}", "?keys.key1=val1&keys.key2=val2"], - ["{/var}", "/value"], - ["{/var,empty}", "/value/"], - ["{/var,undef}", "/value"], - ["{/list}", "/val1,val2,val3"], - ["{/list*}", "/val1/val2/val3"], - ["{/list*,x}", "/val1/val2/val3/1024"], - ["{/list+}", "/list.val1/list.val2/list.val3"], - ["{/keys}", "/key1,val1,key2,val2"], - ["{/keys*}", "/key1/val1/key2/val2"], - ["{/keys+}", "/keys.key1/val1/keys.key2/val2"], - ["X{.var}", "X.value"], - ["X{.empty}", "X"], - ["X{.undef}", "X"], - ["X{.list}", "X.val1,val2,val3"], - ["X{.list*}", "X.val1.val2.val3"], - ["X{.list*,x}", "X.val1.val2.val3.1024"], - ["X{.list+}", "X.list.val1.list.val2.list.val3"], - ["X{.keys}", "X.key1,val1,key2,val2"], - ["X{.keys*}", "X.key1.val1.key2.val2"], - ["X{.keys+}", "X.keys.key1.val1.keys.key2.val2"] - ] - }, - "Test Suite 2" : - { - "variables": { - "var" : "value", - "empty" : "", - "name" : [ "Fred", "Wilma", "Pebbles" ], - "favs" : {"color":"red", "volume": "high"}, - "empty_list" : [], - "empty_keys" : {} - }, - "testcases" : [ - ["{var=default}", "value"], - ["{undef=default}", "default"], - ["x{empty}y", "xy"], - ["x{empty=_}y", "xy"], - ["x{undef}y", "xy"], - ["x{undef=_}y", "x_y"], - ["x{empty_list}y", "xy"], - ["x{empty_list=_}y", "x_y"], - ["x{empty_list*}y", "xy"], - ["x{empty_list*=_}y", "x_y"], - ["x{empty_list+}y", "xy"], - ["x{empty_list+=_}y", "x_y"], - ["x{empty_keys}y", "xy"], - ["x{empty_keys=_}y", "x_y"], - ["x{empty_keys*}y", "xy"], - ["x{empty_keys*=_}y", "x_y"], - ["x{empty_keys+}y", "xy"], - ["x{empty_keys+=_}y", "x_y"], - ["x{?name=none}", "x?name=Fred,Wilma,Pebbles"], - ["x{?favs=none}", "x?favs=color,red,volume,high"], - ["x{?favs*=none}", "x?color=red&volume=high"], - ["x{?favs+=none}", "x?favs.color=red&favs.volume=high"], - ["x{?undef}", "x"], - ["x{?undef=none}", "x?undef=none"], - ["x{?empty}", "x?empty"], - ["x{?empty=none}", "x?empty"], - ["x{?empty_list}", "x"], - ["x{?empty_list=none}", "x?empty_list=none"], - ["x{?empty_list*}", "x"], - ["x{?empty_list*=none}", "x?empty_list=none"], - ["x{?empty_list+}", "x"], - ["x{?empty_list+=none}", "x?empty_list=none"], - ["x{?empty_keys}", "x"], - ["x{?empty_keys=none}", "x?empty_keys=none"], - ["x{?empty_keys*}", "x"], - ["x{?empty_keys*=none}", "x?empty_keys=none"], - ["x{?empty_keys+}", "x"], - ["x{?empty_keys+=none}", "x?empty_keys=none"] - ] - } -} diff --git a/GTM.xcodeproj/project.pbxproj b/GTM.xcodeproj/project.pbxproj index 6f95311..eca622a 100644 --- a/GTM.xcodeproj/project.pbxproj +++ b/GTM.xcodeproj/project.pbxproj @@ -6,47 +6,9 @@ objectVersion = 45; objects = { -/* Begin PBXAggregateTarget section */ - F472042B0D33BEAF00E9F378 /* All UnitTests */ = { - isa = PBXAggregateTarget; - buildConfigurationList = F47204340D33BEDF00E9F378 /* Build configuration list for PBXAggregateTarget "All UnitTests" */; - buildPhases = ( - ); - dependencies = ( - F4E4279810B7484B00F28A35 /* PBXTargetDependency */, - F4E4279610B7484B00F28A35 /* PBXTargetDependency */, - F4E4279210B7484B00F28A35 /* PBXTargetDependency */, - F4E4279410B7484B00F28A35 /* PBXTargetDependency */, - ); - name = "All UnitTests"; - productName = "All UnitTests"; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXAppleScriptBuildPhase section */ - 8B3345CC0DBF8A95009FD32C /* AppleScript */ = { - isa = PBXAppleScriptBuildPhase; - buildActionMask = 2147483647; - contextName = ""; - files = ( - 8B3345890DBF8A55009FD32C /* GTMNSAppleEvent+HandlerTest.applescript in AppleScript */, - ); - isSharedContext = 0; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXAppleScriptBuildPhase section */ - /* Begin PBXBuildFile section */ 0B1B9B8710FECD870084EE4B /* GTMStringEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B1B9B8410FECD870084EE4B /* GTMStringEncoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0B1B9B8810FECD870084EE4B /* GTMStringEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B1B9B8510FECD870084EE4B /* GTMStringEncoding.m */; }; - 0BFAD4C8104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitive.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BFAD4C2104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitive.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BFAD4C9104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitive.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BFAD4C3104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitive.m */; }; - 1012DF560F4252BD004794DB /* GTMAbstractDOListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 1012DF540F4252BD004794DB /* GTMAbstractDOListener.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1012DF570F4252BD004794DB /* GTMAbstractDOListener.m in Sources */ = {isa = PBXBuildFile; fileRef = 1012DF550F4252BD004794DB /* GTMAbstractDOListener.m */; }; - 10998E8F0F4B593E007F179D /* GTMTransientRootProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 10A4028E0F44DB2B003B511C /* GTMTransientRootProxy.m */; }; - 10998E920F4B5952007F179D /* GTMTransientRootProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 10A4028F0F44DB2B003B511C /* GTMTransientRootProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10998EF40F4B5D1A007F179D /* GTMTransientRootPortProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 10998EF20F4B5D1A007F179D /* GTMTransientRootPortProxy.m */; }; - 10998EF50F4B5D1A007F179D /* GTMTransientRootPortProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 10998EF30F4B5D1A007F179D /* GTMTransientRootPortProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; 33C372A60DD8A88500E97817 /* GTMNSString+URLArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = 33C372A40DD8A88500E97817 /* GTMNSString+URLArguments.h */; settings = {ATTRIBUTES = (Public, ); }; }; 33C372A70DD8A88500E97817 /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = 33C372A50DD8A88500E97817 /* GTMNSString+URLArguments.m */; }; 33C374380DD8D44800E97817 /* GTMNSDictionary+URLArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = 33C374360DD8D44800E97817 /* GTMNSDictionary+URLArguments.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -54,53 +16,30 @@ 444B3B7719F6D24000B9191E /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 444B3B7619F6D24000B9191E /* CoreServices.framework */; }; 629445400EDDF647009295EA /* GTMNSArray+Merge.h in Headers */ = {isa = PBXBuildFile; fileRef = 6294453E0EDDF647009295EA /* GTMNSArray+Merge.h */; settings = {ATTRIBUTES = (Public, ); }; }; 629445410EDDF647009295EA /* GTMNSArray+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 6294453F0EDDF647009295EA /* GTMNSArray+Merge.m */; }; - 7F3EB38E0E5E09C700A7A75E /* GTMNSImage+Scaling.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F3EB38C0E5E09C700A7A75E /* GTMNSImage+Scaling.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7F3EB38F0E5E09C700A7A75E /* GTMNSImage+Scaling.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F3EB38D0E5E09C700A7A75E /* GTMNSImage+Scaling.m */; }; - 7F3EB5540E5F0B0400A7A75E /* GTMUnitTestingImage.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BEEA90A0DA7446300894774 /* GTMUnitTestingImage.tiff */; }; - 7F4C015F1055AD4200F88238 /* GTMUILocalizerWindow1State.10_4_SDK.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 7F4C015E1055AD4200F88238 /* GTMUILocalizerWindow1State.10_4_SDK.gtmUTState */; }; 7F511DF90F4B0378009F41B6 /* GTMNSColor+Luminance.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F511DF30F4B0378009F41B6 /* GTMNSColor+Luminance.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7F511DFA0F4B0378009F41B6 /* GTMNSColor+Luminance.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F511DF40F4B0378009F41B6 /* GTMNSColor+Luminance.m */; }; - 7F6840D2105375A70057F4FA /* GTMUILocalizerTestWindow_10_4.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7F6840D1105375A70057F4FA /* GTMUILocalizerTestWindow_10_4.xib */; }; 7F97DB31104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCellTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F97DB2F104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCellTest.m */; }; 7F97DB32104EBCA0004DDDEE /* GTMFadeTruncatingTextFieldCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F97DB2D104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7F97DB33104EBCA3004DDDEE /* GTMFadeTruncatingTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F97DB2E104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCell.m */; }; - 7F97DBA4104ED861004DDDEE /* GTMFadeTruncatingTextFieldCellTest1.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 7F97DBA2104ED861004DDDEE /* GTMFadeTruncatingTextFieldCellTest1.tiff */; }; - 7F97DBA5104ED861004DDDEE /* GTMFadeTruncatingTextFieldCellTest2.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 7F97DBA3104ED861004DDDEE /* GTMFadeTruncatingTextFieldCellTest2.tiff */; }; - 7FF768E31051B17900D34F4B /* GTMNSImage+SearchCacheTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF768E11051B17900D34F4B /* GTMNSImage+SearchCacheTest.m */; }; - 7FF768E41051B17E00D34F4B /* GTMNSImage+SearchCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FF768DF1051B17900D34F4B /* GTMNSImage+SearchCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FF768E51051B17E00D34F4B /* GTMNSImage+SearchCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FF768E01051B17900D34F4B /* GTMNSImage+SearchCache.m */; }; 8207B89B0FEA7A9E008A527B /* GTMWindowSheetController.h in Headers */ = {isa = PBXBuildFile; fileRef = 8207B8970FEA7A98008A527B /* GTMWindowSheetController.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8207B89C0FEA7AA1008A527B /* GTMWindowSheetController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8207B8980FEA7A98008A527B /* GTMWindowSheetController.m */; }; 8207B89D0FEA7AA6008A527B /* GTMWindowSheetControllerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8207B8990FEA7A98008A527B /* GTMWindowSheetControllerTest.m */; }; - 84B91B8B0EA3CC2E0087500F /* GTMUnitTestingImage.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 84B91B890EA3CC2E0087500F /* GTMUnitTestingImage.10.6.tiff */; }; - 84B91B8C0EA3CC2E0087500F /* GTMUnitTestingWindow.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 84B91B8A0EA3CC2E0087500F /* GTMUnitTestingWindow.10.6.tiff */; }; - 8B0E65510FD80D5E00461C4A /* GTMHotKeyTextField.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8B0E653F0FD80D5E00461C4A /* GTMHotKeyTextField.strings */; }; + 8B07C60E1D99B01D0054728B /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B07C60D1D99B01D0054728B /* XCTest.framework */; }; + 8B07C60F1D99B01D0054728B /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B07C60D1D99B01D0054728B /* XCTest.framework */; }; + 8B07C6101D99B01D0054728B /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B07C60D1D99B01D0054728B /* XCTest.framework */; }; + 8B07C6111D99B01D0054728B /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B07C60D1D99B01D0054728B /* XCTest.framework */; }; 8B158A9B10A8C31100C93125 /* GTMNSAnimation+Duration.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B158A6010A8BE4500C93125 /* GTMNSAnimation+Duration.m */; }; 8B158ADE10A8C42000C93125 /* GTMNSAnimation+Duration.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B158A5F10A8BE4500C93125 /* GTMNSAnimation+Duration.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8B17FD15117638D500E7A908 /* GTMFoundationUnitTestingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B17FD13117638D500E7A908 /* GTMFoundationUnitTestingUtilities.m */; }; 8B17FD16117638D500E7A908 /* GTMFoundationUnitTestingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B17FD13117638D500E7A908 /* GTMFoundationUnitTestingUtilities.m */; }; 8B17FD1A117638F400E7A908 /* GTMAppKitUnitTestingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B17FD18117638F400E7A908 /* GTMAppKitUnitTestingUtilities.m */; }; - 8B17FE091176672300E7A908 /* GTMAppKitUnitTestingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B17FD18117638F400E7A908 /* GTMAppKitUnitTestingUtilities.m */; }; - 8B17FE0B1176673400E7A908 /* GTMFoundationUnitTestingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B17FD13117638D500E7A908 /* GTMFoundationUnitTestingUtilities.m */; }; - 8B1801A20E2533D500280961 /* GTMLargeTypeWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B1801A00E2533D500280961 /* GTMLargeTypeWindow.m */; }; - 8B1801A30E2533D500280961 /* GTMLargeTypeWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B1801A10E2533D500280961 /* GTMLargeTypeWindow.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B1801AE0E25341B00280961 /* GTMLargeTypeWindowImageTest.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B1801A80E25341B00280961 /* GTMLargeTypeWindowImageTest.gtmUTState */; }; - 8B1801B20E25341B00280961 /* GTMLargeTypeWindowLongTextTest.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B1801AC0E25341B00280961 /* GTMLargeTypeWindowLongTextTest.gtmUTState */; }; - 8B1801B30E25341B00280961 /* GTMLargeTypeWindowShortTextTest.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B1801AD0E25341B00280961 /* GTMLargeTypeWindowShortTextTest.gtmUTState */; }; - 8B1802420E25592200280961 /* GTMLargeTypeWindowMediumTextTest.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B1802410E25592200280961 /* GTMLargeTypeWindowMediumTextTest.gtmUTState */; }; - 8B1B49180E5F8E2100A08972 /* GTMExceptionalInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B1B49160E5F8E2100A08972 /* GTMExceptionalInlines.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B1B49190E5F8E2100A08972 /* GTMExceptionalInlines.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B1B49170E5F8E2100A08972 /* GTMExceptionalInlines.m */; }; - 8B21BE9211532CDC00DD2686 /* GTMNSAnimatablePropertyContainerTest.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8B21BE9111532CDC00DD2686 /* GTMNSAnimatablePropertyContainerTest.xib */; }; 8B21DE56117E5CB7000E004F /* GTMLocalizedString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B21DE54117E5CB7000E004F /* GTMLocalizedString.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B2789960EF855FB00D68C01 /* GTMUnitTestingWindow.10.5.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8B2789950EF855FB00D68C01 /* GTMUnitTestingWindow.10.5.6.tiff */; }; 8B29078711F8D1BF0064F50F /* GTMNSFileHandle+UniqueName.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B29078511F8D1BF0064F50F /* GTMNSFileHandle+UniqueName.m */; }; 8B29080911F8E1630064F50F /* GTMNSFileHandle+UniqueName.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B29078511F8D1BF0064F50F /* GTMNSFileHandle+UniqueName.m */; }; 8B29080A11F8E1670064F50F /* GTMNSFileHandle+UniqueName.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B29078411F8D1BF0064F50F /* GTMNSFileHandle+UniqueName.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3345890DBF8A55009FD32C /* GTMNSAppleEvent+HandlerTest.applescript in AppleScript */ = {isa = PBXBuildFile; fileRef = 8B3344200DBF7A36009FD32C /* GTMNSAppleEvent+HandlerTest.applescript */; settings = {ATTRIBUTES = (Debug, ); }; }; + 8B2C72E81D9EBB6E0027BD14 /* GTMUnitTestDevLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B2C72E71D9EBB6E0027BD14 /* GTMUnitTestDevLog.m */; }; 8B3590160E8190FA0041E21C /* GTMTestTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3590150E8190FA0041E21C /* GTMTestTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8B35901B0E8191750041E21C /* GTMTestTimerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B35901A0E8191750041E21C /* GTMTestTimerTest.m */; }; - 8B3AA9F10E033E23007E31B5 /* GTMValidatingContainers.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3AA9EF0E033E23007E31B5 /* GTMValidatingContainers.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B3AA9F20E033E23007E31B5 /* GTMValidatingContainers.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3AA9F00E033E23007E31B5 /* GTMValidatingContainers.m */; }; 8B3E292E0EEB53F8000681D8 /* GTMCarbonEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3E292A0EEB53F3000681D8 /* GTMCarbonEvent.m */; }; 8B3E292F0EEB53F8000681D8 /* GTMCarbonEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3E292B0EEB53F3000681D8 /* GTMCarbonEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8B3E2A3F0EEB564D000681D8 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F42E09AD0D19A62F00D5DDE0 /* Carbon.framework */; }; @@ -110,128 +49,43 @@ 8B409BE60F9442C800DF540E /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8B409BE50F9442C800DF540E /* Localizable.strings */; }; 8B409E8C0F952C2C00DF540E /* GTMUILocalizerTestWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8B409E8B0F952C2C00DF540E /* GTMUILocalizerTestWindow.xib */; }; 8B409E9A0F952CE600DF540E /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8B409E990F952CE600DF540E /* Localizable.strings */; }; - 8B409EC40F9530C200DF540E /* GTMUILocalizerWindow1State.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B409EC30F9530C200DF540E /* GTMUILocalizerWindow1State.gtmUTState */; }; - 8B409EE90F95325000DF540E /* GTMUILocalizerWindow2State.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B409EE80F95325000DF540E /* GTMUILocalizerWindow2State.gtmUTState */; }; - 8B409EF40F95331500DF540E /* GTMUILocalizerMenuState.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B409EF30F95331500DF540E /* GTMUILocalizerMenuState.gtmUTState */; }; 8B409F060F95341E00DF540E /* GTMUILocalizerTestView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8B409F050F95341E00DF540E /* GTMUILocalizerTestView.xib */; }; - 8B409F130F95352500DF540E /* GTMUILocalizerView2State.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B409F110F95352500DF540E /* GTMUILocalizerView2State.gtmUTState */; }; - 8B409F140F95352500DF540E /* GTMUILocalizerView1State.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B409F120F95352500DF540E /* GTMUILocalizerView1State.gtmUTState */; }; 8B414E881226FB1000D0064F /* GTMServiceManagement.c in Sources */ = {isa = PBXBuildFile; fileRef = 8B414E861226FB1000D0064F /* GTMServiceManagement.c */; }; 8B414E891226FB1000D0064F /* GTMServiceManagement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B414E871226FB1000D0064F /* GTMServiceManagement.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8B414E8B1226FB1800D0064F /* GTMServiceManagementTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B414E8A1226FB1800D0064F /* GTMServiceManagementTest.m */; }; 8B45A03A0DA46A2A001148C5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; - 8B45A0B80DA46A2F001148C5 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F42E089B0D199B1800D5DDE0 /* SenTestingKit.framework */; }; - 8B45A0D50DA46A57001148C5 /* GTMNSObject+UnitTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = F48FE29C0D198D36009257D2 /* GTMNSObject+UnitTesting.m */; }; - 8B45A0D60DA46A57001148C5 /* GTMNSObject+BindingUnitTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B1A14E90D900BC800CA1E8E /* GTMNSObject+BindingUnitTesting.m */; }; 8B45A19A0DA46AAA001148C5 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B45A1990DA46AAA001148C5 /* QuartzCore.framework */; }; 8B45A2040DA46DF6001148C5 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; 8B45A21A0DA46E1D001148C5 /* GTMGeometryUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F48FE27F0D198D0E009257D2 /* GTMGeometryUtils.m */; }; - 8B45A21E0DA46E34001148C5 /* GTMObjC2Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6F32040DA34A1B0052CA40 /* GTMObjC2Runtime.m */; }; 8B45A2AC0DA49C47001148C5 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B45A2A80DA49C47001148C5 /* main.m */; }; 8B45A2B30DA49CA9001148C5 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; - 8B45A2DF0DA51A7E001148C5 /* GTMUnitTestingTest.nib in Resources */ = {isa = PBXBuildFile; fileRef = 8B45A2DE0DA51A7E001148C5 /* GTMUnitTestingTest.nib */; }; - 8B45A2E20DA51ABC001148C5 /* GTMUnitTestingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B45A2E10DA51ABC001148C5 /* GTMUnitTestingTest.m */; }; - 8B45A5F80DA5EB9F001148C5 /* GTMUnitTestingWindow.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B45A5F50DA5EB9F001148C5 /* GTMUnitTestingWindow.gtmUTState */; }; - 8B45A5F90DA5EB9F001148C5 /* GTMUnitTestingTestApp.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B45A5F60DA5EB9F001148C5 /* GTMUnitTestingTestApp.gtmUTState */; }; - 8B45A6BB0DA67DD5001148C5 /* GTMUnitTestingImage.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B45A6B90DA67DD5001148C5 /* GTMUnitTestingImage.gtmUTState */; }; - 8B4BD7E71200E5EA009C7060 /* GTMUILocalizerWindow3State.10_4_SDK.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8B4BD7E61200E5EA009C7060 /* GTMUILocalizerWindow3State.10_4_SDK.gtmUTState */; }; 8B4D78080E40AFFA00EFEDD8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B45A1990DA46AAA001148C5 /* QuartzCore.framework */; }; - 8B4D7A150E40D79200EFEDD8 /* GTMObjC2Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6F32040DA34A1B0052CA40 /* GTMObjC2Runtime.m */; }; - 8B55479C0DB3B7A50014CC1C /* GTMAppKit+UnitTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B55479B0DB3B7A50014CC1C /* GTMAppKit+UnitTesting.m */; }; - 8B5547B90DB3BB220014CC1C /* GTMAppKit+UnitTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B55479B0DB3B7A50014CC1C /* GTMAppKit+UnitTesting.m */; }; - 8B58E9950E547EB000A0E02E /* GTMGetURLHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B58E9940E547EB000A0E02E /* GTMGetURLHandler.m */; }; 8B61FDC00E4CDB8000FF9C21 /* GTMStackTrace.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B61FDBF0E4CDB8000FF9C21 /* GTMStackTrace.m */; }; 8B6C15930F356E6400E51E5D /* GTMNSObject+KeyValueObserving.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B6C15910F356E6400E51E5D /* GTMNSObject+KeyValueObserving.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8B6C15940F356E6400E51E5D /* GTMNSObject+KeyValueObserving.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6C15920F356E6400E51E5D /* GTMNSObject+KeyValueObserving.m */; }; 8B6F32160DA34C830052CA40 /* GTMMethodCheckTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6F31F10DA347720052CA40 /* GTMMethodCheckTest.m */; }; 8B6F4B630E8856CA00425D9F /* GTMDebugThreadValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B6F4B610E8856CA00425D9F /* GTMDebugThreadValidation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8B6F4B640E8856CA00425D9F /* GTMDebugThreadValidation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6F4B620E8856CA00425D9F /* GTMDebugThreadValidation.m */; }; - 8B7AD49A0DABBB5800B84F4A /* GTMNSBezierPath+ShadingTest.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8B7AD4970DABBB5800B84F4A /* GTMNSBezierPath+ShadingTest.tiff */; }; - 8B7AD49B0DABBB5800B84F4A /* GTMNSBezierPath+CGPathTest.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8B7AD4980DABBB5800B84F4A /* GTMNSBezierPath+CGPathTest.tiff */; }; - 8B7AD49C0DABBB5800B84F4A /* GTMNSBezierPath+RoundRectTest.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8B7AD4990DABBB5800B84F4A /* GTMNSBezierPath+RoundRectTest.tiff */; }; - 8B7AD4AE0DABBFEE00B84F4A /* GTMUnitTestingBindingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7AD4AD0DABBFEE00B84F4A /* GTMUnitTestingBindingTest.m */; }; - 8B7DCB9B0DFF0E850017E983 /* GTMFourCharCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE2836B0DED0F130035B3F8 /* GTMFourCharCode.m */; }; 8B7DCBA50DFF0EFF0017E983 /* GoogleToolboxForMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F42E086D0D199A5B00D5DDE0 /* GoogleToolboxForMac.framework */; }; 8B7DCBBD0DFF0F5D0017E983 /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6F31EF0DA347720052CA40 /* GTMMethodCheck.m */; }; 8B7DCBC10DFF0F7F0017E983 /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6F31EF0DA347720052CA40 /* GTMMethodCheck.m */; }; 8B7DCBC20DFF0F7F0017E983 /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6F31EF0DA347720052CA40 /* GTMMethodCheck.m */; }; 8B7DCBC30DFF0F7F0017E983 /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6F31EF0DA347720052CA40 /* GTMMethodCheck.m */; }; 8B7DCBC40DFF0F800017E983 /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6F31EF0DA347720052CA40 /* GTMMethodCheck.m */; }; - 8B7DCBD20DFF16070017E983 /* GTMNSAppleScript+Handler.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3344180DBF7A36009FD32C /* GTMNSAppleScript+Handler.m */; }; - 8B7DCBD30DFF16070017E983 /* GTMNSAppleEventDescriptor+Handler.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B33441B0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Handler.m */; }; - 8B7DCBD40DFF16070017E983 /* GTMNSAppleEventDescriptor+Foundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B33441E0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Foundation.m */; }; - 8B7DCBE20DFF18720017E983 /* GTMDevLogUnitTestingBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCBE10DFF18720017E983 /* GTMDevLogUnitTestingBridge.m */; }; - 8B7DCBED0DFF1A4F0017E983 /* GTMUnitTestDevLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCBEC0DFF1A4F0017E983 /* GTMUnitTestDevLog.m */; }; - 8B7DCBEE0DFF1A4F0017E983 /* GTMUnitTestDevLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCBEC0DFF1A4F0017E983 /* GTMUnitTestDevLog.m */; }; - 8B7DCBEF0DFF1A4F0017E983 /* GTMUnitTestDevLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCBEC0DFF1A4F0017E983 /* GTMUnitTestDevLog.m */; }; 8B7DCE190DFF39850017E983 /* GTMSenTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCE180DFF39850017E983 /* GTMSenTestCase.m */; }; 8B7DCE1A0DFF39850017E983 /* GTMSenTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCE180DFF39850017E983 /* GTMSenTestCase.m */; }; 8B7DCE1B0DFF39850017E983 /* GTMSenTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCE180DFF39850017E983 /* GTMSenTestCase.m */; }; - 8B7DCEF10E002C210017E983 /* GTMDevLogUnitTestingBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCBE10DFF18720017E983 /* GTMDevLogUnitTestingBridge.m */; }; - 8B8B10290EEB8B1600E543D0 /* GTMHotKeyTextFieldTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F4A420EE0EDDF8E000397A11 /* GTMHotKeyTextFieldTest.m */; }; + 8B82CEEB1D9B4DA1007182AA /* GTMFoundationUnitTestingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B17FD13117638D500E7A908 /* GTMFoundationUnitTestingUtilities.m */; }; 8B8B10F90EEB8B9E00E543D0 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F42E09AD0D19A62F00D5DDE0 /* Carbon.framework */; }; 8B8EC87D0EF17C270044D13F /* GTMNSFileManager+Carbon.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8EC87B0EF17C270044D13F /* GTMNSFileManager+Carbon.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8B8EC87E0EF17C270044D13F /* GTMNSFileManager+Carbon.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B8EC87C0EF17C270044D13F /* GTMNSFileManager+Carbon.m */; }; - 8BA01B5D0F144BD800926923 /* GTMNSWorkspace+Running.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BA01B5B0F144BD800926923 /* GTMNSWorkspace+Running.m */; }; - 8BA01B5E0F144BD800926923 /* GTMNSWorkspace+Running.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA01B5C0F144BD800926923 /* GTMNSWorkspace+Running.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BA7148111B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA7147E11B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.tiff */; }; - 8BA7148211B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA7147F11B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.tiff */; }; - 8BA7148311B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA7148011B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.tiff */; }; - 8BA9FAF9119CA2E300E264C3 /* GTMUnitTestingTestApp.10.6.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FAF8119CA2E300E264C3 /* GTMUnitTestingTestApp.10.6.gtmUTState */; }; - 8BA9FB23119CA3F200E264C3 /* GTMUnitTestingWindow.10.6.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FB22119CA3F200E264C3 /* GTMUnitTestingWindow.10.6.gtmUTState */; }; - 8BA9FB8F119CAE7200E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FB8E119CAE7200E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.tiff */; }; - 8BA9FB95119CAEDE00E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FB94119CAEDE00E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.tiff */; }; - 8BA9FB9C119CAF0200E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FB9B119CAF0200E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.tiff */; }; - 8BA9FBA1119CAF6600E264C3 /* GTMNSBezierPath+ShadingTest.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBA0119CAF6600E264C3 /* GTMNSBezierPath+ShadingTest.10.6.tiff */; }; - 8BA9FBA3119CAF9500E264C3 /* GTMNSBezierPath+RoundRectTest.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBA2119CAF9500E264C3 /* GTMNSBezierPath+RoundRectTest.10.6.tiff */; }; - 8BA9FBA7119CB00000E264C3 /* GTMNSBezierPath+RoundRectTest.10.6.x86_64.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBA6119CB00000E264C3 /* GTMNSBezierPath+RoundRectTest.10.6.x86_64.tiff */; }; - 8BA9FBAB119CB06500E264C3 /* GTMLargeTypeWindowShortTextTest.10.6.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBAA119CB06500E264C3 /* GTMLargeTypeWindowShortTextTest.10.6.gtmUTState */; }; - 8BA9FBAD119CB08200E264C3 /* GTMLargeTypeWindowMediumTextTest.10.6.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBAC119CB08200E264C3 /* GTMLargeTypeWindowMediumTextTest.10.6.gtmUTState */; }; - 8BA9FBBB119CB0C400E264C3 /* GTMLargeTypeWindowLongTextTest.10.6.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBBA119CB0C400E264C3 /* GTMLargeTypeWindowLongTextTest.10.6.gtmUTState */; }; - 8BA9FBBD119CB14C00E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-0.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBBC119CB14C00E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-0.10.6.tiff */; }; - 8BA9FBC0119CB17600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBBF119CB17600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.10.6.tiff */; }; - 8BA9FBC8119CB19A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-0.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBC7119CB19A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-0.10.6.tiff */; }; - 8BA9FBDB119CB1E600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBDA119CB1E600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.10.6.tiff */; }; - 8BA9FBDE119CB20A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-0.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBDD119CB20A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-0.10.6.tiff */; }; - 8BA9FBE1119CB23000E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-1.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBE0119CB23000E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-1.10.6.tiff */; }; - 8BA9FBE4119CB24D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-2.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBE3119CB24D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-2.10.6.tiff */; }; - 8BA9FBE7119CB26A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-1.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBE6119CB26A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-1.10.6.tiff */; }; - 8BA9FBEA119CB28500E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-2.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBE9119CB28500E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-2.10.6.tiff */; }; - 8BA9FBED119CB2A400E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-3.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBEC119CB2A400E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-3.10.6.tiff */; }; - 8BA9FBF0119CB2BF00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBEF119CB2BF00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.10.6.tiff */; }; - 8BA9FBF3119CB2D600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBF2119CB2D600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.10.6.tiff */; }; - 8BA9FBF6119CB2EF00E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-0.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBF5119CB2EF00E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-0.10.6.tiff */; }; - 8BA9FBFD119CB30D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-1.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBFC119CB30D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-1.10.6.tiff */; }; - 8BA9FC00119CB32500E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-2.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FBFF119CB32500E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-2.10.6.tiff */; }; - 8BA9FC44119CB36100E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-3.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC43119CB36100E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-3.10.6.tiff */; }; - 8BA9FC47119CB37F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-0.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC46119CB37F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-0.10.6.tiff */; }; - 8BA9FC5D119CB39D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-1.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC5C119CB39D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-1.10.6.tiff */; }; - 8BA9FC60119CB3B500E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-2.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC5F119CB3B500E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-2.10.6.tiff */; }; - 8BA9FC63119CB3CD00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-4.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC62119CB3CD00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-4.10.6.tiff */; }; - 8BA9FC66119CB3E200E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-0.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC65119CB3E200E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-0.10.6.tiff */; }; - 8BA9FC69119CB3F900E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-1.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC68119CB3F900E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-1.10.6.tiff */; }; - 8BA9FC6C119CB43F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-2.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC6B119CB43F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-2.10.6.tiff */; }; - 8BA9FC6F119CB46000E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-1.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC6E119CB46000E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-1.10.6.tiff */; }; - 8BA9FC72119CB47900E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-2.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC71119CB47900E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-2.10.6.tiff */; }; - 8BA9FC75119CB48F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-0.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC74119CB48F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-0.10.6.tiff */; }; - 8BA9FC78119CB4A100E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-1.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC77119CB4A100E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-1.10.6.tiff */; }; - 8BA9FC7B119CB4B300E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-2.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BA9FC7A119CB4B300E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-2.10.6.tiff */; }; - 8BAA9B570F7B4C2400DF4F12 /* GTMHotKeyTextFieldTest.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8BAA9B560F7B4C2400DF4F12 /* GTMHotKeyTextFieldTest.xib */; }; + 8BA983C81D9AE7E6009724B5 /* GTMUnitTestingTest.nib in Resources */ = {isa = PBXBuildFile; fileRef = 8BA983C51D9AE7E6009724B5 /* GTMUnitTestingTest.nib */; }; 8BAA9E380F7C19D500DF4F12 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8BAA9E360F7C19D500DF4F12 /* MainMenu.xib */; }; 8BAA9EF20F7C2AB500DF4F12 /* GTMCarbonEventTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3E29290EEB53F3000681D8 /* GTMCarbonEventTest.m */; }; - 8BAA9EF30F7C2AB500DF4F12 /* GTMGetURLHandlerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B8B10FF0EEB8CD000E543D0 /* GTMGetURLHandlerTest.m */; }; - 8BAA9EF40F7C2AB500DF4F12 /* GTMLargeTypeWindowTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B1801A40E2533DB00280961 /* GTMLargeTypeWindowTest.m */; }; - 8BAA9EF50F7C2AB500DF4F12 /* GTMLinearRGBShadingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F43E44790D4918B20041161F /* GTMLinearRGBShadingTest.m */; }; 8BAA9EF60F7C2AB500DF4F12 /* GTMLoginItemsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F43DCEC60D47BEA000959A62 /* GTMLoginItemsTest.m */; }; 8BAA9EF70F7C2AB500DF4F12 /* GTMNSBezierPath+CGPathTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F428FF010D48E55E00382ED1 /* GTMNSBezierPath+CGPathTest.m */; }; 8BAA9EF80F7C2AB500DF4F12 /* GTMNSBezierPath+RoundRectTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F48FE2830D198D0E009257D2 /* GTMNSBezierPath+RoundRectTest.m */; }; - 8BAA9EF90F7C2AB500DF4F12 /* GTMNSBezierPath+ShadingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F47F1C110D490BC000925B8F /* GTMNSBezierPath+ShadingTest.m */; }; 8BAA9EFA0F7C2AB500DF4F12 /* GTMNSColor+LuminanceTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F511DF50F4B0378009F41B6 /* GTMNSColor+LuminanceTest.m */; }; - 8BAA9EFB0F7C2AB500DF4F12 /* GTMNSImage+ScalingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F3EB3930E5E0A2100A7A75E /* GTMNSImage+ScalingTest.m */; }; - 8BAA9EFC0F7C2AB500DF4F12 /* GTMNSWorkspace+RunningTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BA01B5F0F144BE500926923 /* GTMNSWorkspace+RunningTest.m */; }; - 8BB77A0511B5A09900AB31AF /* GTMGoogleSearchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BB77A0311B5A09900AB31AF /* GTMGoogleSearchTest.m */; }; - 8BB77A0611B5A0A100AB31AF /* GTMGoogleSearch.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BB77A0211B5A09900AB31AF /* GTMGoogleSearch.m */; }; - 8BB7802E11B6C4EA00AB31AF /* GTMGoogleSearch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BB77A0111B5A09900AB31AF /* GTMGoogleSearch.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8BBD1F8C1519258A003152F0 /* GTMNSThread+Blocks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BBD1F8A1519258A003152F0 /* GTMNSThread+Blocks.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8BBD1F8D1519258A003152F0 /* GTMNSThread+Blocks.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BBD1F8B1519258A003152F0 /* GTMNSThread+Blocks.m */; }; 8BBD1F8F1519271A003152F0 /* GTMNSThread+BlocksTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BBD1F8E1519271A003152F0 /* GTMNSThread+BlocksTest.m */; }; @@ -241,22 +95,8 @@ 8BC851D4127A19020046E0FB /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BC851D3127A19020046E0FB /* CoreFoundation.framework */; }; 8BC85202127A19370046E0FB /* GTMServiceManagementTestingHarness.c in Sources */ = {isa = PBXBuildFile; fileRef = 8BC85201127A19370046E0FB /* GTMServiceManagementTestingHarness.c */; }; 8BC8520E127A19B60046E0FB /* GTMServiceManagementTestingHarness in Resources */ = {isa = PBXBuildFile; fileRef = 8BC85131127A18AE0046E0FB /* GTMServiceManagementTestingHarness */; }; - 8BCB59F011C00ED6009B6C40 /* GTMNSScanner+Unsigned.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BCB59EE11C00ED6009B6C40 /* GTMNSScanner+Unsigned.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BCB59F111C00ED6009B6C40 /* GTMNSScanner+Unsigned.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCB59EF11C00ED6009B6C40 /* GTMNSScanner+Unsigned.m */; }; 8BD35B910FB22980009058F5 /* GTMNSScanner+JSON.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD35B8E0FB22980009058F5 /* GTMNSScanner+JSON.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8BD35B920FB22980009058F5 /* GTMNSScanner+JSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD35B8F0FB22980009058F5 /* GTMNSScanner+JSON.m */; }; - 8BDB8A991152E1B200C411B1 /* GTMNSAnimatablePropertyContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BDB8A971152E1B200C411B1 /* GTMNSAnimatablePropertyContainer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BDB8A9A1152E1B200C411B1 /* GTMNSAnimatablePropertyContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BDB8A981152E1B200C411B1 /* GTMNSAnimatablePropertyContainer.m */; }; - 8BDB8C3A115329EC00C411B1 /* GTMNSAnimatablePropertyContainerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BDB8C39115329EC00C411B1 /* GTMNSAnimatablePropertyContainerTest.m */; }; - 8BE281B00DEC7E930035B3F8 /* GTMNSAppleScript+Handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B3344190DBF7A36009FD32C /* GTMNSAppleScript+Handler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BE281B10DEC7E930035B3F8 /* GTMNSAppleEventDescriptor+Handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B33441C0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Handler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BE281B20DEC7E930035B3F8 /* GTMNSAppleEventDescriptor+Foundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B33441F0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Foundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BE283730DED13AB0035B3F8 /* GTMFourCharCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BE2836D0DED0F130035B3F8 /* GTMFourCharCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BE839AA0E8AF72E00C611B0 /* GTMDebugThreadValidationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE839A80E8AF72500C611B0 /* GTMDebugThreadValidationTest.m */; }; - 8BE869730DBE89C100749827 /* GTMNSBezierPath+RoundRectTest.x86_64.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BE869720DBE89C100749827 /* GTMNSBezierPath+RoundRectTest.x86_64.tiff */; }; - 8BEEA90D0DA7446300894774 /* GTMUnitTestingImage.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BEEA90A0DA7446300894774 /* GTMUnitTestingImage.tiff */; }; - 8BEEA90E0DA7446300894774 /* GTMUnitTestingWindow.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BEEA90B0DA7446300894774 /* GTMUnitTestingWindow.tiff */; }; - 8BEEA90F0DA7446300894774 /* GTMUnitTestingView.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 8BEEA90C0DA7446300894774 /* GTMUnitTestingView.tiff */; }; 8BF2368F13CF67CB00F3FD82 /* GTMKeyValueAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BF2368D13CF67CB00F3FD82 /* GTMKeyValueAnimation.h */; settings = {ATTRIBUTES = (Public, ); }; }; 8BF2369013CF67CB00F3FD82 /* GTMKeyValueAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF2368E13CF67CB00F3FD82 /* GTMKeyValueAnimation.m */; }; 8BF2369213CF694C00F3FD82 /* GTMKeyValueAnimationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF2369113CF694C00F3FD82 /* GTMKeyValueAnimationTest.m */; }; @@ -265,44 +105,32 @@ 8BFE13B70FB0F2C0001BE894 /* GTMABAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BFE13B10FB0F2B9001BE894 /* GTMABAddressBook.m */; }; 8BFE13ED0FB0F2D8001BE894 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; 8BFE13EE0FB0F2D8001BE894 /* GoogleToolboxForMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F42E086D0D199A5B00D5DDE0 /* GoogleToolboxForMac.framework */; }; - 8BFE13EF0FB0F2D8001BE894 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F42E089B0D199B1800D5DDE0 /* SenTestingKit.framework */; }; 8BFE14C10FB0F333001BE894 /* GTMABAddressBookTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BFE13B30FB0F2B9001BE894 /* GTMABAddressBookTest.m */; }; 8BFE158D0FB0F34C001BE894 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BFE158C0FB0F34C001BE894 /* AddressBook.framework */; }; 8BFE158E0FB0F34C001BE894 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BFE158C0FB0F34C001BE894 /* AddressBook.framework */; }; 8BFE15970FB0F3C9001BE894 /* GTMSenTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCE180DFF39850017E983 /* GTMSenTestCase.m */; }; 8BFE17F40FB1F6E5001BE894 /* GTMABAddressBook.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8BFE13B20FB0F2B9001BE894 /* GTMABAddressBook.strings */; }; 8BFE17F50FB1F6EA001BE894 /* phone.png in Resources */ = {isa = PBXBuildFile; fileRef = 8BFE13B50FB0F2B9001BE894 /* phone.png */; }; - 8BFE6E7A1282371200B5C894 /* GTMAbstractDOListenerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1012DF590F425525004794DB /* GTMAbstractDOListenerTest.m */; }; - 8BFE6E7B1282371200B5C894 /* GTMCalculatedRangeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F47F1D2F0D4914AD00925B8F /* GTMCalculatedRangeTest.m */; }; - 8BFE6E7C1282371200B5C894 /* GTMExceptionalInlinesTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B1B491B0E5F904C00A08972 /* GTMExceptionalInlinesTest.m */; }; 8BFE6E7D1282371200B5C894 /* GTMFileSystemKQueueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F49FA88A0EEF303D00077669 /* GTMFileSystemKQueueTest.m */; }; - 8BFE6E7E1282371200B5C894 /* GTMFourCharCodeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE2836C0DED0F130035B3F8 /* GTMFourCharCodeTest.m */; }; 8BFE6E7F1282371200B5C894 /* GTMGeometryUtilsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F48FE2800D198D0E009257D2 /* GTMGeometryUtilsTest.m */; }; 8BFE6E801282371200B5C894 /* GTMLightweightProxyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F41711340ECDFBD500B9B276 /* GTMLightweightProxyTest.m */; }; 8BFE6E811282371200B5C894 /* GTMLocalizedStringTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B455F5D1193870A00ABD707 /* GTMLocalizedStringTest.m */; }; 8BFE6E821282371200B5C894 /* GTMLogger+ASLTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F98681950E2C20C100CEE8BF /* GTMLogger+ASLTest.m */; }; 8BFE6E831282371200B5C894 /* GTMLoggerRingBufferWriterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F95803F80E2FB0760049A088 /* GTMLoggerRingBufferWriterTest.m */; }; 8BFE6E841282371200B5C894 /* GTMLoggerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F98680B10E2C15C300CEE8BF /* GTMLoggerTest.m */; }; - 8BFE6E851282371200B5C894 /* GTMNSAppleEventDescriptor+FoundationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B33441D0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+FoundationTest.m */; }; - 8BFE6E861282371200B5C894 /* GTMNSAppleEventDescriptor+HandlerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B33441A0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+HandlerTest.m */; }; - 8BFE6E871282371200B5C894 /* GTMNSAppleScript+HandlerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3344170DBF7A36009FD32C /* GTMNSAppleScript+HandlerTest.m */; }; 8BFE6E881282371200B5C894 /* GTMNSArray+MergeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 6294454B0EDDF89A009295EA /* GTMNSArray+MergeTest.m */; }; 8BFE6E891282371200B5C894 /* GTMNSData+zlibTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F43E4E600D4E5EC90041161F /* GTMNSData+zlibTest.m */; }; - 8BFE6E8A1282371200B5C894 /* GTMNSDictionary+CaseInsensitiveTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BFAD4C4104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitiveTest.m */; }; 8BFE6E8B1282371200B5C894 /* GTMNSDictionary+URLArgumentsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 33C3745E0DD8D85B00E97817 /* GTMNSDictionary+URLArgumentsTest.m */; }; - 8BFE6E8C1282371200B5C894 /* GTMNSEnumerator+FilterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F43E4DD80D4E56320041161F /* GTMNSEnumerator+FilterTest.m */; }; 8BFE6E8D1282371200B5C894 /* GTMNSFileHandle+UniqueNameTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B29078611F8D1BF0064F50F /* GTMNSFileHandle+UniqueNameTest.m */; }; 8BFE6E8E1282371200B5C894 /* GTMNSFileManager+CarbonTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B8EC87F0EF17C2F0044D13F /* GTMNSFileManager+CarbonTest.m */; }; 8BFE6E8F1282371200B5C894 /* GTMNSFileManager+PathTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F413908E0D75F63C00F72B31 /* GTMNSFileManager+PathTest.m */; }; 8BFE6E911282371200B5C894 /* GTMNSObject+KeyValueObservingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6C161B0F3580DA00E51E5D /* GTMNSObject+KeyValueObservingTest.m */; }; 8BFE6E921282371200B5C894 /* GTMNSScanner+JSONTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD35B900FB22980009058F5 /* GTMNSScanner+JSONTest.m */; }; - 8BFE6E931282371200B5C894 /* GTMNSScanner+UnsignedTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCB59F211C00EF6009B6C40 /* GTMNSScanner+UnsignedTest.m */; }; 8BFE6E941282371200B5C894 /* GTMNSString+FindFolderTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F42597780E23FE3A003BEA3E /* GTMNSString+FindFolderTest.m */; }; 8BFE6E951282371200B5C894 /* GTMNSString+HTMLTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F48FE2900D198D24009257D2 /* GTMNSString+HTMLTest.m */; }; 8BFE6E961282371200B5C894 /* GTMNSString+ReplaceTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F42597470E23AA57003BEA3E /* GTMNSString+ReplaceTest.m */; }; 8BFE6E971282371200B5C894 /* GTMNSString+URLArgumentsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 33C372AE0DD8A8D700E97817 /* GTMNSString+URLArgumentsTest.m */; }; 8BFE6E981282371200B5C894 /* GTMNSString+XMLTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F43E4C270D4E361D0041161F /* GTMNSString+XMLTest.m */; }; - 8BFE6E991282371200B5C894 /* GTMObjC2RuntimeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6F32050DA34A1B0052CA40 /* GTMObjC2RuntimeTest.m */; }; 8BFE6E9A1282371200B5C894 /* GTMPathTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F9FD945D0E1D30F80005867E /* GTMPathTest.m */; }; 8BFE6E9B1282371200B5C894 /* GTMRegexTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F437F55C0D50BC0A00F5C3A4 /* GTMRegexTest.m */; }; 8BFE6E9C1282371200B5C894 /* GTMScriptRunnerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F47A79870D746EE9002302AB /* GTMScriptRunnerTest.m */; }; @@ -311,14 +139,6 @@ 8BFE6E9F1282371200B5C894 /* GTMStackTraceTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F431221B0DD4E3B800F45252 /* GTMStackTraceTest.m */; }; 8BFE6EA01282371200B5C894 /* GTMStringEncodingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B1B9B8610FECD870084EE4B /* GTMStringEncodingTest.m */; }; 8BFE6EA11282371200B5C894 /* GTMSystemVersionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F48FE2E10D198E4C009257D2 /* GTMSystemVersionTest.m */; }; - 8BFE6EA21282371200B5C894 /* GTMTransientRootPortProxyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 108930840F4CCB380018D4A0 /* GTMTransientRootPortProxyTest.m */; }; - 8BFE6EA31282371200B5C894 /* GTMTransientRootProxyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 10A4028D0F44DB2B003B511C /* GTMTransientRootProxyTest.m */; }; - 8BFE6EA41282371200B5C894 /* GTMURITemplateTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F42866B71267340A0090FE0F /* GTMURITemplateTest.m */; }; - 8BFE6EA51282371200B5C894 /* GTMValidatingContainersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3AA9F70E033E5F007E31B5 /* GTMValidatingContainersTest.m */; }; - B71B91E21332CD680039B2CB /* GTMFadeTruncatingTextFieldCellTest5.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B71B91E01332CD680039B2CB /* GTMFadeTruncatingTextFieldCellTest5.tiff */; }; - B71B91E31332CD680039B2CB /* GTMFadeTruncatingTextFieldCellTest6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B71B91E11332CD680039B2CB /* GTMFadeTruncatingTextFieldCellTest6.tiff */; }; - B71B92371332DA380039B2CB /* GTMFadeTruncatingTextFieldCellTest7.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B71B92361332DA380039B2CB /* GTMFadeTruncatingTextFieldCellTest7.tiff */; }; - B7764E80133906B600AFDC7D /* GTMFadeTruncatingTextFieldCellTest8.tiff in Resources */ = {isa = PBXBuildFile; fileRef = B7764E7F133906B600AFDC7D /* GTMFadeTruncatingTextFieldCellTest8.tiff */; }; F413908F0D75F63C00F72B31 /* GTMNSFileManager+Path.h in Headers */ = {isa = PBXBuildFile; fileRef = F413908C0D75F63C00F72B31 /* GTMNSFileManager+Path.h */; settings = {ATTRIBUTES = (Public, ); }; }; F41390900D75F63C00F72B31 /* GTMNSFileManager+Path.m in Sources */ = {isa = PBXBuildFile; fileRef = F413908D0D75F63C00F72B31 /* GTMNSFileManager+Path.m */; }; F41711350ECDFBD500B9B276 /* GTMLightweightProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = F41711320ECDFBD500B9B276 /* GTMLightweightProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -330,21 +150,12 @@ F42597490E23AA57003BEA3E /* GTMNSString+Replace.m in Sources */ = {isa = PBXBuildFile; fileRef = F42597460E23AA57003BEA3E /* GTMNSString+Replace.m */; }; F42597790E23FE3A003BEA3E /* GTMNSString+FindFolder.h in Headers */ = {isa = PBXBuildFile; fileRef = F42597760E23FE3A003BEA3E /* GTMNSString+FindFolder.h */; settings = {ATTRIBUTES = (Public, ); }; }; F425977A0E23FE3A003BEA3E /* GTMNSString+FindFolder.m in Sources */ = {isa = PBXBuildFile; fileRef = F42597770E23FE3A003BEA3E /* GTMNSString+FindFolder.m */; }; - F42866B81267340A0090FE0F /* GTMURITemplate.h in Headers */ = {isa = PBXBuildFile; fileRef = F42866B51267340A0090FE0F /* GTMURITemplate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F42866B91267340A0090FE0F /* GTMURITemplate.m in Sources */ = {isa = PBXBuildFile; fileRef = F42866B61267340A0090FE0F /* GTMURITemplate.m */; }; - F428670312673C490090FE0F /* GTMURITemplateExtraTests.json in Resources */ = {isa = PBXBuildFile; fileRef = F428670112673C490090FE0F /* GTMURITemplateExtraTests.json */; }; - F428670412673C490090FE0F /* GTMURITemplateRFCTests.json in Resources */ = {isa = PBXBuildFile; fileRef = F428670212673C490090FE0F /* GTMURITemplateRFCTests.json */; }; F428FF030D48E55E00382ED1 /* GTMNSBezierPath+CGPath.h in Headers */ = {isa = PBXBuildFile; fileRef = F428FEFF0D48E55E00382ED1 /* GTMNSBezierPath+CGPath.h */; settings = {ATTRIBUTES = (Public, ); }; }; F428FF040D48E55E00382ED1 /* GTMNSBezierPath+CGPath.m in Sources */ = {isa = PBXBuildFile; fileRef = F428FF000D48E55E00382ED1 /* GTMNSBezierPath+CGPath.m */; }; F42E08610D199A2B00D5DDE0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; F42E08640D199A2F00D5DDE0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0867D69BFE84028FC02AAC07 /* Foundation.framework */; }; F42E087F0D199AB400D5DDE0 /* GoogleToolboxForMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F42E086D0D199A5B00D5DDE0 /* GoogleToolboxForMac.framework */; }; F42E08800D199AB500D5DDE0 /* GoogleToolboxForMac.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F42E086D0D199A5B00D5DDE0 /* GoogleToolboxForMac.framework */; }; - F42E089C0D199B1800D5DDE0 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F42E089B0D199B1800D5DDE0 /* SenTestingKit.framework */; }; - F42E089D0D199B1800D5DDE0 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F42E089B0D199B1800D5DDE0 /* SenTestingKit.framework */; }; - F42E09450D199BA400D5DDE0 /* GTMNSObject+UnitTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = F48FE29C0D198D36009257D2 /* GTMNSObject+UnitTesting.m */; }; - F42E09490D199BBF00D5DDE0 /* GTMDelegatingTableColumn.h in Headers */ = {isa = PBXBuildFile; fileRef = F48FE27C0D198D0E009257D2 /* GTMDelegatingTableColumn.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F42E094A0D199BBF00D5DDE0 /* GTMDelegatingTableColumn.m in Sources */ = {isa = PBXBuildFile; fileRef = F48FE27D0D198D0E009257D2 /* GTMDelegatingTableColumn.m */; }; F42E094C0D199BBF00D5DDE0 /* GTMGeometryUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = F48FE27E0D198D0E009257D2 /* GTMGeometryUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; F42E094D0D199BBF00D5DDE0 /* GTMGeometryUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F48FE27F0D198D0E009257D2 /* GTMGeometryUtils.m */; }; F42E094F0D199BBF00D5DDE0 /* GTMNSBezierPath+RoundRect.h in Headers */ = {isa = PBXBuildFile; fileRef = F48FE2810D198D0E009257D2 /* GTMNSBezierPath+RoundRect.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -358,100 +169,33 @@ F42E09AE0D19A62F00D5DDE0 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F42E09AD0D19A62F00D5DDE0 /* Carbon.framework */; }; F42E2C69102B1261004DF054 /* GTMUILocalizerAndLayoutTweakerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F42E2C68102B1261004DF054 /* GTMUILocalizerAndLayoutTweakerTest.m */; }; F42E2C84102B14B0004DF054 /* GTMUILocalizerAndLayoutTweakerTest1.xib in Resources */ = {isa = PBXBuildFile; fileRef = F42E2C83102B14B0004DF054 /* GTMUILocalizerAndLayoutTweakerTest1.xib */; }; - F42E2CFF102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-0.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F42E2CFC102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-0.tiff */; }; - F42E2D00102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-1.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F42E2CFD102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-1.tiff */; }; - F42E2D01102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-2.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F42E2CFE102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-2.tiff */; }; F42E2D08102B2283004DF054 /* GTMUILocalizerAndLayoutTweakerTest2.xib in Resources */ = {isa = PBXBuildFile; fileRef = F42E2D07102B2283004DF054 /* GTMUILocalizerAndLayoutTweakerTest2.xib */; }; - F42E2D24102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-0.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F42E2D21102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-0.tiff */; }; - F42E2D25102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-1.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F42E2D22102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-1.tiff */; }; - F42E2D26102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-2.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F42E2D23102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-2.tiff */; }; - F42F50F91057E99200BFC735 /* GTMUnitTestingWindow.10.5.8.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F42F50E81057E91A00BFC735 /* GTMUnitTestingWindow.10.5.8.tiff */; }; F431221D0DD4E3B800F45252 /* GTMStackTrace.h in Headers */ = {isa = PBXBuildFile; fileRef = F431221A0DD4E3B800F45252 /* GTMStackTrace.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F435DE7C0DC0B6580069CDE8 /* GTMNSBezierPath+CGPathTest.ppc64.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F435DE7A0DC0B6580069CDE8 /* GTMNSBezierPath+CGPathTest.ppc64.tiff */; }; - F435DE7D0DC0B6580069CDE8 /* GTMNSBezierPath+CGPathTest.x86_64.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F435DE7B0DC0B6580069CDE8 /* GTMNSBezierPath+CGPathTest.x86_64.tiff */; }; - F435DE8B0DC0B7620069CDE8 /* GTMNSBezierPath+RoundRectTest.ppc64.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F435DE8A0DC0B7620069CDE8 /* GTMNSBezierPath+RoundRectTest.ppc64.tiff */; }; F437F55D0D50BC0A00F5C3A4 /* GTMRegex.h in Headers */ = {isa = PBXBuildFile; fileRef = F437F55A0D50BC0A00F5C3A4 /* GTMRegex.h */; settings = {ATTRIBUTES = (Public, ); }; }; F437F55E0D50BC0A00F5C3A4 /* GTMRegex.m in Sources */ = {isa = PBXBuildFile; fileRef = F437F55B0D50BC0A00F5C3A4 /* GTMRegex.m */; }; - F43A43531146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-0.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F43A434B1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-0.tiff */; }; - F43A43541146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-1.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F43A434C1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-1.tiff */; }; - F43A43551146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-2.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F43A434D1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-2.tiff */; }; - F43A43561146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-3.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F43A434E1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-3.tiff */; }; - F43A43571146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F43A434F1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.tiff */; }; - F43A43581146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F43A43501146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.tiff */; }; - F43A43591146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F43A43511146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.tiff */; }; - F43A435A1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F43A43521146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.tiff */; }; F43C7A571021FAA300ABF03C /* GTMUILocalizerAndLayoutTweaker.h in Headers */ = {isa = PBXBuildFile; fileRef = F43C7A551021FAA300ABF03C /* GTMUILocalizerAndLayoutTweaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; F43C7A581021FAA300ABF03C /* GTMUILocalizerAndLayoutTweaker.m in Sources */ = {isa = PBXBuildFile; fileRef = F43C7A561021FAA300ABF03C /* GTMUILocalizerAndLayoutTweaker.m */; }; F43DCDCD0D4796C600959A62 /* GTMLoginItems.h in Headers */ = {isa = PBXBuildFile; fileRef = F43DCDCB0D4796C600959A62 /* GTMLoginItems.h */; settings = {ATTRIBUTES = (Public, ); }; }; F43DCDCE0D4796C600959A62 /* GTMLoginItems.m in Sources */ = {isa = PBXBuildFile; fileRef = F43DCDCC0D4796C600959A62 /* GTMLoginItems.m */; }; - F43E447A0D4918B20041161F /* GTMLinearRGBShading.h in Headers */ = {isa = PBXBuildFile; fileRef = F43E44770D4918B20041161F /* GTMLinearRGBShading.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F43E447B0D4918B20041161F /* GTMLinearRGBShading.m in Sources */ = {isa = PBXBuildFile; fileRef = F43E44780D4918B20041161F /* GTMLinearRGBShading.m */; }; F43E4C280D4E361D0041161F /* GTMNSString+XML.h in Headers */ = {isa = PBXBuildFile; fileRef = F43E4C250D4E361D0041161F /* GTMNSString+XML.h */; settings = {ATTRIBUTES = (Public, ); }; }; F43E4C290D4E361D0041161F /* GTMNSString+XML.m in Sources */ = {isa = PBXBuildFile; fileRef = F43E4C260D4E361D0041161F /* GTMNSString+XML.m */; }; - F43E4DD90D4E56320041161F /* GTMNSEnumerator+Filter.h in Headers */ = {isa = PBXBuildFile; fileRef = F43E4DD60D4E56320041161F /* GTMNSEnumerator+Filter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F43E4DDA0D4E56320041161F /* GTMNSEnumerator+Filter.m in Sources */ = {isa = PBXBuildFile; fileRef = F43E4DD70D4E56320041161F /* GTMNSEnumerator+Filter.m */; }; F43E4E610D4E5EC90041161F /* GTMNSData+zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = F43E4E5E0D4E5EC90041161F /* GTMNSData+zlib.h */; settings = {ATTRIBUTES = (Public, ); }; }; F43E4E620D4E5EC90041161F /* GTMNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = F43E4E5F0D4E5EC90041161F /* GTMNSData+zlib.m */; }; F43E4F6D0D4E60C50041161F /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F43E4F6C0D4E60C50041161F /* libz.dylib */; }; - F450A6BF146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.7.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F450A6B9146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.7.tiff */; }; - F450A6C0146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.7.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F450A6BA146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.7.tiff */; }; - F450A6C1146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.7.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F450A6BB146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.7.tiff */; }; - F450A749146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.7.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F450A746146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.7.tiff */; }; - F450A74A146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.7.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F450A747146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.7.tiff */; }; - F450A74B146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.7.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F450A748146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.7.tiff */; }; F47466661296F19E0022C1FB /* GTMSenTestCaseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F47466651296F19E0022C1FB /* GTMSenTestCaseTest.m */; }; F47A79880D746EE9002302AB /* GTMScriptRunner.h in Headers */ = {isa = PBXBuildFile; fileRef = F47A79850D746EE9002302AB /* GTMScriptRunner.h */; settings = {ATTRIBUTES = (Public, ); }; }; F47A79890D746EE9002302AB /* GTMScriptRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = F47A79860D746EE9002302AB /* GTMScriptRunner.m */; }; - F47F1C120D490BC000925B8F /* GTMNSBezierPath+Shading.h in Headers */ = {isa = PBXBuildFile; fileRef = F47F1C0D0D490BC000925B8F /* GTMNSBezierPath+Shading.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F47F1C130D490BC000925B8F /* GTMNSBezierPath+Shading.m in Sources */ = {isa = PBXBuildFile; fileRef = F47F1C0E0D490BC000925B8F /* GTMNSBezierPath+Shading.m */; }; - F47F1C750D490E5C00925B8F /* GTMShading.h in Headers */ = {isa = PBXBuildFile; fileRef = F47F1C740D490E5C00925B8F /* GTMShading.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F47F1D300D4914AD00925B8F /* GTMCalculatedRange.h in Headers */ = {isa = PBXBuildFile; fileRef = F47F1D2D0D4914AD00925B8F /* GTMCalculatedRange.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F47F1D310D4914AD00925B8F /* GTMCalculatedRange.m in Sources */ = {isa = PBXBuildFile; fileRef = F47F1D2E0D4914AD00925B8F /* GTMCalculatedRange.m */; }; - F48D000D0FE994C900428D0B /* GTMUnitTestingWindow.10.5.7.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F48D000C0FE994BF00428D0B /* GTMUnitTestingWindow.10.5.7.tiff */; }; F493E3591146CD97005F994E /* GTMUILocalizerAndLayoutTweakerTest7.xib in Resources */ = {isa = PBXBuildFile; fileRef = F493E3581146CD97005F994E /* GTMUILocalizerAndLayoutTweakerTest7.xib */; }; - F49DCD271460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.8.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F49DCD211460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.8.tiff */; }; - F49DCD281460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.8.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F49DCD221460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.8.tiff */; }; - F49DCD291460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.8.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F49DCD231460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.8.tiff */; }; - F49DCD60146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.8.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F49DCD5A146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.8.tiff */; }; - F49DCD61146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.8.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F49DCD5B146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.8.tiff */; }; - F49DCD62146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.8.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F49DCD5C146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.8.tiff */; }; F49FA8440EEF2AB700077669 /* GTMFileSystemKQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F49FA8420EEF2AB700077669 /* GTMFileSystemKQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; F49FA8450EEF2AB700077669 /* GTMFileSystemKQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = F49FA8430EEF2AB700077669 /* GTMFileSystemKQueue.m */; }; - F4A420EF0EDDF8E000397A11 /* GTMHotKeyTextField.h in Headers */ = {isa = PBXBuildFile; fileRef = F4A420EC0EDDF8E000397A11 /* GTMHotKeyTextField.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4A420F00EDDF8E000397A11 /* GTMHotKeyTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = F4A420ED0EDDF8E000397A11 /* GTMHotKeyTextField.m */; }; - F4A486ED1097EA0A00513483 /* GTMUnitTestingView.10.6.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4A486EC1097EA0A00513483 /* GTMUnitTestingView.10.6.tiff */; }; - F4AA2CB2109B37650025C956 /* GTMUILocalizerAndLayoutTweakerTest3-4.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4AA2CB1109B37650025C956 /* GTMUILocalizerAndLayoutTweakerTest3-4.tiff */; }; F4C0B9C3108E27EE002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4C0B9C2108E27EE002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5.xib */; }; - F4C0B9DA108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-0.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4C0B9D7108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-0.tiff */; }; - F4C0B9DB108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-1.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4C0B9D8108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-1.tiff */; }; - F4C0B9DC108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-2.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4C0B9D9108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-2.tiff */; }; - F4C58CC310BAD75200651068 /* GTMFadeTruncatingTextFieldCellTest3.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4C58CC110BAD75200651068 /* GTMFadeTruncatingTextFieldCellTest3.tiff */; }; - F4C58CC410BAD75200651068 /* GTMFadeTruncatingTextFieldCellTest4.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4C58CC210BAD75200651068 /* GTMFadeTruncatingTextFieldCellTest4.tiff */; }; F4C62489109753960069CADD /* GTMIBArrayTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F4C62486109753960069CADD /* GTMIBArrayTest.m */; }; F4C6248A109753960069CADD /* GTMIBArrayTest.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4C62487109753960069CADD /* GTMIBArrayTest.xib */; }; F4C6248B109753960069CADD /* GTMIBArray.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C62483109753960069CADD /* GTMIBArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; F4C6248C109753960069CADD /* GTMIBArray.m in Sources */ = {isa = PBXBuildFile; fileRef = F4C62484109753960069CADD /* GTMIBArray.m */; }; - F4CA854F0DAFAAF600B4AB10 /* GTMObjC2Runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B6F32060DA34A1B0052CA40 /* GTMObjC2Runtime.h */; settings = {ATTRIBUTES = (Public, ); }; }; F4FB44141120799A00F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4FB44131120799A00F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6.xib */; }; - F4FB445311207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-0.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FB444D11207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-0.tiff */; }; - F4FB445411207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-1.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FB444E11207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-1.tiff */; }; - F4FB445511207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-2.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FB444F11207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-2.tiff */; }; - F4FB445611207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-0.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FB445011207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-0.tiff */; }; - F4FB445711207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-1.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FB445111207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-1.tiff */; }; - F4FB445811207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-2.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FB445211207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-2.tiff */; }; F4FC15DD1046AD66000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4FC15DC1046AD66000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3.xib */; }; - F4FC16031046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-0.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FC15FF1046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-0.tiff */; }; - F4FC16041046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-1.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FC16001046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-1.tiff */; }; - F4FC16051046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-2.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FC16011046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-2.tiff */; }; - F4FC16061046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-3.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FC16021046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-3.tiff */; }; - F4FC322D104EAA11000AB7BC /* GTMUILocalizerWindow3State.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = F4FC322C104EAA11000AB7BC /* GTMUILocalizerWindow3State.gtmUTState */; }; F4FC324D104EBD70000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4.xib in Resources */ = {isa = PBXBuildFile; fileRef = F4FC324C104EBD70000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4.xib */; }; - F4FC327D104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-0.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FC327A104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-0.tiff */; }; - F4FC327E104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-1.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FC327B104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-1.tiff */; }; - F4FC327F104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-2.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FC327C104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-2.tiff */; }; - F4FC333D104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FC333A104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.tiff */; }; - F4FC333E104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FC333B104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.tiff */; }; - F4FC333F104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F4FC333C104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.tiff */; }; F4FF22780D9D4835003880AC /* GTMDebugSelectorValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = F4FF22770D9D4835003880AC /* GTMDebugSelectorValidation.h */; settings = {ATTRIBUTES = (Public, ); }; }; F92B9FA80E2E64B900A2FE61 /* GTMLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = F98680AF0E2C15C300CEE8BF /* GTMLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; F92B9FA90E2E64BC00A2FE61 /* GTMLogger+ASL.h in Headers */ = {isa = PBXBuildFile; fileRef = F98681670E2C1E3A00CEE8BF /* GTMLogger+ASL.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -468,13 +212,6 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 8B45A2D30DA51A0E001148C5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8B45A2890DA49B99001148C5; - remoteInfo = UIUnitTestingHarness; - }; 8B7DCBA30DFF0EFB0017E983 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; @@ -482,13 +219,6 @@ remoteGlobalIDString = F42E086C0D199A5B00D5DDE0; remoteInfo = GTM; }; - 8BAA9A340F7AF50600DF4F12 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8B45A2890DA49B99001148C5; - remoteInfo = UIUnitTestingHarness; - }; 8BC8514E127A18B60046E0FB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; @@ -517,34 +247,6 @@ remoteGlobalIDString = F42E086C0D199A5B00D5DDE0; remoteInfo = GTM; }; - F4E4279110B7484B00F28A35 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8BFE13BC0FB0F2D8001BE894; - remoteInfo = "UnitTest-AddressBook"; - }; - F4E4279310B7484B00F28A35 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F48FE2630D198C1E009257D2; - remoteInfo = "UnitTest-AppKit"; - }; - F4E4279510B7484B00F28A35 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F42E08110D19987200D5DDE0; - remoteInfo = "UnitTest-Foundation"; - }; - F4E4279710B7484B00F28A35 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8B45A0270DA4696C001148C5; - remoteInfo = "UnitTest-UnitTesting"; - }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ @@ -553,20 +255,7 @@ 0B1B9B8410FECD870084EE4B /* GTMStringEncoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMStringEncoding.h; path = Foundation/GTMStringEncoding.h; sourceTree = SOURCE_ROOT; }; 0B1B9B8510FECD870084EE4B /* GTMStringEncoding.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GTMStringEncoding.m; path = Foundation/GTMStringEncoding.m; sourceTree = SOURCE_ROOT; }; 0B1B9B8610FECD870084EE4B /* GTMStringEncodingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GTMStringEncodingTest.m; path = Foundation/GTMStringEncodingTest.m; sourceTree = SOURCE_ROOT; }; - 0BFAD4C2104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSDictionary+CaseInsensitive.h"; sourceTree = "<group>"; }; - 0BFAD4C3104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitive.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSDictionary+CaseInsensitive.m"; sourceTree = "<group>"; }; - 0BFAD4C4104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitiveTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSDictionary+CaseInsensitiveTest.m"; sourceTree = "<group>"; }; - 1012DF540F4252BD004794DB /* GTMAbstractDOListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMAbstractDOListener.h; sourceTree = "<group>"; }; - 1012DF550F4252BD004794DB /* GTMAbstractDOListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMAbstractDOListener.m; sourceTree = "<group>"; }; - 1012DF590F425525004794DB /* GTMAbstractDOListenerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMAbstractDOListenerTest.m; sourceTree = "<group>"; }; 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; - 108930840F4CCB380018D4A0 /* GTMTransientRootPortProxyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMTransientRootPortProxyTest.m; sourceTree = "<group>"; }; - 10998EF20F4B5D1A007F179D /* GTMTransientRootPortProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMTransientRootPortProxy.m; sourceTree = "<group>"; }; - 10998EF30F4B5D1A007F179D /* GTMTransientRootPortProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMTransientRootPortProxy.h; sourceTree = "<group>"; }; - 10A4028D0F44DB2B003B511C /* GTMTransientRootProxyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMTransientRootProxyTest.m; sourceTree = "<group>"; }; - 10A4028E0F44DB2B003B511C /* GTMTransientRootProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMTransientRootProxy.m; sourceTree = "<group>"; }; - 10A4028F0F44DB2B003B511C /* GTMTransientRootProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMTransientRootProxy.h; sourceTree = "<group>"; }; - 32DBCF5E0370ADEE00C91783 /* GTM_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTM_Prefix.pch; sourceTree = "<group>"; }; 33C372A40DD8A88500E97817 /* GTMNSString+URLArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSString+URLArguments.h"; sourceTree = "<group>"; }; 33C372A50DD8A88500E97817 /* GTMNSString+URLArguments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+URLArguments.m"; sourceTree = "<group>"; }; 33C372AE0DD8A8D700E97817 /* GTMNSString+URLArgumentsTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+URLArgumentsTest.m"; sourceTree = "<group>"; }; @@ -577,137 +266,57 @@ 6294453E0EDDF647009295EA /* GTMNSArray+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSArray+Merge.h"; sourceTree = "<group>"; }; 6294453F0EDDF647009295EA /* GTMNSArray+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSArray+Merge.m"; sourceTree = "<group>"; }; 6294454B0EDDF89A009295EA /* GTMNSArray+MergeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSArray+MergeTest.m"; sourceTree = "<group>"; }; - 7F3EB38C0E5E09C700A7A75E /* GTMNSImage+Scaling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSImage+Scaling.h"; sourceTree = "<group>"; }; - 7F3EB38D0E5E09C700A7A75E /* GTMNSImage+Scaling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSImage+Scaling.m"; sourceTree = "<group>"; }; - 7F3EB3930E5E0A2100A7A75E /* GTMNSImage+ScalingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSImage+ScalingTest.m"; sourceTree = "<group>"; }; - 7F4C015E1055AD4200F88238 /* GTMUILocalizerWindow1State.10_4_SDK.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUILocalizerWindow1State.10_4_SDK.gtmUTState; sourceTree = "<group>"; }; 7F511DF30F4B0378009F41B6 /* GTMNSColor+Luminance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSColor+Luminance.h"; sourceTree = "<group>"; }; 7F511DF40F4B0378009F41B6 /* GTMNSColor+Luminance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSColor+Luminance.m"; sourceTree = "<group>"; }; 7F511DF50F4B0378009F41B6 /* GTMNSColor+LuminanceTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSColor+LuminanceTest.m"; sourceTree = "<group>"; }; - 7F6840D1105375A70057F4FA /* GTMUILocalizerTestWindow_10_4.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMUILocalizerTestWindow_10_4.xib; sourceTree = "<group>"; }; 7F97DB2D104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMFadeTruncatingTextFieldCell.h; sourceTree = "<group>"; }; 7F97DB2E104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMFadeTruncatingTextFieldCell.m; sourceTree = "<group>"; }; 7F97DB2F104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCellTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMFadeTruncatingTextFieldCellTest.m; sourceTree = "<group>"; }; - 7F97DBA2104ED861004DDDEE /* GTMFadeTruncatingTextFieldCellTest1.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMFadeTruncatingTextFieldCellTest1.tiff; sourceTree = "<group>"; }; - 7F97DBA3104ED861004DDDEE /* GTMFadeTruncatingTextFieldCellTest2.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMFadeTruncatingTextFieldCellTest2.tiff; sourceTree = "<group>"; }; - 7FF768DF1051B17900D34F4B /* GTMNSImage+SearchCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSImage+SearchCache.h"; sourceTree = "<group>"; }; - 7FF768E01051B17900D34F4B /* GTMNSImage+SearchCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSImage+SearchCache.m"; sourceTree = "<group>"; }; - 7FF768E11051B17900D34F4B /* GTMNSImage+SearchCacheTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSImage+SearchCacheTest.m"; sourceTree = "<group>"; }; 8207B8970FEA7A98008A527B /* GTMWindowSheetController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMWindowSheetController.h; sourceTree = "<group>"; }; 8207B8980FEA7A98008A527B /* GTMWindowSheetController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMWindowSheetController.m; sourceTree = "<group>"; }; 8207B8990FEA7A98008A527B /* GTMWindowSheetControllerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMWindowSheetControllerTest.m; sourceTree = "<group>"; }; - 84B91B890EA3CC2E0087500F /* GTMUnitTestingImage.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMUnitTestingImage.10.6.tiff; sourceTree = "<group>"; }; - 84B91B8A0EA3CC2E0087500F /* GTMUnitTestingWindow.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMUnitTestingWindow.10.6.tiff; sourceTree = "<group>"; }; - 84D99F360EA661C900C007D5 /* BuildAllSDKs.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = BuildAllSDKs.sh; sourceTree = "<group>"; }; - 8B0E65400FD80D5E00461C4A /* da */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E65410FD80D5E00461C4A /* de */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E65420FD80D5E00461C4A /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E65430FD80D5E00461C4A /* es */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E65440FD80D5E00461C4A /* fi */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E65450FD80D5E00461C4A /* fr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E65460FD80D5E00461C4A /* it */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E65470FD80D5E00461C4A /* ja */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E65480FD80D5E00461C4A /* ko */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E65490FD80D5E00461C4A /* nl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E654A0FD80D5E00461C4A /* no */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = no; path = no.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E654B0FD80D5E00461C4A /* pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E654C0FD80D5E00461C4A /* pt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E654D0FD80D5E00461C4A /* ru */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E654E0FD80D5E00461C4A /* sv */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E654F0FD80D5E00461C4A /* zh_CN */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = zh_CN; path = zh_CN.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; - 8B0E65500FD80D5E00461C4A /* zh_TW */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = zh_TW; path = zh_TW.lproj/GTMHotKeyTextField.strings; sourceTree = "<group>"; }; + 8B07C60D1D99B01D0054728B /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/MacOSX.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 8B158A5F10A8BE4500C93125 /* GTMNSAnimation+Duration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSAnimation+Duration.h"; sourceTree = "<group>"; }; 8B158A6010A8BE4500C93125 /* GTMNSAnimation+Duration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSAnimation+Duration.m"; sourceTree = "<group>"; }; 8B17FD13117638D500E7A908 /* GTMFoundationUnitTestingUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMFoundationUnitTestingUtilities.m; sourceTree = "<group>"; }; 8B17FD14117638D500E7A908 /* GTMFoundationUnitTestingUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMFoundationUnitTestingUtilities.h; sourceTree = "<group>"; }; 8B17FD18117638F400E7A908 /* GTMAppKitUnitTestingUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMAppKitUnitTestingUtilities.m; sourceTree = "<group>"; }; 8B17FD19117638F400E7A908 /* GTMAppKitUnitTestingUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMAppKitUnitTestingUtilities.h; sourceTree = "<group>"; }; - 8B1801A00E2533D500280961 /* GTMLargeTypeWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLargeTypeWindow.m; sourceTree = "<group>"; }; - 8B1801A10E2533D500280961 /* GTMLargeTypeWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMLargeTypeWindow.h; sourceTree = "<group>"; }; - 8B1801A40E2533DB00280961 /* GTMLargeTypeWindowTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLargeTypeWindowTest.m; sourceTree = "<group>"; }; - 8B1801A80E25341B00280961 /* GTMLargeTypeWindowImageTest.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMLargeTypeWindowImageTest.gtmUTState; sourceTree = "<group>"; }; - 8B1801AC0E25341B00280961 /* GTMLargeTypeWindowLongTextTest.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMLargeTypeWindowLongTextTest.gtmUTState; sourceTree = "<group>"; }; - 8B1801AD0E25341B00280961 /* GTMLargeTypeWindowShortTextTest.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMLargeTypeWindowShortTextTest.gtmUTState; sourceTree = "<group>"; }; - 8B1802410E25592200280961 /* GTMLargeTypeWindowMediumTextTest.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMLargeTypeWindowMediumTextTest.gtmUTState; sourceTree = "<group>"; }; - 8B1A14E90D900BC800CA1E8E /* GTMNSObject+BindingUnitTesting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSObject+BindingUnitTesting.m"; sourceTree = "<group>"; }; - 8B1A14EA0D900BC800CA1E8E /* GTMNSObject+BindingUnitTesting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSObject+BindingUnitTesting.h"; sourceTree = "<group>"; }; 8B1A16050D90344B00CA1E8E /* GTMDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = "<group>"; }; - 8B1B49160E5F8E2100A08972 /* GTMExceptionalInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMExceptionalInlines.h; sourceTree = "<group>"; }; - 8B1B49170E5F8E2100A08972 /* GTMExceptionalInlines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMExceptionalInlines.m; sourceTree = "<group>"; }; - 8B1B491B0E5F904C00A08972 /* GTMExceptionalInlinesTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMExceptionalInlinesTest.m; sourceTree = "<group>"; }; - 8B21BE8F11532C7700DD2686 /* GTMNSAnimatablePropertyContainerTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMNSAnimatablePropertyContainerTest.h; sourceTree = "<group>"; }; - 8B21BE9111532CDC00DD2686 /* GTMNSAnimatablePropertyContainerTest.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMNSAnimatablePropertyContainerTest.xib; sourceTree = "<group>"; }; 8B21DE54117E5CB7000E004F /* GTMLocalizedString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMLocalizedString.h; sourceTree = "<group>"; }; - 8B2789950EF855FB00D68C01 /* GTMUnitTestingWindow.10.5.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMUnitTestingWindow.10.5.6.tiff; sourceTree = "<group>"; }; 8B29078411F8D1BF0064F50F /* GTMNSFileHandle+UniqueName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSFileHandle+UniqueName.h"; sourceTree = "<group>"; }; 8B29078511F8D1BF0064F50F /* GTMNSFileHandle+UniqueName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSFileHandle+UniqueName.m"; sourceTree = "<group>"; }; 8B29078611F8D1BF0064F50F /* GTMNSFileHandle+UniqueNameTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSFileHandle+UniqueNameTest.m"; sourceTree = "<group>"; }; - 8B3344170DBF7A36009FD32C /* GTMNSAppleScript+HandlerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSAppleScript+HandlerTest.m"; sourceTree = "<group>"; }; - 8B3344180DBF7A36009FD32C /* GTMNSAppleScript+Handler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSAppleScript+Handler.m"; sourceTree = "<group>"; }; - 8B3344190DBF7A36009FD32C /* GTMNSAppleScript+Handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSAppleScript+Handler.h"; sourceTree = "<group>"; }; - 8B33441A0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+HandlerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSAppleEventDescriptor+HandlerTest.m"; sourceTree = "<group>"; }; - 8B33441B0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Handler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSAppleEventDescriptor+Handler.m"; sourceTree = "<group>"; }; - 8B33441C0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSAppleEventDescriptor+Handler.h"; sourceTree = "<group>"; }; - 8B33441D0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+FoundationTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSAppleEventDescriptor+FoundationTest.m"; sourceTree = "<group>"; }; - 8B33441E0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Foundation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSAppleEventDescriptor+Foundation.m"; sourceTree = "<group>"; }; - 8B33441F0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Foundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSAppleEventDescriptor+Foundation.h"; sourceTree = "<group>"; }; - 8B3344200DBF7A36009FD32C /* GTMNSAppleEvent+HandlerTest.applescript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.applescript; path = "GTMNSAppleEvent+HandlerTest.applescript"; sourceTree = "<group>"; }; + 8B2C72E61D9EBB6E0027BD14 /* GTMUnitTestDevLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMUnitTestDevLog.h; sourceTree = "<group>"; }; + 8B2C72E71D9EBB6E0027BD14 /* GTMUnitTestDevLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMUnitTestDevLog.m; sourceTree = "<group>"; }; 8B3590150E8190FA0041E21C /* GTMTestTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMTestTimer.h; sourceTree = "<group>"; }; 8B35901A0E8191750041E21C /* GTMTestTimerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMTestTimerTest.m; sourceTree = "<group>"; }; - 8B3AA9EF0E033E23007E31B5 /* GTMValidatingContainers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMValidatingContainers.h; sourceTree = "<group>"; }; - 8B3AA9F00E033E23007E31B5 /* GTMValidatingContainers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMValidatingContainers.m; sourceTree = "<group>"; }; - 8B3AA9F70E033E5F007E31B5 /* GTMValidatingContainersTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMValidatingContainersTest.m; sourceTree = "<group>"; }; 8B3E29290EEB53F3000681D8 /* GTMCarbonEventTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMCarbonEventTest.m; sourceTree = "<group>"; }; 8B3E292A0EEB53F3000681D8 /* GTMCarbonEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMCarbonEvent.m; sourceTree = "<group>"; }; 8B3E292B0EEB53F3000681D8 /* GTMCarbonEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMCarbonEvent.h; sourceTree = "<group>"; }; 8B4099490F93C5CC00DF540E /* GTMUILocalizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMUILocalizer.h; sourceTree = "<group>"; }; 8B40994A0F93C5CC00DF540E /* GTMUILocalizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMUILocalizer.m; sourceTree = "<group>"; }; 8B409BC50F94405A00DF540E /* GTMUILocalizerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMUILocalizerTest.m; sourceTree = "<group>"; }; - 8B409BE30F9442C400DF540E /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = "<group>"; }; + 8B409BE30F9442C400DF540E /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = "<group>"; }; 8B409E3E0F950DE900DF540E /* GTMUILocalizerTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMUILocalizerTest.h; sourceTree = "<group>"; }; 8B409E8B0F952C2C00DF540E /* GTMUILocalizerTestWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMUILocalizerTestWindow.xib; sourceTree = "<group>"; }; 8B409E970F952CD700DF540E /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localizable.strings; sourceTree = "<group>"; }; - 8B409EC30F9530C200DF540E /* GTMUILocalizerWindow1State.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUILocalizerWindow1State.gtmUTState; sourceTree = "<group>"; }; - 8B409EE80F95325000DF540E /* GTMUILocalizerWindow2State.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUILocalizerWindow2State.gtmUTState; sourceTree = "<group>"; }; - 8B409EF30F95331500DF540E /* GTMUILocalizerMenuState.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUILocalizerMenuState.gtmUTState; sourceTree = "<group>"; }; 8B409F050F95341E00DF540E /* GTMUILocalizerTestView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMUILocalizerTestView.xib; sourceTree = "<group>"; }; - 8B409F110F95352500DF540E /* GTMUILocalizerView2State.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUILocalizerView2State.gtmUTState; sourceTree = "<group>"; }; - 8B409F120F95352500DF540E /* GTMUILocalizerView1State.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUILocalizerView1State.gtmUTState; sourceTree = "<group>"; }; 8B414E861226FB1000D0064F /* GTMServiceManagement.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = GTMServiceManagement.c; sourceTree = "<group>"; }; 8B414E871226FB1000D0064F /* GTMServiceManagement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMServiceManagement.h; sourceTree = "<group>"; }; 8B414E8A1226FB1800D0064F /* GTMServiceManagementTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMServiceManagementTest.m; sourceTree = "<group>"; }; 8B455F5D1193870A00ABD707 /* GTMLocalizedStringTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLocalizedStringTest.m; sourceTree = "<group>"; }; - 8B45A0280DA4696C001148C5 /* UnitTest-UnitTesting.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTest-UnitTesting.octest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8B45A0280DA4696C001148C5 /* UnitTest-UnitTesting.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTest-UnitTesting.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 8B45A1990DA46AAA001148C5 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = "<absolute>"; }; 8B45A28A0DA49B99001148C5 /* GTMUIUnitTestingHarness.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GTMUIUnitTestingHarness.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8B45A2A70DA49C47001148C5 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 8B45A2A80DA49C47001148C5 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; - 8B45A2DE0DA51A7E001148C5 /* GTMUnitTestingTest.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; path = GTMUnitTestingTest.nib; sourceTree = "<group>"; }; - 8B45A2E00DA51ABC001148C5 /* GTMUnitTestingTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMUnitTestingTest.h; sourceTree = "<group>"; }; - 8B45A2E10DA51ABC001148C5 /* GTMUnitTestingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMUnitTestingTest.m; sourceTree = "<group>"; }; - 8B45A5F50DA5EB9F001148C5 /* GTMUnitTestingWindow.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUnitTestingWindow.gtmUTState; sourceTree = "<group>"; }; - 8B45A5F60DA5EB9F001148C5 /* GTMUnitTestingTestApp.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUnitTestingTestApp.gtmUTState; sourceTree = "<group>"; }; - 8B45A6B90DA67DD5001148C5 /* GTMUnitTestingImage.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUnitTestingImage.gtmUTState; sourceTree = "<group>"; }; - 8B4BD7E61200E5EA009C7060 /* GTMUILocalizerWindow3State.10_4_SDK.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUILocalizerWindow3State.10_4_SDK.gtmUTState; sourceTree = "<group>"; }; - 8B55479A0DB3B7A50014CC1C /* GTMAppKit+UnitTesting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMAppKit+UnitTesting.h"; sourceTree = "<group>"; }; - 8B55479B0DB3B7A50014CC1C /* GTMAppKit+UnitTesting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMAppKit+UnitTesting.m"; sourceTree = "<group>"; }; - 8B58E9940E547EB000A0E02E /* GTMGetURLHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMGetURLHandler.m; sourceTree = "<group>"; }; 8B5B4ABC15BF31050081A96C /* CodeCoverage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeCoverage.xcconfig; sourceTree = "<group>"; }; 8B5B4ABD15BF31050081A96C /* CodeCoverageStatic.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = CodeCoverageStatic.xcconfig; sourceTree = "<group>"; }; 8B5B4ABE15BF31050081A96C /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; }; - 8B5B4ABF15BF31050081A96C /* GCSupported.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = GCSupported.xcconfig; sourceTree = "<group>"; }; 8B5B4AC015BF31050081A96C /* General.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = General.xcconfig; sourceTree = "<group>"; }; 8B5B4AC115BF31050081A96C /* GTMMerge.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = GTMMerge.xcconfig; sourceTree = "<group>"; }; - 8B5B4AC215BF31050081A96C /* iOS.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = iOS.xcconfig; sourceTree = "<group>"; }; - 8B5B4AC315BF31050081A96C /* iPhone30.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = iPhone30.xcconfig; sourceTree = "<group>"; }; - 8B5B4AC415BF31050081A96C /* iPhone31.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = iPhone31.xcconfig; sourceTree = "<group>"; }; - 8B5B4AC515BF31050081A96C /* iPhone312.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = iPhone312.xcconfig; sourceTree = "<group>"; }; - 8B5B4AC615BF31050081A96C /* iPhone313.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = iPhone313.xcconfig; sourceTree = "<group>"; }; - 8B5B4AC715BF31050081A96C /* iPhone32.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = iPhone32.xcconfig; sourceTree = "<group>"; }; - 8B5B4AC815BF31050081A96C /* iPhone40.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = iPhone40.xcconfig; sourceTree = "<group>"; }; - 8B5B4AC915BF31050081A96C /* iPhone41.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = iPhone41.xcconfig; sourceTree = "<group>"; }; 8B5B4ACA15BF31050081A96C /* LeopardOrLater.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = LeopardOrLater.xcconfig; sourceTree = "<group>"; }; - 8B5B4ACB15BF31050081A96C /* MacOS.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = MacOS.xcconfig; sourceTree = "<group>"; }; 8B5B4ACC15BF31050081A96C /* MacOSX.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = MacOSX.xcconfig; sourceTree = "<group>"; }; 8B5B4ACD15BF31050081A96C /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; }; 8B5B4ACE15BF31050081A96C /* SnowLeopardOrLater.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = SnowLeopardOrLater.xcconfig; sourceTree = "<group>"; }; @@ -720,116 +329,35 @@ 8B6F31EF0DA347720052CA40 /* GTMMethodCheck.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMMethodCheck.m; sourceTree = "<group>"; }; 8B6F31F10DA347720052CA40 /* GTMMethodCheckTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMMethodCheckTest.m; sourceTree = "<group>"; }; 8B6F31F40DA3489B0052CA40 /* GTMMethodCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMMethodCheck.h; sourceTree = "<group>"; }; - 8B6F32040DA34A1B0052CA40 /* GTMObjC2Runtime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMObjC2Runtime.m; sourceTree = "<group>"; }; - 8B6F32050DA34A1B0052CA40 /* GTMObjC2RuntimeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMObjC2RuntimeTest.m; sourceTree = "<group>"; }; - 8B6F32060DA34A1B0052CA40 /* GTMObjC2Runtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMObjC2Runtime.h; sourceTree = "<group>"; }; 8B6F4B610E8856CA00425D9F /* GTMDebugThreadValidation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDebugThreadValidation.h; sourceTree = "<group>"; }; 8B6F4B620E8856CA00425D9F /* GTMDebugThreadValidation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMDebugThreadValidation.m; sourceTree = "<group>"; }; - 8B726BD00D91C0860090C251 /* GTMCALayer+UnitTesting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMCALayer+UnitTesting.m"; sourceTree = "<group>"; }; - 8B726BD10D91C0860090C251 /* GTMCALayer+UnitTesting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMCALayer+UnitTesting.h"; sourceTree = "<group>"; }; - 8B7AD4970DABBB5800B84F4A /* GTMNSBezierPath+ShadingTest.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMNSBezierPath+ShadingTest.tiff"; sourceTree = "<group>"; }; - 8B7AD4980DABBB5800B84F4A /* GTMNSBezierPath+CGPathTest.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMNSBezierPath+CGPathTest.tiff"; sourceTree = "<group>"; }; - 8B7AD4990DABBB5800B84F4A /* GTMNSBezierPath+RoundRectTest.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMNSBezierPath+RoundRectTest.tiff"; sourceTree = "<group>"; }; - 8B7AD4AD0DABBFEE00B84F4A /* GTMUnitTestingBindingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMUnitTestingBindingTest.m; sourceTree = "<group>"; }; - 8B7DCBE10DFF18720017E983 /* GTMDevLogUnitTestingBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMDevLogUnitTestingBridge.m; sourceTree = "<group>"; }; - 8B7DCBEC0DFF1A4F0017E983 /* GTMUnitTestDevLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMUnitTestDevLog.m; sourceTree = "<group>"; }; - 8B7DCBF00DFF1A610017E983 /* GTMUnitTestDevLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMUnitTestDevLog.h; sourceTree = "<group>"; }; 8B7DCE180DFF39850017E983 /* GTMSenTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMSenTestCase.m; sourceTree = "<group>"; }; - 8B8B10FF0EEB8CD000E543D0 /* GTMGetURLHandlerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMGetURLHandlerTest.m; sourceTree = "<group>"; }; 8B8EC87B0EF17C270044D13F /* GTMNSFileManager+Carbon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSFileManager+Carbon.h"; sourceTree = "<group>"; }; 8B8EC87C0EF17C270044D13F /* GTMNSFileManager+Carbon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSFileManager+Carbon.m"; sourceTree = "<group>"; }; 8B8EC87F0EF17C2F0044D13F /* GTMNSFileManager+CarbonTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSFileManager+CarbonTest.m"; sourceTree = "<group>"; }; - 8BA01B5B0F144BD800926923 /* GTMNSWorkspace+Running.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSWorkspace+Running.m"; sourceTree = "<group>"; }; - 8BA01B5C0F144BD800926923 /* GTMNSWorkspace+Running.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSWorkspace+Running.h"; sourceTree = "<group>"; }; - 8BA01B5F0F144BE500926923 /* GTMNSWorkspace+RunningTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSWorkspace+RunningTest.m"; sourceTree = "<group>"; }; - 8BA7147E11B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.tiff"; sourceTree = "<group>"; }; - 8BA7147F11B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.tiff"; sourceTree = "<group>"; }; - 8BA7148011B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FAF8119CA2E300E264C3 /* GTMUnitTestingTestApp.10.6.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUnitTestingTestApp.10.6.gtmUTState; sourceTree = "<group>"; }; - 8BA9FB22119CA3F200E264C3 /* GTMUnitTestingWindow.10.6.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUnitTestingWindow.10.6.gtmUTState; sourceTree = "<group>"; }; - 8BA9FB8E119CAE7200E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-1.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FB94119CAEDE00E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-0.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FB9B119CAF0200E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-2.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBA0119CAF6600E264C3 /* GTMNSBezierPath+ShadingTest.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMNSBezierPath+ShadingTest.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBA2119CAF9500E264C3 /* GTMNSBezierPath+RoundRectTest.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMNSBezierPath+RoundRectTest.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBA6119CB00000E264C3 /* GTMNSBezierPath+RoundRectTest.10.6.x86_64.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMNSBezierPath+RoundRectTest.10.6.x86_64.tiff"; sourceTree = "<group>"; }; - 8BA9FBAA119CB06500E264C3 /* GTMLargeTypeWindowShortTextTest.10.6.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMLargeTypeWindowShortTextTest.10.6.gtmUTState; sourceTree = "<group>"; }; - 8BA9FBAC119CB08200E264C3 /* GTMLargeTypeWindowMediumTextTest.10.6.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMLargeTypeWindowMediumTextTest.10.6.gtmUTState; sourceTree = "<group>"; }; - 8BA9FBBA119CB0C400E264C3 /* GTMLargeTypeWindowLongTextTest.10.6.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMLargeTypeWindowLongTextTest.10.6.gtmUTState; sourceTree = "<group>"; }; - 8BA9FBBC119CB14C00E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-0.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab0-0.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBBF119CB17600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBC7119CB19A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-0.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-Min-0.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBDA119CB1E600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBDD119CB20A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-0.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest3-0.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBE0119CB23000E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-1.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest3-1.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBE3119CB24D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-2.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest3-2.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBE6119CB26A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-1.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-Min-1.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBE9119CB28500E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-2.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-Min-2.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBEC119CB2A400E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-3.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-Min-3.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBEF119CB2BF00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBF2119CB2D600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBF5119CB2EF00E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-0.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest1-0.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBFC119CB30D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-1.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest1-1.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FBFF119CB32500E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-2.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest1-2.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC43119CB36100E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-3.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest3-3.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC46119CB37F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-0.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest2-0.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC5C119CB39D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-1.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest2-1.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC5F119CB3B500E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-2.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest2-2.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC62119CB3CD00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-4.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest3-4.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC65119CB3E200E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-0.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest5-0.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC68119CB3F900E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-1.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest5-1.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC6B119CB43F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-2.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest5-2.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC6E119CB46000E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-1.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab0-1.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC71119CB47900E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-2.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab0-2.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC74119CB48F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-0.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab1-0.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC77119CB4A100E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-1.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab1-1.10.6.tiff"; sourceTree = "<group>"; }; - 8BA9FC7A119CB4B300E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-2.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab1-2.10.6.tiff"; sourceTree = "<group>"; }; - 8BAA9B540F7B4A5000DF4F12 /* GTMHotKeyTextFieldTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHotKeyTextFieldTest.h; sourceTree = "<group>"; }; - 8BAA9B560F7B4C2400DF4F12 /* GTMHotKeyTextFieldTest.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMHotKeyTextFieldTest.xib; sourceTree = "<group>"; }; + 8BA983C51D9AE7E6009724B5 /* GTMUnitTestingTest.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; path = GTMUnitTestingTest.nib; sourceTree = "<group>"; }; 8BAA9E370F7C19D500DF4F12 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = UnitTesting/GTMUIUnitTestingHarness/English.lproj/MainMenu.xib; sourceTree = "<group>"; }; - 8BB77A0111B5A09900AB31AF /* GTMGoogleSearch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMGoogleSearch.h; sourceTree = "<group>"; }; - 8BB77A0211B5A09900AB31AF /* GTMGoogleSearch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMGoogleSearch.m; sourceTree = "<group>"; }; - 8BB77A0311B5A09900AB31AF /* GTMGoogleSearchTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMGoogleSearchTest.m; sourceTree = "<group>"; }; 8BBD1F8A1519258A003152F0 /* GTMNSThread+Blocks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSThread+Blocks.h"; sourceTree = "<group>"; }; 8BBD1F8B1519258A003152F0 /* GTMNSThread+Blocks.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSThread+Blocks.m"; sourceTree = "<group>"; }; 8BBD1F8E1519271A003152F0 /* GTMNSThread+BlocksTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSThread+BlocksTest.m"; sourceTree = "<group>"; }; 8BC046B80DAE8C4B00C2D1CA /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; - 8BC04D140DB0061300C2D1CA /* RunMacOSUnitTests.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = RunMacOSUnitTests.sh; sourceTree = "<group>"; }; 8BC85131127A18AE0046E0FB /* GTMServiceManagementTestingHarness */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = GTMServiceManagementTestingHarness; sourceTree = BUILT_PRODUCTS_DIR; }; 8BC851D3127A19020046E0FB /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; 8BC85201127A19370046E0FB /* GTMServiceManagementTestingHarness.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = GTMServiceManagementTestingHarness.c; sourceTree = "<group>"; }; - 8BCB59EE11C00ED6009B6C40 /* GTMNSScanner+Unsigned.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSScanner+Unsigned.h"; sourceTree = "<group>"; }; - 8BCB59EF11C00ED6009B6C40 /* GTMNSScanner+Unsigned.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSScanner+Unsigned.m"; sourceTree = "<group>"; }; - 8BCB59F211C00EF6009B6C40 /* GTMNSScanner+UnsignedTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSScanner+UnsignedTest.m"; sourceTree = "<group>"; }; 8BD35B8E0FB22980009058F5 /* GTMNSScanner+JSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSScanner+JSON.h"; sourceTree = "<group>"; }; 8BD35B8F0FB22980009058F5 /* GTMNSScanner+JSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSScanner+JSON.m"; sourceTree = "<group>"; }; 8BD35B900FB22980009058F5 /* GTMNSScanner+JSONTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSScanner+JSONTest.m"; sourceTree = "<group>"; }; - 8BDB8A971152E1B200C411B1 /* GTMNSAnimatablePropertyContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMNSAnimatablePropertyContainer.h; sourceTree = "<group>"; }; - 8BDB8A981152E1B200C411B1 /* GTMNSAnimatablePropertyContainer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMNSAnimatablePropertyContainer.m; sourceTree = "<group>"; }; - 8BDB8C39115329EC00C411B1 /* GTMNSAnimatablePropertyContainerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMNSAnimatablePropertyContainerTest.m; sourceTree = "<group>"; }; - 8BE2836B0DED0F130035B3F8 /* GTMFourCharCode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMFourCharCode.m; sourceTree = "<group>"; }; - 8BE2836C0DED0F130035B3F8 /* GTMFourCharCodeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMFourCharCodeTest.m; sourceTree = "<group>"; }; - 8BE2836D0DED0F130035B3F8 /* GTMFourCharCode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMFourCharCode.h; sourceTree = "<group>"; }; - 8BE839A80E8AF72500C611B0 /* GTMDebugThreadValidationTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMDebugThreadValidationTest.m; sourceTree = "<group>"; }; - 8BE869720DBE89C100749827 /* GTMNSBezierPath+RoundRectTest.x86_64.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMNSBezierPath+RoundRectTest.x86_64.tiff"; sourceTree = "<group>"; }; - 8BEEA90A0DA7446300894774 /* GTMUnitTestingImage.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMUnitTestingImage.tiff; sourceTree = "<group>"; }; - 8BEEA90B0DA7446300894774 /* GTMUnitTestingWindow.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMUnitTestingWindow.tiff; sourceTree = "<group>"; }; - 8BEEA90C0DA7446300894774 /* GTMUnitTestingView.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMUnitTestingView.tiff; sourceTree = "<group>"; }; 8BF2368D13CF67CB00F3FD82 /* GTMKeyValueAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMKeyValueAnimation.h; sourceTree = "<group>"; }; 8BF2368E13CF67CB00F3FD82 /* GTMKeyValueAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMKeyValueAnimation.m; sourceTree = "<group>"; }; 8BF2369113CF694C00F3FD82 /* GTMKeyValueAnimationTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMKeyValueAnimationTest.m; sourceTree = "<group>"; }; 8BF2555110F65B56000490C8 /* GTMTypeCasting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMTypeCasting.h; sourceTree = "<group>"; }; 8BFE13B00FB0F2B9001BE894 /* GTMABAddressBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMABAddressBook.h; sourceTree = "<group>"; }; 8BFE13B10FB0F2B9001BE894 /* GTMABAddressBook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMABAddressBook.m; sourceTree = "<group>"; }; - 8BFE13B20FB0F2B9001BE894 /* GTMABAddressBook.strings */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; path = GTMABAddressBook.strings; sourceTree = "<group>"; }; + 8BFE13B20FB0F2B9001BE894 /* GTMABAddressBook.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = GTMABAddressBook.strings; sourceTree = "<group>"; }; 8BFE13B30FB0F2B9001BE894 /* GTMABAddressBookTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMABAddressBookTest.m; sourceTree = "<group>"; }; 8BFE13B50FB0F2B9001BE894 /* phone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = phone.png; sourceTree = "<group>"; }; - 8BFE13FC0FB0F2D8001BE894 /* UnitTest-AddressBook.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTest-AddressBook.octest"; sourceTree = BUILT_PRODUCTS_DIR; }; + 8BFE13FC0FB0F2D8001BE894 /* UnitTest-AddressBook.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTest-AddressBook.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 8BFE158C0FB0F34C001BE894 /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = /System/Library/Frameworks/AddressBook.framework; sourceTree = "<absolute>"; }; - B71B91E01332CD680039B2CB /* GTMFadeTruncatingTextFieldCellTest5.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMFadeTruncatingTextFieldCellTest5.tiff; sourceTree = "<group>"; }; - B71B91E11332CD680039B2CB /* GTMFadeTruncatingTextFieldCellTest6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMFadeTruncatingTextFieldCellTest6.tiff; sourceTree = "<group>"; }; - B71B92361332DA380039B2CB /* GTMFadeTruncatingTextFieldCellTest7.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMFadeTruncatingTextFieldCellTest7.tiff; sourceTree = "<group>"; }; - B7764E7F133906B600AFDC7D /* GTMFadeTruncatingTextFieldCellTest8.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMFadeTruncatingTextFieldCellTest8.tiff; sourceTree = "<group>"; }; F413908C0D75F63C00F72B31 /* GTMNSFileManager+Path.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSFileManager+Path.h"; sourceTree = "<group>"; }; F413908D0D75F63C00F72B31 /* GTMNSFileManager+Path.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSFileManager+Path.m"; sourceTree = "<group>"; }; F413908E0D75F63C00F72B31 /* GTMNSFileManager+PathTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSFileManager+PathTest.m"; sourceTree = "<group>"; }; @@ -845,83 +373,39 @@ F42597760E23FE3A003BEA3E /* GTMNSString+FindFolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSString+FindFolder.h"; sourceTree = "<group>"; }; F42597770E23FE3A003BEA3E /* GTMNSString+FindFolder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+FindFolder.m"; sourceTree = "<group>"; }; F42597780E23FE3A003BEA3E /* GTMNSString+FindFolderTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+FindFolderTest.m"; sourceTree = "<group>"; }; - F42866B51267340A0090FE0F /* GTMURITemplate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMURITemplate.h; sourceTree = "<group>"; }; - F42866B61267340A0090FE0F /* GTMURITemplate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMURITemplate.m; sourceTree = "<group>"; }; - F42866B71267340A0090FE0F /* GTMURITemplateTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMURITemplateTest.m; sourceTree = "<group>"; }; - F428670112673C490090FE0F /* GTMURITemplateExtraTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = GTMURITemplateExtraTests.json; sourceTree = "<group>"; }; - F428670212673C490090FE0F /* GTMURITemplateRFCTests.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = GTMURITemplateRFCTests.json; sourceTree = "<group>"; }; F428FEFF0D48E55E00382ED1 /* GTMNSBezierPath+CGPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSBezierPath+CGPath.h"; sourceTree = "<group>"; }; F428FF000D48E55E00382ED1 /* GTMNSBezierPath+CGPath.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSBezierPath+CGPath.m"; sourceTree = "<group>"; }; F428FF010D48E55E00382ED1 /* GTMNSBezierPath+CGPathTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSBezierPath+CGPathTest.m"; sourceTree = "<group>"; }; - F42E08210D19987200D5DDE0 /* UnitTest-Foundation.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTest-Foundation.octest"; sourceTree = BUILT_PRODUCTS_DIR; }; + F42E08210D19987200D5DDE0 /* UnitTest-Foundation.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTest-Foundation.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; F42E086D0D199A5B00D5DDE0 /* GoogleToolboxForMac.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleToolboxForMac.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F42E086E0D199A5B00D5DDE0 /* GTM-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GTM-Info.plist"; sourceTree = "<group>"; }; - F42E089B0D199B1800D5DDE0 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; F42E09AD0D19A62F00D5DDE0 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; F42E2C67102B1261004DF054 /* GTMUILocalizerAndLayoutTweakerTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMUILocalizerAndLayoutTweakerTest.h; sourceTree = "<group>"; }; F42E2C68102B1261004DF054 /* GTMUILocalizerAndLayoutTweakerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMUILocalizerAndLayoutTweakerTest.m; sourceTree = "<group>"; }; F42E2C83102B14B0004DF054 /* GTMUILocalizerAndLayoutTweakerTest1.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMUILocalizerAndLayoutTweakerTest1.xib; sourceTree = "<group>"; }; - F42E2CFC102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-0.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest1-0.tiff"; sourceTree = "<group>"; }; - F42E2CFD102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-1.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest1-1.tiff"; sourceTree = "<group>"; }; - F42E2CFE102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-2.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest1-2.tiff"; sourceTree = "<group>"; }; F42E2D07102B2283004DF054 /* GTMUILocalizerAndLayoutTweakerTest2.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMUILocalizerAndLayoutTweakerTest2.xib; sourceTree = "<group>"; }; - F42E2D21102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-0.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest2-0.tiff"; sourceTree = "<group>"; }; - F42E2D22102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-1.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest2-1.tiff"; sourceTree = "<group>"; }; - F42E2D23102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-2.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest2-2.tiff"; sourceTree = "<group>"; }; - F42F50E81057E91A00BFC735 /* GTMUnitTestingWindow.10.5.8.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMUnitTestingWindow.10.5.8.tiff; sourceTree = "<group>"; }; F431221A0DD4E3B800F45252 /* GTMStackTrace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMStackTrace.h; sourceTree = "<group>"; }; F431221B0DD4E3B800F45252 /* GTMStackTraceTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMStackTraceTest.m; sourceTree = "<group>"; }; - F435DE7A0DC0B6580069CDE8 /* GTMNSBezierPath+CGPathTest.ppc64.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMNSBezierPath+CGPathTest.ppc64.tiff"; sourceTree = "<group>"; }; - F435DE7B0DC0B6580069CDE8 /* GTMNSBezierPath+CGPathTest.x86_64.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMNSBezierPath+CGPathTest.x86_64.tiff"; sourceTree = "<group>"; }; - F435DE8A0DC0B7620069CDE8 /* GTMNSBezierPath+RoundRectTest.ppc64.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMNSBezierPath+RoundRectTest.ppc64.tiff"; sourceTree = "<group>"; }; F437F55A0D50BC0A00F5C3A4 /* GTMRegex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMRegex.h; sourceTree = "<group>"; }; F437F55B0D50BC0A00F5C3A4 /* GTMRegex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMRegex.m; sourceTree = "<group>"; }; F437F55C0D50BC0A00F5C3A4 /* GTMRegexTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMRegexTest.m; sourceTree = "<group>"; }; - F43A434B1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-0.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-Min-0.tiff"; sourceTree = "<group>"; }; - F43A434C1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-1.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-Min-1.tiff"; sourceTree = "<group>"; }; - F43A434D1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-2.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-Min-2.tiff"; sourceTree = "<group>"; }; - F43A434E1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-3.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-Min-3.tiff"; sourceTree = "<group>"; }; - F43A434F1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.tiff"; sourceTree = "<group>"; }; - F43A43501146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.tiff"; sourceTree = "<group>"; }; - F43A43511146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.tiff"; sourceTree = "<group>"; }; - F43A43521146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.tiff"; sourceTree = "<group>"; }; F43C7A551021FAA300ABF03C /* GTMUILocalizerAndLayoutTweaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMUILocalizerAndLayoutTweaker.h; sourceTree = "<group>"; }; F43C7A561021FAA300ABF03C /* GTMUILocalizerAndLayoutTweaker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMUILocalizerAndLayoutTweaker.m; sourceTree = "<group>"; }; F43DCDCB0D4796C600959A62 /* GTMLoginItems.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMLoginItems.h; sourceTree = "<group>"; }; F43DCDCC0D4796C600959A62 /* GTMLoginItems.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLoginItems.m; sourceTree = "<group>"; }; F43DCEC60D47BEA000959A62 /* GTMLoginItemsTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLoginItemsTest.m; sourceTree = "<group>"; }; - F43E44770D4918B20041161F /* GTMLinearRGBShading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMLinearRGBShading.h; sourceTree = "<group>"; }; - F43E44780D4918B20041161F /* GTMLinearRGBShading.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLinearRGBShading.m; sourceTree = "<group>"; }; - F43E44790D4918B20041161F /* GTMLinearRGBShadingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLinearRGBShadingTest.m; sourceTree = "<group>"; }; F43E4C250D4E361D0041161F /* GTMNSString+XML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSString+XML.h"; sourceTree = "<group>"; }; F43E4C260D4E361D0041161F /* GTMNSString+XML.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+XML.m"; sourceTree = "<group>"; }; F43E4C270D4E361D0041161F /* GTMNSString+XMLTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+XMLTest.m"; sourceTree = "<group>"; }; - F43E4DD60D4E56320041161F /* GTMNSEnumerator+Filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSEnumerator+Filter.h"; sourceTree = "<group>"; }; - F43E4DD70D4E56320041161F /* GTMNSEnumerator+Filter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSEnumerator+Filter.m"; sourceTree = "<group>"; }; - F43E4DD80D4E56320041161F /* GTMNSEnumerator+FilterTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSEnumerator+FilterTest.m"; sourceTree = "<group>"; }; F43E4E5E0D4E5EC90041161F /* GTMNSData+zlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSData+zlib.h"; sourceTree = "<group>"; }; F43E4E5F0D4E5EC90041161F /* GTMNSData+zlib.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSData+zlib.m"; sourceTree = "<group>"; }; F43E4E600D4E5EC90041161F /* GTMNSData+zlibTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSData+zlibTest.m"; sourceTree = "<group>"; }; F43E4F6C0D4E60C50041161F /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; }; F440EDB70DFECC4B0003E81F /* BuildingAndUsing.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BuildingAndUsing.txt; sourceTree = "<group>"; }; - F450A6B9146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.7.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.7.tiff"; sourceTree = "<group>"; }; - F450A6BA146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.7.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.7.tiff"; sourceTree = "<group>"; }; - F450A6BB146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.7.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.7.tiff"; sourceTree = "<group>"; }; - F450A746146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.7.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-0.10.6.7.tiff"; sourceTree = "<group>"; }; - F450A747146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.7.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-1.10.6.7.tiff"; sourceTree = "<group>"; }; - F450A748146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.7.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-2.10.6.7.tiff"; sourceTree = "<group>"; }; F47466651296F19E0022C1FB /* GTMSenTestCaseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMSenTestCaseTest.m; sourceTree = "<group>"; }; F47A79850D746EE9002302AB /* GTMScriptRunner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMScriptRunner.h; sourceTree = "<group>"; }; F47A79860D746EE9002302AB /* GTMScriptRunner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMScriptRunner.m; sourceTree = "<group>"; }; F47A79870D746EE9002302AB /* GTMScriptRunnerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMScriptRunnerTest.m; sourceTree = "<group>"; }; - F47F1C0D0D490BC000925B8F /* GTMNSBezierPath+Shading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSBezierPath+Shading.h"; sourceTree = "<group>"; }; - F47F1C0E0D490BC000925B8F /* GTMNSBezierPath+Shading.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSBezierPath+Shading.m"; sourceTree = "<group>"; }; - F47F1C110D490BC000925B8F /* GTMNSBezierPath+ShadingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSBezierPath+ShadingTest.m"; sourceTree = "<group>"; }; - F47F1C740D490E5C00925B8F /* GTMShading.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMShading.h; sourceTree = "<group>"; }; - F47F1D2D0D4914AD00925B8F /* GTMCalculatedRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMCalculatedRange.h; sourceTree = "<group>"; }; - F47F1D2E0D4914AD00925B8F /* GTMCalculatedRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMCalculatedRange.m; sourceTree = "<group>"; }; - F47F1D2F0D4914AD00925B8F /* GTMCalculatedRangeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMCalculatedRangeTest.m; sourceTree = "<group>"; }; - F48D000C0FE994BF00428D0B /* GTMUnitTestingWindow.10.5.7.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMUnitTestingWindow.10.5.7.tiff; sourceTree = "<group>"; }; F48FE2410D197F9A009257D2 /* DebugTigerOrLater.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = DebugTigerOrLater.xcconfig; sourceTree = "<group>"; }; F48FE2420D197F9A009257D2 /* DebugUnittest.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = DebugUnittest.xcconfig; sourceTree = "<group>"; }; F48FE2430D197F9A009257D2 /* LoadableBundle.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = LoadableBundle.xcconfig; sourceTree = "<group>"; }; @@ -929,10 +413,8 @@ F48FE2450D197F9A009257D2 /* ReleaseUnittest.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = ReleaseUnittest.xcconfig; sourceTree = "<group>"; }; F48FE2460D197F9A009257D2 /* SharedLibrary.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = SharedLibrary.xcconfig; sourceTree = "<group>"; }; F48FE2470D197F9A009257D2 /* StaticLibrary.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = StaticLibrary.xcconfig; sourceTree = "<group>"; }; - F48FE2640D198C1E009257D2 /* UnitTest-AppKit.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTest-AppKit.octest"; sourceTree = BUILT_PRODUCTS_DIR; }; + F48FE2640D198C1E009257D2 /* UnitTest-AppKit.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UnitTest-AppKit.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; F48FE26E0D198CAD009257D2 /* UnitTest-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "UnitTest-Info.plist"; sourceTree = "<group>"; }; - F48FE27C0D198D0E009257D2 /* GTMDelegatingTableColumn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDelegatingTableColumn.h; sourceTree = "<group>"; }; - F48FE27D0D198D0E009257D2 /* GTMDelegatingTableColumn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMDelegatingTableColumn.m; sourceTree = "<group>"; }; F48FE27E0D198D0E009257D2 /* GTMGeometryUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMGeometryUtils.h; sourceTree = "<group>"; }; F48FE27F0D198D0E009257D2 /* GTMGeometryUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMGeometryUtils.m; sourceTree = "<group>"; }; F48FE2800D198D0E009257D2 /* GTMGeometryUtilsTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMGeometryUtilsTest.m; sourceTree = "<group>"; }; @@ -945,62 +427,24 @@ F48FE2910D198D24009257D2 /* GTMObjectSingleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMObjectSingleton.h; sourceTree = "<group>"; }; F48FE2920D198D24009257D2 /* GTMSystemVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMSystemVersion.h; sourceTree = "<group>"; }; F48FE2930D198D24009257D2 /* GTMSystemVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMSystemVersion.m; sourceTree = "<group>"; }; - F48FE29B0D198D36009257D2 /* GTMNSObject+UnitTesting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSObject+UnitTesting.h"; sourceTree = "<group>"; }; - F48FE29C0D198D36009257D2 /* GTMNSObject+UnitTesting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSObject+UnitTesting.m"; sourceTree = "<group>"; }; F48FE29F0D198D36009257D2 /* GTMSenTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMSenTestCase.h; sourceTree = "<group>"; }; F48FE2E10D198E4C009257D2 /* GTMSystemVersionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMSystemVersionTest.m; sourceTree = "<group>"; }; F493E3581146CD97005F994E /* GTMUILocalizerAndLayoutTweakerTest7.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMUILocalizerAndLayoutTweakerTest7.xib; sourceTree = "<group>"; }; - F49DCD211460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.8.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-0.10.6.8.tiff"; sourceTree = "<group>"; }; - F49DCD221460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.8.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-1.10.6.8.tiff"; sourceTree = "<group>"; }; - F49DCD231460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.8.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-2.10.6.8.tiff"; sourceTree = "<group>"; }; - F49DCD5A146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.8.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.8.tiff"; sourceTree = "<group>"; }; - F49DCD5B146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.8.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.8.tiff"; sourceTree = "<group>"; }; - F49DCD5C146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.8.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.8.tiff"; sourceTree = "<group>"; }; F49FA8420EEF2AB700077669 /* GTMFileSystemKQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMFileSystemKQueue.h; sourceTree = "<group>"; }; F49FA8430EEF2AB700077669 /* GTMFileSystemKQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMFileSystemKQueue.m; sourceTree = "<group>"; }; F49FA88A0EEF303D00077669 /* GTMFileSystemKQueueTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMFileSystemKQueueTest.m; sourceTree = "<group>"; }; - F4A420EC0EDDF8E000397A11 /* GTMHotKeyTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHotKeyTextField.h; sourceTree = "<group>"; }; - F4A420ED0EDDF8E000397A11 /* GTMHotKeyTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHotKeyTextField.m; sourceTree = "<group>"; }; - F4A420EE0EDDF8E000397A11 /* GTMHotKeyTextFieldTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHotKeyTextFieldTest.m; sourceTree = "<group>"; }; - F4A486EC1097EA0A00513483 /* GTMUnitTestingView.10.6.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMUnitTestingView.10.6.tiff; sourceTree = "<group>"; }; - F4AA2CB1109B37650025C956 /* GTMUILocalizerAndLayoutTweakerTest3-4.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest3-4.tiff"; sourceTree = "<group>"; }; F4C0B9C2108E27EE002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMUILocalizerAndLayoutTweakerTest5.xib; sourceTree = "<group>"; }; - F4C0B9D7108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-0.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest5-0.tiff"; sourceTree = "<group>"; }; - F4C0B9D8108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-1.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest5-1.tiff"; sourceTree = "<group>"; }; - F4C0B9D9108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-2.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest5-2.tiff"; sourceTree = "<group>"; }; - F4C58CC110BAD75200651068 /* GTMFadeTruncatingTextFieldCellTest3.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMFadeTruncatingTextFieldCellTest3.tiff; sourceTree = "<group>"; }; - F4C58CC210BAD75200651068 /* GTMFadeTruncatingTextFieldCellTest4.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = GTMFadeTruncatingTextFieldCellTest4.tiff; sourceTree = "<group>"; }; F4C62483109753960069CADD /* GTMIBArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMIBArray.h; sourceTree = "<group>"; }; F4C62484109753960069CADD /* GTMIBArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMIBArray.m; sourceTree = "<group>"; }; F4C62485109753960069CADD /* GTMIBArrayTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMIBArrayTest.h; sourceTree = "<group>"; }; F4C62486109753960069CADD /* GTMIBArrayTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMIBArrayTest.m; sourceTree = "<group>"; }; F4C62487109753960069CADD /* GTMIBArrayTest.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMIBArrayTest.xib; sourceTree = "<group>"; }; F4CA854E0DAFAAB600B4AB10 /* xcconfigs-readme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "xcconfigs-readme.txt"; sourceTree = "<group>"; }; - F4CA864C0DB3ACD200B4AB10 /* LoadableBundleGCSupported.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = LoadableBundleGCSupported.xcconfig; sourceTree = "<group>"; }; - F4CA864D0DB3ACD200B4AB10 /* SharedLibraryGCSupported.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = SharedLibraryGCSupported.xcconfig; sourceTree = "<group>"; }; - F4CA864E0DB3ACD200B4AB10 /* StaticLibraryGCSupported.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = StaticLibraryGCSupported.xcconfig; sourceTree = "<group>"; }; F4CC9F3F148E5E2500B7D68C /* DebugMacOSX.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = DebugMacOSX.xcconfig; sourceTree = "<group>"; }; F4CC9F40148E5E2500B7D68C /* ReleaseMacOSX.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = ReleaseMacOSX.xcconfig; sourceTree = "<group>"; }; F4FB44131120799A00F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMUILocalizerAndLayoutTweakerTest6.xib; sourceTree = "<group>"; }; - F4FB444D11207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-0.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab0-0.tiff"; sourceTree = "<group>"; }; - F4FB444E11207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-1.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab0-1.tiff"; sourceTree = "<group>"; }; - F4FB444F11207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-2.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab0-2.tiff"; sourceTree = "<group>"; }; - F4FB445011207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-0.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab1-0.tiff"; sourceTree = "<group>"; }; - F4FB445111207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-1.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab1-1.tiff"; sourceTree = "<group>"; }; - F4FB445211207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-2.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest6-tab1-2.tiff"; sourceTree = "<group>"; }; F4FC15DC1046AD66000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMUILocalizerAndLayoutTweakerTest3.xib; sourceTree = "<group>"; }; - F4FC15FF1046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-0.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest3-0.tiff"; sourceTree = "<group>"; }; - F4FC16001046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-1.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest3-1.tiff"; sourceTree = "<group>"; }; - F4FC16011046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-2.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest3-2.tiff"; sourceTree = "<group>"; }; - F4FC16021046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-3.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest3-3.tiff"; sourceTree = "<group>"; }; - F4FC322C104EAA11000AB7BC /* GTMUILocalizerWindow3State.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUILocalizerWindow3State.gtmUTState; sourceTree = "<group>"; }; F4FC324C104EBD70000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMUILocalizerAndLayoutTweakerTest4.xib; sourceTree = "<group>"; }; - F4FC327A104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-0.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-0.tiff"; sourceTree = "<group>"; }; - F4FC327B104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-1.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-1.tiff"; sourceTree = "<group>"; }; - F4FC327C104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-2.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-2.tiff"; sourceTree = "<group>"; }; - F4FC333A104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.tiff"; sourceTree = "<group>"; }; - F4FC333B104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.tiff"; sourceTree = "<group>"; }; - F4FC333C104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.tiff"; sourceTree = "<group>"; }; F4FF22770D9D4835003880AC /* GTMDebugSelectorValidation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDebugSelectorValidation.h; sourceTree = "<group>"; }; F95803F60E2FB0760049A088 /* GTMLoggerRingBufferWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMLoggerRingBufferWriter.h; sourceTree = "<group>"; }; F95803F70E2FB0760049A088 /* GTMLoggerRingBufferWriter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLoggerRingBufferWriter.m; sourceTree = "<group>"; }; @@ -1026,7 +470,7 @@ buildActionMask = 2147483647; files = ( 8B45A2040DA46DF6001148C5 /* Cocoa.framework in Frameworks */, - 8B45A0B80DA46A2F001148C5 /* SenTestingKit.framework in Frameworks */, + 8B07C6111D99B01D0054728B /* XCTest.framework in Frameworks */, 8B45A03A0DA46A2A001148C5 /* Foundation.framework in Frameworks */, 8B45A19A0DA46AAA001148C5 /* QuartzCore.framework in Frameworks */, 8B7DCBA50DFF0EFF0017E983 /* GoogleToolboxForMac.framework in Frameworks */, @@ -1057,8 +501,8 @@ files = ( 8BFE13ED0FB0F2D8001BE894 /* Cocoa.framework in Frameworks */, 8BFE13EE0FB0F2D8001BE894 /* GoogleToolboxForMac.framework in Frameworks */, - 8BFE13EF0FB0F2D8001BE894 /* SenTestingKit.framework in Frameworks */, 8BFE158E0FB0F34C001BE894 /* AddressBook.framework in Frameworks */, + 8B07C60E1D99B01D0054728B /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1068,7 +512,7 @@ files = ( F42E08640D199A2F00D5DDE0 /* Foundation.framework in Frameworks */, F42E08800D199AB500D5DDE0 /* GoogleToolboxForMac.framework in Frameworks */, - F42E089D0D199B1800D5DDE0 /* SenTestingKit.framework in Frameworks */, + 8B07C6101D99B01D0054728B /* XCTest.framework in Frameworks */, 8BC046B90DAE8C4B00C2D1CA /* ApplicationServices.framework in Frameworks */, F99161B50F0B151400213D3B /* libsqlite3.dylib in Frameworks */, ); @@ -1093,8 +537,8 @@ files = ( F42E08610D199A2B00D5DDE0 /* Cocoa.framework in Frameworks */, F42E087F0D199AB400D5DDE0 /* GoogleToolboxForMac.framework in Frameworks */, - F42E089C0D199B1800D5DDE0 /* SenTestingKit.framework in Frameworks */, 8B8B10F90EEB8B9E00E543D0 /* Carbon.framework in Frameworks */, + 8B07C60F1D99B01D0054728B /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1104,12 +548,12 @@ 034768DFFF38A50411DB9C8B /* Products */ = { isa = PBXGroup; children = ( - F48FE2640D198C1E009257D2 /* UnitTest-AppKit.octest */, - F42E08210D19987200D5DDE0 /* UnitTest-Foundation.octest */, + F48FE2640D198C1E009257D2 /* UnitTest-AppKit.xctest */, + F42E08210D19987200D5DDE0 /* UnitTest-Foundation.xctest */, F42E086D0D199A5B00D5DDE0 /* GoogleToolboxForMac.framework */, - 8B45A0280DA4696C001148C5 /* UnitTest-UnitTesting.octest */, + 8B45A0280DA4696C001148C5 /* UnitTest-UnitTesting.xctest */, 8B45A28A0DA49B99001148C5 /* GTMUIUnitTestingHarness.app */, - 8BFE13FC0FB0F2D8001BE894 /* UnitTest-AddressBook.octest */, + 8BFE13FC0FB0F2D8001BE894 /* UnitTest-AddressBook.xctest */, 8BC85131127A18AE0046E0FB /* GTMServiceManagementTestingHarness */, ); name = Products; @@ -1118,7 +562,6 @@ 0867D691FE84028FC02AAC07 /* GTM */ = { isa = PBXGroup; children = ( - 444B3B7619F6D24000B9191E /* CoreServices.framework */, F440EDB70DFECC4B0003E81F /* BuildingAndUsing.txt */, 8B1A16050D90344B00CA1E8E /* GTMDefines.h */, 8BFE13AF0FB0F2B9001BE894 /* AddressBook */, @@ -1128,9 +571,7 @@ F48FE2770D198CEA009257D2 /* UnitTesting */, F48FE23E0D197F70009257D2 /* XcodeConfig */, 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, - 84D99F350EA661C900C007D5 /* BuildScripts */, 034768DFFF38A50411DB9C8B /* Products */, - 32DBCF5E0370ADEE00C91783 /* GTM_Prefix.pch */, F42E086E0D199A5B00D5DDE0 /* GTM-Info.plist */, F48FE26E0D198CAD009257D2 /* UnitTest-Info.plist */, ); @@ -1140,6 +581,8 @@ 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( + 8B07C60D1D99B01D0054728B /* XCTest.framework */, + 444B3B7619F6D24000B9191E /* CoreServices.framework */, 8BC851D3127A19020046E0FB /* CoreFoundation.framework */, 8BFE158C0FB0F34C001BE894 /* AddressBook.framework */, F99161B40F0B151400213D3B /* libsqlite3.dylib */, @@ -1150,27 +593,10 @@ 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */, 0867D69BFE84028FC02AAC07 /* Foundation.framework */, 8BC046B80DAE8C4B00C2D1CA /* ApplicationServices.framework */, - F42E089B0D199B1800D5DDE0 /* SenTestingKit.framework */, ); name = "External Frameworks and Libraries"; sourceTree = "<group>"; }; - 84D99F350EA661C900C007D5 /* BuildScripts */ = { - isa = PBXGroup; - children = ( - 84D99F360EA661C900C007D5 /* BuildAllSDKs.sh */, - ); - path = BuildScripts; - sourceTree = "<group>"; - }; - 8B0E653E0FD80D5E00461C4A /* GTMHotKeyTextFieldLocalizations */ = { - isa = PBXGroup; - children = ( - 8B0E653F0FD80D5E00461C4A /* GTMHotKeyTextField.strings */, - ); - path = GTMHotKeyTextFieldLocalizations; - sourceTree = "<group>"; - }; 8B409E960F952CCA00DF540E /* Resources */ = { isa = PBXGroup; children = ( @@ -1196,19 +622,9 @@ 8B5B4ABC15BF31050081A96C /* CodeCoverage.xcconfig */, 8B5B4ABD15BF31050081A96C /* CodeCoverageStatic.xcconfig */, 8B5B4ABE15BF31050081A96C /* Debug.xcconfig */, - 8B5B4ABF15BF31050081A96C /* GCSupported.xcconfig */, 8B5B4AC015BF31050081A96C /* General.xcconfig */, 8B5B4AC115BF31050081A96C /* GTMMerge.xcconfig */, - 8B5B4AC215BF31050081A96C /* iOS.xcconfig */, - 8B5B4AC315BF31050081A96C /* iPhone30.xcconfig */, - 8B5B4AC415BF31050081A96C /* iPhone31.xcconfig */, - 8B5B4AC515BF31050081A96C /* iPhone312.xcconfig */, - 8B5B4AC615BF31050081A96C /* iPhone313.xcconfig */, - 8B5B4AC715BF31050081A96C /* iPhone32.xcconfig */, - 8B5B4AC815BF31050081A96C /* iPhone40.xcconfig */, - 8B5B4AC915BF31050081A96C /* iPhone41.xcconfig */, 8B5B4ACA15BF31050081A96C /* LeopardOrLater.xcconfig */, - 8B5B4ACB15BF31050081A96C /* MacOS.xcconfig */, 8B5B4ACC15BF31050081A96C /* MacOSX.xcconfig */, 8B5B4ACD15BF31050081A96C /* Release.xcconfig */, 8B5B4ACE15BF31050081A96C /* SnowLeopardOrLater.xcconfig */, @@ -1218,6 +634,14 @@ path = subconfig; sourceTree = "<group>"; }; + 8BA983C21D9AE7E6009724B5 /* TestData */ = { + isa = PBXGroup; + children = ( + 8BA983C51D9AE7E6009724B5 /* GTMUnitTestingTest.nib */, + ); + path = TestData; + sourceTree = "<group>"; + }; 8BFE13AF0FB0F2B9001BE894 /* AddressBook */ = { isa = PBXGroup; children = ( @@ -1238,154 +662,10 @@ path = TestData; sourceTree = "<group>"; }; - F428670012673C1D0090FE0F /* TestData */ = { - isa = PBXGroup; - children = ( - F428670112673C490090FE0F /* GTMURITemplateExtraTests.json */, - F428670212673C490090FE0F /* GTMURITemplateRFCTests.json */, - ); - path = TestData; - sourceTree = "<group>"; - }; - F435E46C0DC8F23A0069CDE8 /* TestData */ = { - isa = PBXGroup; - children = ( - 8B45A2DE0DA51A7E001148C5 /* GTMUnitTestingTest.nib */, - 8B45A6B90DA67DD5001148C5 /* GTMUnitTestingImage.gtmUTState */, - 8B45A5F50DA5EB9F001148C5 /* GTMUnitTestingWindow.gtmUTState */, - 8BA9FB22119CA3F200E264C3 /* GTMUnitTestingWindow.10.6.gtmUTState */, - 8B45A5F60DA5EB9F001148C5 /* GTMUnitTestingTestApp.gtmUTState */, - 8BA9FAF8119CA2E300E264C3 /* GTMUnitTestingTestApp.10.6.gtmUTState */, - 8BEEA90A0DA7446300894774 /* GTMUnitTestingImage.tiff */, - 84B91B890EA3CC2E0087500F /* GTMUnitTestingImage.10.6.tiff */, - 8BEEA90B0DA7446300894774 /* GTMUnitTestingWindow.tiff */, - 8B2789950EF855FB00D68C01 /* GTMUnitTestingWindow.10.5.6.tiff */, - F48D000C0FE994BF00428D0B /* GTMUnitTestingWindow.10.5.7.tiff */, - F42F50E81057E91A00BFC735 /* GTMUnitTestingWindow.10.5.8.tiff */, - 84B91B8A0EA3CC2E0087500F /* GTMUnitTestingWindow.10.6.tiff */, - 8BEEA90C0DA7446300894774 /* GTMUnitTestingView.tiff */, - F4A486EC1097EA0A00513483 /* GTMUnitTestingView.10.6.tiff */, - ); - path = TestData; - sourceTree = "<group>"; - }; F435E4840DC8F3DC0069CDE8 /* TestData */ = { isa = PBXGroup; children = ( 8B409E960F952CCA00DF540E /* Resources */, - 7F97DBA2104ED861004DDDEE /* GTMFadeTruncatingTextFieldCellTest1.tiff */, - 7F97DBA3104ED861004DDDEE /* GTMFadeTruncatingTextFieldCellTest2.tiff */, - F4C58CC110BAD75200651068 /* GTMFadeTruncatingTextFieldCellTest3.tiff */, - F4C58CC210BAD75200651068 /* GTMFadeTruncatingTextFieldCellTest4.tiff */, - B71B91E01332CD680039B2CB /* GTMFadeTruncatingTextFieldCellTest5.tiff */, - B71B91E11332CD680039B2CB /* GTMFadeTruncatingTextFieldCellTest6.tiff */, - B71B92361332DA380039B2CB /* GTMFadeTruncatingTextFieldCellTest7.tiff */, - B7764E7F133906B600AFDC7D /* GTMFadeTruncatingTextFieldCellTest8.tiff */, - 8B1802410E25592200280961 /* GTMLargeTypeWindowMediumTextTest.gtmUTState */, - 8BA9FBAC119CB08200E264C3 /* GTMLargeTypeWindowMediumTextTest.10.6.gtmUTState */, - 8B1801A80E25341B00280961 /* GTMLargeTypeWindowImageTest.gtmUTState */, - 8B1801AC0E25341B00280961 /* GTMLargeTypeWindowLongTextTest.gtmUTState */, - 8BA9FBBA119CB0C400E264C3 /* GTMLargeTypeWindowLongTextTest.10.6.gtmUTState */, - 8B1801AD0E25341B00280961 /* GTMLargeTypeWindowShortTextTest.gtmUTState */, - 8BA9FBAA119CB06500E264C3 /* GTMLargeTypeWindowShortTextTest.10.6.gtmUTState */, - 8B7AD4980DABBB5800B84F4A /* GTMNSBezierPath+CGPathTest.tiff */, - F435DE7A0DC0B6580069CDE8 /* GTMNSBezierPath+CGPathTest.ppc64.tiff */, - F435DE7B0DC0B6580069CDE8 /* GTMNSBezierPath+CGPathTest.x86_64.tiff */, - 8B7AD4990DABBB5800B84F4A /* GTMNSBezierPath+RoundRectTest.tiff */, - F435DE8A0DC0B7620069CDE8 /* GTMNSBezierPath+RoundRectTest.ppc64.tiff */, - 8BE869720DBE89C100749827 /* GTMNSBezierPath+RoundRectTest.x86_64.tiff */, - 8BA9FBA2119CAF9500E264C3 /* GTMNSBezierPath+RoundRectTest.10.6.tiff */, - 8BA9FBA6119CB00000E264C3 /* GTMNSBezierPath+RoundRectTest.10.6.x86_64.tiff */, - 8B7AD4970DABBB5800B84F4A /* GTMNSBezierPath+ShadingTest.tiff */, - 8BA9FBA0119CAF6600E264C3 /* GTMNSBezierPath+ShadingTest.10.6.tiff */, - F42E2CFC102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-0.tiff */, - 8BA9FBF5119CB2EF00E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-0.10.6.tiff */, - F42E2CFD102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-1.tiff */, - 8BA9FBFC119CB30D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-1.10.6.tiff */, - F42E2CFE102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-2.tiff */, - 8BA9FBFF119CB32500E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-2.10.6.tiff */, - F42E2D21102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-0.tiff */, - 8BA9FC46119CB37F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-0.10.6.tiff */, - F42E2D22102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-1.tiff */, - 8BA9FC5C119CB39D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-1.10.6.tiff */, - F42E2D23102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-2.tiff */, - 8BA9FC5F119CB3B500E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-2.10.6.tiff */, - F4FC15FF1046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-0.tiff */, - 8BA9FBDD119CB20A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-0.10.6.tiff */, - F4FC16001046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-1.tiff */, - 8BA9FBE0119CB23000E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-1.10.6.tiff */, - F4FC16011046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-2.tiff */, - 8BA9FBE3119CB24D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-2.10.6.tiff */, - F4FC16021046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-3.tiff */, - 8BA9FC43119CB36100E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-3.10.6.tiff */, - F4AA2CB1109B37650025C956 /* GTMUILocalizerAndLayoutTweakerTest3-4.tiff */, - 8BA9FC62119CB3CD00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-4.10.6.tiff */, - F4FC327A104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-0.tiff */, - F4FC327B104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-1.tiff */, - F4FC327C104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-2.tiff */, - 8BA9FB94119CAEDE00E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.tiff */, - 8BA9FB8E119CAE7200E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.tiff */, - 8BA9FB9B119CAF0200E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.tiff */, - F450A746146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.7.tiff */, - F450A747146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.7.tiff */, - F450A748146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.7.tiff */, - F49DCD211460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.8.tiff */, - F49DCD221460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.8.tiff */, - F49DCD231460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.8.tiff */, - F4FC333A104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.tiff */, - F4FC333B104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.tiff */, - F4FC333C104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.tiff */, - 8BA7147E11B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.tiff */, - 8BA7147F11B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.tiff */, - 8BA7148011B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.tiff */, - F450A6B9146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.7.tiff */, - F450A6BA146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.7.tiff */, - F450A6BB146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.7.tiff */, - F49DCD5A146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.8.tiff */, - F49DCD5B146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.8.tiff */, - F49DCD5C146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.8.tiff */, - F4C0B9D7108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-0.tiff */, - 8BA9FC65119CB3E200E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-0.10.6.tiff */, - F4C0B9D8108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-1.tiff */, - 8BA9FC68119CB3F900E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-1.10.6.tiff */, - F4C0B9D9108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-2.tiff */, - 8BA9FC6B119CB43F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-2.10.6.tiff */, - F4FB444D11207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-0.tiff */, - 8BA9FBBC119CB14C00E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-0.10.6.tiff */, - F4FB444E11207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-1.tiff */, - 8BA9FC6E119CB46000E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-1.10.6.tiff */, - F4FB444F11207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-2.tiff */, - 8BA9FC71119CB47900E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-2.10.6.tiff */, - F4FB445011207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-0.tiff */, - 8BA9FC74119CB48F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-0.10.6.tiff */, - F4FB445111207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-1.tiff */, - 8BA9FC77119CB4A100E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-1.10.6.tiff */, - F4FB445211207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-2.tiff */, - 8BA9FC7A119CB4B300E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-2.10.6.tiff */, - F43A434B1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-0.tiff */, - 8BA9FBC7119CB19A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-0.10.6.tiff */, - F43A434C1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-1.tiff */, - 8BA9FBE6119CB26A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-1.10.6.tiff */, - F43A434D1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-2.tiff */, - 8BA9FBE9119CB28500E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-2.10.6.tiff */, - F43A434E1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-3.tiff */, - 8BA9FBEC119CB2A400E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-3.10.6.tiff */, - F43A434F1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.tiff */, - 8BA9FBDA119CB1E600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.10.6.tiff */, - F43A43501146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.tiff */, - 8BA9FBEF119CB2BF00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.10.6.tiff */, - F43A43511146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.tiff */, - 8BA9FBBF119CB17600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.10.6.tiff */, - F43A43521146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.tiff */, - 8BA9FBF2119CB2D600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.10.6.tiff */, - 8B409EC30F9530C200DF540E /* GTMUILocalizerWindow1State.gtmUTState */, - 7F4C015E1055AD4200F88238 /* GTMUILocalizerWindow1State.10_4_SDK.gtmUTState */, - 8B409EE80F95325000DF540E /* GTMUILocalizerWindow2State.gtmUTState */, - 8B4BD7E61200E5EA009C7060 /* GTMUILocalizerWindow3State.10_4_SDK.gtmUTState */, - F4FC322C104EAA11000AB7BC /* GTMUILocalizerWindow3State.gtmUTState */, - 8B409EF30F95331500DF540E /* GTMUILocalizerMenuState.gtmUTState */, - 8B409F110F95352500DF540E /* GTMUILocalizerView2State.gtmUTState */, - 8B409F120F95352500DF540E /* GTMUILocalizerView1State.gtmUTState */, ); path = TestData; sourceTree = "<group>"; @@ -1407,22 +687,9 @@ 8B3E292B0EEB53F3000681D8 /* GTMCarbonEvent.h */, 8B3E292A0EEB53F3000681D8 /* GTMCarbonEvent.m */, 8B3E29290EEB53F3000681D8 /* GTMCarbonEventTest.m */, - F48FE27C0D198D0E009257D2 /* GTMDelegatingTableColumn.h */, - F48FE27D0D198D0E009257D2 /* GTMDelegatingTableColumn.m */, 7F97DB2D104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCell.h */, 7F97DB2E104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCell.m */, 7F97DB2F104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCellTest.m */, - 8B58E9940E547EB000A0E02E /* GTMGetURLHandler.m */, - 8B8B10FF0EEB8CD000E543D0 /* GTMGetURLHandlerTest.m */, - 8BB77A0111B5A09900AB31AF /* GTMGoogleSearch.h */, - 8BB77A0211B5A09900AB31AF /* GTMGoogleSearch.m */, - 8BB77A0311B5A09900AB31AF /* GTMGoogleSearchTest.m */, - F4A420EC0EDDF8E000397A11 /* GTMHotKeyTextField.h */, - F4A420ED0EDDF8E000397A11 /* GTMHotKeyTextField.m */, - 8BAA9B540F7B4A5000DF4F12 /* GTMHotKeyTextFieldTest.h */, - F4A420EE0EDDF8E000397A11 /* GTMHotKeyTextFieldTest.m */, - 8BAA9B560F7B4C2400DF4F12 /* GTMHotKeyTextFieldTest.xib */, - 8B0E653E0FD80D5E00461C4A /* GTMHotKeyTextFieldLocalizations */, F4C62483109753960069CADD /* GTMIBArray.h */, F4C62484109753960069CADD /* GTMIBArray.m */, F4C62485109753960069CADD /* GTMIBArrayTest.h */, @@ -1431,44 +698,20 @@ 8BF2368D13CF67CB00F3FD82 /* GTMKeyValueAnimation.h */, 8BF2368E13CF67CB00F3FD82 /* GTMKeyValueAnimation.m */, 8BF2369113CF694C00F3FD82 /* GTMKeyValueAnimationTest.m */, - 8B1801A10E2533D500280961 /* GTMLargeTypeWindow.h */, - 8B1801A00E2533D500280961 /* GTMLargeTypeWindow.m */, - 8B1801A40E2533DB00280961 /* GTMLargeTypeWindowTest.m */, - F43E44770D4918B20041161F /* GTMLinearRGBShading.h */, - F43E44780D4918B20041161F /* GTMLinearRGBShading.m */, - F43E44790D4918B20041161F /* GTMLinearRGBShadingTest.m */, F43DCDCB0D4796C600959A62 /* GTMLoginItems.h */, F43DCDCC0D4796C600959A62 /* GTMLoginItems.m */, F43DCEC60D47BEA000959A62 /* GTMLoginItemsTest.m */, 8B158A5F10A8BE4500C93125 /* GTMNSAnimation+Duration.h */, 8B158A6010A8BE4500C93125 /* GTMNSAnimation+Duration.m */, - 8BDB8A981152E1B200C411B1 /* GTMNSAnimatablePropertyContainer.m */, - 8BDB8A971152E1B200C411B1 /* GTMNSAnimatablePropertyContainer.h */, - 8BDB8C39115329EC00C411B1 /* GTMNSAnimatablePropertyContainerTest.m */, - 8B21BE8F11532C7700DD2686 /* GTMNSAnimatablePropertyContainerTest.h */, - 8B21BE9111532CDC00DD2686 /* GTMNSAnimatablePropertyContainerTest.xib */, F428FEFF0D48E55E00382ED1 /* GTMNSBezierPath+CGPath.h */, F428FF000D48E55E00382ED1 /* GTMNSBezierPath+CGPath.m */, F428FF010D48E55E00382ED1 /* GTMNSBezierPath+CGPathTest.m */, F48FE2810D198D0E009257D2 /* GTMNSBezierPath+RoundRect.h */, F48FE2820D198D0E009257D2 /* GTMNSBezierPath+RoundRect.m */, F48FE2830D198D0E009257D2 /* GTMNSBezierPath+RoundRectTest.m */, - F47F1C0D0D490BC000925B8F /* GTMNSBezierPath+Shading.h */, - F47F1C0E0D490BC000925B8F /* GTMNSBezierPath+Shading.m */, - F47F1C110D490BC000925B8F /* GTMNSBezierPath+ShadingTest.m */, 7F511DF30F4B0378009F41B6 /* GTMNSColor+Luminance.h */, 7F511DF40F4B0378009F41B6 /* GTMNSColor+Luminance.m */, 7F511DF50F4B0378009F41B6 /* GTMNSColor+LuminanceTest.m */, - 7F3EB38C0E5E09C700A7A75E /* GTMNSImage+Scaling.h */, - 7F3EB38D0E5E09C700A7A75E /* GTMNSImage+Scaling.m */, - 7F3EB3930E5E0A2100A7A75E /* GTMNSImage+ScalingTest.m */, - 7FF768DF1051B17900D34F4B /* GTMNSImage+SearchCache.h */, - 7FF768E01051B17900D34F4B /* GTMNSImage+SearchCache.m */, - 7FF768E11051B17900D34F4B /* GTMNSImage+SearchCacheTest.m */, - 8BA01B5B0F144BD800926923 /* GTMNSWorkspace+Running.m */, - 8BA01B5C0F144BD800926923 /* GTMNSWorkspace+Running.h */, - 8BA01B5F0F144BE500926923 /* GTMNSWorkspace+RunningTest.m */, - F47F1C740D490E5C00925B8F /* GTMShading.h */, 8B4099490F93C5CC00DF540E /* GTMUILocalizer.h */, 8B40994A0F93C5CC00DF540E /* GTMUILocalizer.m */, F43C7A551021FAA300ABF03C /* GTMUILocalizerAndLayoutTweaker.h */, @@ -1485,7 +728,6 @@ 8B409E3E0F950DE900DF540E /* GTMUILocalizerTest.h */, 8B409BC50F94405A00DF540E /* GTMUILocalizerTest.m */, 8B409E8B0F952C2C00DF540E /* GTMUILocalizerTestWindow.xib */, - 7F6840D1105375A70057F4FA /* GTMUILocalizerTestWindow_10_4.xib */, 8B409F050F95341E00DF540E /* GTMUILocalizerTestView.xib */, 8207B8970FEA7A98008A527B /* GTMWindowSheetController.h */, 8207B8980FEA7A98008A527B /* GTMWindowSheetController.m */, @@ -1498,46 +740,18 @@ F48FE2720D198CCE009257D2 /* Foundation */ = { isa = PBXGroup; children = ( - F42866B51267340A0090FE0F /* GTMURITemplate.h */, - F42866B61267340A0090FE0F /* GTMURITemplate.m */, - F42866B71267340A0090FE0F /* GTMURITemplateTest.m */, 0B1B9B8410FECD870084EE4B /* GTMStringEncoding.h */, 0B1B9B8510FECD870084EE4B /* GTMStringEncoding.m */, 0B1B9B8610FECD870084EE4B /* GTMStringEncodingTest.m */, - 0BFAD4C2104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitive.h */, - 0BFAD4C3104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitive.m */, - 0BFAD4C4104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitiveTest.m */, F95B567B0F46208E0051A6F1 /* GTMSQLite.h */, F95B567C0F46208E0051A6F1 /* GTMSQLite.m */, F95B567D0F46208E0051A6F1 /* GTMSQLiteTest.m */, - 8B3344170DBF7A36009FD32C /* GTMNSAppleScript+HandlerTest.m */, - 8B3344180DBF7A36009FD32C /* GTMNSAppleScript+Handler.m */, - 8B3344190DBF7A36009FD32C /* GTMNSAppleScript+Handler.h */, - 8B3344200DBF7A36009FD32C /* GTMNSAppleEvent+HandlerTest.applescript */, - 8B33441A0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+HandlerTest.m */, - 8B33441B0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Handler.m */, - 8B33441C0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Handler.h */, - 8B33441D0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+FoundationTest.m */, - 8B33441E0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Foundation.m */, - 8B33441F0DBF7A36009FD32C /* GTMNSAppleEventDescriptor+Foundation.h */, - 1012DF540F4252BD004794DB /* GTMAbstractDOListener.h */, - 1012DF550F4252BD004794DB /* GTMAbstractDOListener.m */, - 1012DF590F425525004794DB /* GTMAbstractDOListenerTest.m */, - 8B1B49160E5F8E2100A08972 /* GTMExceptionalInlines.h */, - 8B1B49170E5F8E2100A08972 /* GTMExceptionalInlines.m */, - 8B1B491B0E5F904C00A08972 /* GTMExceptionalInlinesTest.m */, F49FA8420EEF2AB700077669 /* GTMFileSystemKQueue.h */, F49FA8430EEF2AB700077669 /* GTMFileSystemKQueue.m */, F49FA88A0EEF303D00077669 /* GTMFileSystemKQueueTest.m */, - 8BE2836B0DED0F130035B3F8 /* GTMFourCharCode.m */, - 8BE2836C0DED0F130035B3F8 /* GTMFourCharCodeTest.m */, - 8BE2836D0DED0F130035B3F8 /* GTMFourCharCode.h */, F48FE27E0D198D0E009257D2 /* GTMGeometryUtils.h */, F48FE27F0D198D0E009257D2 /* GTMGeometryUtils.m */, F48FE2800D198D0E009257D2 /* GTMGeometryUtilsTest.m */, - F47F1D2D0D4914AD00925B8F /* GTMCalculatedRange.h */, - F47F1D2E0D4914AD00925B8F /* GTMCalculatedRange.m */, - F47F1D2F0D4914AD00925B8F /* GTMCalculatedRangeTest.m */, F41711320ECDFBD500B9B276 /* GTMLightweightProxy.h */, F41711330ECDFBD500B9B276 /* GTMLightweightProxy.m */, F41711340ECDFBD500B9B276 /* GTMLightweightProxyTest.m */, @@ -1558,9 +772,6 @@ 33C374360DD8D44800E97817 /* GTMNSDictionary+URLArguments.h */, 33C374370DD8D44800E97817 /* GTMNSDictionary+URLArguments.m */, 33C3745E0DD8D85B00E97817 /* GTMNSDictionary+URLArgumentsTest.m */, - F43E4DD60D4E56320041161F /* GTMNSEnumerator+Filter.h */, - F43E4DD70D4E56320041161F /* GTMNSEnumerator+Filter.m */, - F43E4DD80D4E56320041161F /* GTMNSEnumerator+FilterTest.m */, 8B29078411F8D1BF0064F50F /* GTMNSFileHandle+UniqueName.h */, 8B29078511F8D1BF0064F50F /* GTMNSFileHandle+UniqueName.m */, 8B29078611F8D1BF0064F50F /* GTMNSFileHandle+UniqueNameTest.m */, @@ -1576,9 +787,6 @@ 8BD35B8E0FB22980009058F5 /* GTMNSScanner+JSON.h */, 8BD35B8F0FB22980009058F5 /* GTMNSScanner+JSON.m */, 8BD35B900FB22980009058F5 /* GTMNSScanner+JSONTest.m */, - 8BCB59EE11C00ED6009B6C40 /* GTMNSScanner+Unsigned.h */, - 8BCB59EF11C00ED6009B6C40 /* GTMNSScanner+Unsigned.m */, - 8BCB59F211C00EF6009B6C40 /* GTMNSScanner+UnsignedTest.m */, F42597760E23FE3A003BEA3E /* GTMNSString+FindFolder.h */, F42597770E23FE3A003BEA3E /* GTMNSString+FindFolder.m */, F42597780E23FE3A003BEA3E /* GTMNSString+FindFolderTest.m */, @@ -1600,9 +808,6 @@ F43E4E5E0D4E5EC90041161F /* GTMNSData+zlib.h */, F43E4E5F0D4E5EC90041161F /* GTMNSData+zlib.m */, F43E4E600D4E5EC90041161F /* GTMNSData+zlibTest.m */, - 8B6F32040DA34A1B0052CA40 /* GTMObjC2Runtime.m */, - 8B6F32050DA34A1B0052CA40 /* GTMObjC2RuntimeTest.m */, - 8B6F32060DA34A1B0052CA40 /* GTMObjC2Runtime.h */, F48FE2910D198D24009257D2 /* GTMObjectSingleton.h */, F9FD945E0E1D30F80005867E /* GTMPath.h */, F9FD945C0E1D30F80005867E /* GTMPath.m */, @@ -1626,16 +831,6 @@ F48FE2920D198D24009257D2 /* GTMSystemVersion.h */, F48FE2930D198D24009257D2 /* GTMSystemVersion.m */, F48FE2E10D198E4C009257D2 /* GTMSystemVersionTest.m */, - 10A4028D0F44DB2B003B511C /* GTMTransientRootProxyTest.m */, - 10A4028E0F44DB2B003B511C /* GTMTransientRootProxy.m */, - 10A4028F0F44DB2B003B511C /* GTMTransientRootProxy.h */, - 108930840F4CCB380018D4A0 /* GTMTransientRootPortProxyTest.m */, - 10998EF20F4B5D1A007F179D /* GTMTransientRootPortProxy.m */, - 10998EF30F4B5D1A007F179D /* GTMTransientRootPortProxy.h */, - 8B3AA9EF0E033E23007E31B5 /* GTMValidatingContainers.h */, - 8B3AA9F00E033E23007E31B5 /* GTMValidatingContainers.m */, - 8B3AA9F70E033E5F007E31B5 /* GTMValidatingContainersTest.m */, - F428670012673C1D0090FE0F /* TestData */, ); path = Foundation; sourceTree = "<group>"; @@ -1643,32 +838,19 @@ F48FE2770D198CEA009257D2 /* UnitTesting */ = { isa = PBXGroup; children = ( - 8B55479A0DB3B7A50014CC1C /* GTMAppKit+UnitTesting.h */, - 8B55479B0DB3B7A50014CC1C /* GTMAppKit+UnitTesting.m */, 8B17FD18117638F400E7A908 /* GTMAppKitUnitTestingUtilities.m */, 8B17FD19117638F400E7A908 /* GTMAppKitUnitTestingUtilities.h */, - 8B726BD10D91C0860090C251 /* GTMCALayer+UnitTesting.h */, - 8B726BD00D91C0860090C251 /* GTMCALayer+UnitTesting.m */, - 8B7DCBE10DFF18720017E983 /* GTMDevLogUnitTestingBridge.m */, 8B17FD13117638D500E7A908 /* GTMFoundationUnitTestingUtilities.m */, 8B17FD14117638D500E7A908 /* GTMFoundationUnitTestingUtilities.h */, - 8B1A14EA0D900BC800CA1E8E /* GTMNSObject+BindingUnitTesting.h */, - 8B1A14E90D900BC800CA1E8E /* GTMNSObject+BindingUnitTesting.m */, - F48FE29B0D198D36009257D2 /* GTMNSObject+UnitTesting.h */, - F48FE29C0D198D36009257D2 /* GTMNSObject+UnitTesting.m */, F48FE29F0D198D36009257D2 /* GTMSenTestCase.h */, 8B7DCE180DFF39850017E983 /* GTMSenTestCase.m */, F47466651296F19E0022C1FB /* GTMSenTestCaseTest.m */, 8B3590150E8190FA0041E21C /* GTMTestTimer.h */, 8B35901A0E8191750041E21C /* GTMTestTimerTest.m */, - 8B7DCBF00DFF1A610017E983 /* GTMUnitTestDevLog.h */, - 8B7DCBEC0DFF1A4F0017E983 /* GTMUnitTestDevLog.m */, - 8B7AD4AD0DABBFEE00B84F4A /* GTMUnitTestingBindingTest.m */, - 8B45A2E00DA51ABC001148C5 /* GTMUnitTestingTest.h */, - 8B45A2E10DA51ABC001148C5 /* GTMUnitTestingTest.m */, - 8BC04D140DB0061300C2D1CA /* RunMacOSUnitTests.sh */, + 8B2C72E61D9EBB6E0027BD14 /* GTMUnitTestDevLog.h */, + 8B2C72E71D9EBB6E0027BD14 /* GTMUnitTestDevLog.m */, + 8BA983C21D9AE7E6009724B5 /* TestData */, 8B45A2A20DA49C47001148C5 /* GTMUIUnitTestingHarness */, - F435E46C0DC8F23A0069CDE8 /* TestData */, ); path = UnitTesting; sourceTree = "<group>"; @@ -1688,13 +870,10 @@ isa = PBXGroup; children = ( F48FE2420D197F9A009257D2 /* DebugUnittest.xcconfig */, - F4CA864C0DB3ACD200B4AB10 /* LoadableBundleGCSupported.xcconfig */, F48FE2430D197F9A009257D2 /* LoadableBundle.xcconfig */, F48FE2450D197F9A009257D2 /* ReleaseUnittest.xcconfig */, F48FE2460D197F9A009257D2 /* SharedLibrary.xcconfig */, - F4CA864D0DB3ACD200B4AB10 /* SharedLibraryGCSupported.xcconfig */, F48FE2470D197F9A009257D2 /* StaticLibrary.xcconfig */, - F4CA864E0DB3ACD200B4AB10 /* StaticLibraryGCSupported.xcconfig */, ); path = Target; sourceTree = "<group>"; @@ -1709,7 +888,6 @@ 8B6F31F10DA347720052CA40 /* GTMMethodCheckTest.m */, 8B6F4B610E8856CA00425D9F /* GTMDebugThreadValidation.h */, 8B6F4B620E8856CA00425D9F /* GTMDebugThreadValidation.m */, - 8BE839A80E8AF72500C611B0 /* GTMDebugThreadValidationTest.m */, ); path = DebugUtils; sourceTree = "<group>"; @@ -1722,9 +900,7 @@ buildActionMask = 2147483647; files = ( 0B1B9B8710FECD870084EE4B /* GTMStringEncoding.h in Headers */, - 0BFAD4C8104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitive.h in Headers */, F93207DE0F4B82DB005F37EA /* GTMSQLite.h in Headers */, - F42E09490D199BBF00D5DDE0 /* GTMDelegatingTableColumn.h in Headers */, F42E094C0D199BBF00D5DDE0 /* GTMGeometryUtils.h in Headers */, F42E094F0D199BBF00D5DDE0 /* GTMNSBezierPath+RoundRect.h in Headers */, F42E09510D199BBF00D5DDE0 /* GTMNSString+HTML.h in Headers */, @@ -1732,71 +908,47 @@ F42E09540D199BBF00D5DDE0 /* GTMSystemVersion.h in Headers */, F43DCDCD0D4796C600959A62 /* GTMLoginItems.h in Headers */, F428FF030D48E55E00382ED1 /* GTMNSBezierPath+CGPath.h in Headers */, - F47F1C120D490BC000925B8F /* GTMNSBezierPath+Shading.h in Headers */, - F47F1C750D490E5C00925B8F /* GTMShading.h in Headers */, - F47F1D300D4914AD00925B8F /* GTMCalculatedRange.h in Headers */, - F43E447A0D4918B20041161F /* GTMLinearRGBShading.h in Headers */, F43E4C280D4E361D0041161F /* GTMNSString+XML.h in Headers */, - F43E4DD90D4E56320041161F /* GTMNSEnumerator+Filter.h in Headers */, F43E4E610D4E5EC90041161F /* GTMNSData+zlib.h in Headers */, F437F55D0D50BC0A00F5C3A4 /* GTMRegex.h in Headers */, F47A79880D746EE9002302AB /* GTMScriptRunner.h in Headers */, F413908F0D75F63C00F72B31 /* GTMNSFileManager+Path.h in Headers */, F424F75F0D9AF019000B87EF /* GTMDefines.h in Headers */, F4FF22780D9D4835003880AC /* GTMDebugSelectorValidation.h in Headers */, - F4CA854F0DAFAAF600B4AB10 /* GTMObjC2Runtime.h in Headers */, 8BC04CD80DB003D800C2D1CA /* GTMMethodCheck.h in Headers */, F431221D0DD4E3B800F45252 /* GTMStackTrace.h in Headers */, 33C372A60DD8A88500E97817 /* GTMNSString+URLArguments.h in Headers */, 33C374380DD8D44800E97817 /* GTMNSDictionary+URLArguments.h in Headers */, - 8BE281B00DEC7E930035B3F8 /* GTMNSAppleScript+Handler.h in Headers */, - 8BE281B10DEC7E930035B3F8 /* GTMNSAppleEventDescriptor+Handler.h in Headers */, - 8BE281B20DEC7E930035B3F8 /* GTMNSAppleEventDescriptor+Foundation.h in Headers */, - 8BE283730DED13AB0035B3F8 /* GTMFourCharCode.h in Headers */, F41A6F820E02EC3600788A6C /* GTMSignalHandler.h in Headers */, - 8B3AA9F10E033E23007E31B5 /* GTMValidatingContainers.h in Headers */, F9FD94CD0E1D50450005867E /* GTMPath.h in Headers */, F42597480E23AA57003BEA3E /* GTMNSString+Replace.h in Headers */, F42597790E23FE3A003BEA3E /* GTMNSString+FindFolder.h in Headers */, - 8B1801A30E2533D500280961 /* GTMLargeTypeWindow.h in Headers */, F92B9FA80E2E64B900A2FE61 /* GTMLogger.h in Headers */, F92B9FA90E2E64BC00A2FE61 /* GTMLogger+ASL.h in Headers */, F95803FA0E2FB08F0049A088 /* GTMLoggerRingBufferWriter.h in Headers */, - 8B1B49180E5F8E2100A08972 /* GTMExceptionalInlines.h in Headers */, - 7F3EB38E0E5E09C700A7A75E /* GTMNSImage+Scaling.h in Headers */, 8B3590160E8190FA0041E21C /* GTMTestTimer.h in Headers */, 8B6F4B630E8856CA00425D9F /* GTMDebugThreadValidation.h in Headers */, F41711350ECDFBD500B9B276 /* GTMLightweightProxy.h in Headers */, 629445400EDDF647009295EA /* GTMNSArray+Merge.h in Headers */, - F4A420EF0EDDF8E000397A11 /* GTMHotKeyTextField.h in Headers */, 8B3E292F0EEB53F8000681D8 /* GTMCarbonEvent.h in Headers */, F49FA8440EEF2AB700077669 /* GTMFileSystemKQueue.h in Headers */, 8B8EC87D0EF17C270044D13F /* GTMNSFileManager+Carbon.h in Headers */, - 8BA01B5E0F144BD800926923 /* GTMNSWorkspace+Running.h in Headers */, 8B6C15930F356E6400E51E5D /* GTMNSObject+KeyValueObserving.h in Headers */, - 1012DF560F4252BD004794DB /* GTMAbstractDOListener.h in Headers */, 7F511DF90F4B0378009F41B6 /* GTMNSColor+Luminance.h in Headers */, - 10998E920F4B5952007F179D /* GTMTransientRootProxy.h in Headers */, - 10998EF50F4B5D1A007F179D /* GTMTransientRootPortProxy.h in Headers */, 8B40994B0F93C5CC00DF540E /* GTMUILocalizer.h in Headers */, 8BFE13B60FB0F2C0001BE894 /* GTMABAddressBook.h in Headers */, 8BD35B910FB22980009058F5 /* GTMNSScanner+JSON.h in Headers */, 8207B89B0FEA7A9E008A527B /* GTMWindowSheetController.h in Headers */, F43C7A571021FAA300ABF03C /* GTMUILocalizerAndLayoutTweaker.h in Headers */, 7F97DB32104EBCA0004DDDEE /* GTMFadeTruncatingTextFieldCell.h in Headers */, - 7FF768E41051B17E00D34F4B /* GTMNSImage+SearchCache.h in Headers */, F4C6248B109753960069CADD /* GTMIBArray.h in Headers */, 8B158ADE10A8C42000C93125 /* GTMNSAnimation+Duration.h in Headers */, 8BF2555310F65B56000490C8 /* GTMTypeCasting.h in Headers */, - 8BDB8A991152E1B200C411B1 /* GTMNSAnimatablePropertyContainer.h in Headers */, 8B21DE56117E5CB7000E004F /* GTMLocalizedString.h in Headers */, - 8BB7802E11B6C4EA00AB31AF /* GTMGoogleSearch.h in Headers */, - 8BCB59F011C00ED6009B6C40 /* GTMNSScanner+Unsigned.h in Headers */, 8B29080A11F8E1670064F50F /* GTMNSFileHandle+UniqueName.h in Headers */, 8B414E891226FB1000D0064F /* GTMServiceManagement.h in Headers */, 8BBD1F8C1519258A003152F0 /* GTMNSThread+Blocks.h in Headers */, 8BF2368F13CF67CB00F3FD82 /* GTMKeyValueAnimation.h in Headers */, - F42866B81267340A0090FE0F /* GTMURITemplate.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1810,18 +962,16 @@ 8B45A0230DA4696C001148C5 /* Resources */, 8B45A0240DA4696C001148C5 /* Sources */, 8B45A0250DA4696C001148C5 /* Frameworks */, - 8B45A0260DA4696C001148C5 /* ShellScript */, ); buildRules = ( ); dependencies = ( - 8B45A2D40DA51A0E001148C5 /* PBXTargetDependency */, 8B7DCBA40DFF0EFB0017E983 /* PBXTargetDependency */, ); name = "UnitTest-UnitTesting"; productName = "UnitTest-UnitTesting"; - productReference = 8B45A0280DA4696C001148C5 /* UnitTest-UnitTesting.octest */; - productType = "com.apple.product-type.bundle"; + productReference = 8B45A0280DA4696C001148C5 /* UnitTest-UnitTesting.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; 8B45A2890DA49B99001148C5 /* UIUnitTestingHarness */ = { isa = PBXNativeTarget; @@ -1863,7 +1013,6 @@ 8BFE13C10FB0F2D8001BE894 /* Resources */, 8BFE13D70FB0F2D8001BE894 /* Sources */, 8BFE13EC0FB0F2D8001BE894 /* Frameworks */, - 8BFE13F10FB0F2D8001BE894 /* ShellScript */, ); buildRules = ( ); @@ -1872,18 +1021,16 @@ ); name = "UnitTest-AddressBook"; productName = "UnitTest-AppKit"; - productReference = 8BFE13FC0FB0F2D8001BE894 /* UnitTest-AddressBook.octest */; - productType = "com.apple.product-type.bundle"; + productReference = 8BFE13FC0FB0F2D8001BE894 /* UnitTest-AddressBook.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; F42E08110D19987200D5DDE0 /* UnitTest-Foundation */ = { isa = PBXNativeTarget; buildConfigurationList = F42E081E0D19987200D5DDE0 /* Build configuration list for PBXNativeTarget "UnitTest-Foundation" */; buildPhases = ( - 8B3345CC0DBF8A95009FD32C /* AppleScript */, F42E08140D19987200D5DDE0 /* Resources */, F42E08160D19987200D5DDE0 /* Sources */, F42E081C0D19987200D5DDE0 /* Frameworks */, - F42E081D0D19987200D5DDE0 /* ShellScript */, ); buildRules = ( ); @@ -1893,8 +1040,8 @@ ); name = "UnitTest-Foundation"; productName = "UnitTest-AppKit"; - productReference = F42E08210D19987200D5DDE0 /* UnitTest-Foundation.octest */; - productType = "com.apple.product-type.bundle"; + productReference = F42E08210D19987200D5DDE0 /* UnitTest-Foundation.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; F42E086C0D199A5B00D5DDE0 /* GTM */ = { isa = PBXNativeTarget; @@ -1922,18 +1069,16 @@ F48FE25F0D198C1E009257D2 /* Resources */, F48FE2600D198C1E009257D2 /* Sources */, F48FE2610D198C1E009257D2 /* Frameworks */, - F48FE2620D198C1E009257D2 /* ShellScript */, ); buildRules = ( ); dependencies = ( - 8BAA9A350F7AF50600DF4F12 /* PBXTargetDependency */, F42E08770D199A9B00D5DDE0 /* PBXTargetDependency */, ); name = "UnitTest-AppKit"; productName = "UnitTest-AppKit"; - productReference = F48FE2640D198C1E009257D2 /* UnitTest-AppKit.octest */; - productType = "com.apple.product-type.bundle"; + productReference = F48FE2640D198C1E009257D2 /* UnitTest-AppKit.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ @@ -1942,7 +1087,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = NO; - LastUpgradeCheck = 0430; + LastUpgradeCheck = 0800; }; buildConfigurationList = 1DEB918108733D990010E9CD /* Build configuration list for PBXProject "GTM" */; compatibilityVersion = "Xcode 3.1"; @@ -1977,7 +1122,6 @@ projectRoot = ""; targets = ( F42E086C0D199A5B00D5DDE0 /* GTM */, - F472042B0D33BEAF00E9F378 /* All UnitTests */, 8BFE13BC0FB0F2D8001BE894 /* UnitTest-AddressBook */, F48FE2630D198C1E009257D2 /* UnitTest-AppKit */, F42E08110D19987200D5DDE0 /* UnitTest-Foundation */, @@ -1993,21 +1137,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8B45A2DF0DA51A7E001148C5 /* GTMUnitTestingTest.nib in Resources */, - 8B45A5F80DA5EB9F001148C5 /* GTMUnitTestingWindow.gtmUTState in Resources */, - 8B45A5F90DA5EB9F001148C5 /* GTMUnitTestingTestApp.gtmUTState in Resources */, - 8B45A6BB0DA67DD5001148C5 /* GTMUnitTestingImage.gtmUTState in Resources */, - 8BEEA90D0DA7446300894774 /* GTMUnitTestingImage.tiff in Resources */, - 8BEEA90E0DA7446300894774 /* GTMUnitTestingWindow.tiff in Resources */, - 8BEEA90F0DA7446300894774 /* GTMUnitTestingView.tiff in Resources */, - 84B91B8B0EA3CC2E0087500F /* GTMUnitTestingImage.10.6.tiff in Resources */, - 84B91B8C0EA3CC2E0087500F /* GTMUnitTestingWindow.10.6.tiff in Resources */, - 8B2789960EF855FB00D68C01 /* GTMUnitTestingWindow.10.5.6.tiff in Resources */, - F48D000D0FE994C900428D0B /* GTMUnitTestingWindow.10.5.7.tiff in Resources */, - F42F50F91057E99200BFC735 /* GTMUnitTestingWindow.10.5.8.tiff in Resources */, - F4A486ED1097EA0A00513483 /* GTMUnitTestingView.10.6.tiff in Resources */, - 8BA9FAF9119CA2E300E264C3 /* GTMUnitTestingTestApp.10.6.gtmUTState in Resources */, - 8BA9FB23119CA3F200E264C3 /* GTMUnitTestingWindow.10.6.gtmUTState in Resources */, + 8BA983C81D9AE7E6009724B5 /* GTMUnitTestingTest.nib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2034,8 +1164,6 @@ buildActionMask = 2147483647; files = ( 8BC8520E127A19B60046E0FB /* GTMServiceManagementTestingHarness in Resources */, - F428670312673C490090FE0F /* GTMURITemplateExtraTests.json in Resources */, - F428670412673C490090FE0F /* GTMURITemplateRFCTests.json in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2043,7 +1171,6 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8B0E65510FD80D5E00461C4A /* GTMHotKeyTextField.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2051,192 +1178,23 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8B7AD49A0DABBB5800B84F4A /* GTMNSBezierPath+ShadingTest.tiff in Resources */, - 8B7AD49B0DABBB5800B84F4A /* GTMNSBezierPath+CGPathTest.tiff in Resources */, - 8B7AD49C0DABBB5800B84F4A /* GTMNSBezierPath+RoundRectTest.tiff in Resources */, - 8BE869730DBE89C100749827 /* GTMNSBezierPath+RoundRectTest.x86_64.tiff in Resources */, - F435DE7C0DC0B6580069CDE8 /* GTMNSBezierPath+CGPathTest.ppc64.tiff in Resources */, - F435DE7D0DC0B6580069CDE8 /* GTMNSBezierPath+CGPathTest.x86_64.tiff in Resources */, - F435DE8B0DC0B7620069CDE8 /* GTMNSBezierPath+RoundRectTest.ppc64.tiff in Resources */, - 8B1801AE0E25341B00280961 /* GTMLargeTypeWindowImageTest.gtmUTState in Resources */, - 8B1801B20E25341B00280961 /* GTMLargeTypeWindowLongTextTest.gtmUTState in Resources */, - 8B1801B30E25341B00280961 /* GTMLargeTypeWindowShortTextTest.gtmUTState in Resources */, - 8B1802420E25592200280961 /* GTMLargeTypeWindowMediumTextTest.gtmUTState in Resources */, - 7F3EB5540E5F0B0400A7A75E /* GTMUnitTestingImage.tiff in Resources */, - 8BAA9B570F7B4C2400DF4F12 /* GTMHotKeyTextFieldTest.xib in Resources */, 8B409E8C0F952C2C00DF540E /* GTMUILocalizerTestWindow.xib in Resources */, 8B409E9A0F952CE600DF540E /* Localizable.strings in Resources */, - 8B409EC40F9530C200DF540E /* GTMUILocalizerWindow1State.gtmUTState in Resources */, - 8B409EE90F95325000DF540E /* GTMUILocalizerWindow2State.gtmUTState in Resources */, - 8B409EF40F95331500DF540E /* GTMUILocalizerMenuState.gtmUTState in Resources */, 8B409F060F95341E00DF540E /* GTMUILocalizerTestView.xib in Resources */, - 8B409F130F95352500DF540E /* GTMUILocalizerView2State.gtmUTState in Resources */, - 8B409F140F95352500DF540E /* GTMUILocalizerView1State.gtmUTState in Resources */, F42E2C84102B14B0004DF054 /* GTMUILocalizerAndLayoutTweakerTest1.xib in Resources */, - F42E2CFF102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-0.tiff in Resources */, - F42E2D00102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-1.tiff in Resources */, - F42E2D01102B21EE004DF054 /* GTMUILocalizerAndLayoutTweakerTest1-2.tiff in Resources */, F42E2D08102B2283004DF054 /* GTMUILocalizerAndLayoutTweakerTest2.xib in Resources */, - F42E2D24102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-0.tiff in Resources */, - F42E2D25102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-1.tiff in Resources */, - F42E2D26102B24E5004DF054 /* GTMUILocalizerAndLayoutTweakerTest2-2.tiff in Resources */, F4FC15DD1046AD66000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3.xib in Resources */, - F4FC16031046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-0.tiff in Resources */, - F4FC16041046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-1.tiff in Resources */, - F4FC16051046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-2.tiff in Resources */, - F4FC16061046B581000AB7BC /* GTMUILocalizerAndLayoutTweakerTest3-3.tiff in Resources */, - 7F97DBA4104ED861004DDDEE /* GTMFadeTruncatingTextFieldCellTest1.tiff in Resources */, - 7F97DBA5104ED861004DDDEE /* GTMFadeTruncatingTextFieldCellTest2.tiff in Resources */, - F4FC322D104EAA11000AB7BC /* GTMUILocalizerWindow3State.gtmUTState in Resources */, F4FC324D104EBD70000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4.xib in Resources */, - F4FC327D104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-0.tiff in Resources */, - F4FC327E104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-1.tiff in Resources */, - F4FC327F104EC6D5000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-2.tiff in Resources */, - F4FC333D104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.tiff in Resources */, - F4FC333E104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.tiff in Resources */, - F4FC333F104EE94F000AB7BC /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.tiff in Resources */, - 7F6840D2105375A70057F4FA /* GTMUILocalizerTestWindow_10_4.xib in Resources */, - 7F4C015F1055AD4200F88238 /* GTMUILocalizerWindow1State.10_4_SDK.gtmUTState in Resources */, F4C0B9C3108E27EE002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5.xib in Resources */, - F4C0B9DA108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-0.tiff in Resources */, - F4C0B9DB108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-1.tiff in Resources */, - F4C0B9DC108E3142002FC8E4 /* GTMUILocalizerAndLayoutTweakerTest5-2.tiff in Resources */, F4C6248A109753960069CADD /* GTMIBArrayTest.xib in Resources */, - F4AA2CB2109B37650025C956 /* GTMUILocalizerAndLayoutTweakerTest3-4.tiff in Resources */, - F4C58CC310BAD75200651068 /* GTMFadeTruncatingTextFieldCellTest3.tiff in Resources */, - F4C58CC410BAD75200651068 /* GTMFadeTruncatingTextFieldCellTest4.tiff in Resources */, F4FB44141120799A00F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6.xib in Resources */, - F4FB445311207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-0.tiff in Resources */, - F4FB445411207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-1.tiff in Resources */, - F4FB445511207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab0-2.tiff in Resources */, - F4FB445611207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-0.tiff in Resources */, - F4FB445711207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-1.tiff in Resources */, - F4FB445811207FE600F2FF9D /* GTMUILocalizerAndLayoutTweakerTest6-tab1-2.tiff in Resources */, F493E3591146CD97005F994E /* GTMUILocalizerAndLayoutTweakerTest7.xib in Resources */, - F43A43531146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-0.tiff in Resources */, - F43A43541146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-1.tiff in Resources */, - F43A43551146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-2.tiff in Resources */, - F43A43561146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-Min-3.tiff in Resources */, - F43A43571146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.tiff in Resources */, - F43A43581146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.tiff in Resources */, - F43A43591146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.tiff in Resources */, - F43A435A1146DCC70048A9DC /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.tiff in Resources */, - 8B21BE9211532CDC00DD2686 /* GTMNSAnimatablePropertyContainerTest.xib in Resources */, - 8BA9FB8F119CAE7200E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.tiff in Resources */, - 8BA9FB95119CAEDE00E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.tiff in Resources */, - 8BA9FB9C119CAF0200E264C3 /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.tiff in Resources */, - 8BA9FBA1119CAF6600E264C3 /* GTMNSBezierPath+ShadingTest.10.6.tiff in Resources */, - 8BA9FBA3119CAF9500E264C3 /* GTMNSBezierPath+RoundRectTest.10.6.tiff in Resources */, - 8BA9FBA7119CB00000E264C3 /* GTMNSBezierPath+RoundRectTest.10.6.x86_64.tiff in Resources */, - 8BA9FBAB119CB06500E264C3 /* GTMLargeTypeWindowShortTextTest.10.6.gtmUTState in Resources */, - 8BA9FBAD119CB08200E264C3 /* GTMLargeTypeWindowMediumTextTest.10.6.gtmUTState in Resources */, - 8BA9FBBB119CB0C400E264C3 /* GTMLargeTypeWindowLongTextTest.10.6.gtmUTState in Resources */, - 8BA9FBBD119CB14C00E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-0.10.6.tiff in Resources */, - 8BA9FBC0119CB17600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-2.10.6.tiff in Resources */, - 8BA9FBC8119CB19A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-0.10.6.tiff in Resources */, - 8BA9FBDB119CB1E600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-0.10.6.tiff in Resources */, - 8BA9FBDE119CB20A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-0.10.6.tiff in Resources */, - 8BA9FBE1119CB23000E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-1.10.6.tiff in Resources */, - 8BA9FBE4119CB24D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-2.10.6.tiff in Resources */, - 8BA9FBE7119CB26A00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-1.10.6.tiff in Resources */, - 8BA9FBEA119CB28500E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-2.10.6.tiff in Resources */, - 8BA9FBED119CB2A400E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-Min-3.10.6.tiff in Resources */, - 8BA9FBF0119CB2BF00E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-1.10.6.tiff in Resources */, - 8BA9FBF3119CB2D600E264C3 /* GTMUILocalizerAndLayoutTweakerTest7-NoMin-3.10.6.tiff in Resources */, - 8BA9FBF6119CB2EF00E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-0.10.6.tiff in Resources */, - 8BA9FBFD119CB30D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-1.10.6.tiff in Resources */, - 8BA9FC00119CB32500E264C3 /* GTMUILocalizerAndLayoutTweakerTest1-2.10.6.tiff in Resources */, - 8BA9FC44119CB36100E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-3.10.6.tiff in Resources */, - 8BA9FC47119CB37F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-0.10.6.tiff in Resources */, - 8BA9FC5D119CB39D00E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-1.10.6.tiff in Resources */, - 8BA9FC60119CB3B500E264C3 /* GTMUILocalizerAndLayoutTweakerTest2-2.10.6.tiff in Resources */, - 8BA9FC63119CB3CD00E264C3 /* GTMUILocalizerAndLayoutTweakerTest3-4.10.6.tiff in Resources */, - 8BA9FC66119CB3E200E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-0.10.6.tiff in Resources */, - 8BA9FC69119CB3F900E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-1.10.6.tiff in Resources */, - 8BA9FC6C119CB43F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest5-2.10.6.tiff in Resources */, - 8BA9FC6F119CB46000E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-1.10.6.tiff in Resources */, - 8BA9FC72119CB47900E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab0-2.10.6.tiff in Resources */, - 8BA9FC75119CB48F00E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-0.10.6.tiff in Resources */, - 8BA9FC78119CB4A100E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-1.10.6.tiff in Resources */, - 8BA9FC7B119CB4B300E264C3 /* GTMUILocalizerAndLayoutTweakerTest6-tab1-2.10.6.tiff in Resources */, - 8BA7148111B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.tiff in Resources */, - 8BA7148211B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.tiff in Resources */, - 8BA7148311B57EC700EB4781 /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.tiff in Resources */, - 8B4BD7E71200E5EA009C7060 /* GTMUILocalizerWindow3State.10_4_SDK.gtmUTState in Resources */, - B71B91E21332CD680039B2CB /* GTMFadeTruncatingTextFieldCellTest5.tiff in Resources */, - B71B91E31332CD680039B2CB /* GTMFadeTruncatingTextFieldCellTest6.tiff in Resources */, - B71B92371332DA380039B2CB /* GTMFadeTruncatingTextFieldCellTest7.tiff in Resources */, - B7764E80133906B600AFDC7D /* GTMFadeTruncatingTextFieldCellTest8.tiff in Resources */, - F49DCD271460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.8.tiff in Resources */, - F49DCD281460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.8.tiff in Resources */, - F49DCD291460937A00506616 /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.8.tiff in Resources */, - F49DCD60146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.8.tiff in Resources */, - F49DCD61146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.8.tiff in Resources */, - F49DCD62146096D300506616 /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.8.tiff in Resources */, - F450A6BF146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-0.10_4_SDK.10.6.7.tiff in Resources */, - F450A6C0146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-1.10_4_SDK.10.6.7.tiff in Resources */, - F450A6C1146C2A6E001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-2.10_4_SDK.10.6.7.tiff in Resources */, - F450A749146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-0.10.6.7.tiff in Resources */, - F450A74A146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-1.10.6.7.tiff in Resources */, - F450A74B146D7206001B3B1F /* GTMUILocalizerAndLayoutTweakerTest4-2.10.6.7.tiff in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 8B45A0260DA4696C001148C5 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Run the unit tests in this test bundle.\n# Set OTHER_TEST_FLAGS=\"-SenTest NameOfTestClass\" or OTHER_TEST_FLAGS=\"-SenTest NameOfTestClass/NameOfTest\" if you want to only test a limited amount.\nGTM_REMOVE_TARGET_GCOV_ONLY=1 GTM_ONE_TEST_AT_A_TIME=1 \"${SRCROOT}/UnitTesting/RunMacOSUnitTests.sh\""; - }; - 8BFE13F10FB0F2D8001BE894 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Run the unit tests in this test bundle.\n# Set OTHER_TEST_FLAGS=\"-SenTest NameOfTestClass\" or OTHER_TEST_FLAGS=\"-SenTest NameOfTestClass/NameOfTest\" if you want to only test a limited amount.\nGTM_REMOVE_TARGET_GCOV_ONLY=1 GTM_DISABLE_ZOMBIES=1 \"${SRCROOT}/UnitTesting/RunMacOSUnitTests.sh\"\n"; - }; - F42E081D0D19987200D5DDE0 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Run the unit tests in this test bundle.\n# Set OTHER_TEST_FLAGS=\"-SenTest NameOfTestClass\" or OTHER_TEST_FLAGS=\"-SenTest NameOfTestClass/NameOfTest\" if you want to only test a limited amount.\nGTM_REMOVE_TARGET_GCOV_ONLY=1 \"${SRCROOT}/UnitTesting/RunMacOSUnitTests.sh\""; - }; - F48FE2620D198C1E009257D2 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Run the unit tests in this test bundle.\n# Set OTHER_TEST_FLAGS=\"-SenTest NameOfTestClass\" or OTHER_TEST_FLAGS=\"-SenTest NameOfTestClass/NameOfTest\" if you want to only test a limited amount.\nGTM_REMOVE_TARGET_GCOV_ONLY=1 GTM_ONE_TEST_AT_A_TIME=1 \"${SRCROOT}/UnitTesting/RunMacOSUnitTests.sh\"\n"; - }; F4E4297B10B753C600F28A35 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -2257,14 +1215,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8B45A0D50DA46A57001148C5 /* GTMNSObject+UnitTesting.m in Sources */, - 8B45A0D60DA46A57001148C5 /* GTMNSObject+BindingUnitTesting.m in Sources */, 8B45A21A0DA46E1D001148C5 /* GTMGeometryUtils.m in Sources */, - 8B45A2E20DA51ABC001148C5 /* GTMUnitTestingTest.m in Sources */, - 8B7AD4AE0DABBFEE00B84F4A /* GTMUnitTestingBindingTest.m in Sources */, - 8B55479C0DB3B7A50014CC1C /* GTMAppKit+UnitTesting.m in Sources */, + 8B2C72E81D9EBB6E0027BD14 /* GTMUnitTestDevLog.m in Sources */, 8B7DCBC30DFF0F7F0017E983 /* GTMMethodCheck.m in Sources */, - 8B7DCBEF0DFF1A4F0017E983 /* GTMUnitTestDevLog.m in Sources */, 8B7DCE1B0DFF39850017E983 /* GTMSenTestCase.m in Sources */, 8B35901B0E8191750041E21C /* GTMTestTimerTest.m in Sources */, F47466661296F19E0022C1FB /* GTMSenTestCaseTest.m in Sources */, @@ -2276,11 +1229,8 @@ buildActionMask = 2147483647; files = ( 8B45A2AC0DA49C47001148C5 /* main.m in Sources */, + 8B82CEEB1D9B4DA1007182AA /* GTMFoundationUnitTestingUtilities.m in Sources */, 8B7DCBC40DFF0F800017E983 /* GTMMethodCheck.m in Sources */, - 8B7DCEF10E002C210017E983 /* GTMDevLogUnitTestingBridge.m in Sources */, - 8B4D7A150E40D79200EFEDD8 /* GTMObjC2Runtime.m in Sources */, - 8B17FE091176672300E7A908 /* GTMAppKitUnitTestingUtilities.m in Sources */, - 8B17FE0B1176673400E7A908 /* GTMFoundationUnitTestingUtilities.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2308,43 +1258,30 @@ files = ( 8B6F32160DA34C830052CA40 /* GTMMethodCheckTest.m in Sources */, 8B7DCBC20DFF0F7F0017E983 /* GTMMethodCheck.m in Sources */, - 8B7DCBEE0DFF1A4F0017E983 /* GTMUnitTestDevLog.m in Sources */, 8B7DCE1A0DFF39850017E983 /* GTMSenTestCase.m in Sources */, - 8BE839AA0E8AF72E00C611B0 /* GTMDebugThreadValidationTest.m in Sources */, 8B17FD15117638D500E7A908 /* GTMFoundationUnitTestingUtilities.m in Sources */, 8B29078711F8D1BF0064F50F /* GTMNSFileHandle+UniqueName.m in Sources */, 8B414E8B1226FB1800D0064F /* GTMServiceManagementTest.m in Sources */, - 8BFE6E7A1282371200B5C894 /* GTMAbstractDOListenerTest.m in Sources */, - 8BFE6E7B1282371200B5C894 /* GTMCalculatedRangeTest.m in Sources */, - 8BFE6E7C1282371200B5C894 /* GTMExceptionalInlinesTest.m in Sources */, 8BFE6E7D1282371200B5C894 /* GTMFileSystemKQueueTest.m in Sources */, - 8BFE6E7E1282371200B5C894 /* GTMFourCharCodeTest.m in Sources */, 8BFE6E7F1282371200B5C894 /* GTMGeometryUtilsTest.m in Sources */, 8BFE6E801282371200B5C894 /* GTMLightweightProxyTest.m in Sources */, 8BFE6E811282371200B5C894 /* GTMLocalizedStringTest.m in Sources */, 8BFE6E821282371200B5C894 /* GTMLogger+ASLTest.m in Sources */, 8BFE6E831282371200B5C894 /* GTMLoggerRingBufferWriterTest.m in Sources */, 8BFE6E841282371200B5C894 /* GTMLoggerTest.m in Sources */, - 8BFE6E851282371200B5C894 /* GTMNSAppleEventDescriptor+FoundationTest.m in Sources */, - 8BFE6E861282371200B5C894 /* GTMNSAppleEventDescriptor+HandlerTest.m in Sources */, - 8BFE6E871282371200B5C894 /* GTMNSAppleScript+HandlerTest.m in Sources */, 8BFE6E881282371200B5C894 /* GTMNSArray+MergeTest.m in Sources */, 8BFE6E891282371200B5C894 /* GTMNSData+zlibTest.m in Sources */, - 8BFE6E8A1282371200B5C894 /* GTMNSDictionary+CaseInsensitiveTest.m in Sources */, 8BFE6E8B1282371200B5C894 /* GTMNSDictionary+URLArgumentsTest.m in Sources */, - 8BFE6E8C1282371200B5C894 /* GTMNSEnumerator+FilterTest.m in Sources */, 8BFE6E8D1282371200B5C894 /* GTMNSFileHandle+UniqueNameTest.m in Sources */, 8BFE6E8E1282371200B5C894 /* GTMNSFileManager+CarbonTest.m in Sources */, 8BFE6E8F1282371200B5C894 /* GTMNSFileManager+PathTest.m in Sources */, 8BFE6E911282371200B5C894 /* GTMNSObject+KeyValueObservingTest.m in Sources */, 8BFE6E921282371200B5C894 /* GTMNSScanner+JSONTest.m in Sources */, - 8BFE6E931282371200B5C894 /* GTMNSScanner+UnsignedTest.m in Sources */, 8BFE6E941282371200B5C894 /* GTMNSString+FindFolderTest.m in Sources */, 8BFE6E951282371200B5C894 /* GTMNSString+HTMLTest.m in Sources */, 8BFE6E961282371200B5C894 /* GTMNSString+ReplaceTest.m in Sources */, 8BFE6E971282371200B5C894 /* GTMNSString+URLArgumentsTest.m in Sources */, 8BFE6E981282371200B5C894 /* GTMNSString+XMLTest.m in Sources */, - 8BFE6E991282371200B5C894 /* GTMObjC2RuntimeTest.m in Sources */, 8BFE6E9A1282371200B5C894 /* GTMPathTest.m in Sources */, 8BFE6E9B1282371200B5C894 /* GTMRegexTest.m in Sources */, 8BFE6E9C1282371200B5C894 /* GTMScriptRunnerTest.m in Sources */, @@ -2353,10 +1290,6 @@ 8BFE6E9F1282371200B5C894 /* GTMStackTraceTest.m in Sources */, 8BFE6EA01282371200B5C894 /* GTMStringEncodingTest.m in Sources */, 8BFE6EA11282371200B5C894 /* GTMSystemVersionTest.m in Sources */, - 8BFE6EA21282371200B5C894 /* GTMTransientRootPortProxyTest.m in Sources */, - 8BFE6EA31282371200B5C894 /* GTMTransientRootProxyTest.m in Sources */, - 8BFE6EA41282371200B5C894 /* GTMURITemplateTest.m in Sources */, - 8BFE6EA51282371200B5C894 /* GTMValidatingContainersTest.m in Sources */, 8BBD1F8F1519271A003152F0 /* GTMNSThread+BlocksTest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2365,7 +1298,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F42E094A0D199BBF00D5DDE0 /* GTMDelegatingTableColumn.m in Sources */, F95B56840F4628B30051A6F1 /* GTMSQLite.m in Sources */, F42E094D0D199BBF00D5DDE0 /* GTMGeometryUtils.m in Sources */, F42E09500D199BBF00D5DDE0 /* GTMNSBezierPath+RoundRect.m in Sources */, @@ -2373,67 +1305,41 @@ F42E09550D199BBF00D5DDE0 /* GTMSystemVersion.m in Sources */, F43DCDCE0D4796C600959A62 /* GTMLoginItems.m in Sources */, F428FF040D48E55E00382ED1 /* GTMNSBezierPath+CGPath.m in Sources */, - F47F1C130D490BC000925B8F /* GTMNSBezierPath+Shading.m in Sources */, - F47F1D310D4914AD00925B8F /* GTMCalculatedRange.m in Sources */, - F43E447B0D4918B20041161F /* GTMLinearRGBShading.m in Sources */, F43E4C290D4E361D0041161F /* GTMNSString+XML.m in Sources */, - F43E4DDA0D4E56320041161F /* GTMNSEnumerator+Filter.m in Sources */, F43E4E620D4E5EC90041161F /* GTMNSData+zlib.m in Sources */, F437F55E0D50BC0A00F5C3A4 /* GTMRegex.m in Sources */, F47A79890D746EE9002302AB /* GTMScriptRunner.m in Sources */, F41390900D75F63C00F72B31 /* GTMNSFileManager+Path.m in Sources */, - 8B45A21E0DA46E34001148C5 /* GTMObjC2Runtime.m in Sources */, 33C372A70DD8A88500E97817 /* GTMNSString+URLArguments.m in Sources */, 33C374390DD8D44800E97817 /* GTMNSDictionary+URLArguments.m in Sources */, - 8B7DCB9B0DFF0E850017E983 /* GTMFourCharCode.m in Sources */, 8B7DCBBD0DFF0F5D0017E983 /* GTMMethodCheck.m in Sources */, - 8B7DCBD20DFF16070017E983 /* GTMNSAppleScript+Handler.m in Sources */, - 8B7DCBD30DFF16070017E983 /* GTMNSAppleEventDescriptor+Handler.m in Sources */, - 8B7DCBD40DFF16070017E983 /* GTMNSAppleEventDescriptor+Foundation.m in Sources */, - 8B7DCBE20DFF18720017E983 /* GTMDevLogUnitTestingBridge.m in Sources */, F41A6F830E02EC3600788A6C /* GTMSignalHandler.m in Sources */, - 8B3AA9F20E033E23007E31B5 /* GTMValidatingContainers.m in Sources */, F9FD94630E1D31280005867E /* GTMPath.m in Sources */, F42597490E23AA57003BEA3E /* GTMNSString+Replace.m in Sources */, F425977A0E23FE3A003BEA3E /* GTMNSString+FindFolder.m in Sources */, - 8B1801A20E2533D500280961 /* GTMLargeTypeWindow.m in Sources */, F98680C30E2C163D00CEE8BF /* GTMLogger.m in Sources */, F98681970E2C20C800CEE8BF /* GTMLogger+ASL.m in Sources */, F95803F90E2FB0850049A088 /* GTMLoggerRingBufferWriter.m in Sources */, 8B61FDC00E4CDB8000FF9C21 /* GTMStackTrace.m in Sources */, - 8B58E9950E547EB000A0E02E /* GTMGetURLHandler.m in Sources */, - 8B1B49190E5F8E2100A08972 /* GTMExceptionalInlines.m in Sources */, - 7F3EB38F0E5E09C700A7A75E /* GTMNSImage+Scaling.m in Sources */, 8B6F4B640E8856CA00425D9F /* GTMDebugThreadValidation.m in Sources */, F41711360ECDFBD500B9B276 /* GTMLightweightProxy.m in Sources */, 629445410EDDF647009295EA /* GTMNSArray+Merge.m in Sources */, - F4A420F00EDDF8E000397A11 /* GTMHotKeyTextField.m in Sources */, 8B3E292E0EEB53F8000681D8 /* GTMCarbonEvent.m in Sources */, F49FA8450EEF2AB700077669 /* GTMFileSystemKQueue.m in Sources */, 8B8EC87E0EF17C270044D13F /* GTMNSFileManager+Carbon.m in Sources */, - 8BA01B5D0F144BD800926923 /* GTMNSWorkspace+Running.m in Sources */, 8B6C15940F356E6400E51E5D /* GTMNSObject+KeyValueObserving.m in Sources */, - 1012DF570F4252BD004794DB /* GTMAbstractDOListener.m in Sources */, 7F511DFA0F4B0378009F41B6 /* GTMNSColor+Luminance.m in Sources */, - 10998E8F0F4B593E007F179D /* GTMTransientRootProxy.m in Sources */, - 10998EF40F4B5D1A007F179D /* GTMTransientRootPortProxy.m in Sources */, 8B40994C0F93C5CC00DF540E /* GTMUILocalizer.m in Sources */, 8BFE13B70FB0F2C0001BE894 /* GTMABAddressBook.m in Sources */, 8BD35B920FB22980009058F5 /* GTMNSScanner+JSON.m in Sources */, 8207B89C0FEA7AA1008A527B /* GTMWindowSheetController.m in Sources */, F43C7A581021FAA300ABF03C /* GTMUILocalizerAndLayoutTweaker.m in Sources */, 7F97DB33104EBCA3004DDDEE /* GTMFadeTruncatingTextFieldCell.m in Sources */, - 0BFAD4C9104D06EF002BEB27 /* GTMNSDictionary+CaseInsensitive.m in Sources */, - 7FF768E51051B17E00D34F4B /* GTMNSImage+SearchCache.m in Sources */, F4C6248C109753960069CADD /* GTMIBArray.m in Sources */, 8B158A9B10A8C31100C93125 /* GTMNSAnimation+Duration.m in Sources */, 0B1B9B8810FECD870084EE4B /* GTMStringEncoding.m in Sources */, - 8BDB8A9A1152E1B200C411B1 /* GTMNSAnimatablePropertyContainer.m in Sources */, - 8BB77A0611B5A0A100AB31AF /* GTMGoogleSearch.m in Sources */, - 8BCB59F111C00ED6009B6C40 /* GTMNSScanner+Unsigned.m in Sources */, 8B29080911F8E1630064F50F /* GTMNSFileHandle+UniqueName.m in Sources */, 8B414E881226FB1000D0064F /* GTMServiceManagement.c in Sources */, - F42866B91267340A0090FE0F /* GTMURITemplate.m in Sources */, 8BF2369013CF67CB00F3FD82 /* GTMKeyValueAnimation.m in Sources */, 8BBD1F8D1519258A003152F0 /* GTMNSThread+Blocks.m in Sources */, ); @@ -2443,33 +1349,20 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F42E09450D199BA400D5DDE0 /* GTMNSObject+UnitTesting.m in Sources */, - 8B5547B90DB3BB220014CC1C /* GTMAppKit+UnitTesting.m in Sources */, 8B7DCBC10DFF0F7F0017E983 /* GTMMethodCheck.m in Sources */, - 8B7DCBED0DFF1A4F0017E983 /* GTMUnitTestDevLog.m in Sources */, 8B7DCE190DFF39850017E983 /* GTMSenTestCase.m in Sources */, - 8B8B10290EEB8B1600E543D0 /* GTMHotKeyTextFieldTest.m in Sources */, 8BAA9EF20F7C2AB500DF4F12 /* GTMCarbonEventTest.m in Sources */, - 8BAA9EF30F7C2AB500DF4F12 /* GTMGetURLHandlerTest.m in Sources */, - 8BAA9EF40F7C2AB500DF4F12 /* GTMLargeTypeWindowTest.m in Sources */, - 8BAA9EF50F7C2AB500DF4F12 /* GTMLinearRGBShadingTest.m in Sources */, 8BAA9EF60F7C2AB500DF4F12 /* GTMLoginItemsTest.m in Sources */, 8BAA9EF70F7C2AB500DF4F12 /* GTMNSBezierPath+CGPathTest.m in Sources */, 8BAA9EF80F7C2AB500DF4F12 /* GTMNSBezierPath+RoundRectTest.m in Sources */, - 8BAA9EF90F7C2AB500DF4F12 /* GTMNSBezierPath+ShadingTest.m in Sources */, 8BAA9EFA0F7C2AB500DF4F12 /* GTMNSColor+LuminanceTest.m in Sources */, - 8BAA9EFB0F7C2AB500DF4F12 /* GTMNSImage+ScalingTest.m in Sources */, - 8BAA9EFC0F7C2AB500DF4F12 /* GTMNSWorkspace+RunningTest.m in Sources */, 8B409BC60F94405A00DF540E /* GTMUILocalizerTest.m in Sources */, 8207B89D0FEA7AA6008A527B /* GTMWindowSheetControllerTest.m in Sources */, F42E2C69102B1261004DF054 /* GTMUILocalizerAndLayoutTweakerTest.m in Sources */, 7F97DB31104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCellTest.m in Sources */, - 7FF768E31051B17900D34F4B /* GTMNSImage+SearchCacheTest.m in Sources */, F4C62489109753960069CADD /* GTMIBArrayTest.m in Sources */, - 8BDB8C3A115329EC00C411B1 /* GTMNSAnimatablePropertyContainerTest.m in Sources */, 8B17FD16117638D500E7A908 /* GTMFoundationUnitTestingUtilities.m in Sources */, 8B17FD1A117638F400E7A908 /* GTMAppKitUnitTestingUtilities.m in Sources */, - 8BB77A0511B5A09900AB31AF /* GTMGoogleSearchTest.m in Sources */, 8BF2369213CF694C00F3FD82 /* GTMKeyValueAnimationTest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2477,21 +1370,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 8B45A2D40DA51A0E001148C5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8B45A2890DA49B99001148C5 /* UIUnitTestingHarness */; - targetProxy = 8B45A2D30DA51A0E001148C5 /* PBXContainerItemProxy */; - }; 8B7DCBA40DFF0EFB0017E983 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = F42E086C0D199A5B00D5DDE0 /* GTM */; targetProxy = 8B7DCBA30DFF0EFB0017E983 /* PBXContainerItemProxy */; }; - 8BAA9A350F7AF50600DF4F12 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8B45A2890DA49B99001148C5 /* UIUnitTestingHarness */; - targetProxy = 8BAA9A340F7AF50600DF4F12 /* PBXContainerItemProxy */; - }; 8BC8514F127A18B60046E0FB /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 8BC85130127A18AE0046E0FB /* GTMServiceManagementTestingHarness */; @@ -2512,53 +1395,9 @@ target = F42E086C0D199A5B00D5DDE0 /* GTM */; targetProxy = F42E08780D199AA600D5DDE0 /* PBXContainerItemProxy */; }; - F4E4279210B7484B00F28A35 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8BFE13BC0FB0F2D8001BE894 /* UnitTest-AddressBook */; - targetProxy = F4E4279110B7484B00F28A35 /* PBXContainerItemProxy */; - }; - F4E4279410B7484B00F28A35 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = F48FE2630D198C1E009257D2 /* UnitTest-AppKit */; - targetProxy = F4E4279310B7484B00F28A35 /* PBXContainerItemProxy */; - }; - F4E4279610B7484B00F28A35 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = F42E08110D19987200D5DDE0 /* UnitTest-Foundation */; - targetProxy = F4E4279510B7484B00F28A35 /* PBXContainerItemProxy */; - }; - F4E4279810B7484B00F28A35 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8B45A0270DA4696C001148C5 /* UnitTest-UnitTesting */; - targetProxy = F4E4279710B7484B00F28A35 /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 8B0E653F0FD80D5E00461C4A /* GTMHotKeyTextField.strings */ = { - isa = PBXVariantGroup; - children = ( - 8B0E65400FD80D5E00461C4A /* da */, - 8B0E65410FD80D5E00461C4A /* de */, - 8B0E65420FD80D5E00461C4A /* en */, - 8B0E65430FD80D5E00461C4A /* es */, - 8B0E65440FD80D5E00461C4A /* fi */, - 8B0E65450FD80D5E00461C4A /* fr */, - 8B0E65460FD80D5E00461C4A /* it */, - 8B0E65470FD80D5E00461C4A /* ja */, - 8B0E65480FD80D5E00461C4A /* ko */, - 8B0E65490FD80D5E00461C4A /* nl */, - 8B0E654A0FD80D5E00461C4A /* no */, - 8B0E654B0FD80D5E00461C4A /* pl */, - 8B0E654C0FD80D5E00461C4A /* pt */, - 8B0E654D0FD80D5E00461C4A /* ru */, - 8B0E654E0FD80D5E00461C4A /* sv */, - 8B0E654F0FD80D5E00461C4A /* zh_CN */, - 8B0E65500FD80D5E00461C4A /* zh_TW */, - ); - name = GTMHotKeyTextField.strings; - sourceTree = "<group>"; - }; 8B409BE50F9442C800DF540E /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( @@ -2587,220 +1426,14 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ - 1DEB918208733D990010E9CD /* TigerOrLater-Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2410D197F9A009257D2 /* DebugTigerOrLater.xcconfig */; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = GTM_Prefix.pch; - GCC_WARN_SHADOW = YES; - GTM_EXTRA_WARNING_OVERRIDE_CFLAGS = "-Wno-unused-parameter"; - GTM_HOST_GCC_PREPROCESSOR_DEFINITIONS = "COMPONENT_SIGNATURE=\"\\'GTM \\'\" kComponentSignatureString=\"\\\"GoogleToolboxForMac\\\"\""; - }; - name = "TigerOrLater-Debug"; - }; - 1DEB918308733D990010E9CD /* TigerOrLater-Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2440D197F9A009257D2 /* ReleaseTigerOrLater.xcconfig */; - buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = GTM_Prefix.pch; - GCC_WARN_SHADOW = YES; - GTM_EXTRA_WARNING_OVERRIDE_CFLAGS = "-Wno-unused-parameter"; - GTM_HOST_GCC_PREPROCESSOR_DEFINITIONS = "COMPONENT_SIGNATURE=\"\\'GTM \\'\" kComponentSignatureString=\"\\\"GoogleToolboxForMac\\\"\""; - }; - name = "TigerOrLater-Release"; - }; - 8B45A02A0DA4696D001148C5 /* TigerOrLater-Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2420D197F9A009257D2 /* DebugUnittest.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(value)", - "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", - ); - INFOPLIST_FILE = "UnitTest-Info.plist"; - PRODUCT_NAME = "UnitTest-UnitTesting"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GTMUIUnitTestingHarness.app/Contents/MacOS/GTMUIUnitTestingHarness"; - }; - name = "TigerOrLater-Debug"; - }; - 8B45A02C0DA4696D001148C5 /* TigerOrLater-Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2450D197F9A009257D2 /* ReleaseUnittest.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(value)", - "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", - ); - INFOPLIST_FILE = "UnitTest-Info.plist"; - PRODUCT_NAME = "UnitTest-UnitTesting"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GTMUIUnitTestingHarness.app/Contents/MacOS/GTMUIUnitTestingHarness"; - }; - name = "TigerOrLater-Release"; - }; - 8B45A28E0DA49B99001148C5 /* TigerOrLater-Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = UnitTesting/GTMUIUnitTestingHarness/Info.plist; - PRODUCT_NAME = GTMUIUnitTestingHarness; - }; - name = "TigerOrLater-Debug"; - }; - 8B45A2900DA49B99001148C5 /* TigerOrLater-Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = UnitTesting/GTMUIUnitTestingHarness/Info.plist; - PRODUCT_NAME = GTMUIUnitTestingHarness; - }; - name = "TigerOrLater-Release"; - }; - 8BC85143127A18AE0046E0FB /* TigerOrLater-Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = GTMServiceManagementTestingHarness; - }; - name = "TigerOrLater-Debug"; - }; - 8BC85145127A18AE0046E0FB /* TigerOrLater-Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = GTMServiceManagementTestingHarness; - }; - name = "TigerOrLater-Release"; - }; - 8BFE13F30FB0F2D8001BE894 /* TigerOrLater-Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2420D197F9A009257D2 /* DebugUnittest.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(value)", - "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", - ); - INFOPLIST_FILE = "UnitTest-Info.plist"; - PRODUCT_NAME = "UnitTest-AddressBook"; - }; - name = "TigerOrLater-Debug"; - }; - 8BFE13F50FB0F2D8001BE894 /* TigerOrLater-Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2450D197F9A009257D2 /* ReleaseUnittest.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(value)", - "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", - ); - INFOPLIST_FILE = "UnitTest-Info.plist"; - PRODUCT_NAME = "UnitTest-AddressBook"; - }; - name = "TigerOrLater-Release"; - }; - F42E081F0D19987200D5DDE0 /* TigerOrLater-Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2420D197F9A009257D2 /* DebugUnittest.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(value)", - "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", - ); - GTM_NO_DEBUG_FRAMEWORKS = YES; - INFOPLIST_FILE = "UnitTest-Info.plist"; - PRODUCT_NAME = "UnitTest-Foundation"; - }; - name = "TigerOrLater-Debug"; - }; - F42E08200D19987200D5DDE0 /* TigerOrLater-Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2450D197F9A009257D2 /* ReleaseUnittest.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(value)", - "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", - ); - GTM_NO_DEBUG_FRAMEWORKS = YES; - INFOPLIST_FILE = "UnitTest-Info.plist"; - PRODUCT_NAME = "UnitTest-Foundation"; - }; - name = "TigerOrLater-Release"; - }; - F42E08700D199A5C00D5DDE0 /* TigerOrLater-Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2430D197F9A009257D2 /* LoadableBundle.xcconfig */; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "GTM-Info.plist"; - INSTALL_PATH = "@loader_path/../Frameworks"; - PRODUCT_NAME = GoogleToolboxForMac; - }; - name = "TigerOrLater-Debug"; - }; - F42E08710D199A5C00D5DDE0 /* TigerOrLater-Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2430D197F9A009257D2 /* LoadableBundle.xcconfig */; - buildSettings = { - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "GTM-Info.plist"; - INSTALL_PATH = "@loader_path/../Frameworks"; - PRODUCT_NAME = GoogleToolboxForMac; - }; - name = "TigerOrLater-Release"; - }; - F47204350D33BEDF00E9F378 /* TigerOrLater-Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "All UnitTests"; - }; - name = "TigerOrLater-Debug"; - }; - F47204360D33BEDF00E9F378 /* TigerOrLater-Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "All UnitTests"; - }; - name = "TigerOrLater-Release"; - }; - F48FE2670D198C1F009257D2 /* TigerOrLater-Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2420D197F9A009257D2 /* DebugUnittest.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(value)", - "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", - ); - INFOPLIST_FILE = "UnitTest-Info.plist"; - PRODUCT_NAME = "UnitTest-AppKit"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GTMUIUnitTestingHarness.app/Contents/MacOS/GTMUIUnitTestingHarness"; - }; - name = "TigerOrLater-Debug"; - }; - F48FE2680D198C1F009257D2 /* TigerOrLater-Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F48FE2450D197F9A009257D2 /* ReleaseUnittest.xcconfig */; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(value)", - "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", - ); - INFOPLIST_FILE = "UnitTest-Info.plist"; - PRODUCT_NAME = "UnitTest-AppKit"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GTMUIUnitTestingHarness.app/Contents/MacOS/GTMUIUnitTestingHarness"; - }; - name = "TigerOrLater-Release"; - }; F4CC9F28148E5DEB00B7D68C /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = F4CC9F3F148E5E2500B7D68C /* DebugMacOSX.xcconfig */; buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = GTM_Prefix.pch; GCC_WARN_SHADOW = YES; GTM_EXTRA_WARNING_OVERRIDE_CFLAGS = "-Wno-unused-parameter"; - GTM_HOST_GCC_PREPROCESSOR_DEFINITIONS = "COMPONENT_SIGNATURE=\"\\'GTM \\'\" kComponentSignatureString=\"\\\"GoogleToolboxForMac\\\"\""; - MACOSX_DEPLOYMENT_TARGET = 10.5; + GTM_HOST_GCC_PREPROCESSOR_DEFINITIONS = "GTM_USING_XCTEST=1"; + MACOSX_DEPLOYMENT_TARGET = 10.6; }; name = Debug; }; @@ -2817,13 +1450,6 @@ }; name = Debug; }; - F4CC9F2A148E5DEB00B7D68C /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "All UnitTests"; - }; - name = Debug; - }; F4CC9F2B148E5DEB00B7D68C /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = F48FE2420D197F9A009257D2 /* DebugUnittest.xcconfig */; @@ -2842,12 +1468,13 @@ baseConfigurationReference = F48FE2420D197F9A009257D2 /* DebugUnittest.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( - "$(value)", + "$(inherited)", "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", + "$(DEVELOPER_SDK_DIR)/../Library/Frameworks", ); INFOPLIST_FILE = "UnitTest-Info.plist"; PRODUCT_NAME = "UnitTest-AppKit"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GTMUIUnitTestingHarness.app/Contents/MacOS/GTMUIUnitTestingHarness"; + TEST_HOST = "\"$(BUILT_PRODUCTS_DIR)/GTMUIUnitTestingHarness.app/Contents/MacOS/GTMUIUnitTestingHarness\""; }; name = Debug; }; @@ -2875,7 +1502,6 @@ ); INFOPLIST_FILE = "UnitTest-Info.plist"; PRODUCT_NAME = "UnitTest-UnitTesting"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GTMUIUnitTestingHarness.app/Contents/MacOS/GTMUIUnitTestingHarness"; }; name = Debug; }; @@ -2898,12 +1524,10 @@ isa = XCBuildConfiguration; baseConfigurationReference = F4CC9F40148E5E2500B7D68C /* ReleaseMacOSX.xcconfig */; buildSettings = { - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = GTM_Prefix.pch; GCC_WARN_SHADOW = YES; GTM_EXTRA_WARNING_OVERRIDE_CFLAGS = "-Wno-unused-parameter"; - GTM_HOST_GCC_PREPROCESSOR_DEFINITIONS = "COMPONENT_SIGNATURE=\"\\'GTM \\'\" kComponentSignatureString=\"\\\"GoogleToolboxForMac\\\"\""; - MACOSX_DEPLOYMENT_TARGET = 10.5; + GTM_HOST_GCC_PREPROCESSOR_DEFINITIONS = "GTM_USING_XCTEST=1"; + MACOSX_DEPLOYMENT_TARGET = 10.6; }; name = Release; }; @@ -2920,13 +1544,6 @@ }; name = Release; }; - F4CC9F35148E5DF700B7D68C /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "All UnitTests"; - }; - name = Release; - }; F4CC9F36148E5DF700B7D68C /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = F48FE2450D197F9A009257D2 /* ReleaseUnittest.xcconfig */; @@ -2945,12 +1562,13 @@ baseConfigurationReference = F48FE2450D197F9A009257D2 /* ReleaseUnittest.xcconfig */; buildSettings = { FRAMEWORK_SEARCH_PATHS = ( - "$(value)", + "$(inherited)", "$(DEVELOPER_FRAMEWORKS_DIR_QUOTED)", + "$(DEVELOPER_SDK_DIR)/../Library/Frameworks", ); INFOPLIST_FILE = "UnitTest-Info.plist"; PRODUCT_NAME = "UnitTest-AppKit"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GTMUIUnitTestingHarness.app/Contents/MacOS/GTMUIUnitTestingHarness"; + TEST_HOST = "\"$(BUILT_PRODUCTS_DIR)/GTMUIUnitTestingHarness.app/Contents/MacOS/GTMUIUnitTestingHarness\""; }; name = Release; }; @@ -2978,7 +1596,6 @@ ); INFOPLIST_FILE = "UnitTest-Info.plist"; PRODUCT_NAME = "UnitTest-UnitTesting"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/GTMUIUnitTestingHarness.app/Contents/MacOS/GTMUIUnitTestingHarness"; }; name = Release; }; @@ -3005,8 +1622,6 @@ buildConfigurations = ( F4CC9F28148E5DEB00B7D68C /* Debug */, F4CC9F33148E5DF700B7D68C /* Release */, - 1DEB918208733D990010E9CD /* TigerOrLater-Debug */, - 1DEB918308733D990010E9CD /* TigerOrLater-Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; @@ -3016,8 +1631,6 @@ buildConfigurations = ( F4CC9F2E148E5DEB00B7D68C /* Debug */, F4CC9F39148E5DF700B7D68C /* Release */, - 8B45A02A0DA4696D001148C5 /* TigerOrLater-Debug */, - 8B45A02C0DA4696D001148C5 /* TigerOrLater-Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; @@ -3027,8 +1640,6 @@ buildConfigurations = ( F4CC9F30148E5DEB00B7D68C /* Debug */, F4CC9F3B148E5DF700B7D68C /* Release */, - 8B45A28E0DA49B99001148C5 /* TigerOrLater-Debug */, - 8B45A2900DA49B99001148C5 /* TigerOrLater-Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; @@ -3038,8 +1649,6 @@ buildConfigurations = ( F4CC9F2F148E5DEB00B7D68C /* Debug */, F4CC9F3A148E5DF700B7D68C /* Release */, - 8BC85143127A18AE0046E0FB /* TigerOrLater-Debug */, - 8BC85145127A18AE0046E0FB /* TigerOrLater-Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; @@ -3049,8 +1658,6 @@ buildConfigurations = ( F4CC9F2B148E5DEB00B7D68C /* Debug */, F4CC9F36148E5DF700B7D68C /* Release */, - 8BFE13F30FB0F2D8001BE894 /* TigerOrLater-Debug */, - 8BFE13F50FB0F2D8001BE894 /* TigerOrLater-Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; @@ -3060,8 +1667,6 @@ buildConfigurations = ( F4CC9F2D148E5DEB00B7D68C /* Debug */, F4CC9F38148E5DF700B7D68C /* Release */, - F42E081F0D19987200D5DDE0 /* TigerOrLater-Debug */, - F42E08200D19987200D5DDE0 /* TigerOrLater-Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; @@ -3071,19 +1676,6 @@ buildConfigurations = ( F4CC9F29148E5DEB00B7D68C /* Debug */, F4CC9F34148E5DF700B7D68C /* Release */, - F42E08700D199A5C00D5DDE0 /* TigerOrLater-Debug */, - F42E08710D199A5C00D5DDE0 /* TigerOrLater-Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - F47204340D33BEDF00E9F378 /* Build configuration list for PBXAggregateTarget "All UnitTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F4CC9F2A148E5DEB00B7D68C /* Debug */, - F4CC9F35148E5DF700B7D68C /* Release */, - F47204350D33BEDF00E9F378 /* TigerOrLater-Debug */, - F47204360D33BEDF00E9F378 /* TigerOrLater-Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; @@ -3093,8 +1685,6 @@ buildConfigurations = ( F4CC9F2C148E5DEB00B7D68C /* Debug */, F4CC9F37148E5DF700B7D68C /* Release */, - F48FE2670D198C1F009257D2 /* TigerOrLater-Debug */, - F48FE2680D198C1F009257D2 /* TigerOrLater-Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; diff --git a/GTMDefines.h b/GTMDefines.h index d381ec6..7baa7b2 100644 --- a/GTMDefines.h +++ b/GTMDefines.h @@ -29,58 +29,6 @@ #include <Availability.h> #endif // TARGET_OS_IPHONE -// Not all MAC_OS_X_VERSION_10_X macros defined in past SDKs -#ifndef MAC_OS_X_VERSION_10_5 - #define MAC_OS_X_VERSION_10_5 1050 -#endif -#ifndef MAC_OS_X_VERSION_10_6 - #define MAC_OS_X_VERSION_10_6 1060 -#endif -#ifndef MAC_OS_X_VERSION_10_7 - #define MAC_OS_X_VERSION_10_7 1070 -#endif -#ifndef MAC_OS_X_VERSION_10_8 - #define MAC_OS_X_VERSION_10_8 1080 -#endif -#ifndef MAC_OS_X_VERSION_10_9 - #define MAC_OS_X_VERSION_10_9 1090 -#endif - -// Not all __IPHONE_X macros defined in past SDKs -#ifndef __IPHONE_3_0 - #define __IPHONE_3_0 30000 -#endif -#ifndef __IPHONE_3_1 - #define __IPHONE_3_1 30100 -#endif -#ifndef __IPHONE_3_2 - #define __IPHONE_3_2 30200 -#endif -#ifndef __IPHONE_4_0 - #define __IPHONE_4_0 40000 -#endif -#ifndef __IPHONE_4_3 - #define __IPHONE_4_3 40300 -#endif -#ifndef __IPHONE_5_0 - #define __IPHONE_5_0 50000 -#endif -#ifndef __IPHONE_5_1 - #define __IPHONE_5_1 50100 -#endif -#ifndef __IPHONE_6_0 - #define __IPHONE_6_0 60000 -#endif -#ifndef __IPHONE_6_1 - #define __IPHONE_6_1 60100 -#endif -#ifndef __IPHONE_7_0 - #define __IPHONE_7_0 70000 -#endif -#ifndef __IPHONE_7_1 - #define __IPHONE_7_1 70100 -#endif - // ---------------------------------------------------------------------------- // CPP symbols that can be overridden in a prefix to control how the toolbox // is compiled. @@ -262,7 +210,9 @@ #define GTM_IPHONE_SIMULATOR 0 #define GTM_IPHONE_DEVICE 0 #define GTM_IPHONE_USE_SENTEST 0 - #define GTM_USING_XCTEST 0 + #ifndef GTM_USING_XCTEST + #define GTM_USING_XCTEST 0 + #endif #endif // Some of our own availability macros @@ -280,41 +230,6 @@ #define GTM_SUPPORT_GC 0 #endif -// To simplify support for 64bit (and Leopard in general), we provide the type -// defines for non Leopard SDKs -#if !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) - // NSInteger/NSUInteger and Max/Mins - #ifndef NSINTEGER_DEFINED - #if (defined(__LP64__) && __LP64__) || NS_BUILD_32_LIKE_64 - typedef long NSInteger; - typedef unsigned long NSUInteger; - #else - typedef int NSInteger; - typedef unsigned int NSUInteger; - #endif - #define NSIntegerMax LONG_MAX - #define NSIntegerMin LONG_MIN - #define NSUIntegerMax ULONG_MAX - #define NSINTEGER_DEFINED 1 - #endif // NSINTEGER_DEFINED - // CGFloat - #ifndef CGFLOAT_DEFINED - #if defined(__LP64__) && __LP64__ - // This really is an untested path (64bit on Tiger?) - typedef double CGFloat; - #define CGFLOAT_MIN DBL_MIN - #define CGFLOAT_MAX DBL_MAX - #define CGFLOAT_IS_DOUBLE 1 - #else /* !defined(__LP64__) || !__LP64__ */ - typedef float CGFloat; - #define CGFLOAT_MIN FLT_MIN - #define CGFLOAT_MAX FLT_MAX - #define CGFLOAT_IS_DOUBLE 0 - #endif /* !defined(__LP64__) || !__LP64__ */ - #define CGFLOAT_DEFINED 1 - #endif // CGFLOAT_DEFINED -#endif // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - // Some support for advanced clang static analysis functionality #ifndef NS_RETURNS_RETAINED #if __has_feature(attribute_ns_returns_retained) @@ -372,26 +287,6 @@ #endif #endif -// Defined on 10.6 and above. -#ifndef NS_FORMAT_ARGUMENT - #define NS_FORMAT_ARGUMENT(A) -#endif - -// Defined on 10.6 and above. -#ifndef NS_FORMAT_FUNCTION - #define NS_FORMAT_FUNCTION(F,A) -#endif - -// Defined on 10.6 and above. -#ifndef CF_FORMAT_ARGUMENT - #define CF_FORMAT_ARGUMENT(A) -#endif - -// Defined on 10.6 and above. -#ifndef CF_FORMAT_FUNCTION - #define CF_FORMAT_FUNCTION(F,A) -#endif - #ifndef GTM_NONNULL #if defined(__has_attribute) #if __has_attribute(nonnull) @@ -435,10 +330,6 @@ #ifdef __OBJC__ -// Declared here so that it can easily be used for logging tracking if -// necessary. See GTMUnitTestDevLog.h for details. -@class NSString; -GTM_EXTERN void _GTMUnitTestDevLog(NSString *format, ...) NS_FORMAT_FUNCTION(1, 2); // Macro to allow you to create NSStrings out of other macros. // #define FOO foo @@ -473,20 +364,6 @@ GTM_EXTERN void _GTMUnitTestDevLog(NSString *format, ...) NS_FORMAT_FUNCTION(1, // ============================================================================ -// To simplify support for both Leopard and Snow Leopard we declare -// the Snow Leopard protocols that we need here. -#if !defined(GTM_10_6_PROTOCOLS_DEFINED) && !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) -#define GTM_10_6_PROTOCOLS_DEFINED 1 -@protocol NSConnectionDelegate -@end -@protocol NSAnimationDelegate -@end -@protocol NSImageDelegate -@end -@protocol NSTabViewDelegate -@end -#endif // !defined(GTM_10_6_PROTOCOLS_DEFINED) && !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) - // GTM_SEL_STRING is for specifying selector (usually property) names to KVC // or KVO methods. // In debug it will generate warnings for undeclared selectors if @@ -501,13 +378,7 @@ GTM_EXTERN void _GTMUnitTestDevLog(NSString *format, ...) NS_FORMAT_FUNCTION(1, #endif // GTM_SEL_STRING #ifndef GTM_WEAK - #if defined(__OBJC_GC__) - // In -fobjc-gc mode, __weak means "a reference not visible to the gargabe - // collector". __weak references are set to zero when their pointee is - // collected. __weak is not needed to prevent cycles because cycles - // are cleaned up fine by the garbage collector. - #define GTM_WEAK __weak - #elif __has_feature(objc_arc_weak) +#if __has_feature(objc_arc_weak) // With ARC enabled, __weak means a reference that isn't implicitly // retained. __weak objects are accessed through runtime functions, so // they are zeroed out, but this requires OS X 10.7+. diff --git a/GTM_Prefix.pch b/GTM_Prefix.pch deleted file mode 100644 index 5434868..0000000 --- a/GTM_Prefix.pch +++ /dev/null @@ -1,25 +0,0 @@ -// -// Copyright 2007-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -// We don't require a prefix to use any GTM code. This prefix is just for unit -// test logging. - -// This turns on unit test logging so that we can track unittests if we are -// doing them. See GTMUnitTestDevLog.h for details. -// (_GTMUnitTestDevLog comes from GTMDevLogUnitTestingBridge.m) -#define _GTMDevLog _GTMUnitTestDevLog - - diff --git a/GTMiPhone.xcodeproj/project.pbxproj b/GTMiPhone.xcodeproj/project.pbxproj index 4b33e27..cbe60df 100644 --- a/GTMiPhone.xcodeproj/project.pbxproj +++ b/GTMiPhone.xcodeproj/project.pbxproj @@ -6,324 +6,114 @@ objectVersion = 46; objects = { -/* Begin PBXAggregateTarget section */ - F4C7F9BF0DC62EC8009BEE5B /* All UnitTests */ = { - isa = PBXAggregateTarget; - buildConfigurationList = F4C7F9C50DC62F0C009BEE5B /* Build configuration list for PBXAggregateTarget "All UnitTests" */; - buildPhases = ( - ); - dependencies = ( - F4C7F9C40DC62ECD009BEE5B /* PBXTargetDependency */, - F4D20F1E14852CAB0001600C /* PBXTargetDependency */, - ); - name = "All UnitTests"; - productName = "All UnitTests"; - }; -/* End PBXAggregateTarget section */ - /* Begin PBXBuildFile section */ - 0B859DA1104D08160064FE46 /* GTMNSDictionary+CaseInsensitive.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B859D9D104D08050064FE46 /* GTMNSDictionary+CaseInsensitive.m */; }; - 0B859DA2104D08160064FE46 /* GTMNSDictionary+CaseInsensitiveTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B859D9E104D08050064FE46 /* GTMNSDictionary+CaseInsensitiveTest.m */; }; - 0BBC768B10FEF62C0006FABE /* GTMStringEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BBC768910FEF61D0006FABE /* GTMStringEncoding.m */; }; - 0BBC768C10FEF62C0006FABE /* GTMStringEncodingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BBC768A10FEF61D0006FABE /* GTMStringEncodingTest.m */; }; - 13C1ED4F104896C900907CD8 /* GTMUIView+SubtreeDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 13C1ED4C104896C900907CD8 /* GTMUIView+SubtreeDescription.m */; }; - 13C1ED50104896C900907CD8 /* GTMUIView+SubtreeDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 13C1ED4D104896C900907CD8 /* GTMUIView+SubtreeDescriptionTest.m */; }; - 169E1E2F1459AAE100E6F562 /* GTMUILocalizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 169E1E2B1459AAE100E6F562 /* GTMUILocalizer.m */; }; - 169E1E301459AAE100E6F562 /* GTMUILocalizerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 169E1E2D1459AAE100E6F562 /* GTMUILocalizerTest.m */; }; 169E1E311459AAE100E6F562 /* GTMUILocalizerTest.xib in Resources */ = {isa = PBXBuildFile; fileRef = 169E1E2E1459AAE100E6F562 /* GTMUILocalizerTest.xib */; }; - 1D3623EC0D0F72F000981E51 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */; }; - 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - 23220A06152C9E980060CB7D /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23220A05152C9E980060CB7D /* Security.framework */; }; - 234E175D152CBB4900CF3542 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23220A05152C9E980060CB7D /* Security.framework */; }; - 234E17DC152CECFB00CF3542 /* GTMIPhoneSecurityLibraryTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 234E17DB152CECFB00CF3542 /* GTMIPhoneSecurityLibraryTest.m */; }; - 234E17DD152CECFB00CF3542 /* GTMIPhoneSecurityLibraryTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 234E17DB152CECFB00CF3542 /* GTMIPhoneSecurityLibraryTest.m */; }; - 448D61FB11AC1F1B0097ACBC /* GTMUIImage+Resize_100x50_flipped.png in Resources */ = {isa = PBXBuildFile; fileRef = 448D61B111AC1AAD0097ACBC /* GTMUIImage+Resize_100x50_flipped.png */; }; - 448D61FC11AC1F250097ACBC /* GTMUIImage+Resize_50x100_flipped.png in Resources */ = {isa = PBXBuildFile; fileRef = 448D61B011AC1AAD0097ACBC /* GTMUIImage+Resize_50x100_flipped.png */; }; - 6294461C0EDE178D009295EA /* GTMNSArray+MergeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 629446190EDE177A009295EA /* GTMNSArray+MergeTest.m */; }; - 6294461D0EDE17A0009295EA /* GTMNSArray+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 629446180EDE177A009295EA /* GTMNSArray+Merge.m */; }; - 64D0F5C80FD3E65C00506CC7 /* GTMUIImage+ResizeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 64D0F5C60FD3E65C00506CC7 /* GTMUIImage+ResizeTest.m */; }; - 64D0F5C90FD3E65C00506CC7 /* GTMUIImage+Resize.m in Sources */ = {isa = PBXBuildFile; fileRef = 64D0F5C70FD3E65C00506CC7 /* GTMUIImage+Resize.m */; }; - 64D0F5DE0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_60x40.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5CC0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_60x40.png */; }; 64D0F5DF0FD3E68400506CC7 /* GTMUIImage+Resize_50x100.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5CD0FD3E68400506CC7 /* GTMUIImage+Resize_50x100.png */; }; - 64D0F5E00FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5CE0FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_clip.png */; }; - 64D0F5E10FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5CF0FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_noclip.png */; }; - 64D0F5E20FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D00FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_clip.png */; }; - 64D0F5E30FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D10FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_noclip.png */; }; - 64D0F5E40FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D20FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_clip.png */; }; - 64D0F5E50FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D30FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_noclip.png */; }; 64D0F5E60FD3E68400506CC7 /* GTMUIImage+Resize_100x50.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D40FD3E68400506CC7 /* GTMUIImage+Resize_100x50.png */; }; - 64D0F5E70FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D50FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_clip.png */; }; - 64D0F5E80FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D60FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_noclip.png */; }; - 64D0F5E90FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D70FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_clip.png */; }; - 64D0F5EA0FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D80FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_noclip.png */; }; - 64D0F5EB0FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D90FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_clip.png */; }; - 64D0F5EC0FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5DA0FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_noclip.png */; }; 64D0F5ED0FD3E68400506CC7 /* GTMUIImage+Resize_100x100.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5DB0FD3E68400506CC7 /* GTMUIImage+Resize_100x100.png */; }; - 64D0F5EE0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_40x60.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5DC0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_40x60.png */; }; - 64D0F5EF0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_50x50.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5DD0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_50x50.png */; }; 67A7820C0E00927400EBF506 /* GTMIPhoneUnitTestDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 67A7820B0E00927400EBF506 /* GTMIPhoneUnitTestDelegate.m */; }; - 8B2908B211F8E7070064F50F /* GTMNSFileHandle+UniqueName.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B2908B011F8E7070064F50F /* GTMNSFileHandle+UniqueName.m */; }; - 8B2908B311F8E7070064F50F /* GTMNSFileHandle+UniqueNameTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B2908B111F8E7070064F50F /* GTMNSFileHandle+UniqueNameTest.m */; }; - 8B308BCE0DAD0B8400183556 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B308BCD0DAD0B8400183556 /* QuartzCore.framework */; }; - 8B3AA8F30E032FC7007E31B5 /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3AA8F10E032FC7007E31B5 /* GTMNSString+URLArguments.m */; }; - 8B3AA8F40E032FC7007E31B5 /* GTMNSString+URLArgumentsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3AA8F20E032FC7007E31B5 /* GTMNSString+URLArgumentsTest.m */; }; - 8B3AA9340E0336AC007E31B5 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B3AA9330E0336AC007E31B5 /* CFNetwork.framework */; }; - 8B41EC0F0E0711D40040CF9F /* GTMValidatingContainersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B41EC0C0E0711D40040CF9F /* GTMValidatingContainersTest.m */; }; - 8B41EC100E0711D40040CF9F /* GTMValidatingContainers.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B41EC0D0E0711D40040CF9F /* GTMValidatingContainers.m */; }; - 8B5547CA0DB3BBF20014CC1C /* GTMUIKit+UnitTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B5547C70DB3BBF20014CC1C /* GTMUIKit+UnitTesting.m */; }; - 8B5547CB0DB3BBF20014CC1C /* GTMUIKit+UnitTestingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B5547C90DB3BBF20014CC1C /* GTMUIKit+UnitTestingTest.m */; }; - 8B5A9E200E71CB6C005DA441 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B5A9E1F0E71CB6C005DA441 /* AddressBook.framework */; }; - 8B6C18740F3769D200E51E5D /* GTMNSObject+KeyValueObserving.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6C18720F3769D200E51E5D /* GTMNSObject+KeyValueObserving.m */; }; - 8B6FF394151A664600B0642B /* GTMNSThread+Blocks.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6FF392151A664600B0642B /* GTMNSThread+Blocks.m */; }; - 8B6FF395151A664600B0642B /* GTMNSThread+Blocks.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6FF392151A664600B0642B /* GTMNSThread+Blocks.m */; }; - 8B6FF396151A664600B0642B /* GTMNSThread+BlocksTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6FF393151A664600B0642B /* GTMNSThread+BlocksTest.m */; }; - 8B6FF397151A664600B0642B /* GTMNSThread+BlocksTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6FF393151A664600B0642B /* GTMNSThread+BlocksTest.m */; }; - 8B6FF39A151A670100B0642B /* GTMFoundationUnitTestingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6FF399151A670100B0642B /* GTMFoundationUnitTestingUtilities.m */; }; - 8B6FF39B151A670100B0642B /* GTMFoundationUnitTestingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6FF399151A670100B0642B /* GTMFoundationUnitTestingUtilities.m */; }; - 8B7DCEAA0DFF4C760017E983 /* GTMDevLogUnitTestingBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCEA90DFF4C760017E983 /* GTMDevLogUnitTestingBridge.m */; }; - 8B7DCEAD0DFF4CA60017E983 /* GTMUnitTestDevLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCEAC0DFF4CA60017E983 /* GTMUnitTestDevLog.m */; }; - 8BB78FA911B94D9500AB31AF /* GTMGoogleSearch.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BB78FA711B94D9500AB31AF /* GTMGoogleSearch.m */; }; - 8BB78FAA11B94D9500AB31AF /* GTMGoogleSearchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BB78FA811B94D9500AB31AF /* GTMGoogleSearchTest.m */; }; - 8BC0480F0DAE928A00C2D1CA /* GTMCalculatedRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047780DAE928A00C2D1CA /* GTMCalculatedRange.m */; }; - 8BC048100DAE928A00C2D1CA /* GTMCalculatedRangeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047790DAE928A00C2D1CA /* GTMCalculatedRangeTest.m */; }; - 8BC048130DAE928A00C2D1CA /* GTMNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0477F0DAE928A00C2D1CA /* GTMNSData+zlib.m */; }; - 8BC048150DAE928A00C2D1CA /* GTMNSEnumerator+Filter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047820DAE928A00C2D1CA /* GTMNSEnumerator+Filter.m */; }; - 8BC048160DAE928A00C2D1CA /* GTMNSEnumerator+FilterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047830DAE928A00C2D1CA /* GTMNSEnumerator+FilterTest.m */; }; - 8BC048170DAE928A00C2D1CA /* GTMNSFileManager+Path.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047850DAE928A00C2D1CA /* GTMNSFileManager+Path.m */; }; - 8BC048180DAE928A00C2D1CA /* GTMNSFileManager+PathTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047860DAE928A00C2D1CA /* GTMNSFileManager+PathTest.m */; }; - 8BC048190DAE928A00C2D1CA /* GTMNSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047880DAE928A00C2D1CA /* GTMNSString+HTML.m */; }; - 8BC0481A0DAE928A00C2D1CA /* GTMNSString+HTMLTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047890DAE928A00C2D1CA /* GTMNSString+HTMLTest.m */; }; - 8BC0481B0DAE928A00C2D1CA /* GTMNSString+XML.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0478B0DAE928A00C2D1CA /* GTMNSString+XML.m */; }; - 8BC0481C0DAE928A00C2D1CA /* GTMNSString+XMLTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0478C0DAE928A00C2D1CA /* GTMNSString+XMLTest.m */; }; - 8BC0481F0DAE928A00C2D1CA /* GTMRegex.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047920DAE928A00C2D1CA /* GTMRegex.m */; }; - 8BC048200DAE928A00C2D1CA /* GTMRegexTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047930DAE928A00C2D1CA /* GTMRegexTest.m */; }; - 8BC048250DAE928A00C2D1CA /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0479D0DAE928A00C2D1CA /* GTMMethodCheck.m */; }; - 8BC048260DAE928A00C2D1CA /* GTMMethodCheckTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0479E0DAE928A00C2D1CA /* GTMMethodCheckTest.m */; }; - 8BC048270DAE928A00C2D1CA /* GTMCALayer+UnitTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047A10DAE928A00C2D1CA /* GTMCALayer+UnitTesting.m */; }; - 8BC048580DAE928A00C2D1CA /* GTMIPhoneUnitTestMain.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047DD0DAE928A00C2D1CA /* GTMIPhoneUnitTestMain.m */; }; - 8BC048600DAE928A00C2D1CA /* GTMNSObject+UnitTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047ED0DAE928A00C2D1CA /* GTMNSObject+UnitTesting.m */; }; - 8BC048650DAE928A00C2D1CA /* GTMSenTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047F70DAE928A00C2D1CA /* GTMSenTestCase.m */; }; - 8BC0486B0DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8BC048000DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.gtmUTState */; }; - 8BC0486C0DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.png in Resources */ = {isa = PBXBuildFile; fileRef = 8BC048010DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.png */; }; - 8BC04A720DAF144700C2D1CA /* GTMSystemVersionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC04A710DAF144700C2D1CA /* GTMSystemVersionTest.m */; }; - 8BC04A750DAF145200C2D1CA /* GTMSystemVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC04A740DAF145200C2D1CA /* GTMSystemVersion.m */; }; - 8BC04D480DB0088500C2D1CA /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BC04D470DB0088500C2D1CA /* libz.dylib */; }; - 8BCB5AB111C02D7D009B6C40 /* GTMNSScanner+Unsigned.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCB5AAF11C02D7D009B6C40 /* GTMNSScanner+Unsigned.m */; }; - 8BCB5AB211C02D7D009B6C40 /* GTMNSScanner+UnsignedTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCB5AB011C02D7D009B6C40 /* GTMNSScanner+UnsignedTest.m */; }; - 8BD35C920FB234E1009058F5 /* GTMNSScanner+JSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD35C900FB234E1009058F5 /* GTMNSScanner+JSON.m */; }; - 8BD35C930FB234E1009058F5 /* GTMNSScanner+JSONTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD35C910FB234E1009058F5 /* GTMNSScanner+JSONTest.m */; }; - 8BDA25140E759A6500C9769D /* GTMNSData+zlibTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047800DAE928A00C2D1CA /* GTMNSData+zlibTest.m */; }; - 8BE839890E89C74B00C611B0 /* GTMDebugThreadValidation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE839870E89C74A00C611B0 /* GTMDebugThreadValidation.m */; }; - 8BE83A660E8B059A00C611B0 /* GTMDebugThreadValidationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE83A650E8B059A00C611B0 /* GTMDebugThreadValidationTest.m */; }; - 8BFE15C60FB0F764001BE894 /* GTMABAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BFE15C10FB0F764001BE894 /* GTMABAddressBook.m */; }; + 8B2C72E51D9EBB540027BD14 /* GTMUnitTestDevLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B2C72E41D9EBB540027BD14 /* GTMUnitTestDevLog.m */; }; + 8B2C72EB1D9EBBA10027BD14 /* GTMTestTimerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B2C72EA1D9EBBA10027BD14 /* GTMTestTimerTest.m */; }; + 8B7651D81D9C872F00DB2C59 /* GTMLogger+ASL.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7651D61D9C872C00DB2C59 /* GTMLogger+ASL.m */; }; + 8B7651D91D9C873200DB2C59 /* GTMLogger+ASLTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7651D71D9C872C00DB2C59 /* GTMLogger+ASLTest.m */; }; + 8B7651E11D9C89B800DB2C59 /* GTMRoundedRectPath.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7651E01D9C89B800DB2C59 /* GTMRoundedRectPath.m */; }; + 8B82CEFF1D9C1C3B007182AA /* GTMABAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BFE15C10FB0F764001BE894 /* GTMABAddressBook.m */; }; + 8B82CF001D9C1C3B007182AA /* GTMDebugThreadValidation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE839870E89C74A00C611B0 /* GTMDebugThreadValidation.m */; }; + 8B82CF011D9C1C3B007182AA /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0479D0DAE928A00C2D1CA /* GTMMethodCheck.m */; }; + 8B82CF021D9C1C3B007182AA /* GTMStringEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BBC768910FEF61D0006FABE /* GTMStringEncoding.m */; }; + 8B82CF031D9C1C3B007182AA /* GTMGeometryUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F439ADEE0DBD3C4000BE9B91 /* GTMGeometryUtils.m */; }; + 8B82CF041D9C1C3B007182AA /* GTMLightweightProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = F41711580ECDFF0400B9B276 /* GTMLightweightProxy.m */; }; + 8B82CF051D9C1C3B007182AA /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFA30E7559C7004FB565 /* GTMLogger.m */; }; + 8B82CF061D9C1C3B007182AA /* GTMLoggerRingBufferWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFB20E755B4D004FB565 /* GTMLoggerRingBufferWriter.m */; }; + 8B82CF071D9C1C3B007182AA /* GTMNSArray+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 629446180EDE177A009295EA /* GTMNSArray+Merge.m */; }; + 8B82CF081D9C1C3B007182AA /* GTMNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0477F0DAE928A00C2D1CA /* GTMNSData+zlib.m */; }; + 8B82CF091D9C1C3B007182AA /* GTMNSDictionary+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFCB0E755C94004FB565 /* GTMNSDictionary+URLArguments.m */; }; + 8B82CF0A1D9C1C3B007182AA /* GTMNSFileManager+Path.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047850DAE928A00C2D1CA /* GTMNSFileManager+Path.m */; }; + 8B82CF0B1D9C1C3B007182AA /* GTMNSFileHandle+UniqueName.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B2908B011F8E7070064F50F /* GTMNSFileHandle+UniqueName.m */; }; + 8B82CF0C1D9C1C3B007182AA /* GTMNSNumber+64Bit.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3080701056BDCE006C4C7A /* GTMNSNumber+64Bit.m */; }; + 8B82CF0D1D9C1C3B007182AA /* GTMNSObject+KeyValueObserving.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6C18720F3769D200E51E5D /* GTMNSObject+KeyValueObserving.m */; }; + 8B82CF0E1D9C1C3B007182AA /* GTMNSScanner+JSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD35C900FB234E1009058F5 /* GTMNSScanner+JSON.m */; }; + 8B82CF0F1D9C1C3B007182AA /* GTMNSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047880DAE928A00C2D1CA /* GTMNSString+HTML.m */; }; + 8B82CF101D9C1C3B007182AA /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3AA8F10E032FC7007E31B5 /* GTMNSString+URLArguments.m */; }; + 8B82CF111D9C1C3B007182AA /* GTMNSString+XML.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0478B0DAE928A00C2D1CA /* GTMNSString+XML.m */; }; + 8B82CF121D9C1C3B007182AA /* GTMNSThread+Blocks.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6FF392151A664600B0642B /* GTMNSThread+Blocks.m */; }; + 8B82CF131D9C1C3B007182AA /* GTMRegex.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047920DAE928A00C2D1CA /* GTMRegex.m */; }; + 8B82CF141D9C1C3B007182AA /* GTMStackTrace.m in Sources */ = {isa = PBXBuildFile; fileRef = F4EF8AD50EBFF814008DD6DA /* GTMStackTrace.m */; }; + 8B82CF151D9C1C3B007182AA /* GTMSystemVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC04A740DAF145200C2D1CA /* GTMSystemVersion.m */; }; + 8B82CF161D9C1C3B007182AA /* GTMURLBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9B793E14FE99F3004A993A /* GTMURLBuilder.m */; }; + 8B82CF171D9C1C3B007182AA /* GTMUILocalizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 169E1E2B1459AAE100E6F562 /* GTMUILocalizer.m */; }; + 8B82CF181D9C1C3B007182AA /* GTMFadeTruncatingLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9340CF9D140550CE0026DDC9 /* GTMFadeTruncatingLabel.m */; }; + 8B82CF191D9C1C3B007182AA /* GTMUIFont+LineHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E3B3D70EB5EF2400CB713D /* GTMUIFont+LineHeight.m */; }; + 8B82CF1A1D9C1C3B007182AA /* GTMUIImage+Resize.m in Sources */ = {isa = PBXBuildFile; fileRef = 64D0F5C70FD3E65C00506CC7 /* GTMUIImage+Resize.m */; }; + 8B82CF1C1D9C1C3B007182AA /* GTMFoundationUnitTestingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6FF399151A670100B0642B /* GTMFoundationUnitTestingUtilities.m */; }; + 8B82CF2C1D9C1CC5007182AA /* GTMStringEncodingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BBC768A10FEF61D0006FABE /* GTMStringEncodingTest.m */; }; + 8B82CF2E1D9C1DD4007182AA /* libGTM.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B82CEF61D9C17DE007182AA /* libGTM.a */; }; + 8B82CF2F1D9C1E49007182AA /* GTMSenTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047F70DAE928A00C2D1CA /* GTMSenTestCase.m */; }; + 8B82CF301D9C22F7007182AA /* GTMABAddressBook.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8BFE15C20FB0F764001BE894 /* GTMABAddressBook.strings */; }; + 8B82CF311D9C22F7007182AA /* GTMABAddressBookTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BFE15C30FB0F764001BE894 /* GTMABAddressBookTest.m */; }; + 8B82CF321D9C2309007182AA /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B5A9E1F0E71CB6C005DA441 /* AddressBook.framework */; }; + 8B82CF331D9C231A007182AA /* phone.png in Resources */ = {isa = PBXBuildFile; fileRef = 8BFE15C50FB0F764001BE894 /* phone.png */; }; + 8B82CF341D9C231F007182AA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; + 8B82CF351D9C2353007182AA /* GTMMethodCheckTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0479E0DAE928A00C2D1CA /* GTMMethodCheckTest.m */; }; + 8B82CF361D9C2373007182AA /* GTMGeometryUtilsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F439ADEF0DBD3C4000BE9B91 /* GTMGeometryUtilsTest.m */; }; + 8B82CF371D9C2373007182AA /* GTMLightweightProxyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F41711590ECDFF0400B9B276 /* GTMLightweightProxyTest.m */; }; + 8B82CF381D9C2373007182AA /* GTMLoggerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFA40E7559C7004FB565 /* GTMLoggerTest.m */; }; + 8B82CF391D9C2373007182AA /* GTMLoggerRingBufferWriterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFB30E755B4D004FB565 /* GTMLoggerRingBufferWriterTest.m */; }; + 8B82CF3A1D9C2373007182AA /* GTMNSArray+MergeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 629446190EDE177A009295EA /* GTMNSArray+MergeTest.m */; }; + 8B82CF3B1D9C2373007182AA /* GTMNSData+zlibTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047800DAE928A00C2D1CA /* GTMNSData+zlibTest.m */; }; + 8B82CF3C1D9C2373007182AA /* GTMNSDictionary+URLArgumentsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFCC0E755C94004FB565 /* GTMNSDictionary+URLArgumentsTest.m */; }; + 8B82CF3D1D9C2373007182AA /* GTMNSFileManager+PathTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047860DAE928A00C2D1CA /* GTMNSFileManager+PathTest.m */; }; + 8B82CF3E1D9C2373007182AA /* GTMNSFileHandle+UniqueNameTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B2908B111F8E7070064F50F /* GTMNSFileHandle+UniqueNameTest.m */; }; + 8B82CF3F1D9C2373007182AA /* GTMNSNumber+64BitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3080711056BDCE006C4C7A /* GTMNSNumber+64BitTest.m */; }; + 8B82CF401D9C2373007182AA /* GTMNSObject+KeyValueObservingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6C18730F3769D200E51E5D /* GTMNSObject+KeyValueObservingTest.m */; }; + 8B82CF411D9C2373007182AA /* GTMNSScanner+JSONTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD35C910FB234E1009058F5 /* GTMNSScanner+JSONTest.m */; }; + 8B82CF421D9C2373007182AA /* GTMNSString+HTMLTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047890DAE928A00C2D1CA /* GTMNSString+HTMLTest.m */; }; + 8B82CF431D9C2373007182AA /* GTMNSString+URLArgumentsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3AA8F20E032FC7007E31B5 /* GTMNSString+URLArgumentsTest.m */; }; + 8B82CF441D9C2373007182AA /* GTMNSString+XMLTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0478C0DAE928A00C2D1CA /* GTMNSString+XMLTest.m */; }; + 8B82CF451D9C2373007182AA /* GTMNSThread+BlocksTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6FF393151A664600B0642B /* GTMNSThread+BlocksTest.m */; }; + 8B82CF461D9C2373007182AA /* GTMRegexTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047930DAE928A00C2D1CA /* GTMRegexTest.m */; }; + 8B82CF471D9C2373007182AA /* GTMStackTraceTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F4EF8AD60EBFF814008DD6DA /* GTMStackTraceTest.m */; }; + 8B82CF481D9C2373007182AA /* GTMSystemVersionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC04A710DAF144700C2D1CA /* GTMSystemVersionTest.m */; }; + 8B82CF491D9C2373007182AA /* GTMURLBuilderTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9B793F14FE99F3004A993A /* GTMURLBuilderTest.m */; }; + 8B82CF4A1D9C2373007182AA /* GTMUILocalizerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 169E1E2D1459AAE100E6F562 /* GTMUILocalizerTest.m */; }; + 8B82CF4B1D9C2373007182AA /* GTMUILocalizerTest.xib in Resources */ = {isa = PBXBuildFile; fileRef = 169E1E2E1459AAE100E6F562 /* GTMUILocalizerTest.xib */; }; + 8B82CF4C1D9C2385007182AA /* GTMFadeTruncatingLabelTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 9340CF9E140550CE0026DDC9 /* GTMFadeTruncatingLabelTest.m */; }; + 8B82CF4D1D9C2385007182AA /* GTMUIFont+LineHeightTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E3B3E10EB5EF9A00CB713D /* GTMUIFont+LineHeightTest.m */; }; + 8B82CF4E1D9C2385007182AA /* GTMUIImage+ResizeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 64D0F5C60FD3E65C00506CC7 /* GTMUIImage+ResizeTest.m */; }; + 8B82CF501D9C2385007182AA /* GTMSenTestCaseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F4746720129703600022C1FB /* GTMSenTestCaseTest.m */; }; + 8B82CF511D9C239A007182AA /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23220A05152C9E980060CB7D /* Security.framework */; }; + 8B82CF521D9C239A007182AA /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */; }; + 8B82CF591D9C25E0007182AA /* GTMUIImage+Resize_100x100.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5DB0FD3E68400506CC7 /* GTMUIImage+Resize_100x100.png */; }; + 8B82CF5A1D9C25E0007182AA /* GTMUIImage+Resize_100x50.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D40FD3E68400506CC7 /* GTMUIImage+Resize_100x50.png */; }; + 8B82CF5B1D9C25E0007182AA /* GTMUIImage+Resize_50x100.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5CD0FD3E68400506CC7 /* GTMUIImage+Resize_50x100.png */; }; + 8B82CF661D9C3366007182AA /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B82CEEE1D9C1559007182AA /* XCTest.framework */; }; + 8B82CF671D9C35B8007182AA /* GTMIPhoneUnitTestMain.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047DD0DAE928A00C2D1CA /* GTMIPhoneUnitTestMain.m */; }; + 8B82CF681D9C3689007182AA /* GTMSenTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047F70DAE928A00C2D1CA /* GTMSenTestCase.m */; }; + 8BF753DB1D9DB3080010A295 /* GTMSQLite.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF753DA1D9DB3080010A295 /* GTMSQLite.m */; }; + 8BF753DD1D9DB30E0010A295 /* GTMSQLiteTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF753DC1D9DB30E0010A295 /* GTMSQLiteTest.m */; }; + 8BF753DF1D9DB3740010A295 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BF753DE1D9DB3740010A295 /* libsqlite3.tbd */; }; 8BFE15C70FB0F764001BE894 /* GTMABAddressBook.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8BFE15C20FB0F764001BE894 /* GTMABAddressBook.strings */; }; - 8BFE15C80FB0F764001BE894 /* GTMABAddressBookTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BFE15C30FB0F764001BE894 /* GTMABAddressBookTest.m */; }; 8BFE15C90FB0F764001BE894 /* phone.png in Resources */ = {isa = PBXBuildFile; fileRef = 8BFE15C50FB0F764001BE894 /* phone.png */; }; - 8BFFCD7811C1934900E45777 /* GTMNSObject+KeyValueObservingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6C18730F3769D200E51E5D /* GTMNSObject+KeyValueObservingTest.m */; }; - 9340CF9F140550CE0026DDC9 /* GTMFadeTruncatingLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9340CF9D140550CE0026DDC9 /* GTMFadeTruncatingLabel.m */; }; - 9340CFA0140550CE0026DDC9 /* GTMFadeTruncatingLabelTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 9340CF9E140550CE0026DDC9 /* GTMFadeTruncatingLabelTest.m */; }; - 9340CFA6140550E30026DDC9 /* GTMFadeTruncatingLabelTest1.png in Resources */ = {isa = PBXBuildFile; fileRef = 9340CFA1140550E30026DDC9 /* GTMFadeTruncatingLabelTest1.png */; }; - 9340CFA7140550E30026DDC9 /* GTMFadeTruncatingLabelTest2.png in Resources */ = {isa = PBXBuildFile; fileRef = 9340CFA2140550E30026DDC9 /* GTMFadeTruncatingLabelTest2.png */; }; - 9340CFA8140550E30026DDC9 /* GTMFadeTruncatingLabelTest3.png in Resources */ = {isa = PBXBuildFile; fileRef = 9340CFA3140550E30026DDC9 /* GTMFadeTruncatingLabelTest3.png */; }; - 9340CFA9140550E30026DDC9 /* GTMFadeTruncatingLabelTest4.png in Resources */ = {isa = PBXBuildFile; fileRef = 9340CFA4140550E30026DDC9 /* GTMFadeTruncatingLabelTest4.png */; }; - 9340CFAA140550E30026DDC9 /* GTMFadeTruncatingLabelTest5.png in Resources */ = {isa = PBXBuildFile; fileRef = 9340CFA5140550E30026DDC9 /* GTMFadeTruncatingLabelTest5.png */; }; - BE9B794114FE9A2C004A993A /* GTMURLBuilderTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9B793F14FE99F3004A993A /* GTMURLBuilderTest.m */; }; - BE9B794214FE9A2E004A993A /* GTMURLBuilderTest.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9B793F14FE99F3004A993A /* GTMURLBuilderTest.m */; }; - BE9B794314FE9A3E004A993A /* GTMURLBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9B793E14FE99F3004A993A /* GTMURLBuilder.m */; }; - BE9B794414FE9A3E004A993A /* GTMURLBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = BE9B793E14FE99F3004A993A /* GTMURLBuilder.m */; }; - F417115A0ECDFF0400B9B276 /* GTMLightweightProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = F41711580ECDFF0400B9B276 /* GTMLightweightProxy.m */; }; - F417115B0ECDFF0400B9B276 /* GTMLightweightProxyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F41711590ECDFF0400B9B276 /* GTMLightweightProxyTest.m */; }; - F418AF990E7558EC004FB565 /* GTMExceptionalInlines.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AF940E7558DC004FB565 /* GTMExceptionalInlines.m */; }; - F418AF9A0E7558EC004FB565 /* GTMExceptionalInlinesTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AF950E7558DC004FB565 /* GTMExceptionalInlinesTest.m */; }; - F418AFA50E7559C7004FB565 /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFA30E7559C7004FB565 /* GTMLogger.m */; }; - F418AFA60E7559C7004FB565 /* GTMLoggerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFA40E7559C7004FB565 /* GTMLoggerTest.m */; }; - F418AFB40E755B4D004FB565 /* GTMLoggerRingBufferWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFB20E755B4D004FB565 /* GTMLoggerRingBufferWriter.m */; }; - F418AFB50E755B4D004FB565 /* GTMLoggerRingBufferWriterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFB30E755B4D004FB565 /* GTMLoggerRingBufferWriterTest.m */; }; - F418AFCD0E755C94004FB565 /* GTMNSDictionary+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFCB0E755C94004FB565 /* GTMNSDictionary+URLArguments.m */; }; - F418AFCE0E755C94004FB565 /* GTMNSDictionary+URLArgumentsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFCC0E755C94004FB565 /* GTMNSDictionary+URLArgumentsTest.m */; }; - F418AFD70E755D44004FB565 /* GTMPath.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFD50E755D44004FB565 /* GTMPath.m */; }; - F418AFD80E755D44004FB565 /* GTMPathTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFD60E755D44004FB565 /* GTMPathTest.m */; }; - F439ADF00DBD3C4000BE9B91 /* GTMGeometryUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F439ADEE0DBD3C4000BE9B91 /* GTMGeometryUtils.m */; }; - F439ADF10DBD3C4000BE9B91 /* GTMGeometryUtilsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F439ADEF0DBD3C4000BE9B91 /* GTMGeometryUtilsTest.m */; }; - F45F27B014F41441003A91E6 /* GTMFadeTruncatingLabelTest1.5.png in Resources */ = {isa = PBXBuildFile; fileRef = F45F27AB14F41441003A91E6 /* GTMFadeTruncatingLabelTest1.5.png */; }; - F45F27B114F41441003A91E6 /* GTMFadeTruncatingLabelTest1.5.png in Resources */ = {isa = PBXBuildFile; fileRef = F45F27AB14F41441003A91E6 /* GTMFadeTruncatingLabelTest1.5.png */; }; - F45F27B214F41441003A91E6 /* GTMFadeTruncatingLabelTest2.5.png in Resources */ = {isa = PBXBuildFile; fileRef = F45F27AC14F41441003A91E6 /* GTMFadeTruncatingLabelTest2.5.png */; }; - F45F27B314F41441003A91E6 /* GTMFadeTruncatingLabelTest2.5.png in Resources */ = {isa = PBXBuildFile; fileRef = F45F27AC14F41441003A91E6 /* GTMFadeTruncatingLabelTest2.5.png */; }; - F45F27B414F41441003A91E6 /* GTMFadeTruncatingLabelTest3.5.png in Resources */ = {isa = PBXBuildFile; fileRef = F45F27AD14F41441003A91E6 /* GTMFadeTruncatingLabelTest3.5.png */; }; - F45F27B514F41441003A91E6 /* GTMFadeTruncatingLabelTest3.5.png in Resources */ = {isa = PBXBuildFile; fileRef = F45F27AD14F41441003A91E6 /* GTMFadeTruncatingLabelTest3.5.png */; }; - F45F27B614F41441003A91E6 /* GTMFadeTruncatingLabelTest4.5.png in Resources */ = {isa = PBXBuildFile; fileRef = F45F27AE14F41441003A91E6 /* GTMFadeTruncatingLabelTest4.5.png */; }; - F45F27B714F41441003A91E6 /* GTMFadeTruncatingLabelTest4.5.png in Resources */ = {isa = PBXBuildFile; fileRef = F45F27AE14F41441003A91E6 /* GTMFadeTruncatingLabelTest4.5.png */; }; - F45F27B814F41441003A91E6 /* GTMFadeTruncatingLabelTest5.5.png in Resources */ = {isa = PBXBuildFile; fileRef = F45F27AF14F41441003A91E6 /* GTMFadeTruncatingLabelTest5.5.png */; }; - F45F27B914F41441003A91E6 /* GTMFadeTruncatingLabelTest5.5.png in Resources */ = {isa = PBXBuildFile; fileRef = F45F27AF14F41441003A91E6 /* GTMFadeTruncatingLabelTest5.5.png */; }; F4746721129703600022C1FB /* GTMSenTestCaseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F4746720129703600022C1FB /* GTMSenTestCaseTest.m */; }; - F4C35E70164EB3A300688B6E /* GTMFadeTruncatingLabelTest1.6.png in Resources */ = {isa = PBXBuildFile; fileRef = F4C35E6B164EB39F00688B6E /* GTMFadeTruncatingLabelTest1.6.png */; }; - F4C35E71164EB3A300688B6E /* GTMFadeTruncatingLabelTest1.6.png in Resources */ = {isa = PBXBuildFile; fileRef = F4C35E6B164EB39F00688B6E /* GTMFadeTruncatingLabelTest1.6.png */; }; - F4C35E72164EB3A300688B6E /* GTMFadeTruncatingLabelTest2.6.png in Resources */ = {isa = PBXBuildFile; fileRef = F4C35E6C164EB39F00688B6E /* GTMFadeTruncatingLabelTest2.6.png */; }; - F4C35E73164EB3A300688B6E /* GTMFadeTruncatingLabelTest2.6.png in Resources */ = {isa = PBXBuildFile; fileRef = F4C35E6C164EB39F00688B6E /* GTMFadeTruncatingLabelTest2.6.png */; }; - F4C35E74164EB3A300688B6E /* GTMFadeTruncatingLabelTest3.6.png in Resources */ = {isa = PBXBuildFile; fileRef = F4C35E6D164EB3A000688B6E /* GTMFadeTruncatingLabelTest3.6.png */; }; - F4C35E75164EB3A300688B6E /* GTMFadeTruncatingLabelTest3.6.png in Resources */ = {isa = PBXBuildFile; fileRef = F4C35E6D164EB3A000688B6E /* GTMFadeTruncatingLabelTest3.6.png */; }; - F4C35E76164EB3A300688B6E /* GTMFadeTruncatingLabelTest4.6.png in Resources */ = {isa = PBXBuildFile; fileRef = F4C35E6E164EB3A100688B6E /* GTMFadeTruncatingLabelTest4.6.png */; }; - F4C35E77164EB3A300688B6E /* GTMFadeTruncatingLabelTest4.6.png in Resources */ = {isa = PBXBuildFile; fileRef = F4C35E6E164EB3A100688B6E /* GTMFadeTruncatingLabelTest4.6.png */; }; - F4C35E78164EB3A300688B6E /* GTMFadeTruncatingLabelTest5.6.png in Resources */ = {isa = PBXBuildFile; fileRef = F4C35E6F164EB3A100688B6E /* GTMFadeTruncatingLabelTest5.6.png */; }; - F4C35E79164EB3A300688B6E /* GTMFadeTruncatingLabelTest5.6.png in Resources */ = {isa = PBXBuildFile; fileRef = F4C35E6F164EB3A100688B6E /* GTMFadeTruncatingLabelTest5.6.png */; }; - F4D20EB114852CA40001600C /* GTMABAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BFE15C10FB0F764001BE894 /* GTMABAddressBook.m */; }; - F4D20EB214852CA40001600C /* GTMABAddressBook.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8BFE15C20FB0F764001BE894 /* GTMABAddressBook.strings */; }; - F4D20EB314852CA40001600C /* GTMABAddressBookTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BFE15C30FB0F764001BE894 /* GTMABAddressBookTest.m */; }; - F4D20EB414852CA40001600C /* GTMCALayer+UnitTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047A10DAE928A00C2D1CA /* GTMCALayer+UnitTesting.m */; }; - F4D20EB514852CA40001600C /* GTMCalculatedRange.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047780DAE928A00C2D1CA /* GTMCalculatedRange.m */; }; - F4D20EB614852CA40001600C /* GTMCalculatedRangeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047790DAE928A00C2D1CA /* GTMCalculatedRangeTest.m */; }; - F4D20EB714852CA40001600C /* GTMDebugThreadValidation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE839870E89C74A00C611B0 /* GTMDebugThreadValidation.m */; }; - F4D20EB814852CA40001600C /* GTMDebugThreadValidationTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BE83A650E8B059A00C611B0 /* GTMDebugThreadValidationTest.m */; }; - F4D20EB914852CA40001600C /* GTMDevLogUnitTestingBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCEA90DFF4C760017E983 /* GTMDevLogUnitTestingBridge.m */; }; - F4D20EBA14852CA40001600C /* GTMExceptionalInlines.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AF940E7558DC004FB565 /* GTMExceptionalInlines.m */; }; - F4D20EBB14852CA40001600C /* GTMExceptionalInlinesTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AF950E7558DC004FB565 /* GTMExceptionalInlinesTest.m */; }; - F4D20EBC14852CA40001600C /* GTMFadeTruncatingLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9340CF9D140550CE0026DDC9 /* GTMFadeTruncatingLabel.m */; }; - F4D20EBD14852CA40001600C /* GTMFadeTruncatingLabelTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 9340CF9E140550CE0026DDC9 /* GTMFadeTruncatingLabelTest.m */; }; - F4D20EBE14852CA40001600C /* GTMFadeTruncatingLabelTest1.png in Resources */ = {isa = PBXBuildFile; fileRef = 9340CFA1140550E30026DDC9 /* GTMFadeTruncatingLabelTest1.png */; }; - F4D20EBF14852CA40001600C /* GTMFadeTruncatingLabelTest2.png in Resources */ = {isa = PBXBuildFile; fileRef = 9340CFA2140550E30026DDC9 /* GTMFadeTruncatingLabelTest2.png */; }; - F4D20EC014852CA40001600C /* GTMFadeTruncatingLabelTest3.png in Resources */ = {isa = PBXBuildFile; fileRef = 9340CFA3140550E30026DDC9 /* GTMFadeTruncatingLabelTest3.png */; }; - F4D20EC114852CA40001600C /* GTMFadeTruncatingLabelTest4.png in Resources */ = {isa = PBXBuildFile; fileRef = 9340CFA4140550E30026DDC9 /* GTMFadeTruncatingLabelTest4.png */; }; - F4D20EC214852CA40001600C /* GTMFadeTruncatingLabelTest5.png in Resources */ = {isa = PBXBuildFile; fileRef = 9340CFA5140550E30026DDC9 /* GTMFadeTruncatingLabelTest5.png */; }; - F4D20EC314852CA40001600C /* GTMGeometryUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = F439ADEE0DBD3C4000BE9B91 /* GTMGeometryUtils.m */; }; - F4D20EC414852CA40001600C /* GTMGeometryUtilsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F439ADEF0DBD3C4000BE9B91 /* GTMGeometryUtilsTest.m */; }; - F4D20EC514852CA40001600C /* GTMGoogleSearch.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BB78FA711B94D9500AB31AF /* GTMGoogleSearch.m */; }; - F4D20EC614852CA40001600C /* GTMGoogleSearchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BB78FA811B94D9500AB31AF /* GTMGoogleSearchTest.m */; }; - F4D20EC914852CA40001600C /* GTMLightweightProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = F41711580ECDFF0400B9B276 /* GTMLightweightProxy.m */; }; - F4D20ECA14852CA40001600C /* GTMLightweightProxyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F41711590ECDFF0400B9B276 /* GTMLightweightProxyTest.m */; }; - F4D20ECB14852CA40001600C /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFA30E7559C7004FB565 /* GTMLogger.m */; }; - F4D20ECC14852CA40001600C /* GTMLoggerRingBufferWriter.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFB20E755B4D004FB565 /* GTMLoggerRingBufferWriter.m */; }; - F4D20ECD14852CA40001600C /* GTMLoggerRingBufferWriterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFB30E755B4D004FB565 /* GTMLoggerRingBufferWriterTest.m */; }; - F4D20ECE14852CA40001600C /* GTMLoggerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFA40E7559C7004FB565 /* GTMLoggerTest.m */; }; - F4D20ECF14852CA40001600C /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0479D0DAE928A00C2D1CA /* GTMMethodCheck.m */; }; - F4D20ED014852CA40001600C /* GTMMethodCheckTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0479E0DAE928A00C2D1CA /* GTMMethodCheckTest.m */; }; - F4D20ED114852CA40001600C /* GTMNSArray+Merge.m in Sources */ = {isa = PBXBuildFile; fileRef = 629446180EDE177A009295EA /* GTMNSArray+Merge.m */; }; - F4D20ED214852CA40001600C /* GTMNSArray+MergeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 629446190EDE177A009295EA /* GTMNSArray+MergeTest.m */; }; - F4D20ED314852CA40001600C /* GTMNSData+zlib.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0477F0DAE928A00C2D1CA /* GTMNSData+zlib.m */; }; - F4D20ED414852CA40001600C /* GTMNSData+zlibTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047800DAE928A00C2D1CA /* GTMNSData+zlibTest.m */; }; - F4D20ED514852CA40001600C /* GTMNSDictionary+CaseInsensitive.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B859D9D104D08050064FE46 /* GTMNSDictionary+CaseInsensitive.m */; }; - F4D20ED614852CA40001600C /* GTMNSDictionary+CaseInsensitiveTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B859D9E104D08050064FE46 /* GTMNSDictionary+CaseInsensitiveTest.m */; }; - F4D20ED714852CA40001600C /* GTMNSDictionary+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFCB0E755C94004FB565 /* GTMNSDictionary+URLArguments.m */; }; - F4D20ED814852CA40001600C /* GTMNSDictionary+URLArgumentsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFCC0E755C94004FB565 /* GTMNSDictionary+URLArgumentsTest.m */; }; - F4D20ED914852CA40001600C /* GTMNSEnumerator+Filter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047820DAE928A00C2D1CA /* GTMNSEnumerator+Filter.m */; }; - F4D20EDA14852CA40001600C /* GTMNSEnumerator+FilterTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047830DAE928A00C2D1CA /* GTMNSEnumerator+FilterTest.m */; }; - F4D20EDB14852CA40001600C /* GTMNSFileHandle+UniqueName.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B2908B011F8E7070064F50F /* GTMNSFileHandle+UniqueName.m */; }; - F4D20EDC14852CA40001600C /* GTMNSFileHandle+UniqueNameTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B2908B111F8E7070064F50F /* GTMNSFileHandle+UniqueNameTest.m */; }; - F4D20EDD14852CA40001600C /* GTMNSFileManager+Path.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047850DAE928A00C2D1CA /* GTMNSFileManager+Path.m */; }; - F4D20EDE14852CA40001600C /* GTMNSFileManager+PathTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047860DAE928A00C2D1CA /* GTMNSFileManager+PathTest.m */; }; - F4D20EDF14852CA40001600C /* GTMNSObject+KeyValueObserving.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6C18720F3769D200E51E5D /* GTMNSObject+KeyValueObserving.m */; }; - F4D20EE014852CA40001600C /* GTMNSObject+KeyValueObservingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B6C18730F3769D200E51E5D /* GTMNSObject+KeyValueObservingTest.m */; }; - F4D20EE114852CA40001600C /* GTMNSObject+UnitTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047ED0DAE928A00C2D1CA /* GTMNSObject+UnitTesting.m */; }; - F4D20EE214852CA40001600C /* GTMNSScanner+JSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD35C900FB234E1009058F5 /* GTMNSScanner+JSON.m */; }; - F4D20EE314852CA40001600C /* GTMNSScanner+JSONTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD35C910FB234E1009058F5 /* GTMNSScanner+JSONTest.m */; }; - F4D20EE414852CA40001600C /* GTMNSScanner+Unsigned.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCB5AAF11C02D7D009B6C40 /* GTMNSScanner+Unsigned.m */; }; - F4D20EE514852CA40001600C /* GTMNSScanner+UnsignedTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCB5AB011C02D7D009B6C40 /* GTMNSScanner+UnsignedTest.m */; }; - F4D20EE614852CA40001600C /* GTMNSString+HTML.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047880DAE928A00C2D1CA /* GTMNSString+HTML.m */; }; - F4D20EE714852CA40001600C /* GTMNSString+HTMLTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047890DAE928A00C2D1CA /* GTMNSString+HTMLTest.m */; }; - F4D20EE814852CA40001600C /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3AA8F10E032FC7007E31B5 /* GTMNSString+URLArguments.m */; }; - F4D20EE914852CA40001600C /* GTMNSString+URLArgumentsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B3AA8F20E032FC7007E31B5 /* GTMNSString+URLArgumentsTest.m */; }; - F4D20EEA14852CA40001600C /* GTMNSString+XML.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0478B0DAE928A00C2D1CA /* GTMNSString+XML.m */; }; - F4D20EEB14852CA40001600C /* GTMNSString+XMLTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC0478C0DAE928A00C2D1CA /* GTMNSString+XMLTest.m */; }; - F4D20EEC14852CA40001600C /* GTMPath.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFD50E755D44004FB565 /* GTMPath.m */; }; - F4D20EED14852CA40001600C /* GTMPathTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F418AFD60E755D44004FB565 /* GTMPathTest.m */; }; - F4D20EEE14852CA40001600C /* GTMRegex.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047920DAE928A00C2D1CA /* GTMRegex.m */; }; - F4D20EEF14852CA40001600C /* GTMRegexTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047930DAE928A00C2D1CA /* GTMRegexTest.m */; }; - F4D20EF014852CA40001600C /* GTMSenTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047F70DAE928A00C2D1CA /* GTMSenTestCase.m */; }; - F4D20EF114852CA40001600C /* GTMSenTestCaseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F4746720129703600022C1FB /* GTMSenTestCaseTest.m */; }; - F4D20EF214852CA40001600C /* GTMStackTrace.m in Sources */ = {isa = PBXBuildFile; fileRef = F4EF8AD50EBFF814008DD6DA /* GTMStackTrace.m */; }; - F4D20EF314852CA40001600C /* GTMStackTraceTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F4EF8AD60EBFF814008DD6DA /* GTMStackTraceTest.m */; }; - F4D20EF414852CA40001600C /* GTMStringEncoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BBC768910FEF61D0006FABE /* GTMStringEncoding.m */; }; - F4D20EF514852CA40001600C /* GTMStringEncodingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BBC768A10FEF61D0006FABE /* GTMStringEncodingTest.m */; }; - F4D20EF614852CA40001600C /* GTMSystemVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC04A740DAF145200C2D1CA /* GTMSystemVersion.m */; }; - F4D20EF714852CA40001600C /* GTMSystemVersionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC04A710DAF144700C2D1CA /* GTMSystemVersionTest.m */; }; - F4D20EF814852CA40001600C /* GTMUIFont+LineHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E3B3D70EB5EF2400CB713D /* GTMUIFont+LineHeight.m */; }; - F4D20EF914852CA40001600C /* GTMUIFont+LineHeightTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E3B3E10EB5EF9A00CB713D /* GTMUIFont+LineHeightTest.m */; }; - F4D20EFA14852CA40001600C /* GTMUIImage+Resize.m in Sources */ = {isa = PBXBuildFile; fileRef = 64D0F5C70FD3E65C00506CC7 /* GTMUIImage+Resize.m */; }; - F4D20EFB14852CA40001600C /* GTMUIImage+Resize_100x100.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5DB0FD3E68400506CC7 /* GTMUIImage+Resize_100x100.png */; }; - F4D20EFC14852CA40001600C /* GTMUIImage+Resize_100x100_to_40x60.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5DC0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_40x60.png */; }; - F4D20EFD14852CA40001600C /* GTMUIImage+Resize_100x100_to_50x50.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5DD0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_50x50.png */; }; - F4D20EFE14852CA40001600C /* GTMUIImage+Resize_100x100_to_60x40.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5CC0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_60x40.png */; }; - F4D20EFF14852CA40001600C /* GTMUIImage+Resize_100x50.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D40FD3E68400506CC7 /* GTMUIImage+Resize_100x50.png */; }; - F4D20F0014852CA40001600C /* GTMUIImage+Resize_100x50_flipped.png in Resources */ = {isa = PBXBuildFile; fileRef = 448D61B111AC1AAD0097ACBC /* GTMUIImage+Resize_100x50_flipped.png */; }; - F4D20F0114852CA40001600C /* GTMUIImage+Resize_100x50_to_40x60_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D50FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_clip.png */; }; - F4D20F0214852CA40001600C /* GTMUIImage+Resize_100x50_to_40x60_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D60FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_noclip.png */; }; - F4D20F0314852CA40001600C /* GTMUIImage+Resize_100x50_to_50x50_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D70FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_clip.png */; }; - F4D20F0414852CA40001600C /* GTMUIImage+Resize_100x50_to_50x50_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D80FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_noclip.png */; }; - F4D20F0514852CA40001600C /* GTMUIImage+Resize_100x50_to_60x40_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D90FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_clip.png */; }; - F4D20F0614852CA40001600C /* GTMUIImage+Resize_100x50_to_60x40_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5DA0FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_noclip.png */; }; - F4D20F0714852CA40001600C /* GTMUIImage+Resize_50x100.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5CD0FD3E68400506CC7 /* GTMUIImage+Resize_50x100.png */; }; - F4D20F0814852CA40001600C /* GTMUIImage+Resize_50x100_flipped.png in Resources */ = {isa = PBXBuildFile; fileRef = 448D61B011AC1AAD0097ACBC /* GTMUIImage+Resize_50x100_flipped.png */; }; - F4D20F0914852CA40001600C /* GTMUIImage+Resize_50x100_to_40x60_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5CE0FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_clip.png */; }; - F4D20F0A14852CA40001600C /* GTMUIImage+Resize_50x100_to_40x60_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5CF0FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_noclip.png */; }; - F4D20F0B14852CA40001600C /* GTMUIImage+Resize_50x100_to_50x50_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D00FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_clip.png */; }; - F4D20F0C14852CA40001600C /* GTMUIImage+Resize_50x100_to_50x50_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D10FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_noclip.png */; }; - F4D20F0D14852CA40001600C /* GTMUIImage+Resize_50x100_to_60x40_clip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D20FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_clip.png */; }; - F4D20F0E14852CA40001600C /* GTMUIImage+Resize_50x100_to_60x40_noclip.png in Resources */ = {isa = PBXBuildFile; fileRef = 64D0F5D30FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_noclip.png */; }; - F4D20F0F14852CA40001600C /* GTMUIImage+ResizeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 64D0F5C60FD3E65C00506CC7 /* GTMUIImage+ResizeTest.m */; }; - F4D20F1014852CA40001600C /* GTMUIKit+UnitTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B5547C70DB3BBF20014CC1C /* GTMUIKit+UnitTesting.m */; }; - F4D20F1114852CA40001600C /* GTMUIKit+UnitTestingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B5547C90DB3BBF20014CC1C /* GTMUIKit+UnitTestingTest.m */; }; - F4D20F1214852CA40001600C /* GTMUILocalizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 169E1E2B1459AAE100E6F562 /* GTMUILocalizer.m */; }; - F4D20F1314852CA40001600C /* GTMUILocalizerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 169E1E2D1459AAE100E6F562 /* GTMUILocalizerTest.m */; }; - F4D20F1414852CA40001600C /* GTMUILocalizerTest.xib in Resources */ = {isa = PBXBuildFile; fileRef = 169E1E2E1459AAE100E6F562 /* GTMUILocalizerTest.xib */; }; - F4D20F1514852CA40001600C /* GTMUIView+SubtreeDescription.m in Sources */ = {isa = PBXBuildFile; fileRef = 13C1ED4C104896C900907CD8 /* GTMUIView+SubtreeDescription.m */; }; - F4D20F1614852CA40001600C /* GTMUIView+SubtreeDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 13C1ED4D104896C900907CD8 /* GTMUIView+SubtreeDescriptionTest.m */; }; - F4D20F1714852CA40001600C /* GTMUIViewUnitTestingTest.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 8BC048000DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.gtmUTState */; }; - F4D20F1814852CA40001600C /* GTMUIViewUnitTestingTest.png in Resources */ = {isa = PBXBuildFile; fileRef = 8BC048010DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.png */; }; - F4D20F1914852CA40001600C /* GTMUnitTestDevLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B7DCEAC0DFF4CA60017E983 /* GTMUnitTestDevLog.m */; }; - F4D20F1A14852CA40001600C /* GTMValidatingContainers.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B41EC0D0E0711D40040CF9F /* GTMValidatingContainers.m */; }; - F4D20F1B14852CA40001600C /* GTMValidatingContainersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B41EC0C0E0711D40040CF9F /* GTMValidatingContainersTest.m */; }; - F4D20F1C14852CA40001600C /* phone.png in Resources */ = {isa = PBXBuildFile; fileRef = 8BFE15C50FB0F764001BE894 /* phone.png */; }; - F4D20F2114852D130001600C /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B3AA9330E0336AC007E31B5 /* CFNetwork.framework */; }; - F4D20F2214852D130001600C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */; }; - F4D20F2314852D130001600C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; - F4D20F2414852D130001600C /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B308BCD0DAD0B8400183556 /* QuartzCore.framework */; }; - F4D20F2514852D130001600C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - F4D20F2614852D130001600C /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BC04D470DB0088500C2D1CA /* libz.dylib */; }; - F4D20F4E148532D50001600C /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B5A9E1F0E71CB6C005DA441 /* AddressBook.framework */; }; - F4E3B3D80EB5EF2400CB713D /* GTMUIFont+LineHeight.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E3B3D70EB5EF2400CB713D /* GTMUIFont+LineHeight.m */; }; - F4E3B3E20EB5EF9A00CB713D /* GTMUIFont+LineHeightTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F4E3B3E10EB5EF9A00CB713D /* GTMUIFont+LineHeightTest.m */; }; - F4E4E1151485378B00C2E584 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4E4E1141485378B00C2E584 /* SenTestingKit.framework */; }; - F4EF8AD70EBFF814008DD6DA /* GTMStackTrace.m in Sources */ = {isa = PBXBuildFile; fileRef = F4EF8AD50EBFF814008DD6DA /* GTMStackTrace.m */; }; - F4EF8AD80EBFF814008DD6DA /* GTMStackTraceTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F4EF8AD60EBFF814008DD6DA /* GTMStackTraceTest.m */; }; - F4F1D87814853D8F00E05BB6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - F4F1D88814853E0A00E05BB6 /* GTMIPhoneUnitTestMain.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC047DD0DAE928A00C2D1CA /* GTMIPhoneUnitTestMain.m */; }; - F4F1D88E14853E6100E05BB6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - F4C7F9C30DC62ECD009BEE5B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1D6058900D05DD3D006BFB54; - remoteInfo = GTMiPhoneUnitTesting; - }; - F4D20F1D14852CAB0001600C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = F4D20EA914852BFB0001600C; - remoteInfo = GTMiPhoneUnitTestingOCUnit; - }; - F4F1D88914853E0F00E05BB6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = F4F1D80714853D8F00E05BB6; - remoteInfo = GTMiPhoneUnitTestingOCUnitTestRig; +/* Begin PBXCopyFilesBuildPhase section */ + 8B82CEF41D9C17DE007182AA /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; }; -/* End PBXContainerItemProxy section */ +/* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0B859D9C104D08050064FE46 /* GTMNSDictionary+CaseInsensitive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSDictionary+CaseInsensitive.h"; sourceTree = "<group>"; }; - 0B859D9D104D08050064FE46 /* GTMNSDictionary+CaseInsensitive.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSDictionary+CaseInsensitive.m"; sourceTree = "<group>"; }; - 0B859D9E104D08050064FE46 /* GTMNSDictionary+CaseInsensitiveTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSDictionary+CaseInsensitiveTest.m"; sourceTree = "<group>"; }; 0BBC768810FEF61D0006FABE /* GTMStringEncoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMStringEncoding.h; path = Foundation/GTMStringEncoding.h; sourceTree = SOURCE_ROOT; }; 0BBC768910FEF61D0006FABE /* GTMStringEncoding.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GTMStringEncoding.m; path = Foundation/GTMStringEncoding.m; sourceTree = SOURCE_ROOT; }; 0BBC768A10FEF61D0006FABE /* GTMStringEncodingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GTMStringEncodingTest.m; path = Foundation/GTMStringEncodingTest.m; sourceTree = SOURCE_ROOT; }; - 13C1ED4C104896C900907CD8 /* GTMUIView+SubtreeDescription.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMUIView+SubtreeDescription.m"; sourceTree = "<group>"; }; - 13C1ED4D104896C900907CD8 /* GTMUIView+SubtreeDescriptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMUIView+SubtreeDescriptionTest.m"; sourceTree = "<group>"; }; - 13C1ED4E104896C900907CD8 /* GTMUIView+SubtreeDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMUIView+SubtreeDescription.h"; sourceTree = "<group>"; }; 169E1E2A1459AAE100E6F562 /* GTMUILocalizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMUILocalizer.h; sourceTree = "<group>"; }; 169E1E2B1459AAE100E6F562 /* GTMUILocalizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMUILocalizer.m; sourceTree = "<group>"; }; 169E1E2C1459AAE100E6F562 /* GTMUILocalizerTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMUILocalizerTest.h; sourceTree = "<group>"; }; @@ -334,39 +124,24 @@ 1D6058910D05DD3D006BFB54 /* GTMiPhoneTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GTMiPhoneTest.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 23220A05152C9E980060CB7D /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; - 234E17DB152CECFB00CF3542 /* GTMIPhoneSecurityLibraryTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMIPhoneSecurityLibraryTest.m; sourceTree = "<group>"; }; - 32CA4F630368D1EE00C91783 /* GTM_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTM_Prefix.pch; sourceTree = "<group>"; }; - 448D61B011AC1AAD0097ACBC /* GTMUIImage+Resize_50x100_flipped.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_50x100_flipped.png"; path = "TestData/GTMUIImage+Resize_50x100_flipped.png"; sourceTree = "<group>"; }; - 448D61B111AC1AAD0097ACBC /* GTMUIImage+Resize_100x50_flipped.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x50_flipped.png"; path = "TestData/GTMUIImage+Resize_100x50_flipped.png"; sourceTree = "<group>"; }; 629446170EDE177A009295EA /* GTMNSArray+Merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSArray+Merge.h"; sourceTree = "<group>"; }; 629446180EDE177A009295EA /* GTMNSArray+Merge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSArray+Merge.m"; sourceTree = "<group>"; }; 629446190EDE177A009295EA /* GTMNSArray+MergeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSArray+MergeTest.m"; sourceTree = "<group>"; }; 64D0F5C50FD3E65C00506CC7 /* GTMUIImage+Resize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMUIImage+Resize.h"; sourceTree = "<group>"; }; 64D0F5C60FD3E65C00506CC7 /* GTMUIImage+ResizeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMUIImage+ResizeTest.m"; sourceTree = "<group>"; }; 64D0F5C70FD3E65C00506CC7 /* GTMUIImage+Resize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMUIImage+Resize.m"; sourceTree = "<group>"; }; - 64D0F5CC0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_60x40.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x100_to_60x40.png"; path = "TestData/GTMUIImage+Resize_100x100_to_60x40.png"; sourceTree = "<group>"; }; 64D0F5CD0FD3E68400506CC7 /* GTMUIImage+Resize_50x100.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_50x100.png"; path = "TestData/GTMUIImage+Resize_50x100.png"; sourceTree = "<group>"; }; - 64D0F5CE0FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_clip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_50x100_to_40x60_clip.png"; path = "TestData/GTMUIImage+Resize_50x100_to_40x60_clip.png"; sourceTree = "<group>"; }; - 64D0F5CF0FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_noclip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_50x100_to_40x60_noclip.png"; path = "TestData/GTMUIImage+Resize_50x100_to_40x60_noclip.png"; sourceTree = "<group>"; }; - 64D0F5D00FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_clip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_50x100_to_50x50_clip.png"; path = "TestData/GTMUIImage+Resize_50x100_to_50x50_clip.png"; sourceTree = "<group>"; }; - 64D0F5D10FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_noclip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_50x100_to_50x50_noclip.png"; path = "TestData/GTMUIImage+Resize_50x100_to_50x50_noclip.png"; sourceTree = "<group>"; }; - 64D0F5D20FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_clip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_50x100_to_60x40_clip.png"; path = "TestData/GTMUIImage+Resize_50x100_to_60x40_clip.png"; sourceTree = "<group>"; }; - 64D0F5D30FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_noclip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_50x100_to_60x40_noclip.png"; path = "TestData/GTMUIImage+Resize_50x100_to_60x40_noclip.png"; sourceTree = "<group>"; }; 64D0F5D40FD3E68400506CC7 /* GTMUIImage+Resize_100x50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x50.png"; path = "TestData/GTMUIImage+Resize_100x50.png"; sourceTree = "<group>"; }; - 64D0F5D50FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_clip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x50_to_40x60_clip.png"; path = "TestData/GTMUIImage+Resize_100x50_to_40x60_clip.png"; sourceTree = "<group>"; }; - 64D0F5D60FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_noclip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x50_to_40x60_noclip.png"; path = "TestData/GTMUIImage+Resize_100x50_to_40x60_noclip.png"; sourceTree = "<group>"; }; - 64D0F5D70FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_clip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x50_to_50x50_clip.png"; path = "TestData/GTMUIImage+Resize_100x50_to_50x50_clip.png"; sourceTree = "<group>"; }; - 64D0F5D80FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_noclip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x50_to_50x50_noclip.png"; path = "TestData/GTMUIImage+Resize_100x50_to_50x50_noclip.png"; sourceTree = "<group>"; }; - 64D0F5D90FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_clip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x50_to_60x40_clip.png"; path = "TestData/GTMUIImage+Resize_100x50_to_60x40_clip.png"; sourceTree = "<group>"; }; - 64D0F5DA0FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_noclip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x50_to_60x40_noclip.png"; path = "TestData/GTMUIImage+Resize_100x50_to_60x40_noclip.png"; sourceTree = "<group>"; }; 64D0F5DB0FD3E68400506CC7 /* GTMUIImage+Resize_100x100.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x100.png"; path = "TestData/GTMUIImage+Resize_100x100.png"; sourceTree = "<group>"; }; - 64D0F5DC0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_40x60.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x100_to_40x60.png"; path = "TestData/GTMUIImage+Resize_100x100_to_40x60.png"; sourceTree = "<group>"; }; - 64D0F5DD0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_50x50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "GTMUIImage+Resize_100x100_to_50x50.png"; path = "TestData/GTMUIImage+Resize_100x100_to_50x50.png"; sourceTree = "<group>"; }; 67A7820A0E00927400EBF506 /* GTMIPhoneUnitTestDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMIPhoneUnitTestDelegate.h; sourceTree = "<group>"; }; 67A7820B0E00927400EBF506 /* GTMIPhoneUnitTestDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMIPhoneUnitTestDelegate.m; sourceTree = "<group>"; }; 8B2908AF11F8E7070064F50F /* GTMNSFileHandle+UniqueName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSFileHandle+UniqueName.h"; sourceTree = "<group>"; }; 8B2908B011F8E7070064F50F /* GTMNSFileHandle+UniqueName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSFileHandle+UniqueName.m"; sourceTree = "<group>"; }; 8B2908B111F8E7070064F50F /* GTMNSFileHandle+UniqueNameTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSFileHandle+UniqueNameTest.m"; sourceTree = "<group>"; }; + 8B2C72E31D9EBB540027BD14 /* GTMUnitTestDevLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMUnitTestDevLog.h; sourceTree = "<group>"; }; + 8B2C72E41D9EBB540027BD14 /* GTMUnitTestDevLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMUnitTestDevLog.m; sourceTree = "<group>"; }; + 8B2C72E91D9EBBA10027BD14 /* GTMTestTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMTestTimer.h; sourceTree = "<group>"; }; + 8B2C72EA1D9EBBA10027BD14 /* GTMTestTimerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMTestTimerTest.m; sourceTree = "<group>"; }; 8B30806F1056BDCE006C4C7A /* GTMNSNumber+64Bit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSNumber+64Bit.h"; sourceTree = "<group>"; }; 8B3080701056BDCE006C4C7A /* GTMNSNumber+64Bit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSNumber+64Bit.m"; sourceTree = "<group>"; }; 8B3080711056BDCE006C4C7A /* GTMNSNumber+64BitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSNumber+64BitTest.m"; sourceTree = "<group>"; }; @@ -375,12 +150,6 @@ 8B3AA8F10E032FC7007E31B5 /* GTMNSString+URLArguments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+URLArguments.m"; sourceTree = "<group>"; }; 8B3AA8F20E032FC7007E31B5 /* GTMNSString+URLArgumentsTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+URLArgumentsTest.m"; sourceTree = "<group>"; }; 8B3AA9330E0336AC007E31B5 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; - 8B41EC0C0E0711D40040CF9F /* GTMValidatingContainersTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMValidatingContainersTest.m; sourceTree = "<group>"; }; - 8B41EC0D0E0711D40040CF9F /* GTMValidatingContainers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMValidatingContainers.m; sourceTree = "<group>"; }; - 8B41EC0E0E0711D40040CF9F /* GTMValidatingContainers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMValidatingContainers.h; sourceTree = "<group>"; }; - 8B5547C70DB3BBF20014CC1C /* GTMUIKit+UnitTesting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMUIKit+UnitTesting.m"; sourceTree = "<group>"; }; - 8B5547C80DB3BBF20014CC1C /* GTMUIKit+UnitTesting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMUIKit+UnitTesting.h"; sourceTree = "<group>"; }; - 8B5547C90DB3BBF20014CC1C /* GTMUIKit+UnitTestingTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMUIKit+UnitTestingTest.m"; sourceTree = "<group>"; }; 8B5A9E1F0E71CB6C005DA441 /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; }; 8B6C18710F3769D200E51E5D /* GTMNSObject+KeyValueObserving.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSObject+KeyValueObserving.h"; sourceTree = "<group>"; }; 8B6C18720F3769D200E51E5D /* GTMNSObject+KeyValueObserving.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSObject+KeyValueObserving.m"; sourceTree = "<group>"; }; @@ -390,22 +159,24 @@ 8B6FF393151A664600B0642B /* GTMNSThread+BlocksTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSThread+BlocksTest.m"; sourceTree = "<group>"; }; 8B6FF398151A670100B0642B /* GTMFoundationUnitTestingUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMFoundationUnitTestingUtilities.h; sourceTree = "<group>"; }; 8B6FF399151A670100B0642B /* GTMFoundationUnitTestingUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMFoundationUnitTestingUtilities.m; sourceTree = "<group>"; }; - 8B7DCEA90DFF4C760017E983 /* GTMDevLogUnitTestingBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMDevLogUnitTestingBridge.m; sourceTree = "<group>"; }; - 8B7DCEAB0DFF4CA60017E983 /* GTMUnitTestDevLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMUnitTestDevLog.h; sourceTree = "<group>"; }; - 8B7DCEAC0DFF4CA60017E983 /* GTMUnitTestDevLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMUnitTestDevLog.m; sourceTree = "<group>"; }; - 8BB78FA611B94D9500AB31AF /* GTMGoogleSearch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMGoogleSearch.h; sourceTree = "<group>"; }; - 8BB78FA711B94D9500AB31AF /* GTMGoogleSearch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMGoogleSearch.m; sourceTree = "<group>"; }; - 8BB78FA811B94D9500AB31AF /* GTMGoogleSearchTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMGoogleSearchTest.m; sourceTree = "<group>"; }; + 8B7651D51D9C872C00DB2C59 /* GTMLogger+ASL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "GTMLogger+ASL.h"; sourceTree = "<group>"; }; + 8B7651D61D9C872C00DB2C59 /* GTMLogger+ASL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "GTMLogger+ASL.m"; sourceTree = "<group>"; }; + 8B7651D71D9C872C00DB2C59 /* GTMLogger+ASLTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "GTMLogger+ASLTest.m"; sourceTree = "<group>"; }; + 8B7651DF1D9C89B800DB2C59 /* GTMRoundedRectPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMRoundedRectPath.h; sourceTree = "<group>"; }; + 8B7651E01D9C89B800DB2C59 /* GTMRoundedRectPath.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMRoundedRectPath.m; sourceTree = "<group>"; }; + 8B82CEEE1D9C1559007182AA /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 8B82CEF61D9C17DE007182AA /* libGTM.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libGTM.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 8B82CF221D9C1C7D007182AA /* GTMTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GTMTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 8B82CF531D9C24D9007182AA /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; }; + 8B82CF541D9C24D9007182AA /* General.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = General.xcconfig; sourceTree = "<group>"; }; + 8B82CF551D9C24D9007182AA /* GTMMerge.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = GTMMerge.xcconfig; sourceTree = "<group>"; }; + 8B82CF561D9C24D9007182AA /* iOS.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = iOS.xcconfig; sourceTree = "<group>"; }; + 8B82CF571D9C24D9007182AA /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; }; + 8B82CF581D9C24D9007182AA /* Unittest.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Unittest.xcconfig; sourceTree = "<group>"; }; 8BC047750DAE926E00C2D1CA /* GTMDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = "<group>"; }; - 8BC047770DAE928A00C2D1CA /* GTMCalculatedRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMCalculatedRange.h; sourceTree = "<group>"; }; - 8BC047780DAE928A00C2D1CA /* GTMCalculatedRange.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMCalculatedRange.m; sourceTree = "<group>"; }; - 8BC047790DAE928A00C2D1CA /* GTMCalculatedRangeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMCalculatedRangeTest.m; sourceTree = "<group>"; }; 8BC0477E0DAE928A00C2D1CA /* GTMNSData+zlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSData+zlib.h"; sourceTree = "<group>"; }; 8BC0477F0DAE928A00C2D1CA /* GTMNSData+zlib.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSData+zlib.m"; sourceTree = "<group>"; }; 8BC047800DAE928A00C2D1CA /* GTMNSData+zlibTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSData+zlibTest.m"; sourceTree = "<group>"; }; - 8BC047810DAE928A00C2D1CA /* GTMNSEnumerator+Filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSEnumerator+Filter.h"; sourceTree = "<group>"; }; - 8BC047820DAE928A00C2D1CA /* GTMNSEnumerator+Filter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSEnumerator+Filter.m"; sourceTree = "<group>"; }; - 8BC047830DAE928A00C2D1CA /* GTMNSEnumerator+FilterTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSEnumerator+FilterTest.m"; sourceTree = "<group>"; }; 8BC047840DAE928A00C2D1CA /* GTMNSFileManager+Path.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSFileManager+Path.h"; sourceTree = "<group>"; }; 8BC047850DAE928A00C2D1CA /* GTMNSFileManager+Path.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSFileManager+Path.m"; sourceTree = "<group>"; }; 8BC047860DAE928A00C2D1CA /* GTMNSFileManager+PathTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSFileManager+PathTest.m"; sourceTree = "<group>"; }; @@ -415,7 +186,6 @@ 8BC0478A0DAE928A00C2D1CA /* GTMNSString+XML.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSString+XML.h"; sourceTree = "<group>"; }; 8BC0478B0DAE928A00C2D1CA /* GTMNSString+XML.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+XML.m"; sourceTree = "<group>"; }; 8BC0478C0DAE928A00C2D1CA /* GTMNSString+XMLTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+XMLTest.m"; sourceTree = "<group>"; }; - 8BC0478D0DAE928A00C2D1CA /* GTMObjC2Runtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMObjC2Runtime.h; sourceTree = "<group>"; }; 8BC047900DAE928A00C2D1CA /* GTMObjectSingleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMObjectSingleton.h; sourceTree = "<group>"; }; 8BC047910DAE928A00C2D1CA /* GTMRegex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMRegex.h; sourceTree = "<group>"; }; 8BC047920DAE928A00C2D1CA /* GTMRegex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMRegex.m; sourceTree = "<group>"; }; @@ -424,44 +194,31 @@ 8BC0479C0DAE928A00C2D1CA /* GTMMethodCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMMethodCheck.h; sourceTree = "<group>"; }; 8BC0479D0DAE928A00C2D1CA /* GTMMethodCheck.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMMethodCheck.m; sourceTree = "<group>"; }; 8BC0479E0DAE928A00C2D1CA /* GTMMethodCheckTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMMethodCheckTest.m; sourceTree = "<group>"; }; - 8BC047A00DAE928A00C2D1CA /* GTMCALayer+UnitTesting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMCALayer+UnitTesting.h"; sourceTree = "<group>"; }; - 8BC047A10DAE928A00C2D1CA /* GTMCALayer+UnitTesting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMCALayer+UnitTesting.m"; sourceTree = "<group>"; }; 8BC047DD0DAE928A00C2D1CA /* GTMIPhoneUnitTestMain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMIPhoneUnitTestMain.m; sourceTree = "<group>"; }; - 8BC047EC0DAE928A00C2D1CA /* GTMNSObject+UnitTesting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSObject+UnitTesting.h"; sourceTree = "<group>"; }; - 8BC047ED0DAE928A00C2D1CA /* GTMNSObject+UnitTesting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSObject+UnitTesting.m"; sourceTree = "<group>"; }; 8BC047F60DAE928A00C2D1CA /* GTMSenTestCase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMSenTestCase.h; sourceTree = "<group>"; }; 8BC047F70DAE928A00C2D1CA /* GTMSenTestCase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMSenTestCase.m; sourceTree = "<group>"; }; - 8BC048000DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.gtmUTState */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = GTMUIViewUnitTestingTest.gtmUTState; sourceTree = "<group>"; }; - 8BC048010DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = GTMUIViewUnitTestingTest.png; sourceTree = "<group>"; }; - 8BC0480E0DAE928A00C2D1CA /* RunIPhoneUnitTest.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = RunIPhoneUnitTest.sh; sourceTree = "<group>"; }; 8BC0498F0DAEC59100C2D1CA /* CodeCoverage.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = CodeCoverage.xcconfig; sourceTree = "<group>"; }; 8BC04A6F0DAF144200C2D1CA /* GTMSystemVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMSystemVersion.h; sourceTree = "<group>"; }; 8BC04A710DAF144700C2D1CA /* GTMSystemVersionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMSystemVersionTest.m; sourceTree = "<group>"; }; 8BC04A740DAF145200C2D1CA /* GTMSystemVersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMSystemVersion.m; sourceTree = "<group>"; }; - 8BC04D470DB0088500C2D1CA /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; - 8BCB5AAE11C02D7D009B6C40 /* GTMNSScanner+Unsigned.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSScanner+Unsigned.h"; sourceTree = "<group>"; }; - 8BCB5AAF11C02D7D009B6C40 /* GTMNSScanner+Unsigned.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSScanner+Unsigned.m"; sourceTree = "<group>"; }; - 8BCB5AB011C02D7D009B6C40 /* GTMNSScanner+UnsignedTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSScanner+UnsignedTest.m"; sourceTree = "<group>"; }; 8BD35C8F0FB234E1009058F5 /* GTMNSScanner+JSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSScanner+JSON.h"; sourceTree = "<group>"; }; 8BD35C900FB234E1009058F5 /* GTMNSScanner+JSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSScanner+JSON.m"; sourceTree = "<group>"; }; 8BD35C910FB234E1009058F5 /* GTMNSScanner+JSONTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSScanner+JSONTest.m"; sourceTree = "<group>"; }; 8BE839870E89C74A00C611B0 /* GTMDebugThreadValidation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMDebugThreadValidation.m; sourceTree = "<group>"; }; 8BE839880E89C74A00C611B0 /* GTMDebugThreadValidation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDebugThreadValidation.h; sourceTree = "<group>"; }; - 8BE83A650E8B059A00C611B0 /* GTMDebugThreadValidationTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMDebugThreadValidationTest.m; sourceTree = "<group>"; }; 8BF2568E10F673D1000490C8 /* GTMTypeCasting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMTypeCasting.h; sourceTree = "<group>"; }; + 8BF753D91D9DB3080010A295 /* GTMSQLite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMSQLite.h; sourceTree = "<group>"; }; + 8BF753DA1D9DB3080010A295 /* GTMSQLite.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMSQLite.m; sourceTree = "<group>"; }; + 8BF753DC1D9DB30E0010A295 /* GTMSQLiteTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMSQLiteTest.m; sourceTree = "<group>"; }; + 8BF753DE1D9DB3740010A295 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; 8BFE15C00FB0F764001BE894 /* GTMABAddressBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMABAddressBook.h; sourceTree = "<group>"; }; 8BFE15C10FB0F764001BE894 /* GTMABAddressBook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMABAddressBook.m; sourceTree = "<group>"; }; - 8BFE15C20FB0F764001BE894 /* GTMABAddressBook.strings */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; path = GTMABAddressBook.strings; sourceTree = "<group>"; }; + 8BFE15C20FB0F764001BE894 /* GTMABAddressBook.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = GTMABAddressBook.strings; sourceTree = "<group>"; }; 8BFE15C30FB0F764001BE894 /* GTMABAddressBookTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMABAddressBookTest.m; sourceTree = "<group>"; }; 8BFE15C50FB0F764001BE894 /* phone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = phone.png; sourceTree = "<group>"; }; 9340CF9C140550CE0026DDC9 /* GTMFadeTruncatingLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMFadeTruncatingLabel.h; sourceTree = "<group>"; }; 9340CF9D140550CE0026DDC9 /* GTMFadeTruncatingLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMFadeTruncatingLabel.m; sourceTree = "<group>"; }; 9340CF9E140550CE0026DDC9 /* GTMFadeTruncatingLabelTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMFadeTruncatingLabelTest.m; sourceTree = "<group>"; }; - 9340CFA1140550E30026DDC9 /* GTMFadeTruncatingLabelTest1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest1.png; path = TestData/GTMFadeTruncatingLabelTest1.png; sourceTree = "<group>"; }; - 9340CFA2140550E30026DDC9 /* GTMFadeTruncatingLabelTest2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest2.png; path = TestData/GTMFadeTruncatingLabelTest2.png; sourceTree = "<group>"; }; - 9340CFA3140550E30026DDC9 /* GTMFadeTruncatingLabelTest3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest3.png; path = TestData/GTMFadeTruncatingLabelTest3.png; sourceTree = "<group>"; }; - 9340CFA4140550E30026DDC9 /* GTMFadeTruncatingLabelTest4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest4.png; path = TestData/GTMFadeTruncatingLabelTest4.png; sourceTree = "<group>"; }; - 9340CFA5140550E30026DDC9 /* GTMFadeTruncatingLabelTest5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest5.png; path = TestData/GTMFadeTruncatingLabelTest5.png; sourceTree = "<group>"; }; BE9B793D14FE99F3004A993A /* GTMURLBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GTMURLBuilder.h; sourceTree = "<group>"; }; BE9B793E14FE99F3004A993A /* GTMURLBuilder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GTMURLBuilder.m; sourceTree = "<group>"; }; BE9B793F14FE99F3004A993A /* GTMURLBuilderTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GTMURLBuilderTest.m; sourceTree = "<group>"; }; @@ -470,9 +227,6 @@ F41711590ECDFF0400B9B276 /* GTMLightweightProxyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLightweightProxyTest.m; sourceTree = "<group>"; }; F418AF6D0E755732004FB565 /* GTMiPhone-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GTMiPhone-Info.plist"; sourceTree = "<group>"; }; F418AF910E755893004FB565 /* xcconfigs-readme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "xcconfigs-readme.txt"; sourceTree = "<group>"; }; - F418AF930E7558DC004FB565 /* GTMExceptionalInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMExceptionalInlines.h; sourceTree = "<group>"; }; - F418AF940E7558DC004FB565 /* GTMExceptionalInlines.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMExceptionalInlines.m; sourceTree = "<group>"; }; - F418AF950E7558DC004FB565 /* GTMExceptionalInlinesTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMExceptionalInlinesTest.m; sourceTree = "<group>"; }; F418AFA20E7559C7004FB565 /* GTMLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMLogger.h; sourceTree = "<group>"; }; F418AFA30E7559C7004FB565 /* GTMLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLogger.m; sourceTree = "<group>"; }; F418AFA40E7559C7004FB565 /* GTMLoggerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLoggerTest.m; sourceTree = "<group>"; }; @@ -482,35 +236,18 @@ F418AFCA0E755C94004FB565 /* GTMNSDictionary+URLArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSDictionary+URLArguments.h"; sourceTree = "<group>"; }; F418AFCB0E755C94004FB565 /* GTMNSDictionary+URLArguments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSDictionary+URLArguments.m"; sourceTree = "<group>"; }; F418AFCC0E755C94004FB565 /* GTMNSDictionary+URLArgumentsTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSDictionary+URLArgumentsTest.m"; sourceTree = "<group>"; }; - F418AFD40E755D44004FB565 /* GTMPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMPath.h; sourceTree = "<group>"; }; - F418AFD50E755D44004FB565 /* GTMPath.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMPath.m; sourceTree = "<group>"; }; - F418AFD60E755D44004FB565 /* GTMPathTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMPathTest.m; sourceTree = "<group>"; }; F439ADED0DBD3C4000BE9B91 /* GTMGeometryUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMGeometryUtils.h; sourceTree = "<group>"; }; F439ADEE0DBD3C4000BE9B91 /* GTMGeometryUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMGeometryUtils.m; sourceTree = "<group>"; }; F439ADEF0DBD3C4000BE9B91 /* GTMGeometryUtilsTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMGeometryUtilsTest.m; sourceTree = "<group>"; }; - F45F27AB14F41441003A91E6 /* GTMFadeTruncatingLabelTest1.5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest1.5.png; path = TestData/GTMFadeTruncatingLabelTest1.5.png; sourceTree = "<group>"; }; - F45F27AC14F41441003A91E6 /* GTMFadeTruncatingLabelTest2.5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest2.5.png; path = TestData/GTMFadeTruncatingLabelTest2.5.png; sourceTree = "<group>"; }; - F45F27AD14F41441003A91E6 /* GTMFadeTruncatingLabelTest3.5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest3.5.png; path = TestData/GTMFadeTruncatingLabelTest3.5.png; sourceTree = "<group>"; }; - F45F27AE14F41441003A91E6 /* GTMFadeTruncatingLabelTest4.5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest4.5.png; path = TestData/GTMFadeTruncatingLabelTest4.5.png; sourceTree = "<group>"; }; - F45F27AF14F41441003A91E6 /* GTMFadeTruncatingLabelTest5.5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest5.5.png; path = TestData/GTMFadeTruncatingLabelTest5.5.png; sourceTree = "<group>"; }; F4746720129703600022C1FB /* GTMSenTestCaseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMSenTestCaseTest.m; sourceTree = "<group>"; }; F4A0A95E140438B90010B64B /* DebugiOS.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = DebugiOS.xcconfig; sourceTree = "<group>"; }; F4A0A95F140438B90010B64B /* ReleaseiOS.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = ReleaseiOS.xcconfig; sourceTree = "<group>"; }; - F4C35E6B164EB39F00688B6E /* GTMFadeTruncatingLabelTest1.6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest1.6.png; path = TestData/GTMFadeTruncatingLabelTest1.6.png; sourceTree = "<group>"; }; - F4C35E6C164EB39F00688B6E /* GTMFadeTruncatingLabelTest2.6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest2.6.png; path = TestData/GTMFadeTruncatingLabelTest2.6.png; sourceTree = "<group>"; }; - F4C35E6D164EB3A000688B6E /* GTMFadeTruncatingLabelTest3.6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest3.6.png; path = TestData/GTMFadeTruncatingLabelTest3.6.png; sourceTree = "<group>"; }; - F4C35E6E164EB3A100688B6E /* GTMFadeTruncatingLabelTest4.6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest4.6.png; path = TestData/GTMFadeTruncatingLabelTest4.6.png; sourceTree = "<group>"; }; - F4C35E6F164EB3A100688B6E /* GTMFadeTruncatingLabelTest5.6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = GTMFadeTruncatingLabelTest5.6.png; path = TestData/GTMFadeTruncatingLabelTest5.6.png; sourceTree = "<group>"; }; - F4D20EAA14852BFB0001600C /* GTMiPhoneUnitTestingOCUnit.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GTMiPhoneUnitTestingOCUnit.octest; sourceTree = BUILT_PRODUCTS_DIR; }; - F4D20EAB14852BFB0001600C /* GTMiPhoneUnitTestingOCUnit-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GTMiPhoneUnitTestingOCUnit-Info.plist"; sourceTree = "<group>"; }; F4E3B3D60EB5EF2400CB713D /* GTMUIFont+LineHeight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMUIFont+LineHeight.h"; sourceTree = "<group>"; }; F4E3B3D70EB5EF2400CB713D /* GTMUIFont+LineHeight.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMUIFont+LineHeight.m"; sourceTree = "<group>"; }; F4E3B3E10EB5EF9A00CB713D /* GTMUIFont+LineHeightTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMUIFont+LineHeightTest.m"; sourceTree = "<group>"; }; - F4E4E1141485378B00C2E584 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; F4EF8AD40EBFF814008DD6DA /* GTMStackTrace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMStackTrace.h; sourceTree = "<group>"; }; F4EF8AD50EBFF814008DD6DA /* GTMStackTrace.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMStackTrace.m; sourceTree = "<group>"; }; F4EF8AD60EBFF814008DD6DA /* GTMStackTraceTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMStackTraceTest.m; sourceTree = "<group>"; }; - F4F1D88214853D8F00E05BB6 /* GTMiPhoneUnitTestingOCUnitTestRig.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GTMiPhoneUnitTestingOCUnitTestRig.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -518,39 +255,28 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, - 1D3623EC0D0F72F000981E51 /* CoreGraphics.framework in Frameworks */, - 8B308BCE0DAD0B8400183556 /* QuartzCore.framework in Frameworks */, - 8BC04D480DB0088500C2D1CA /* libz.dylib in Frameworks */, - 8B3AA9340E0336AC007E31B5 /* CFNetwork.framework in Frameworks */, - 8B5A9E200E71CB6C005DA441 /* AddressBook.framework in Frameworks */, - 23220A06152C9E980060CB7D /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4D20EA714852BFB0001600C /* Frameworks */ = { + 8B82CEF31D9C17DE007182AA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F4E4E1151485378B00C2E584 /* SenTestingKit.framework in Frameworks */, - F4D20F2114852D130001600C /* CFNetwork.framework in Frameworks */, - F4D20F2214852D130001600C /* CoreGraphics.framework in Frameworks */, - F4D20F2314852D130001600C /* Foundation.framework in Frameworks */, - F4D20F2414852D130001600C /* QuartzCore.framework in Frameworks */, - F4D20F2514852D130001600C /* UIKit.framework in Frameworks */, - F4D20F2614852D130001600C /* libz.dylib in Frameworks */, - F4D20F4E148532D50001600C /* AddressBook.framework in Frameworks */, - 234E175D152CBB4900CF3542 /* Security.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4F1D87614853D8F00E05BB6 /* Frameworks */ = { + 8B82CF1F1D9C1C7D007182AA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F4F1D87814853D8F00E05BB6 /* UIKit.framework in Frameworks */, - F4F1D88E14853E6100E05BB6 /* Foundation.framework in Frameworks */, + 8BF753DF1D9DB3740010A295 /* libsqlite3.tbd in Frameworks */, + 8B82CF321D9C2309007182AA /* AddressBook.framework in Frameworks */, + 8B82CF661D9C3366007182AA /* XCTest.framework in Frameworks */, + 8B82CF341D9C231F007182AA /* UIKit.framework in Frameworks */, + 8B82CF511D9C239A007182AA /* Security.framework in Frameworks */, + 8B82CF521D9C239A007182AA /* CoreGraphics.framework in Frameworks */, + 8B82CF2E1D9C1DD4007182AA /* libGTM.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -561,8 +287,8 @@ isa = PBXGroup; children = ( 1D6058910D05DD3D006BFB54 /* GTMiPhoneTest.app */, - F4D20EAA14852BFB0001600C /* GTMiPhoneUnitTestingOCUnit.octest */, - F4F1D88214853D8F00E05BB6 /* GTMiPhoneUnitTestingOCUnitTestRig.app */, + 8B82CEF61D9C17DE007182AA /* libGTM.a */, + 8B82CF221D9C1C7D007182AA /* GTMTests.xctest */, ); name = Products; sourceTree = "<group>"; @@ -572,7 +298,6 @@ children = ( 8BC047750DAE926E00C2D1CA /* GTMDefines.h */, 8BFE15BF0FB0F764001BE894 /* AddressBook */, - 8BB78FA011B94D6C00AB31AF /* AppKit */, 8BC0479A0DAE928A00C2D1CA /* DebugUtils */, 8BC047760DAE928A00C2D1CA /* Foundation */, 8BA5F4060E75669000798036 /* iPhone */, @@ -580,9 +305,7 @@ 8BC049840DAEC59100C2D1CA /* XcodeConfig */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, - 32CA4F630368D1EE00C91783 /* GTM_Prefix.pch */, F418AF6D0E755732004FB565 /* GTMiPhone-Info.plist */, - F4D20EAB14852BFB0001600C /* GTMiPhoneUnitTestingOCUnit-Info.plist */, ); name = CustomTemplate; sourceTree = "<group>"; @@ -590,15 +313,15 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( + 8BF753DE1D9DB3740010A295 /* libsqlite3.tbd */, + 8B82CEEE1D9C1559007182AA /* XCTest.framework */, 23220A05152C9E980060CB7D /* Security.framework */, 8B3AA9330E0336AC007E31B5 /* CFNetwork.framework */, 8B5A9E1F0E71CB6C005DA441 /* AddressBook.framework */, - 8BC04D470DB0088500C2D1CA /* libz.dylib */, 8B308BCD0DAD0B8400183556 /* QuartzCore.framework */, 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */, 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, 1D30AB110D05D00D00671497 /* Foundation.framework */, - F4E4E1141485378B00C2E584 /* SenTestingKit.framework */, ); name = Frameworks; sourceTree = "<group>"; @@ -606,41 +329,9 @@ 64D0F5CB0FD3E66A00506CC7 /* TestData */ = { isa = PBXGroup; children = ( - F45F27AB14F41441003A91E6 /* GTMFadeTruncatingLabelTest1.5.png */, - F4C35E6B164EB39F00688B6E /* GTMFadeTruncatingLabelTest1.6.png */, - 9340CFA1140550E30026DDC9 /* GTMFadeTruncatingLabelTest1.png */, - F45F27AC14F41441003A91E6 /* GTMFadeTruncatingLabelTest2.5.png */, - F4C35E6C164EB39F00688B6E /* GTMFadeTruncatingLabelTest2.6.png */, - 9340CFA2140550E30026DDC9 /* GTMFadeTruncatingLabelTest2.png */, - F45F27AD14F41441003A91E6 /* GTMFadeTruncatingLabelTest3.5.png */, - F4C35E6D164EB3A000688B6E /* GTMFadeTruncatingLabelTest3.6.png */, - 9340CFA3140550E30026DDC9 /* GTMFadeTruncatingLabelTest3.png */, - F45F27AE14F41441003A91E6 /* GTMFadeTruncatingLabelTest4.5.png */, - F4C35E6E164EB3A100688B6E /* GTMFadeTruncatingLabelTest4.6.png */, - 9340CFA4140550E30026DDC9 /* GTMFadeTruncatingLabelTest4.png */, - F45F27AF14F41441003A91E6 /* GTMFadeTruncatingLabelTest5.5.png */, - F4C35E6F164EB3A100688B6E /* GTMFadeTruncatingLabelTest5.6.png */, - 9340CFA5140550E30026DDC9 /* GTMFadeTruncatingLabelTest5.png */, 64D0F5DB0FD3E68400506CC7 /* GTMUIImage+Resize_100x100.png */, - 64D0F5DC0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_40x60.png */, - 64D0F5DD0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_50x50.png */, - 64D0F5CC0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_60x40.png */, 64D0F5D40FD3E68400506CC7 /* GTMUIImage+Resize_100x50.png */, - 448D61B111AC1AAD0097ACBC /* GTMUIImage+Resize_100x50_flipped.png */, - 64D0F5D50FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_clip.png */, - 64D0F5D60FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_noclip.png */, - 64D0F5D70FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_clip.png */, - 64D0F5D80FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_noclip.png */, - 64D0F5D90FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_clip.png */, - 64D0F5DA0FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_noclip.png */, 64D0F5CD0FD3E68400506CC7 /* GTMUIImage+Resize_50x100.png */, - 448D61B011AC1AAD0097ACBC /* GTMUIImage+Resize_50x100_flipped.png */, - 64D0F5CE0FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_clip.png */, - 64D0F5CF0FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_noclip.png */, - 64D0F5D00FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_clip.png */, - 64D0F5D10FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_noclip.png */, - 64D0F5D20FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_clip.png */, - 64D0F5D30FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_noclip.png */, ); name = TestData; sourceTree = "<group>"; @@ -659,42 +350,22 @@ F4E3B3D60EB5EF2400CB713D /* GTMUIFont+LineHeight.h */, F4E3B3D70EB5EF2400CB713D /* GTMUIFont+LineHeight.m */, F4E3B3E10EB5EF9A00CB713D /* GTMUIFont+LineHeightTest.m */, + 8B7651DF1D9C89B800DB2C59 /* GTMRoundedRectPath.h */, + 8B7651E01D9C89B800DB2C59 /* GTMRoundedRectPath.m */, 64D0F5C50FD3E65C00506CC7 /* GTMUIImage+Resize.h */, 64D0F5C70FD3E65C00506CC7 /* GTMUIImage+Resize.m */, 64D0F5C60FD3E65C00506CC7 /* GTMUIImage+ResizeTest.m */, - 13C1ED4C104896C900907CD8 /* GTMUIView+SubtreeDescription.m */, - 13C1ED4D104896C900907CD8 /* GTMUIView+SubtreeDescriptionTest.m */, - 13C1ED4E104896C900907CD8 /* GTMUIView+SubtreeDescription.h */, 64D0F5CB0FD3E66A00506CC7 /* TestData */, ); path = iPhone; sourceTree = "<group>"; }; - 8BB78FA011B94D6C00AB31AF /* AppKit */ = { - isa = PBXGroup; - children = ( - 8BB78FA611B94D9500AB31AF /* GTMGoogleSearch.h */, - 8BB78FA711B94D9500AB31AF /* GTMGoogleSearch.m */, - 8BB78FA811B94D9500AB31AF /* GTMGoogleSearchTest.m */, - ); - path = AppKit; - sourceTree = "<group>"; - }; 8BC047760DAE928A00C2D1CA /* Foundation */ = { isa = PBXGroup; children = ( 0BBC768810FEF61D0006FABE /* GTMStringEncoding.h */, 0BBC768910FEF61D0006FABE /* GTMStringEncoding.m */, 0BBC768A10FEF61D0006FABE /* GTMStringEncodingTest.m */, - 0B859D9C104D08050064FE46 /* GTMNSDictionary+CaseInsensitive.h */, - 0B859D9D104D08050064FE46 /* GTMNSDictionary+CaseInsensitive.m */, - 0B859D9E104D08050064FE46 /* GTMNSDictionary+CaseInsensitiveTest.m */, - 8BC047770DAE928A00C2D1CA /* GTMCalculatedRange.h */, - 8BC047780DAE928A00C2D1CA /* GTMCalculatedRange.m */, - 8BC047790DAE928A00C2D1CA /* GTMCalculatedRangeTest.m */, - F418AF930E7558DC004FB565 /* GTMExceptionalInlines.h */, - F418AF940E7558DC004FB565 /* GTMExceptionalInlines.m */, - F418AF950E7558DC004FB565 /* GTMExceptionalInlinesTest.m */, F439ADED0DBD3C4000BE9B91 /* GTMGeometryUtils.h */, F439ADEE0DBD3C4000BE9B91 /* GTMGeometryUtils.m */, F439ADEF0DBD3C4000BE9B91 /* GTMGeometryUtilsTest.m */, @@ -704,6 +375,9 @@ F418AFA20E7559C7004FB565 /* GTMLogger.h */, F418AFA30E7559C7004FB565 /* GTMLogger.m */, F418AFA40E7559C7004FB565 /* GTMLoggerTest.m */, + 8B7651D51D9C872C00DB2C59 /* GTMLogger+ASL.h */, + 8B7651D61D9C872C00DB2C59 /* GTMLogger+ASL.m */, + 8B7651D71D9C872C00DB2C59 /* GTMLogger+ASLTest.m */, F418AFB10E755B4D004FB565 /* GTMLoggerRingBufferWriter.h */, F418AFB20E755B4D004FB565 /* GTMLoggerRingBufferWriter.m */, F418AFB30E755B4D004FB565 /* GTMLoggerRingBufferWriterTest.m */, @@ -716,9 +390,6 @@ F418AFCA0E755C94004FB565 /* GTMNSDictionary+URLArguments.h */, F418AFCB0E755C94004FB565 /* GTMNSDictionary+URLArguments.m */, F418AFCC0E755C94004FB565 /* GTMNSDictionary+URLArgumentsTest.m */, - 8BC047810DAE928A00C2D1CA /* GTMNSEnumerator+Filter.h */, - 8BC047820DAE928A00C2D1CA /* GTMNSEnumerator+Filter.m */, - 8BC047830DAE928A00C2D1CA /* GTMNSEnumerator+FilterTest.m */, 8BC047840DAE928A00C2D1CA /* GTMNSFileManager+Path.h */, 8BC047850DAE928A00C2D1CA /* GTMNSFileManager+Path.m */, 8BC047860DAE928A00C2D1CA /* GTMNSFileManager+PathTest.m */, @@ -734,9 +405,6 @@ 8BD35C8F0FB234E1009058F5 /* GTMNSScanner+JSON.h */, 8BD35C900FB234E1009058F5 /* GTMNSScanner+JSON.m */, 8BD35C910FB234E1009058F5 /* GTMNSScanner+JSONTest.m */, - 8BCB5AAE11C02D7D009B6C40 /* GTMNSScanner+Unsigned.h */, - 8BCB5AAF11C02D7D009B6C40 /* GTMNSScanner+Unsigned.m */, - 8BCB5AB011C02D7D009B6C40 /* GTMNSScanner+UnsignedTest.m */, 8BC047870DAE928A00C2D1CA /* GTMNSString+HTML.h */, 8BC047880DAE928A00C2D1CA /* GTMNSString+HTML.m */, 8BC047890DAE928A00C2D1CA /* GTMNSString+HTMLTest.m */, @@ -749,14 +417,13 @@ 8B6FF391151A664600B0642B /* GTMNSThread+Blocks.h */, 8B6FF392151A664600B0642B /* GTMNSThread+Blocks.m */, 8B6FF393151A664600B0642B /* GTMNSThread+BlocksTest.m */, - 8BC0478D0DAE928A00C2D1CA /* GTMObjC2Runtime.h */, 8BC047900DAE928A00C2D1CA /* GTMObjectSingleton.h */, - F418AFD40E755D44004FB565 /* GTMPath.h */, - F418AFD50E755D44004FB565 /* GTMPath.m */, - F418AFD60E755D44004FB565 /* GTMPathTest.m */, 8BC047910DAE928A00C2D1CA /* GTMRegex.h */, 8BC047920DAE928A00C2D1CA /* GTMRegex.m */, 8BC047930DAE928A00C2D1CA /* GTMRegexTest.m */, + 8BF753D91D9DB3080010A295 /* GTMSQLite.h */, + 8BF753DA1D9DB3080010A295 /* GTMSQLite.m */, + 8BF753DC1D9DB30E0010A295 /* GTMSQLiteTest.m */, F4EF8AD40EBFF814008DD6DA /* GTMStackTrace.h */, F4EF8AD50EBFF814008DD6DA /* GTMStackTrace.m */, F4EF8AD60EBFF814008DD6DA /* GTMStackTraceTest.m */, @@ -766,9 +433,6 @@ BE9B793D14FE99F3004A993A /* GTMURLBuilder.h */, BE9B793E14FE99F3004A993A /* GTMURLBuilder.m */, BE9B793F14FE99F3004A993A /* GTMURLBuilderTest.m */, - 8B41EC0D0E0711D40040CF9F /* GTMValidatingContainers.m */, - 8B41EC0E0E0711D40040CF9F /* GTMValidatingContainers.h */, - 8B41EC0C0E0711D40040CF9F /* GTMValidatingContainersTest.m */, ); path = Foundation; sourceTree = "<group>"; @@ -778,7 +442,6 @@ children = ( 8BF2568E10F673D1000490C8 /* GTMTypeCasting.h */, 8BC0479B0DAE928A00C2D1CA /* GTMDebugSelectorValidation.h */, - 8BE83A650E8B059A00C611B0 /* GTMDebugThreadValidationTest.m */, 8BE839870E89C74A00C611B0 /* GTMDebugThreadValidation.m */, 8BE839880E89C74A00C611B0 /* GTMDebugThreadValidation.h */, 8BC0479C0DAE928A00C2D1CA /* GTMMethodCheck.h */, @@ -791,26 +454,18 @@ 8BC0479F0DAE928A00C2D1CA /* UnitTesting */ = { isa = PBXGroup; children = ( - 8B7DCEA90DFF4C760017E983 /* GTMDevLogUnitTestingBridge.m */, - 8BC047A00DAE928A00C2D1CA /* GTMCALayer+UnitTesting.h */, - 8BC047A10DAE928A00C2D1CA /* GTMCALayer+UnitTesting.m */, 8B6FF398151A670100B0642B /* GTMFoundationUnitTestingUtilities.h */, 8B6FF399151A670100B0642B /* GTMFoundationUnitTestingUtilities.m */, - 8B5547C70DB3BBF20014CC1C /* GTMUIKit+UnitTesting.m */, - 8B5547C80DB3BBF20014CC1C /* GTMUIKit+UnitTesting.h */, - 8B5547C90DB3BBF20014CC1C /* GTMUIKit+UnitTestingTest.m */, - 234E17DB152CECFB00CF3542 /* GTMIPhoneSecurityLibraryTest.m */, 67A7820A0E00927400EBF506 /* GTMIPhoneUnitTestDelegate.h */, 67A7820B0E00927400EBF506 /* GTMIPhoneUnitTestDelegate.m */, 8BC047DD0DAE928A00C2D1CA /* GTMIPhoneUnitTestMain.m */, - 8BC047EC0DAE928A00C2D1CA /* GTMNSObject+UnitTesting.h */, - 8BC047ED0DAE928A00C2D1CA /* GTMNSObject+UnitTesting.m */, 8BC047F60DAE928A00C2D1CA /* GTMSenTestCase.h */, 8BC047F70DAE928A00C2D1CA /* GTMSenTestCase.m */, F4746720129703600022C1FB /* GTMSenTestCaseTest.m */, - 8B7DCEAB0DFF4CA60017E983 /* GTMUnitTestDevLog.h */, - 8B7DCEAC0DFF4CA60017E983 /* GTMUnitTestDevLog.m */, - 8BC0480E0DAE928A00C2D1CA /* RunIPhoneUnitTest.sh */, + 8B2C72E31D9EBB540027BD14 /* GTMUnitTestDevLog.h */, + 8B2C72E41D9EBB540027BD14 /* GTMUnitTestDevLog.m */, + 8B2C72E91D9EBBA10027BD14 /* GTMTestTimer.h */, + 8B2C72EA1D9EBBA10027BD14 /* GTMTestTimerTest.m */, F435E49F0DC8F5290069CDE8 /* TestData */, ); path = UnitTesting; @@ -830,6 +485,12 @@ isa = PBXGroup; children = ( 8BC0498F0DAEC59100C2D1CA /* CodeCoverage.xcconfig */, + 8B82CF531D9C24D9007182AA /* Debug.xcconfig */, + 8B82CF541D9C24D9007182AA /* General.xcconfig */, + 8B82CF551D9C24D9007182AA /* GTMMerge.xcconfig */, + 8B82CF561D9C24D9007182AA /* iOS.xcconfig */, + 8B82CF571D9C24D9007182AA /* Release.xcconfig */, + 8B82CF581D9C24D9007182AA /* Unittest.xcconfig */, ); path = subconfig; sourceTree = "<group>"; @@ -866,8 +527,6 @@ F435E49F0DC8F5290069CDE8 /* TestData */ = { isa = PBXGroup; children = ( - 8BC048010DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.png */, - 8BC048000DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.gtmUTState */, ); path = TestData; sourceTree = "<group>"; @@ -882,7 +541,6 @@ 1D60588D0D05DD3D006BFB54 /* Resources */, 1D60588E0D05DD3D006BFB54 /* Sources */, 1D60588F0D05DD3D006BFB54 /* Frameworks */, - 8B308AF70DAD072100183556 /* ShellScript */, ); buildRules = ( ); @@ -893,41 +551,39 @@ productReference = 1D6058910D05DD3D006BFB54 /* GTMiPhoneTest.app */; productType = "com.apple.product-type.application"; }; - F4D20EA914852BFB0001600C /* GTMiPhoneUnitTestingOCUnit */ = { + 8B82CEF51D9C17DE007182AA /* GTM */ = { isa = PBXNativeTarget; - buildConfigurationList = F4D20EAE14852BFC0001600C /* Build configuration list for PBXNativeTarget "GTMiPhoneUnitTestingOCUnit" */; + buildConfigurationList = 8B82CEFC1D9C17DE007182AA /* Build configuration list for PBXNativeTarget "GTM" */; buildPhases = ( - F4D20EA514852BFB0001600C /* Resources */, - F4D20EA614852BFB0001600C /* Sources */, - F4D20EA714852BFB0001600C /* Frameworks */, - F4D20EA814852BFB0001600C /* ShellScript */, + 8B82CEF21D9C17DE007182AA /* Sources */, + 8B82CEF31D9C17DE007182AA /* Frameworks */, + 8B82CEF41D9C17DE007182AA /* CopyFiles */, ); buildRules = ( ); dependencies = ( - F4F1D88A14853E0F00E05BB6 /* PBXTargetDependency */, ); - name = GTMiPhoneUnitTestingOCUnit; - productName = GTMiPhoneUnitTestingOCUnit; - productReference = F4D20EAA14852BFB0001600C /* GTMiPhoneUnitTestingOCUnit.octest */; - productType = "com.apple.product-type.bundle.ocunit-test"; + name = GTM; + productName = GTM; + productReference = 8B82CEF61D9C17DE007182AA /* libGTM.a */; + productType = "com.apple.product-type.library.static"; }; - F4F1D80714853D8F00E05BB6 /* GTMiPhoneUnitTestingOCUnitTestRig */ = { + 8B82CF211D9C1C7D007182AA /* GTMTests */ = { isa = PBXNativeTarget; - buildConfigurationList = F4F1D87F14853D8F00E05BB6 /* Build configuration list for PBXNativeTarget "GTMiPhoneUnitTestingOCUnitTestRig" */; + buildConfigurationList = 8B82CF291D9C1C7D007182AA /* Build configuration list for PBXNativeTarget "GTMTests" */; buildPhases = ( - F4F1D80814853D8F00E05BB6 /* Resources */, - F4F1D82714853D8F00E05BB6 /* Sources */, - F4F1D87614853D8F00E05BB6 /* Frameworks */, + 8B82CF1E1D9C1C7D007182AA /* Sources */, + 8B82CF1F1D9C1C7D007182AA /* Frameworks */, + 8B82CF201D9C1C7D007182AA /* Resources */, ); buildRules = ( ); dependencies = ( ); - name = GTMiPhoneUnitTestingOCUnitTestRig; - productName = GTMiPhoneUIUnitTesting; - productReference = F4F1D88214853D8F00E05BB6 /* GTMiPhoneUnitTestingOCUnitTestRig.app */; - productType = "com.apple.product-type.application"; + name = GTMTests; + productName = GTMTests; + productReference = 8B82CF221D9C1C7D007182AA /* GTMTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ @@ -936,6 +592,17 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 0460; + TargetAttributes = { + 8B82CEF51D9C17DE007182AA = { + CreatedOnToolsVersion = 8.0; + ProvisioningStyle = Automatic; + }; + 8B82CF211D9C1C7D007182AA = { + CreatedOnToolsVersion = 8.0; + ProvisioningStyle = Automatic; + TestTargetID = 1D6058900D05DD3D006BFB54; + }; + }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "GTMiPhone" */; compatibilityVersion = "Xcode 3.2"; @@ -951,10 +618,9 @@ projectDirPath = ""; projectRoot = ""; targets = ( - F4C7F9BF0DC62EC8009BEE5B /* All UnitTests */, 1D6058900D05DD3D006BFB54 /* GTMiPhoneUnitTesting */, - F4D20EA914852BFB0001600C /* GTMiPhoneUnitTestingOCUnit */, - F4F1D80714853D8F00E05BB6 /* GTMiPhoneUnitTestingOCUnitTestRig */, + 8B82CEF51D9C17DE007182AA /* GTM */, + 8B82CF211D9C1C7D007182AA /* GTMTests */, ); }; /* End PBXProject section */ @@ -964,456 +630,209 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8BC0486B0DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.gtmUTState in Resources */, - 8BC0486C0DAE928A00C2D1CA /* GTMUIViewUnitTestingTest.png in Resources */, 8BFE15C70FB0F764001BE894 /* GTMABAddressBook.strings in Resources */, 8BFE15C90FB0F764001BE894 /* phone.png in Resources */, - 64D0F5DE0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_60x40.png in Resources */, 64D0F5DF0FD3E68400506CC7 /* GTMUIImage+Resize_50x100.png in Resources */, - 448D61FC11AC1F250097ACBC /* GTMUIImage+Resize_50x100_flipped.png in Resources */, - 64D0F5E00FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_clip.png in Resources */, - 64D0F5E10FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_40x60_noclip.png in Resources */, - 64D0F5E20FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_clip.png in Resources */, - 64D0F5E30FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_50x50_noclip.png in Resources */, - 64D0F5E40FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_clip.png in Resources */, - 64D0F5E50FD3E68400506CC7 /* GTMUIImage+Resize_50x100_to_60x40_noclip.png in Resources */, 64D0F5E60FD3E68400506CC7 /* GTMUIImage+Resize_100x50.png in Resources */, - 448D61FB11AC1F1B0097ACBC /* GTMUIImage+Resize_100x50_flipped.png in Resources */, - 64D0F5E70FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_clip.png in Resources */, - 64D0F5E80FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_40x60_noclip.png in Resources */, - 64D0F5E90FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_clip.png in Resources */, - 64D0F5EA0FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_50x50_noclip.png in Resources */, - 64D0F5EB0FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_clip.png in Resources */, - 64D0F5EC0FD3E68400506CC7 /* GTMUIImage+Resize_100x50_to_60x40_noclip.png in Resources */, 64D0F5ED0FD3E68400506CC7 /* GTMUIImage+Resize_100x100.png in Resources */, - 64D0F5EE0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_40x60.png in Resources */, - 64D0F5EF0FD3E68400506CC7 /* GTMUIImage+Resize_100x100_to_50x50.png in Resources */, - 9340CFA6140550E30026DDC9 /* GTMFadeTruncatingLabelTest1.png in Resources */, - 9340CFA7140550E30026DDC9 /* GTMFadeTruncatingLabelTest2.png in Resources */, - 9340CFA8140550E30026DDC9 /* GTMFadeTruncatingLabelTest3.png in Resources */, - 9340CFA9140550E30026DDC9 /* GTMFadeTruncatingLabelTest4.png in Resources */, - 9340CFAA140550E30026DDC9 /* GTMFadeTruncatingLabelTest5.png in Resources */, 169E1E311459AAE100E6F562 /* GTMUILocalizerTest.xib in Resources */, - F45F27B014F41441003A91E6 /* GTMFadeTruncatingLabelTest1.5.png in Resources */, - F45F27B214F41441003A91E6 /* GTMFadeTruncatingLabelTest2.5.png in Resources */, - F45F27B414F41441003A91E6 /* GTMFadeTruncatingLabelTest3.5.png in Resources */, - F45F27B614F41441003A91E6 /* GTMFadeTruncatingLabelTest4.5.png in Resources */, - F45F27B814F41441003A91E6 /* GTMFadeTruncatingLabelTest5.5.png in Resources */, - F4C35E70164EB3A300688B6E /* GTMFadeTruncatingLabelTest1.6.png in Resources */, - F4C35E72164EB3A300688B6E /* GTMFadeTruncatingLabelTest2.6.png in Resources */, - F4C35E74164EB3A300688B6E /* GTMFadeTruncatingLabelTest3.6.png in Resources */, - F4C35E76164EB3A300688B6E /* GTMFadeTruncatingLabelTest4.6.png in Resources */, - F4C35E78164EB3A300688B6E /* GTMFadeTruncatingLabelTest5.6.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4D20EA514852BFB0001600C /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F4D20EB214852CA40001600C /* GTMABAddressBook.strings in Resources */, - F4D20EBE14852CA40001600C /* GTMFadeTruncatingLabelTest1.png in Resources */, - F4D20EBF14852CA40001600C /* GTMFadeTruncatingLabelTest2.png in Resources */, - F4D20EC014852CA40001600C /* GTMFadeTruncatingLabelTest3.png in Resources */, - F4D20EC114852CA40001600C /* GTMFadeTruncatingLabelTest4.png in Resources */, - F4D20EC214852CA40001600C /* GTMFadeTruncatingLabelTest5.png in Resources */, - F4D20EFB14852CA40001600C /* GTMUIImage+Resize_100x100.png in Resources */, - F4D20EFC14852CA40001600C /* GTMUIImage+Resize_100x100_to_40x60.png in Resources */, - F4D20EFD14852CA40001600C /* GTMUIImage+Resize_100x100_to_50x50.png in Resources */, - F4D20EFE14852CA40001600C /* GTMUIImage+Resize_100x100_to_60x40.png in Resources */, - F4D20EFF14852CA40001600C /* GTMUIImage+Resize_100x50.png in Resources */, - F4D20F0014852CA40001600C /* GTMUIImage+Resize_100x50_flipped.png in Resources */, - F4D20F0114852CA40001600C /* GTMUIImage+Resize_100x50_to_40x60_clip.png in Resources */, - F4D20F0214852CA40001600C /* GTMUIImage+Resize_100x50_to_40x60_noclip.png in Resources */, - F4D20F0314852CA40001600C /* GTMUIImage+Resize_100x50_to_50x50_clip.png in Resources */, - F4D20F0414852CA40001600C /* GTMUIImage+Resize_100x50_to_50x50_noclip.png in Resources */, - F4D20F0514852CA40001600C /* GTMUIImage+Resize_100x50_to_60x40_clip.png in Resources */, - F4D20F0614852CA40001600C /* GTMUIImage+Resize_100x50_to_60x40_noclip.png in Resources */, - F4D20F0714852CA40001600C /* GTMUIImage+Resize_50x100.png in Resources */, - F4D20F0814852CA40001600C /* GTMUIImage+Resize_50x100_flipped.png in Resources */, - F4D20F0914852CA40001600C /* GTMUIImage+Resize_50x100_to_40x60_clip.png in Resources */, - F4D20F0A14852CA40001600C /* GTMUIImage+Resize_50x100_to_40x60_noclip.png in Resources */, - F4D20F0B14852CA40001600C /* GTMUIImage+Resize_50x100_to_50x50_clip.png in Resources */, - F4D20F0C14852CA40001600C /* GTMUIImage+Resize_50x100_to_50x50_noclip.png in Resources */, - F4D20F0D14852CA40001600C /* GTMUIImage+Resize_50x100_to_60x40_clip.png in Resources */, - F4D20F0E14852CA40001600C /* GTMUIImage+Resize_50x100_to_60x40_noclip.png in Resources */, - F4D20F1414852CA40001600C /* GTMUILocalizerTest.xib in Resources */, - F4D20F1714852CA40001600C /* GTMUIViewUnitTestingTest.gtmUTState in Resources */, - F4D20F1814852CA40001600C /* GTMUIViewUnitTestingTest.png in Resources */, - F4D20F1C14852CA40001600C /* phone.png in Resources */, - F45F27B114F41441003A91E6 /* GTMFadeTruncatingLabelTest1.5.png in Resources */, - F45F27B314F41441003A91E6 /* GTMFadeTruncatingLabelTest2.5.png in Resources */, - F45F27B514F41441003A91E6 /* GTMFadeTruncatingLabelTest3.5.png in Resources */, - F45F27B714F41441003A91E6 /* GTMFadeTruncatingLabelTest4.5.png in Resources */, - F45F27B914F41441003A91E6 /* GTMFadeTruncatingLabelTest5.5.png in Resources */, - F4C35E71164EB3A300688B6E /* GTMFadeTruncatingLabelTest1.6.png in Resources */, - F4C35E73164EB3A300688B6E /* GTMFadeTruncatingLabelTest2.6.png in Resources */, - F4C35E75164EB3A300688B6E /* GTMFadeTruncatingLabelTest3.6.png in Resources */, - F4C35E77164EB3A300688B6E /* GTMFadeTruncatingLabelTest4.6.png in Resources */, - F4C35E79164EB3A300688B6E /* GTMFadeTruncatingLabelTest5.6.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F4F1D80814853D8F00E05BB6 /* Resources */ = { + 8B82CF201D9C1C7D007182AA /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 8B82CF331D9C231A007182AA /* phone.png in Resources */, + 8B82CF301D9C22F7007182AA /* GTMABAddressBook.strings in Resources */, + 8B82CF5B1D9C25E0007182AA /* GTMUIImage+Resize_50x100.png in Resources */, + 8B82CF5A1D9C25E0007182AA /* GTMUIImage+Resize_100x50.png in Resources */, + 8B82CF4B1D9C2373007182AA /* GTMUILocalizerTest.xib in Resources */, + 8B82CF591D9C25E0007182AA /* GTMUIImage+Resize_100x100.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ -/* Begin PBXShellScriptBuildPhase section */ - 8B308AF70DAD072100183556 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Nuke coverage data earch run\nexport GTM_REMOVE_GCOV_DATA=1\n\n# Enable launch daemons for security tests.\nexport GTM_DISABLE_IPHONE_LAUNCH_DAEMONS=0\n\n# Run the unit tests in this test bundle.\n${SRCROOT}/UnitTesting/RunIPhoneUnitTest.sh\n"; - }; - F4D20EA814852BFB0001600C /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; - }; -/* End PBXShellScriptBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 1D60588E0D05DD3D006BFB54 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8BC0480F0DAE928A00C2D1CA /* GTMCalculatedRange.m in Sources */, - 8BC048100DAE928A00C2D1CA /* GTMCalculatedRangeTest.m in Sources */, - 8BC048130DAE928A00C2D1CA /* GTMNSData+zlib.m in Sources */, - 8BC048150DAE928A00C2D1CA /* GTMNSEnumerator+Filter.m in Sources */, - 8BC048160DAE928A00C2D1CA /* GTMNSEnumerator+FilterTest.m in Sources */, - 8BC048170DAE928A00C2D1CA /* GTMNSFileManager+Path.m in Sources */, - 8BC048180DAE928A00C2D1CA /* GTMNSFileManager+PathTest.m in Sources */, - 8BC048190DAE928A00C2D1CA /* GTMNSString+HTML.m in Sources */, - 8BC0481A0DAE928A00C2D1CA /* GTMNSString+HTMLTest.m in Sources */, - 8BC0481B0DAE928A00C2D1CA /* GTMNSString+XML.m in Sources */, - 8BC0481C0DAE928A00C2D1CA /* GTMNSString+XMLTest.m in Sources */, - 8BC0481F0DAE928A00C2D1CA /* GTMRegex.m in Sources */, - 8BC048200DAE928A00C2D1CA /* GTMRegexTest.m in Sources */, - 8BC048250DAE928A00C2D1CA /* GTMMethodCheck.m in Sources */, - 8BC048260DAE928A00C2D1CA /* GTMMethodCheckTest.m in Sources */, - 8BC048270DAE928A00C2D1CA /* GTMCALayer+UnitTesting.m in Sources */, - 8BC048580DAE928A00C2D1CA /* GTMIPhoneUnitTestMain.m in Sources */, - 8BC048600DAE928A00C2D1CA /* GTMNSObject+UnitTesting.m in Sources */, - 8BC048650DAE928A00C2D1CA /* GTMSenTestCase.m in Sources */, - 8BC04A720DAF144700C2D1CA /* GTMSystemVersionTest.m in Sources */, - 8BC04A750DAF145200C2D1CA /* GTMSystemVersion.m in Sources */, - 8B5547CA0DB3BBF20014CC1C /* GTMUIKit+UnitTesting.m in Sources */, - 8B5547CB0DB3BBF20014CC1C /* GTMUIKit+UnitTestingTest.m in Sources */, - F439ADF00DBD3C4000BE9B91 /* GTMGeometryUtils.m in Sources */, - F439ADF10DBD3C4000BE9B91 /* GTMGeometryUtilsTest.m in Sources */, - 8B7DCEAA0DFF4C760017E983 /* GTMDevLogUnitTestingBridge.m in Sources */, - 8B7DCEAD0DFF4CA60017E983 /* GTMUnitTestDevLog.m in Sources */, 67A7820C0E00927400EBF506 /* GTMIPhoneUnitTestDelegate.m in Sources */, - 8B3AA8F30E032FC7007E31B5 /* GTMNSString+URLArguments.m in Sources */, + 8B82CF681D9C3689007182AA /* GTMSenTestCase.m in Sources */, F4746721129703600022C1FB /* GTMSenTestCaseTest.m in Sources */, - 8B3AA8F40E032FC7007E31B5 /* GTMNSString+URLArgumentsTest.m in Sources */, - 8B41EC0F0E0711D40040CF9F /* GTMValidatingContainersTest.m in Sources */, - 8B41EC100E0711D40040CF9F /* GTMValidatingContainers.m in Sources */, - F418AF990E7558EC004FB565 /* GTMExceptionalInlines.m in Sources */, - F418AF9A0E7558EC004FB565 /* GTMExceptionalInlinesTest.m in Sources */, - F418AFA50E7559C7004FB565 /* GTMLogger.m in Sources */, - F418AFA60E7559C7004FB565 /* GTMLoggerTest.m in Sources */, - F418AFB40E755B4D004FB565 /* GTMLoggerRingBufferWriter.m in Sources */, - F418AFB50E755B4D004FB565 /* GTMLoggerRingBufferWriterTest.m in Sources */, - F418AFCD0E755C94004FB565 /* GTMNSDictionary+URLArguments.m in Sources */, - F418AFCE0E755C94004FB565 /* GTMNSDictionary+URLArgumentsTest.m in Sources */, - F418AFD70E755D44004FB565 /* GTMPath.m in Sources */, - F418AFD80E755D44004FB565 /* GTMPathTest.m in Sources */, - 8BDA25140E759A6500C9769D /* GTMNSData+zlibTest.m in Sources */, - 8BE839890E89C74B00C611B0 /* GTMDebugThreadValidation.m in Sources */, - 8BE83A660E8B059A00C611B0 /* GTMDebugThreadValidationTest.m in Sources */, - F4E3B3D80EB5EF2400CB713D /* GTMUIFont+LineHeight.m in Sources */, - F4E3B3E20EB5EF9A00CB713D /* GTMUIFont+LineHeightTest.m in Sources */, - F4EF8AD70EBFF814008DD6DA /* GTMStackTrace.m in Sources */, - F4EF8AD80EBFF814008DD6DA /* GTMStackTraceTest.m in Sources */, - F417115A0ECDFF0400B9B276 /* GTMLightweightProxy.m in Sources */, - F417115B0ECDFF0400B9B276 /* GTMLightweightProxyTest.m in Sources */, - 6294461C0EDE178D009295EA /* GTMNSArray+MergeTest.m in Sources */, - 6294461D0EDE17A0009295EA /* GTMNSArray+Merge.m in Sources */, - 8B6C18740F3769D200E51E5D /* GTMNSObject+KeyValueObserving.m in Sources */, - 8BFE15C60FB0F764001BE894 /* GTMABAddressBook.m in Sources */, - 8BFE15C80FB0F764001BE894 /* GTMABAddressBookTest.m in Sources */, - 8BD35C920FB234E1009058F5 /* GTMNSScanner+JSON.m in Sources */, - 8BD35C930FB234E1009058F5 /* GTMNSScanner+JSONTest.m in Sources */, - 64D0F5C80FD3E65C00506CC7 /* GTMUIImage+ResizeTest.m in Sources */, - 64D0F5C90FD3E65C00506CC7 /* GTMUIImage+Resize.m in Sources */, - 13C1ED4F104896C900907CD8 /* GTMUIView+SubtreeDescription.m in Sources */, - 13C1ED50104896C900907CD8 /* GTMUIView+SubtreeDescriptionTest.m in Sources */, - 0B859DA1104D08160064FE46 /* GTMNSDictionary+CaseInsensitive.m in Sources */, - 0B859DA2104D08160064FE46 /* GTMNSDictionary+CaseInsensitiveTest.m in Sources */, - 0BBC768B10FEF62C0006FABE /* GTMStringEncoding.m in Sources */, - 0BBC768C10FEF62C0006FABE /* GTMStringEncodingTest.m in Sources */, - 8BB78FA911B94D9500AB31AF /* GTMGoogleSearch.m in Sources */, - 8BB78FAA11B94D9500AB31AF /* GTMGoogleSearchTest.m in Sources */, - 8BCB5AB111C02D7D009B6C40 /* GTMNSScanner+Unsigned.m in Sources */, - 8BCB5AB211C02D7D009B6C40 /* GTMNSScanner+UnsignedTest.m in Sources */, - 8BFFCD7811C1934900E45777 /* GTMNSObject+KeyValueObservingTest.m in Sources */, - 8B2908B211F8E7070064F50F /* GTMNSFileHandle+UniqueName.m in Sources */, - 8B2908B311F8E7070064F50F /* GTMNSFileHandle+UniqueNameTest.m in Sources */, - 9340CF9F140550CE0026DDC9 /* GTMFadeTruncatingLabel.m in Sources */, - 9340CFA0140550CE0026DDC9 /* GTMFadeTruncatingLabelTest.m in Sources */, - 169E1E2F1459AAE100E6F562 /* GTMUILocalizer.m in Sources */, - 169E1E301459AAE100E6F562 /* GTMUILocalizerTest.m in Sources */, - BE9B794114FE9A2C004A993A /* GTMURLBuilderTest.m in Sources */, - BE9B794314FE9A3E004A993A /* GTMURLBuilder.m in Sources */, - 8B6FF394151A664600B0642B /* GTMNSThread+Blocks.m in Sources */, - 8B6FF396151A664600B0642B /* GTMNSThread+BlocksTest.m in Sources */, - 8B6FF39A151A670100B0642B /* GTMFoundationUnitTestingUtilities.m in Sources */, - 234E17DC152CECFB00CF3542 /* GTMIPhoneSecurityLibraryTest.m in Sources */, + 8B82CF671D9C35B8007182AA /* GTMIPhoneUnitTestMain.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4D20EA614852BFB0001600C /* Sources */ = { + 8B82CEF21D9C17DE007182AA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F4D20EB114852CA40001600C /* GTMABAddressBook.m in Sources */, - F4D20EB314852CA40001600C /* GTMABAddressBookTest.m in Sources */, - F4D20EB414852CA40001600C /* GTMCALayer+UnitTesting.m in Sources */, - F4D20EB514852CA40001600C /* GTMCalculatedRange.m in Sources */, - F4D20EB614852CA40001600C /* GTMCalculatedRangeTest.m in Sources */, - F4D20EB714852CA40001600C /* GTMDebugThreadValidation.m in Sources */, - F4D20EB814852CA40001600C /* GTMDebugThreadValidationTest.m in Sources */, - F4D20EB914852CA40001600C /* GTMDevLogUnitTestingBridge.m in Sources */, - F4D20EBA14852CA40001600C /* GTMExceptionalInlines.m in Sources */, - F4D20EBB14852CA40001600C /* GTMExceptionalInlinesTest.m in Sources */, - F4D20EBC14852CA40001600C /* GTMFadeTruncatingLabel.m in Sources */, - F4D20EBD14852CA40001600C /* GTMFadeTruncatingLabelTest.m in Sources */, - F4D20EC314852CA40001600C /* GTMGeometryUtils.m in Sources */, - F4D20EC414852CA40001600C /* GTMGeometryUtilsTest.m in Sources */, - F4D20EC514852CA40001600C /* GTMGoogleSearch.m in Sources */, - F4D20EC614852CA40001600C /* GTMGoogleSearchTest.m in Sources */, - F4D20EC914852CA40001600C /* GTMLightweightProxy.m in Sources */, - F4D20ECA14852CA40001600C /* GTMLightweightProxyTest.m in Sources */, - F4D20ECB14852CA40001600C /* GTMLogger.m in Sources */, - F4D20ECC14852CA40001600C /* GTMLoggerRingBufferWriter.m in Sources */, - F4D20ECD14852CA40001600C /* GTMLoggerRingBufferWriterTest.m in Sources */, - F4D20ECE14852CA40001600C /* GTMLoggerTest.m in Sources */, - F4D20ECF14852CA40001600C /* GTMMethodCheck.m in Sources */, - F4D20ED014852CA40001600C /* GTMMethodCheckTest.m in Sources */, - F4D20ED114852CA40001600C /* GTMNSArray+Merge.m in Sources */, - F4D20ED214852CA40001600C /* GTMNSArray+MergeTest.m in Sources */, - F4D20ED314852CA40001600C /* GTMNSData+zlib.m in Sources */, - F4D20ED414852CA40001600C /* GTMNSData+zlibTest.m in Sources */, - F4D20ED514852CA40001600C /* GTMNSDictionary+CaseInsensitive.m in Sources */, - F4D20ED614852CA40001600C /* GTMNSDictionary+CaseInsensitiveTest.m in Sources */, - F4D20ED714852CA40001600C /* GTMNSDictionary+URLArguments.m in Sources */, - F4D20ED814852CA40001600C /* GTMNSDictionary+URLArgumentsTest.m in Sources */, - F4D20ED914852CA40001600C /* GTMNSEnumerator+Filter.m in Sources */, - F4D20EDA14852CA40001600C /* GTMNSEnumerator+FilterTest.m in Sources */, - F4D20EDB14852CA40001600C /* GTMNSFileHandle+UniqueName.m in Sources */, - F4D20EDC14852CA40001600C /* GTMNSFileHandle+UniqueNameTest.m in Sources */, - F4D20EDD14852CA40001600C /* GTMNSFileManager+Path.m in Sources */, - F4D20EDE14852CA40001600C /* GTMNSFileManager+PathTest.m in Sources */, - F4D20EDF14852CA40001600C /* GTMNSObject+KeyValueObserving.m in Sources */, - F4D20EE014852CA40001600C /* GTMNSObject+KeyValueObservingTest.m in Sources */, - F4D20EE114852CA40001600C /* GTMNSObject+UnitTesting.m in Sources */, - F4D20EE214852CA40001600C /* GTMNSScanner+JSON.m in Sources */, - F4D20EE314852CA40001600C /* GTMNSScanner+JSONTest.m in Sources */, - F4D20EE414852CA40001600C /* GTMNSScanner+Unsigned.m in Sources */, - F4D20EE514852CA40001600C /* GTMNSScanner+UnsignedTest.m in Sources */, - F4D20EE614852CA40001600C /* GTMNSString+HTML.m in Sources */, - F4D20EE714852CA40001600C /* GTMNSString+HTMLTest.m in Sources */, - F4D20EE814852CA40001600C /* GTMNSString+URLArguments.m in Sources */, - F4D20EE914852CA40001600C /* GTMNSString+URLArgumentsTest.m in Sources */, - F4D20EEA14852CA40001600C /* GTMNSString+XML.m in Sources */, - F4D20EEB14852CA40001600C /* GTMNSString+XMLTest.m in Sources */, - F4D20EEC14852CA40001600C /* GTMPath.m in Sources */, - F4D20EED14852CA40001600C /* GTMPathTest.m in Sources */, - F4D20EEE14852CA40001600C /* GTMRegex.m in Sources */, - F4D20EEF14852CA40001600C /* GTMRegexTest.m in Sources */, - F4D20EF014852CA40001600C /* GTMSenTestCase.m in Sources */, - F4D20EF114852CA40001600C /* GTMSenTestCaseTest.m in Sources */, - F4D20EF214852CA40001600C /* GTMStackTrace.m in Sources */, - F4D20EF314852CA40001600C /* GTMStackTraceTest.m in Sources */, - F4D20EF414852CA40001600C /* GTMStringEncoding.m in Sources */, - F4D20EF514852CA40001600C /* GTMStringEncodingTest.m in Sources */, - F4D20EF614852CA40001600C /* GTMSystemVersion.m in Sources */, - F4D20EF714852CA40001600C /* GTMSystemVersionTest.m in Sources */, - F4D20EF814852CA40001600C /* GTMUIFont+LineHeight.m in Sources */, - F4D20EF914852CA40001600C /* GTMUIFont+LineHeightTest.m in Sources */, - F4D20EFA14852CA40001600C /* GTMUIImage+Resize.m in Sources */, - F4D20F0F14852CA40001600C /* GTMUIImage+ResizeTest.m in Sources */, - F4D20F1014852CA40001600C /* GTMUIKit+UnitTesting.m in Sources */, - F4D20F1114852CA40001600C /* GTMUIKit+UnitTestingTest.m in Sources */, - F4D20F1214852CA40001600C /* GTMUILocalizer.m in Sources */, - F4D20F1314852CA40001600C /* GTMUILocalizerTest.m in Sources */, - F4D20F1514852CA40001600C /* GTMUIView+SubtreeDescription.m in Sources */, - F4D20F1614852CA40001600C /* GTMUIView+SubtreeDescriptionTest.m in Sources */, - F4D20F1914852CA40001600C /* GTMUnitTestDevLog.m in Sources */, - F4D20F1A14852CA40001600C /* GTMValidatingContainers.m in Sources */, - F4D20F1B14852CA40001600C /* GTMValidatingContainersTest.m in Sources */, - BE9B794214FE9A2E004A993A /* GTMURLBuilderTest.m in Sources */, - BE9B794414FE9A3E004A993A /* GTMURLBuilder.m in Sources */, - 8B6FF395151A664600B0642B /* GTMNSThread+Blocks.m in Sources */, - 8B6FF397151A664600B0642B /* GTMNSThread+BlocksTest.m in Sources */, - 8B6FF39B151A670100B0642B /* GTMFoundationUnitTestingUtilities.m in Sources */, - 234E17DD152CECFB00CF3542 /* GTMIPhoneSecurityLibraryTest.m in Sources */, + 8BF753DB1D9DB3080010A295 /* GTMSQLite.m in Sources */, + 8B82CF0C1D9C1C3B007182AA /* GTMNSNumber+64Bit.m in Sources */, + 8B82CF041D9C1C3B007182AA /* GTMLightweightProxy.m in Sources */, + 8B82CF0B1D9C1C3B007182AA /* GTMNSFileHandle+UniqueName.m in Sources */, + 8B7651E11D9C89B800DB2C59 /* GTMRoundedRectPath.m in Sources */, + 8B82CF021D9C1C3B007182AA /* GTMStringEncoding.m in Sources */, + 8B82CF161D9C1C3B007182AA /* GTMURLBuilder.m in Sources */, + 8B7651D81D9C872F00DB2C59 /* GTMLogger+ASL.m in Sources */, + 8B82CF171D9C1C3B007182AA /* GTMUILocalizer.m in Sources */, + 8B82CF111D9C1C3B007182AA /* GTMNSString+XML.m in Sources */, + 8B82CF081D9C1C3B007182AA /* GTMNSData+zlib.m in Sources */, + 8B82CF181D9C1C3B007182AA /* GTMFadeTruncatingLabel.m in Sources */, + 8B82CF151D9C1C3B007182AA /* GTMSystemVersion.m in Sources */, + 8B82CF011D9C1C3B007182AA /* GTMMethodCheck.m in Sources */, + 8B82CF0E1D9C1C3B007182AA /* GTMNSScanner+JSON.m in Sources */, + 8B82CF0F1D9C1C3B007182AA /* GTMNSString+HTML.m in Sources */, + 8B82CF1C1D9C1C3B007182AA /* GTMFoundationUnitTestingUtilities.m in Sources */, + 8B82CF191D9C1C3B007182AA /* GTMUIFont+LineHeight.m in Sources */, + 8B82CF121D9C1C3B007182AA /* GTMNSThread+Blocks.m in Sources */, + 8B82CF0D1D9C1C3B007182AA /* GTMNSObject+KeyValueObserving.m in Sources */, + 8B82CF1A1D9C1C3B007182AA /* GTMUIImage+Resize.m in Sources */, + 8B82CF141D9C1C3B007182AA /* GTMStackTrace.m in Sources */, + 8B82CF031D9C1C3B007182AA /* GTMGeometryUtils.m in Sources */, + 8B82CF051D9C1C3B007182AA /* GTMLogger.m in Sources */, + 8B82CF101D9C1C3B007182AA /* GTMNSString+URLArguments.m in Sources */, + 8B82CF091D9C1C3B007182AA /* GTMNSDictionary+URLArguments.m in Sources */, + 8B82CF061D9C1C3B007182AA /* GTMLoggerRingBufferWriter.m in Sources */, + 8B82CEFF1D9C1C3B007182AA /* GTMABAddressBook.m in Sources */, + 8B82CF071D9C1C3B007182AA /* GTMNSArray+Merge.m in Sources */, + 8B82CF131D9C1C3B007182AA /* GTMRegex.m in Sources */, + 8B82CF0A1D9C1C3B007182AA /* GTMNSFileManager+Path.m in Sources */, + 8B82CF001D9C1C3B007182AA /* GTMDebugThreadValidation.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4F1D82714853D8F00E05BB6 /* Sources */ = { + 8B82CF1E1D9C1C7D007182AA /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F4F1D88814853E0A00E05BB6 /* GTMIPhoneUnitTestMain.m in Sources */, + 8B82CF3C1D9C2373007182AA /* GTMNSDictionary+URLArgumentsTest.m in Sources */, + 8B82CF3D1D9C2373007182AA /* GTMNSFileManager+PathTest.m in Sources */, + 8B82CF391D9C2373007182AA /* GTMLoggerRingBufferWriterTest.m in Sources */, + 8B7651D91D9C873200DB2C59 /* GTMLogger+ASLTest.m in Sources */, + 8B82CF351D9C2353007182AA /* GTMMethodCheckTest.m in Sources */, + 8B82CF481D9C2373007182AA /* GTMSystemVersionTest.m in Sources */, + 8B82CF2C1D9C1CC5007182AA /* GTMStringEncodingTest.m in Sources */, + 8B82CF4D1D9C2385007182AA /* GTMUIFont+LineHeightTest.m in Sources */, + 8B82CF381D9C2373007182AA /* GTMLoggerTest.m in Sources */, + 8B82CF3A1D9C2373007182AA /* GTMNSArray+MergeTest.m in Sources */, + 8B82CF311D9C22F7007182AA /* GTMABAddressBookTest.m in Sources */, + 8B82CF2F1D9C1E49007182AA /* GTMSenTestCase.m in Sources */, + 8B82CF4A1D9C2373007182AA /* GTMUILocalizerTest.m in Sources */, + 8BF753DD1D9DB30E0010A295 /* GTMSQLiteTest.m in Sources */, + 8B82CF421D9C2373007182AA /* GTMNSString+HTMLTest.m in Sources */, + 8B82CF3F1D9C2373007182AA /* GTMNSNumber+64BitTest.m in Sources */, + 8B82CF361D9C2373007182AA /* GTMGeometryUtilsTest.m in Sources */, + 8B82CF441D9C2373007182AA /* GTMNSString+XMLTest.m in Sources */, + 8B82CF431D9C2373007182AA /* GTMNSString+URLArgumentsTest.m in Sources */, + 8B82CF491D9C2373007182AA /* GTMURLBuilderTest.m in Sources */, + 8B82CF4E1D9C2385007182AA /* GTMUIImage+ResizeTest.m in Sources */, + 8B82CF371D9C2373007182AA /* GTMLightweightProxyTest.m in Sources */, + 8B82CF4C1D9C2385007182AA /* GTMFadeTruncatingLabelTest.m in Sources */, + 8B2C72E51D9EBB540027BD14 /* GTMUnitTestDevLog.m in Sources */, + 8B82CF3B1D9C2373007182AA /* GTMNSData+zlibTest.m in Sources */, + 8B82CF3E1D9C2373007182AA /* GTMNSFileHandle+UniqueNameTest.m in Sources */, + 8B82CF501D9C2385007182AA /* GTMSenTestCaseTest.m in Sources */, + 8B82CF471D9C2373007182AA /* GTMStackTraceTest.m in Sources */, + 8B2C72EB1D9EBBA10027BD14 /* GTMTestTimerTest.m in Sources */, + 8B82CF401D9C2373007182AA /* GTMNSObject+KeyValueObservingTest.m in Sources */, + 8B82CF411D9C2373007182AA /* GTMNSScanner+JSONTest.m in Sources */, + 8B82CF451D9C2373007182AA /* GTMNSThread+BlocksTest.m in Sources */, + 8B82CF461D9C2373007182AA /* GTMRegexTest.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - F4C7F9C40DC62ECD009BEE5B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1D6058900D05DD3D006BFB54 /* GTMiPhoneUnitTesting */; - targetProxy = F4C7F9C30DC62ECD009BEE5B /* PBXContainerItemProxy */; - }; - F4D20F1E14852CAB0001600C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = F4D20EA914852BFB0001600C /* GTMiPhoneUnitTestingOCUnit */; - targetProxy = F4D20F1D14852CAB0001600C /* PBXContainerItemProxy */; - }; - F4F1D88A14853E0F00E05BB6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = F4F1D80714853D8F00E05BB6 /* GTMiPhoneUnitTestingOCUnitTestRig */; - targetProxy = F4F1D88914853E0F00E05BB6 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin XCBuildConfiguration section */ - F4A0A962140438D50010B64B /* Debug */ = { + 8B82CEFD1D9C17DE007182AA /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = F4A0A95E140438B90010B64B /* DebugiOS.xcconfig */; buildSettings = { - CODE_SIGNING_REQUIRED = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = GTM_Prefix.pch; - GCC_WARN_SHADOW = YES; - GTM_EXTRA_WARNING_OVERRIDE_CFLAGS = "-Wno-unused-parameter"; - IPHONEOS_DEPLOYMENT_TARGET = 4.0; + "ARCHS[sdk=iphoneos*]" = "$(ARCHS_STANDARD)"; + "ARCHS[sdk=iphonesimulator*]" = "$(ARCHS_STANDARD)"; + PRODUCT_NAME = GTM; }; name = Debug; }; - F4A0A963140438D50010B64B /* Debug */ = { + 8B82CEFE1D9C17DE007182AA /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = F4A0A95F140438B90010B64B /* ReleaseiOS.xcconfig */; buildSettings = { - PRODUCT_NAME = "All UnitTests"; + PRODUCT_NAME = GTM; }; - name = Debug; + name = Release; }; - F4A0A964140438D50010B64B /* Debug */ = { + 8B82CF2A1D9C1C7D007182AA /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = F4A0A95E140438B90010B64B /* DebugiOS.xcconfig */; buildSettings = { - INFOPLIST_FILE = "GTMiPhone-Info.plist"; - PRODUCT_NAME = GTMiPhoneTest; + "ARCHS[sdk=iphoneos*]" = "$(ARCHS_STANDARD)"; + "ARCHS[sdk=iphonesimulator*]" = "$(ARCHS_STANDARD)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GTM_HOST_OTHER_LDFLAGS = "-ObjC -lz -read_only_relocs suppress"; + INFOPLIST_FILE = "UnitTest-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; - F4A0A96C140438ED0010B64B /* Release */ = { + 8B82CF2B1D9C1C7D007182AA /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = F4A0A95F140438B90010B64B /* ReleaseiOS.xcconfig */; buildSettings = { - CODE_SIGNING_REQUIRED = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = GTM_Prefix.pch; - GCC_WARN_SHADOW = YES; - GTM_EXTRA_WARNING_OVERRIDE_CFLAGS = "-Wno-unused-parameter"; - IPHONEOS_DEPLOYMENT_TARGET = 4.0; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GTM_HOST_OTHER_LDFLAGS = "-ObjC -lz -read_only_relocs suppress"; + INFOPLIST_FILE = "UnitTest-Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; - F4A0A96D140438ED0010B64B /* Release */ = { + F4A0A962140438D50010B64B /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = F4A0A95E140438B90010B64B /* DebugiOS.xcconfig */; buildSettings = { - PRODUCT_NAME = "All UnitTests"; + "ARCHS[sdk=iphoneos*]" = "$(ARCHS_STANDARD)"; + "ARCHS[sdk=iphonesimulator*]" = "$(ARCHS_STANDARD)"; + GCC_WARN_SHADOW = YES; + GTM_EXTRA_WARNING_OVERRIDE_CFLAGS = "-Wno-unused-parameter"; + GTM_HOST_GCC_PREPROCESSOR_DEFINITIONS = "GTM_USING_XCTEST=1"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LD_NO_PIE = YES; }; - name = Release; + name = Debug; }; - F4A0A96E140438ED0010B64B /* Release */ = { + F4A0A964140438D50010B64B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + GTM_HOST_GCC_PREPROCESSOR_DEFINITIONS = "GTM_USING_XCTEST=0 GTM_IPHONE_USE_SENTEST=0"; INFOPLIST_FILE = "GTMiPhone-Info.plist"; PRODUCT_NAME = GTMiPhoneTest; }; - name = Release; - }; - F4D20EAC14852BFB0001600C /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/GTMiPhoneUnitTestingOCUnitTestRig.app/GTMiPhoneUnitTestingOCUnitTestRig"; - FRAMEWORK_SEARCH_PATHS = "${SDKROOT}/Developer/Library/Frameworks/"; - GCC_DYNAMIC_NO_PIC = NO; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "GTM_IPHONE_USE_SENTEST=1", - ); - INFOPLIST_FILE = "GTMiPhoneUnitTestingOCUnit-Info.plist"; - PRODUCT_NAME = GTMiPhoneUnitTestingOCUnit; - TEST_HOST = "${BUNDLE_LOADER}"; - WRAPPER_EXTENSION = octest; - }; name = Debug; }; - F4D20EAD14852BFB0001600C /* Release */ = { + F4A0A96C140438ED0010B64B /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = F4A0A95F140438B90010B64B /* ReleaseiOS.xcconfig */; buildSettings = { - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/GTMiPhoneUnitTestingOCUnitTestRig.app/GTMiPhoneUnitTestingOCUnitTestRig"; - DEPLOYMENT_POSTPROCESSING = NO; - FRAMEWORK_SEARCH_PATHS = "${SDKROOT}/Developer/Library/Frameworks/"; - GCC_DYNAMIC_NO_PIC = NO; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "GTM_IPHONE_USE_SENTEST=1", - ); - INFOPLIST_FILE = "GTMiPhoneUnitTestingOCUnit-Info.plist"; - PRODUCT_NAME = GTMiPhoneUnitTestingOCUnit; - TEST_HOST = "${BUNDLE_LOADER}"; - WRAPPER_EXTENSION = octest; + GCC_WARN_SHADOW = YES; + GTM_EXTRA_WARNING_OVERRIDE_CFLAGS = "-Wno-unused-parameter"; + GTM_HOST_GCC_PREPROCESSOR_DEFINITIONS = "GTM_USING_XCTEST=1"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LD_NO_PIE = YES; }; name = Release; }; - F4F1D88014853D8F00E05BB6 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "GTM_IPHONE_USE_SENTEST=1", - ); - INFOPLIST_FILE = "GTMiPhone-Info.plist"; - PRODUCT_NAME = GTMiPhoneUnitTestingOCUnitTestRig; - }; - name = Debug; - }; - F4F1D88114853D8F00E05BB6 /* Release */ = { + F4A0A96E140438ED0010B64B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - "GTM_IPHONE_USE_SENTEST=1", - ); + GTM_HOST_GCC_PREPROCESSOR_DEFINITIONS = "GTM_USING_XCTEST=0 GTM_IPHONE_USE_SENTEST=0"; INFOPLIST_FILE = "GTMiPhone-Info.plist"; - PRODUCT_NAME = GTMiPhoneUnitTestingOCUnitTestRig; + PRODUCT_NAME = GTMiPhoneTest; }; name = Release; }; @@ -1429,38 +848,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - C01FCF4E08A954540054247B /* Build configuration list for PBXProject "GTMiPhone" */ = { + 8B82CEFC1D9C17DE007182AA /* Build configuration list for PBXNativeTarget "GTM" */ = { isa = XCConfigurationList; buildConfigurations = ( - F4A0A962140438D50010B64B /* Debug */, - F4A0A96C140438ED0010B64B /* Release */, + 8B82CEFD1D9C17DE007182AA /* Debug */, + 8B82CEFE1D9C17DE007182AA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - F4C7F9C50DC62F0C009BEE5B /* Build configuration list for PBXAggregateTarget "All UnitTests" */ = { + 8B82CF291D9C1C7D007182AA /* Build configuration list for PBXNativeTarget "GTMTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - F4A0A963140438D50010B64B /* Debug */, - F4A0A96D140438ED0010B64B /* Release */, + 8B82CF2A1D9C1C7D007182AA /* Debug */, + 8B82CF2B1D9C1C7D007182AA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - F4D20EAE14852BFC0001600C /* Build configuration list for PBXNativeTarget "GTMiPhoneUnitTestingOCUnit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F4D20EAC14852BFB0001600C /* Debug */, - F4D20EAD14852BFB0001600C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Debug; - }; - F4F1D87F14853D8F00E05BB6 /* Build configuration list for PBXNativeTarget "GTMiPhoneUnitTestingOCUnitTestRig" */ = { + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "GTMiPhone" */ = { isa = XCConfigurationList; buildConfigurations = ( - F4F1D88014853D8F00E05BB6 /* Debug */, - F4F1D88114853D8F00E05BB6 /* Release */, + F4A0A962140438D50010B64B /* Debug */, + F4A0A96C140438ED0010B64B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; diff --git a/GTMiPhoneUnitTestingOCUnit-Info.plist b/GTMiPhoneUnitTestingOCUnit-Info.plist deleted file mode 100644 index 5a05846..0000000 --- a/GTMiPhoneUnitTestingOCUnit-Info.plist +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>English</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>com.google.GTMiPhoneOCUnit</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundlePackageType</key> - <string>BNDL</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>1.0</string> -</dict> -</plist> diff --git a/GoogleToolboxForMac.podspec b/GoogleToolboxForMac.podspec index 863c387..8dea856 100644 --- a/GoogleToolboxForMac.podspec +++ b/GoogleToolboxForMac.podspec @@ -43,7 +43,6 @@ Pod::Spec.new do |s| 'DebugUtils/GTMDebugThreadValidation.h', 'DebugUtils/GTMMethodCheck.h' sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}" - sp.dependency 'GoogleToolboxForMac/Runtime', "#{s.version}" end s.subspec 'GeometryUtils' do |sp| @@ -57,7 +56,6 @@ Pod::Spec.new do |s| 'Foundation/GTMNSObject+KeyValueObserving.{h,m}', sp.dependency 'GoogleToolboxForMac/Core', "#{s.version}" sp.dependency 'GoogleToolboxForMac/DebugUtils', "#{s.version}" - sp.dependency 'GoogleToolboxForMac/Runtime', "#{s.version}" end s.subspec 'Logger' do |sp| @@ -75,12 +73,6 @@ Pod::Spec.new do |s| sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}" end - s.subspec 'Runtime' do |sp| - sp.source_files = 'Foundation/GTMObjC2Runtime.{h,m}' - sp.requires_arc = 'Foundation/GTMObjC2Runtime.{h,m}' - sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}" - end - # We cannot add a target for Foundation/GTMSQLite.{h,m}. # sqlite3.h is not a modular header, and so cannot be imported # in a modulemap, which CocoaPods does by default when it @@ -89,7 +81,6 @@ Pod::Spec.new do |s| s.subspec 'StackTrace' do |sp| sp.source_files = 'Foundation/GTMStackTrace.{h,m}' sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}" - sp.dependency 'GoogleToolboxForMac/Runtime', "#{s.version}" end s.subspec 'StringEncoding' do |sp| @@ -100,7 +91,6 @@ Pod::Spec.new do |s| s.subspec 'SystemVersion' do |sp| sp.source_files = 'Foundation/GTMSystemVersion.{h,m}' sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}" - sp.dependency 'GoogleToolboxForMac/Runtime', "#{s.version}" end s.subspec 'URLBuilder' do |sp| @@ -156,14 +146,12 @@ Pod::Spec.new do |s| sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}" end - s.subspec 'iPhone' do |sp| sp.platform = :ios, '5.0' sp.source_files = 'iPhone/GTMFadeTruncatingLabel.{h,m}', 'iPhone/GTMUIImage+Resize.{h,m}', 'iPhone/GTMUILocalizer.{h,m}', - 'iPhone/GTMUIView+SubtreeDescription.{h,m}' sp.requires_arc = 'iPhone/GTMUIImage+Resize.{h,m}' sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}" end @@ -182,24 +170,15 @@ Pod::Spec.new do |s| sp.requires_arc = 'iPhone/GTMUIFont+LineHeight.{h,m}' end - s.subspec 'UnitTesting' do |sp| sp.platform = :ios, '5.0' - sp.requires_arc = 'UnitTesting/GTMDevLogUnitTestingBridge.m' sp.source_files = - 'UnitTesting/GTMCALayer+UnitTesting.{h,m}', - 'UnitTesting/GTMDevLogUnitTestingBridge.m', 'UnitTesting/GTMFoundationUnitTestingUtilities.{h,m}', - 'UnitTesting/GTMNSObject+UnitTesting.{h,m}', 'UnitTesting/GTMSenTestCase.{h,m}', 'UnitTesting/GTMTestTimer.h', - 'UnitTesting/GTMUIKit+UnitTesting.{h,m}', - 'UnitTesting/GTMUnitTestDevLog.{h,m}' - sp.requires_arc = 'UnitTesting/GTMDevLogUnitTestingBridge.m' sp.frameworks = 'CoreGraphics', 'QuartzCore' sp.dependency 'GoogleToolboxForMac/Defines', "#{s.version}" sp.dependency 'GoogleToolboxForMac/Regex', "#{s.version}" - sp.dependency 'GoogleToolboxForMac/Runtime', "#{s.version}" sp.dependency 'GoogleToolboxForMac/SystemVersion', "#{s.version}" end diff --git a/UnitTesting/GTMAppKit+UnitTesting.h b/UnitTesting/GTMAppKit+UnitTesting.h deleted file mode 100644 index 7f6bd26..0000000 --- a/UnitTesting/GTMAppKit+UnitTesting.h +++ /dev/null @@ -1,171 +0,0 @@ -// -// GTMAppKit+UnitTesting.m -// -// Categories for making unit testing of graphics/UI easier. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <AppKit/AppKit.h> -#import "GTMNSObject+UnitTesting.h" - -// Categories for making unit testing of graphics/UI easier. -// Allows you to take a state/images of instances of AppKit classes. -// See GTMNSObject+UnitTesting.h for details. - -@interface NSApplication (GTMUnitTestingAdditions) -@end - -@interface NSWindow (GTMUnitTestingAdditions) <GTMUnitTestingImaging> -@end - -@interface NSControl (GTMUnitTestingAdditions) -@end - -@interface NSButton (GTMUnitTestingAdditions) -@end - -@interface NSTextField (GTMUnitTestingAdditions) -@end - -@interface NSCell (GTMUnitTestingAdditions) -@end - -@interface NSImage (GTMUnitTestingAdditions) <GTMUnitTestingImaging> -@end - -@interface NSMenu (GTMUnitTestingAdditions) -@end - -@interface NSMenuItem (GTMUnitTestingAdditions) -@end - -@interface NSTabView (GTMUnitTestingAdditions) -@end - -@interface NSTabViewItem (GTMUnitTestingAdditions) -@end - -@interface NSToolbar (GTMUnitTestingAdditions) -@end - -@interface NSToolbarItem (GTMUnitTestingAdditions) -@end - -@interface NSMatrix (GTMUnitTestingAdditions) -@end - -@interface NSBox (GTMUnitTestingAdditions) -@end - -@interface NSSegmentedControl (GTMUnitTestingAdditions) -@end - -@interface NSComboBox (GTMUnitTestingAdditions) -@end - -@protocol GTMUnitTestViewDrawer; - -// Fails when the |a1|'s drawing in an area |a2| does not equal the image file named |a3|. -// See the description of the -gtm_pathForImageNamed method -// to understand how |a3| is found and written out. -// See the description of the GTMUnitTestView for a better idea -// how the view works. -// Implemented as a macro to match the rest of the SenTest macros. -// -// Args: -// a1: The object that implements the GTMUnitTestViewDrawer protocol -// that is doing the drawing. -// a2: The size of the drawing -// a3: The name of the image file to check against. -// Do not include the extension -// a4: contextInfo to pass to drawer -// description: A format string as in the printf() function. -// Can be nil or an empty string but must be present. -// ...: A variable number of arguments to the format string. Can be absent. -// - -#define GTMAssertDrawingEqualToImageNamed(a1, a2, a3, a4, description, ...) \ - do { \ - id<GTMUnitTestViewDrawer> a1Drawer = (a1); \ - NSSize a2Size = (a2); \ - NSString* a3String = (a3); \ - void *a4ContextInfo = (a4); \ - NSRect frame = NSMakeRect(0, 0, a2Size.width, a2Size.height); \ - GTMUnitTestView *view = [[[GTMUnitTestView alloc] initWithFrame:frame drawer:a1Drawer contextInfo:a4ContextInfo] autorelease]; \ - GTMAssertObjectImageEqualToImageNamed(view, a3String, STComposeString(description, ##__VA_ARGS__)); \ - } while(0) - -// Category for making unit testing of graphics/UI easier. - -// Allows you to take a state of a view. Supports both image and state. -// See NSObject+UnitTesting.h for details. -@interface NSView (GTMUnitTestingAdditions) <GTMUnitTestingImaging> -// Returns whether unitTestEncodeState should recurse into subviews -// -// If you have "Full keyboard access" in the -// Keyboard & Mouse > Keyboard Shortcuts preferences pane set to "Text boxes -// and Lists only" that Apple adds a set of subviews to NSTextFields. So in the -// case of NSTextFields we don't want to recurse into their subviews. There may -// be other cases like this, so instead of specializing unitTestEncodeState: to -// look for NSTextFields, NSTextFields will just not allow us to recurse into -// their subviews. -// -// Returns: -// should unitTestEncodeState pick up subview state. -- (BOOL)gtm_shouldEncodeStateForSubviews; - -@end - -// A view that allows you to delegate out drawing using the formal -// GTMUnitTestViewDelegate protocol -// This is useful when writing up unit tests for visual elements. -// Your test will often end up looking like this: -// - (void)testFoo { -// GTMAssertDrawingEqualToFile(self, NSMakeSize(200, 200), @"Foo", nil, nil); -// } -// and your testSuite will also implement the unitTestViewDrawRect method to do -// it's actual drawing. The above creates a view of size 200x200 that draws -// it's content using |self|'s unitTestViewDrawRect method and compares it to -// the contents of the file Foo.tif to make sure it's valid -@interface GTMUnitTestView : NSView { - @private - id<GTMUnitTestViewDrawer> drawer_; // delegate for doing drawing (STRONG) - void* contextInfo_; // info passed in by user for them to use when drawing -} - -// Create a GTMUnitTestView. -// -// Args: -// rect: the area to draw. -// drawer: the object that will do the drawing via the GTMUnitTestViewDrawer -// protocol -// contextInfo: -- (id)initWithFrame:(NSRect)frame drawer:(id<GTMUnitTestViewDrawer>)drawer contextInfo:(void*)contextInfo; -@end - -/// \cond Protocols - -// Formal protocol for doing unit testing of views. See description of -// GTMUnitTestView for details. -@protocol GTMUnitTestViewDrawer <NSObject> - -// Draw the view. Equivalent to drawRect on a standard NSView. -// -// Args: -// rect: the area to draw. -- (void)gtm_unitTestViewDrawRect:(NSRect)rect contextInfo:(void*)contextInfo; -@end - diff --git a/UnitTesting/GTMAppKit+UnitTesting.m b/UnitTesting/GTMAppKit+UnitTesting.m deleted file mode 100644 index 5b4d6f7..0000000 --- a/UnitTesting/GTMAppKit+UnitTesting.m +++ /dev/null @@ -1,583 +0,0 @@ -// -// GTMAppKit+UnitTesting.m -// -// Categories for making unit testing of graphics/UI easier. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMDefines.h" -#import "GTMAppKit+UnitTesting.h" -#import "GTMGeometryUtils.h" -#import "GTMMethodCheck.h" - -#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4 - #define ENCODE_NSINTEGER(coder, i, key) [(coder) encodeInt:(i) forKey:(key)] -#else - #define ENCODE_NSINTEGER(coder, i, key) [(coder) encodeInteger:(i) forKey:(key)] -#endif - -@implementation NSApplication (GTMUnitTestingAdditions) -GTM_METHOD_CHECK(NSObject, gtm_unitTestEncodeState:); - -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - ENCODE_NSINTEGER(inCoder, [[self mainWindow] windowNumber], @"ApplicationMainWindow"); - - // Descend down into the windows allowing them to store their state - NSWindow *window = nil; - int i = 0; - GTM_FOREACH_OBJECT(window, [self windows]) { - if ([window isVisible]) { - // Only record visible windows because invisible windows may be closing on us - // This appears to happen differently in 64 bit vs 32 bit, and items - // in the window may hold an extra retain count for a while until the - // event loop is spun. To avoid all this, we just don't record non - // visible windows. - // See rdar://5851458 for details. - [inCoder encodeObject:window forKey:[NSString stringWithFormat:@"Window %d", i]]; - i = i + 1; - } - } - - // and encode the menu bar - NSMenu *mainMenu = [self mainMenu]; - if (mainMenu) { - [inCoder encodeObject:mainMenu forKey:@"MenuBar"]; - } -} -@end - -@implementation NSWindow (GTMUnitTestingAdditions) - -- (CGImageRef)gtm_unitTestImage { - return [[[self contentView] superview] gtm_unitTestImage]; -} - -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - [inCoder encodeObject:[self title] forKey:@"WindowTitle"]; - [inCoder encodeBool:[self isVisible] forKey:@"WindowIsVisible"]; - // Do not record if window is key, because users running unit tests - // and clicking around to other apps, could change this mid test causing - // issues. - // [inCoder encodeBool:[self isKeyWindow] forKey:@"WindowIsKey"]; - [inCoder encodeBool:[self isMainWindow] forKey:@"WindowIsMain"]; - [inCoder encodeObject:[self contentView] forKey:@"WindowContent"]; - if ([self toolbar]) { - [inCoder encodeObject:[self toolbar] forKey:@"WindowToolbar"]; - } -} - -@end - -@implementation NSControl (GTMUnitTestingAdditions) - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - [inCoder encodeObject:[self class] forKey:@"ControlType"]; - [inCoder encodeObject:[self objectValue] forKey:@"ControlValue"]; - [inCoder encodeObject:[self selectedCell] forKey:@"ControlSelectedCell"]; - ENCODE_NSINTEGER(inCoder, [self tag], @"ControlTag"); - [inCoder encodeBool:[self isEnabled] forKey:@"ControlIsEnabled"]; -} - -@end - -@implementation NSButton (GTMUnitTestingAdditions) - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - NSString *alternateTitle = [self alternateTitle]; - if (alternateTitle) { - [inCoder encodeObject:alternateTitle forKey:@"ButtonAlternateTitle"]; - } -} - -@end - -@implementation NSTextField (GTMUnitTestingAdditions) - -- (BOOL)gtm_shouldEncodeStateForSubviews { - return NO; -} - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - id controlCell = [self cell]; - if ([controlCell isKindOfClass:[NSTextFieldCell class]]) { - NSTextFieldCell *textFieldCell = controlCell; - [inCoder encodeObject:[textFieldCell placeholderString] - forKey:@"PlaceHolderString"]; - } -} - -@end - -@implementation NSCell (GTMUnitTestingAdditions) - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - BOOL isImageCell = NO; - if ([self hasValidObjectValue]) { - id val = [self objectValue]; - [inCoder encodeObject:val forKey:@"CellValue"]; - isImageCell = [val isKindOfClass:[NSImage class]]; - } - if (!isImageCell) { - // Image cells have a title that includes addresses that aren't going - // to be constant, so we don't encode them. All the info we need - // is going to be in the CellValue encoding. - [inCoder encodeObject:[self title] forKey:@"CellTitle"]; - } - ENCODE_NSINTEGER(inCoder, [self state], @"CellState"); - ENCODE_NSINTEGER(inCoder, [self tag], @"CellTag"); -} - -@end - -@implementation NSImage (GTMUnitTestingAdditions) - -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - [inCoder encodeObject:NSStringFromSize([self size]) forKey:@"ImageSize"]; - [inCoder encodeObject:[self name] forKey:@"ImageName"]; -} - -- (CGImageRef)gtm_unitTestImage { - // Create up a context - NSSize size = [self size]; - NSRect rect = GTMNSRectOfSize(size); - CGSize cgSize = GTMNSSizeToCGSize(size); - CGContextRef contextRef = GTMCreateUnitTestBitmapContextOfSizeWithData(cgSize, - NULL); - NSGraphicsContext *bitmapContext - = [NSGraphicsContext graphicsContextWithGraphicsPort:contextRef flipped:NO]; - _GTMDevAssert(bitmapContext, @"Couldn't create ns bitmap context"); - - [NSGraphicsContext saveGraphicsState]; - [NSGraphicsContext setCurrentContext:bitmapContext]; - [self drawInRect:rect fromRect:rect operation:NSCompositeCopy fraction:1.0]; - - CGImageRef image = CGBitmapContextCreateImage(contextRef); - CFRelease(contextRef); - [NSGraphicsContext restoreGraphicsState]; - return (CGImageRef)GTMCFAutorelease(image); -} - -@end - -@implementation NSMenu (GTMUnitTestingAdditions) - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - // Hack here to work around - // rdar://5881796 Application menu item title wrong when accessed programatically - // which causes us to have different results on x86_64 vs x386. - // Hack is braced intentionally. We don't record the title of the - // "application" menu or it's menu title because they are wrong on 32 bit. - // They appear to work right on 64bit. - { - NSMenu *mainMenu = [NSApp mainMenu]; - NSMenu *appleMenu = [[mainMenu itemAtIndex:0] submenu]; - if (![self isEqual:appleMenu]) { - [inCoder encodeObject:[self title] forKey:@"MenuTitle"]; - } - } - // Descend down into the menuitems allowing them to store their state - NSMenuItem *menuItem = nil; - int i = 0; - GTM_FOREACH_OBJECT(menuItem, [self itemArray]) { - [inCoder encodeObject:menuItem - forKey:[NSString stringWithFormat:@"MenuItem %d", i]]; - ++i; - } -} - -@end - -@implementation NSMenuItem (GTMUnitTestingAdditions) - -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - // Hack here to work around - // rdar://5881796 Application menu item title wrong when accessed programatically - // which causes us to have different results on x86_64 vs x386. - // See comment above. - { - NSMenu *mainMenu = [NSApp mainMenu]; - NSMenuItem *appleMenuItem = [mainMenu itemAtIndex:0]; - if (![self isEqual:appleMenuItem]) { - [inCoder encodeObject:[self title] forKey:@"MenuItemTitle"]; - } - } - [inCoder encodeObject:[self keyEquivalent] forKey:@"MenuItemKeyEquivalent"]; - [inCoder encodeBool:[self isSeparatorItem] forKey:@"MenuItemIsSeparator"]; - ENCODE_NSINTEGER(inCoder, [self state], @"MenuItemState"); - [inCoder encodeBool:[self isEnabled] forKey:@"MenuItemIsEnabled"]; - [inCoder encodeBool:[self isAlternate] forKey:@"MenuItemIsAlternate"]; - [inCoder encodeObject:[self toolTip] forKey:@"MenuItemTooltip"]; - ENCODE_NSINTEGER(inCoder, [self tag], @"MenuItemTag"); - ENCODE_NSINTEGER(inCoder, [self indentationLevel], @"MenuItemIndentationLevel"); - - // Do our submenu if neccessary - if ([self hasSubmenu]) { - [inCoder encodeObject:[self submenu] forKey:@"MenuItemSubmenu"]; - } -} - -@end - -@implementation NSTabView (GTMUnitTestingAdditions) - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - NSTabViewItem *tab = nil; - int i = 0; - GTM_FOREACH_OBJECT(tab, [self tabViewItems]) { - NSString *key = [NSString stringWithFormat:@"TabItem %d", i]; - [inCoder encodeObject:tab forKey:key]; - i = i + 1; - } -} - -@end - -@implementation NSTabViewItem (GTMUnitTestingAdditions) - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - [inCoder encodeObject:[self label] forKey:@"TabLabel"]; - [inCoder encodeObject:[self view] forKey:@"TabView"]; -} - -@end - -@implementation NSToolbar (GTMUnitTestingAdditions) - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - NSToolbarItem *item = nil; - NSUInteger i = 0; - GTM_FOREACH_OBJECT(item, [self items]) { - NSString *key - = [NSString stringWithFormat:@"ToolbarItem %lu", (unsigned long)i]; - [inCoder encodeObject:item forKey:key]; - i = i + 1; - } -} - -@end - -@implementation NSToolbarItem (GTMUnitTestingAdditions) - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - [inCoder encodeObject:[self label] forKey:@"Label"]; - [inCoder encodeObject:[self paletteLabel] forKey:@"PaletteLabel"]; - [inCoder encodeObject:[self toolTip] forKey:@"ToolTip"]; - NSView *view = [self view]; - if (view) { - [inCoder encodeObject:view forKey:@"View"]; - } -} - -@end - -@implementation NSMatrix (GTMUnitTestingAdditions) - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - - ENCODE_NSINTEGER(inCoder, [self mode], @"MatrixMode"); - ENCODE_NSINTEGER(inCoder, [self numberOfRows], @"MatrixRowCount"); - ENCODE_NSINTEGER(inCoder, [self numberOfColumns], @"MatrixColumnCount"); - [inCoder encodeBool:[self allowsEmptySelection] - forKey:@"MatrixAllowEmptySelection"]; - [inCoder encodeBool:[self isSelectionByRect] forKey:@"MatrixSelectionByRect"]; - [inCoder encodeBool:[self autosizesCells] forKey:@"MatrixAutosizesCells"]; - [inCoder encodeSize:[self intercellSpacing] forKey:@"MatrixIntercellSpacing"]; - - [inCoder encodeObject:[self prototype] forKey:@"MatrixCellPrototype"]; - - // Dump the list of cells - NSCell *cell; - long i = 0; - GTM_FOREACH_OBJECT(cell, [self cells]) { - [inCoder encodeObject:cell - forKey:[NSString stringWithFormat:@"MatrixCell %ld", i]]; - ++i; - } -} - -@end - -@implementation NSBox (GTMUnitTestingAdditions) - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - - [inCoder encodeObject:[self title] forKey:@"BoxTitle"]; - ENCODE_NSINTEGER(inCoder, [self titlePosition], @"BoxTitlePosition"); - ENCODE_NSINTEGER(inCoder, [self boxType], @"BoxType"); - ENCODE_NSINTEGER(inCoder, [self borderType], @"BoxBorderType"); - // 10.5+ [inCoder encodeBool:[self isTransparent] forKey:@"BoxIsTransparent"]; -} - -@end - -@implementation NSSegmentedControl (GTMUnitTestingAdditions) - -// Encodes the state of an NSSegmentedControl and all its segments. -// -// Arguments: -// inCoder - the coder to encode state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - - NSInteger segmentCount = [self segmentCount]; - ENCODE_NSINTEGER(inCoder, segmentCount, @"SegmentCount"); - - for (NSInteger i = 0; i < segmentCount; ++i) { - NSString *key = [NSString stringWithFormat:@"Segment %ld", (long)i]; - [inCoder encodeObject:[self labelForSegment:i] forKey:key]; - } -} - -@end - -@implementation NSComboBox (GTMUnitTestingAdditions) - -- (BOOL)gtm_shouldEncodeStateForSubviews { - // Subclass of NSTextView, don't want subviews for the same reason. - return NO; -} - -// Encodes the state of an NSSegmentedControl and all its segments. -// -// Arguments: -// inCoder - the coder to encode state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - - NSInteger aCount = [self numberOfItems]; - ENCODE_NSINTEGER(inCoder, aCount, @"ComboBoxNumberOfItems"); - aCount = [self numberOfVisibleItems]; - ENCODE_NSINTEGER(inCoder, aCount, @"ComboBoxNumberOfVisibleItems"); - - // Include the objectValues if it doesn't use a data source. - if (![self usesDataSource]) { - NSArray *objectValues = [self objectValues]; - for (NSUInteger i = 0; i < [objectValues count]; ++i) { - id value = [objectValues objectAtIndex:i]; - if ([value isKindOfClass:[NSString class]]) { - NSString *key = [NSString stringWithFormat:@"ComboBoxObjectValue %lu", - (unsigned long)i]; - [inCoder encodeObject:value forKey:key]; - } - } - } -} - -@end - - -// A view that allows you to delegate out drawing using the formal -// GTMUnitTestViewDelegate protocol above. This is useful when writing up unit -// tests for visual elements. -// Your test will often end up looking like this: -// - (void)testFoo { -// GTMAssertDrawingEqualToFile(self, NSMakeSize(200, 200), @"Foo", nil, nil); -// } -// and your testSuite will also implement the unitTestViewDrawRect method to do -// it's actual drawing. The above creates a view of size 200x200 that draws -// it's content using |self|'s unitTestViewDrawRect method and compares it to -// the contents of the file Foo.tif to make sure it's valid -@implementation GTMUnitTestView - -- (id)initWithFrame:(NSRect)frame - drawer:(id<GTMUnitTestViewDrawer>)drawer - contextInfo:(void*)contextInfo { - self = [super initWithFrame:frame]; - if (self != nil) { - drawer_ = [drawer retain]; - contextInfo_ = contextInfo; - } - return self; -} - -- (void)dealloc { - [drawer_ release]; - [super dealloc]; -} - - -- (void)drawRect:(NSRect)rect { - [drawer_ gtm_unitTestViewDrawRect:rect contextInfo:contextInfo_]; -} - - -@end - -@implementation NSView (GTMUnitTestingAdditions) - -// Returns an image containing a representation of the object -// suitable for use in comparing against a master image. -// Does all of it's drawing with smoothfonts and antialiasing off -// to avoid issues with font smoothing settings and antialias differences -// between ppc and x86. -// -// Returns: -// an image of the object -- (CGImageRef)gtm_unitTestImage { - // Create up a context - NSRect bounds = [self bounds]; - CGSize cgSize = GTMNSSizeToCGSize(bounds.size); - CGContextRef contextRef = GTMCreateUnitTestBitmapContextOfSizeWithData(cgSize, - NULL); - NSGraphicsContext *bitmapContext - = [NSGraphicsContext graphicsContextWithGraphicsPort:contextRef flipped:NO]; - _GTMDevAssert(bitmapContext, @"Couldn't create ns bitmap context"); - - // Save our state and turn off font smoothing and antialias. - CGContextSaveGState(contextRef); - CGContextSetShouldSmoothFonts(contextRef, false); - CGContextSetShouldAntialias(contextRef, false); - [self displayRectIgnoringOpacity:bounds inContext:bitmapContext]; - - CGImageRef image = CGBitmapContextCreateImage(contextRef); - CFRelease(contextRef); - return (CGImageRef)GTMCFAutorelease(image); -} - -// Returns whether gtm_unitTestEncodeState should recurse into subviews -// of a particular view. -// If you have "Full keyboard access" in the -// Keyboard & Mouse > Keyboard Shortcuts preferences pane set to "Text boxes -// and Lists only" that Apple adds a set of subviews to NSTextFields. So in the -// case of NSTextFields we don't want to recurse into their subviews. There may -// be other cases like this, so instead of specializing gtm_unitTestEncodeState: to -// look for NSTextFields, NSTextFields will just not allow us to recurse into -// their subviews. -// -// Returns: -// should gtm_unitTestEncodeState pick up subview state. -- (BOOL)gtm_shouldEncodeStateForSubviews { - return YES; -} - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - [inCoder encodeBool:[self isHidden] forKey:@"ViewIsHidden"]; - [inCoder encodeObject:[self toolTip] forKey:@"ViewToolTip"]; - NSArray *supportedAttrs = [self accessibilityAttributeNames]; - if ([supportedAttrs containsObject:NSAccessibilityHelpAttribute]) { - NSString *help - = [self accessibilityAttributeValue:NSAccessibilityHelpAttribute]; - [inCoder encodeObject:help forKey:@"ViewAccessibilityHelp"]; - } - if ([supportedAttrs containsObject:NSAccessibilityDescriptionAttribute]) { - NSString *description - = [self accessibilityAttributeValue:NSAccessibilityDescriptionAttribute]; - [inCoder encodeObject:description forKey:@"ViewAccessibilityDescription"]; - } - NSMenu *menu = [self menu]; - if (menu) { - [inCoder encodeObject:menu forKey:@"ViewMenu"]; - } - if ([self gtm_shouldEncodeStateForSubviews]) { - NSView *subview = nil; - int i = 0; - GTM_FOREACH_OBJECT(subview, [self subviews]) { - [inCoder encodeObject:subview forKey:[NSString stringWithFormat:@"ViewSubView %d", i]]; - i = i + 1; - } - } -} - -@end - diff --git a/UnitTesting/GTMAppKitUnitTestingUtilities.h b/UnitTesting/GTMAppKitUnitTestingUtilities.h index 1edccd7..b3852ba 100644 --- a/UnitTesting/GTMAppKitUnitTestingUtilities.h +++ b/UnitTesting/GTMAppKitUnitTestingUtilities.h @@ -23,21 +23,6 @@ // Collection of utilities for unit testing @interface GTMAppKitUnitTestingUtilities : NSObject -// Sets up the user interface so that we can run consistent UI unittests on -// it. This includes setting scroll bar types, setting selection colors -// setting color spaces etc so that everything is consistent across machines. -// This should be called in main, before NSApplicationMain is called. -+ (void)setUpForUIUnitTests; - -// Syntactic sugar combining that checks to see if we are running unittests -// and then calls setUpForUIUnitTests wrapped up in a NSAutoreleasePool so that -// your main can look like this: -// int main(int argc, const char *argv[]) { -// [UnitTestingUtilities setUpForUIUnitTestsIfBeingTested]; -// return NSApplicationMain(argc, argv); -// } -+ (void)setUpForUIUnitTestsIfBeingTested; - // Check if the screen saver is running. Some unit tests don't work when // the screen saver is active. + (BOOL)isScreenSaverActive; diff --git a/UnitTesting/GTMAppKitUnitTestingUtilities.m b/UnitTesting/GTMAppKitUnitTestingUtilities.m index 71c4d76..d90d608 100644 --- a/UnitTesting/GTMAppKitUnitTestingUtilities.m +++ b/UnitTesting/GTMAppKitUnitTestingUtilities.m @@ -17,68 +17,12 @@ // #import "GTMAppKitUnitTestingUtilities.h" -#import <AppKit/AppKit.h> -#include <signal.h> -#include <unistd.h> #import "GTMDefines.h" -// The Users profile before we change it on them -static CMProfileRef gGTMCurrentColorProfile = NULL; - -// Compares two color profiles -static BOOL GTMAreCMProfilesEqual(CMProfileRef a, CMProfileRef b); -// Stores the user's color profile away, and changes over to generic. -static void GTMSetColorProfileToGenericRGB(); -// Restores the users profile. -static void GTMRestoreColorProfile(void); -// Signal handler to try and restore users profile. -static void GTMHandleCrashSignal(int signalNumber); - static CGKeyCode GTMKeyCodeForCharCode(CGCharCode charCode); @implementation GTMAppKitUnitTestingUtilities -// Sets up the user interface so that we can run consistent UI unittests on it. -+ (void)setUpForUIUnitTests { - // Give some names to undocumented defaults values - const NSInteger MediumFontSmoothing = 2; - const NSInteger BlueTintedAppearance = 1; - - // This sets up some basic values that we want as our defaults for doing pixel - // based user interface tests. These defaults only apply to the unit test app, - // except or the color profile which will be set system wide, and then - // restored when the tests complete. - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - // Scroll arrows together bottom - [defaults setObject:@"DoubleMax" forKey:@"AppleScrollBarVariant"]; - // Smallest font size to CG should perform antialiasing on - [defaults setInteger:4 forKey:@"AppleAntiAliasingThreshold"]; - // Type of smoothing - [defaults setInteger:MediumFontSmoothing forKey:@"AppleFontSmoothing"]; - // Blue aqua - [defaults setInteger:BlueTintedAppearance forKey:@"AppleAquaColorVariant"]; - // Standard highlight colors - [defaults setObject:@"0.709800 0.835300 1.000000" - forKey:@"AppleHighlightColor"]; - [defaults setObject:@"0.500000 0.500000 0.500000" - forKey:@"AppleOtherHighlightColor"]; - // Use english plz - [defaults setObject:[NSArray arrayWithObject:@"en"] forKey:@"AppleLanguages"]; - // How fast should we draw sheets. This speeds up the sheet tests considerably - [defaults setFloat:.001f forKey:@"NSWindowResizeTime"]; - // Switch over the screen profile to "generic rgb". This installs an - // atexit handler to return our profile back when we are done. - GTMSetColorProfileToGenericRGB(); -} - -+ (void)setUpForUIUnitTestsIfBeingTested { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - if ([GTMFoundationUnitTestingUtilities areWeBeingUnitTested]) { - [self setUpForUIUnitTests]; - } - [pool drain]; -} - + (BOOL)isScreenSaverActive { BOOL answer = NO; ProcessSerialNumber psn; @@ -150,108 +94,6 @@ CantWorkWithScreenSaver: @end -BOOL GTMAreCMProfilesEqual(CMProfileRef a, CMProfileRef b) { - BOOL equal = YES; - if (a != b) { - CMProfileMD5 aMD5; - CMProfileMD5 bMD5; - CMError aMD5Err = CMGetProfileMD5(a, aMD5); - CMError bMD5Err = CMGetProfileMD5(b, bMD5); - equal = (!aMD5Err && - !bMD5Err && - !memcmp(aMD5, bMD5, sizeof(CMProfileMD5))) ? YES : NO; - } - return equal; -} - -void GTMRestoreColorProfile(void) { - if (gGTMCurrentColorProfile) { - CGDirectDisplayID displayID = CGMainDisplayID(); - CMError error = CMSetProfileByAVID((UInt32)displayID, - gGTMCurrentColorProfile); - CMCloseProfile(gGTMCurrentColorProfile); - if (error) { - // COV_NF_START - // No way to force this case in a unittest. - _GTMDevLog(@"Failed to restore previous color profile! " - @"You may need to open System Preferences : Displays : Color " - @"and manually restore your color settings. (Error: %ld)", - (long)error); - // COV_NF_END - } else { - _GTMDevLog(@"Color profile restored"); - } - gGTMCurrentColorProfile = NULL; - } -} - -void GTMHandleCrashSignal(int signalNumber) { - // Going down in flames, might as well try to restore the color profile - // anyways. - GTMRestoreColorProfile(); - // Go ahead and exit with the signal value relayed just incase. - _exit(signalNumber + 128); -} - -void GTMSetColorProfileToGenericRGB(void) { - NSColorSpace *genericSpace = [NSColorSpace genericRGBColorSpace]; - CMProfileRef genericProfile = (CMProfileRef)[genericSpace colorSyncProfile]; - CMProfileRef previousProfile; - CGDirectDisplayID displayID = CGMainDisplayID(); - CMError error = CMGetProfileByAVID((UInt32)displayID, &previousProfile); - if (error) { - // COV_NF_START - // No way to force this case in a unittest. - _GTMDevLog(@"Failed to get current color profile. " - "I will not be able to restore your current profile, thus I'm " - "not changing it. Many unit tests may fail as a result. (Error: %li)", - (long)error); - return; - // COV_NF_END - } - if (GTMAreCMProfilesEqual(genericProfile, previousProfile)) { - CMCloseProfile(previousProfile); - return; - } - CFStringRef previousProfileName; - CFStringRef genericProfileName; - CMCopyProfileDescriptionString(previousProfile, &previousProfileName); - CMCopyProfileDescriptionString(genericProfile, &genericProfileName); - - _GTMDevLog(@"Temporarily changing your system color profile from \"%@\" to \"%@\".", - previousProfileName, genericProfileName); - _GTMDevLog(@"This allows the pixel-based unit-tests to have consistent color " - "values across all machines."); - _GTMDevLog(@"The colors on your screen will change for the duration of the testing."); - - - if ((error = CMSetProfileByAVID((UInt32)displayID, genericProfile))) { - // COV_NF_START - // No way to force this case in a unittest. - _GTMDevLog(@"Failed to set color profile to \"%@\"! Many unit tests will fail as " - "a result. (Error: %li)", genericProfileName, (long)error); - // COV_NF_END - } else { - gGTMCurrentColorProfile = previousProfile; - atexit(GTMRestoreColorProfile); - // WebKit DRT and Chrome TestShell both use this trick. If the test is - // already crashing, might as well try restoring the color profile, and if - // it fails, it is no worse than crashing without having tried. - signal(SIGILL, GTMHandleCrashSignal); - signal(SIGTRAP, GTMHandleCrashSignal); - signal(SIGEMT, GTMHandleCrashSignal); - signal(SIGFPE, GTMHandleCrashSignal); - signal(SIGBUS, GTMHandleCrashSignal); - signal(SIGSEGV, GTMHandleCrashSignal); - signal(SIGSYS, GTMHandleCrashSignal); - signal(SIGPIPE, GTMHandleCrashSignal); - signal(SIGXCPU, GTMHandleCrashSignal); - signal(SIGXFSZ, GTMHandleCrashSignal); - } - CFRelease(previousProfileName); - CFRelease(genericProfileName); -} - // Returns a virtual key code for a given charCode. Handles all of the // NS*FunctionKeys as well. static CGKeyCode GTMKeyCodeForCharCode(CGCharCode charCode) { diff --git a/UnitTesting/GTMCALayer+UnitTesting.h b/UnitTesting/GTMCALayer+UnitTesting.h deleted file mode 100644 index b757ba9..0000000 --- a/UnitTesting/GTMCALayer+UnitTesting.h +++ /dev/null @@ -1,46 +0,0 @@ -// -// GTMCALayer+UnitTesting.h -// -// Code for making unit testing of graphics/UI easier. Generally you -// will only want to look at the macros: -// GTMAssertDrawingEqualToFile -// GTMAssertViewRepEqualToFile -// and the protocol GTMUnitTestCALayerDrawer. When using these routines -// make sure you are using device colors and not calibrated/generic colors -// or else your test graphics WILL NOT match across devices/graphics cards. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <QuartzCore/QuartzCore.h> -#import "GTMNSObject+UnitTesting.h" - -// Category for making unit testing of graphics/UI easier. - -// Allows you to take a state of a view. Supports both image and state. -// See GTMNSObject+UnitTesting.h for details. -@interface CALayer (GTMUnitTestingAdditions) <GTMUnitTestingImaging> -// Returns whether gtm_unitTestEncodeState should recurse into sublayers -// -// Returns: -// should gtm_unitTestEncodeState pick up sublayer state. -- (BOOL)gtm_shouldEncodeStateForSublayers; -@end - -@interface NSObject (GTMCALayerUnitTestingDelegateMethods) -// Delegate method that allows a delegate for a layer to -// decide whether we should recurse -- (BOOL)gtm_shouldEncodeStateForSublayersOfLayer:(CALayer*)layer; -@end diff --git a/UnitTesting/GTMCALayer+UnitTesting.m b/UnitTesting/GTMCALayer+UnitTesting.m deleted file mode 100644 index 52367e5..0000000 --- a/UnitTesting/GTMCALayer+UnitTesting.m +++ /dev/null @@ -1,89 +0,0 @@ -// -// GTMCALayer+UnitTesting.m -// -// Category for making unit testing of graphics/UI easier. -// Allows you to save a view out to a image file, and compare a view -// with a previously stored representation to make sure it hasn't changed. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMCALayer+UnitTesting.h" - -@implementation CALayer (GTMUnitTestingAdditions) - -// Returns an image containing a representation of the object -// suitable for use in comparing against a master image. -// NB this means that all colors should be from "NSDevice" color space -// Does all of it's drawing with smoothfonts and antialiasing off -// to avoid issues with font smoothing settings and antialias differences -// between ppc and x86. -// -// Returns: -// an image of the object -- (CGImageRef)gtm_unitTestImage { - CGRect bounds = [self bounds]; - CGSize size = CGSizeMake(CGRectGetWidth(bounds), CGRectGetHeight(bounds)); - CGContextRef context = GTMCreateUnitTestBitmapContextOfSizeWithData(size, - NULL); - _GTMDevAssert(context, @"Couldn't create context"); - - // iPhone renders are flipped - CGAffineTransform transform = CGAffineTransformMakeTranslation(0, size.height); - transform = CGAffineTransformScale(transform, 1.0, -1.0); - CGContextConcatCTM(context, transform); - - [self renderInContext:context]; - CGImageRef image = CGBitmapContextCreateImage(context); - CFRelease(context); - return (CGImageRef)GTMCFAutorelease(image); -} - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - [inCoder encodeBool:[self isHidden] forKey:@"LayerIsHidden"]; - [inCoder encodeBool:[self isDoubleSided] forKey:@"LayerIsDoublesided"]; - [inCoder encodeBool:[self isOpaque] forKey:@"LayerIsOpaque"]; - [inCoder encodeFloat:[self opacity] forKey:@"LayerOpacity"]; - // TODO: There is a ton more we can add here. What are we interested in? - if ([self gtm_shouldEncodeStateForSublayers]) { - int i = 0; - for (CALayer *subLayer in [self sublayers]) { - [inCoder encodeObject:subLayer - forKey:[NSString stringWithFormat:@"CALayerSubLayer %d", i]]; - i = i + 1; - } - } -} - -// Returns whether gtm_unitTestEncodeState should recurse into sublayers -// -// Returns: -// should gtm_unitTestEncodeState pick up sublayer state. -- (BOOL)gtm_shouldEncodeStateForSublayers { - BOOL value = YES; - if([self.delegate respondsToSelector:@selector(gtm_shouldEncodeStateForSublayersOfLayer:)]) { - value = [self.delegate gtm_shouldEncodeStateForSublayersOfLayer:self]; - } - return value; -} - -@end diff --git a/UnitTesting/GTMDevLogUnitTestingBridge.m b/UnitTesting/GTMDevLogUnitTestingBridge.m deleted file mode 100644 index c57893b..0000000 --- a/UnitTesting/GTMDevLogUnitTestingBridge.m +++ /dev/null @@ -1,44 +0,0 @@ -// -// GTMDevLogUnitTestingBridge.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#include "GTMUnitTestDevLog.h" - -// -// NOTE: Odds are this file should not be included in your project. It is -// only needed for some enhanced unit testing. -// -// By adding: -// #define _GTMDevLog _GTMUnitTestDevLog -// to your prefix header (like the GTM Framework does), this function then -// works to forward logging messages to the GTMUnitTestDevLog class to -// allow logging validation during unittest, otherwise the messages go to -// NSLog like normal. -// -// See GTMUnitTestDevLog.h for more information on checking logs in unittests. -// -void _GTMUnitTestDevLog(NSString *format, ...) { - Class devLogClass = NSClassFromString(@"GTMUnitTestDevLog"); - va_list argList; - va_start(argList, format); - if (devLogClass) { - [devLogClass log:format args:argList]; - } else { - NSLogv(format, argList); // COV_NF_LINE the class is in all our unittest setups - } - va_end(argList); -} diff --git a/UnitTesting/GTMIPhoneSecurityLibraryTest.m b/UnitTesting/GTMIPhoneSecurityLibraryTest.m deleted file mode 100644 index f6fd37a..0000000 --- a/UnitTesting/GTMIPhoneSecurityLibraryTest.m +++ /dev/null @@ -1,75 +0,0 @@ -// -// GTMIPhoneSecurityLibraryTest.m -// -// Copyright 2012 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" - -// Tests that using the keychain library within unit tests works correctly. -@interface GTMIPhoneSecurityLibraryTest : GTMTestCase -@end - -@implementation GTMIPhoneSecurityLibraryTest - -static NSString * const kAccount = @"GTMTestingSecurityAccount"; -static NSString * const kService = @"GTMTestingSecurityService"; -static NSString * const kPassword = @"GTMTestingSecurityPassword"; - -- (NSMutableDictionary *)keychainQueryItem { - return [NSMutableDictionary dictionaryWithObjectsAndKeys: - (id)kSecClassGenericPassword, (id)kSecClass, - kAccount, (id)kSecAttrAccount, - kService, (id)kSecAttrService, - nil]; -} - -- (void)assertCorrectPassword { - NSMutableDictionary *keychainQueryItem = [self keychainQueryItem]; - [keychainQueryItem setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData]; - [keychainQueryItem setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit]; - - CFDataRef result = NULL; - OSStatus status = SecItemCopyMatching((CFDictionaryRef)keychainQueryItem, - (CFTypeRef *)&result); - STAssertEquals(status, - (OSStatus)noErr, - @"Error retrieving password from keychain"); - STAssertNotNULL(result, @"No password found"); - NSString *password = - [[[NSString alloc] initWithData:(NSData *)result - encoding:NSUTF8StringEncoding] autorelease]; - STAssertEqualStrings(kPassword, password, @"Unexpected password found"); - CFRelease(result); -} - -- (void)testSecurityCalls { - NSMutableDictionary *passwordItem = [self keychainQueryItem]; - NSData *passwordData = [kPassword dataUsingEncoding:NSUTF8StringEncoding]; - [passwordItem setObject:passwordData forKey:(id)kSecValueData]; - - OSStatus result = SecItemAdd((CFDictionaryRef)passwordItem, NULL); - STAssertTrue(result == noErr || result == errSecDuplicateItem, - @"Unexpected result code: %lu", - (unsigned long)result); - [self assertCorrectPassword]; - - // Test that accessing the keychain will continue to work after a delay. - NSDate *sleepUntil = [NSDate dateWithTimeIntervalSinceNow:30]; - [[NSRunLoop mainRunLoop] runUntilDate:sleepUntil]; - [self assertCorrectPassword]; -} - -@end diff --git a/UnitTesting/GTMIPhoneUnitTestDelegate.m b/UnitTesting/GTMIPhoneUnitTestDelegate.m index affcc3e..a112a99 100644 --- a/UnitTesting/GTMIPhoneUnitTestDelegate.m +++ b/UnitTesting/GTMIPhoneUnitTestDelegate.m @@ -179,7 +179,7 @@ static int ClassSort(const void *a, const void *b) { fputs([fixtureStartString UTF8String], stderr); fflush(stderr); NSInvocation *invocation; - GTM_FOREACH_OBJECT(invocation, invocations) { + for (invocation in invocations) { GTMTestCase *testCase = [[currClass alloc] initWithInvocation:invocation]; BOOL failed = NO; diff --git a/UnitTesting/GTMIPhoneUnitTestMain.m b/UnitTesting/GTMIPhoneUnitTestMain.m index 6bfc711..0a504b7 100644 --- a/UnitTesting/GTMIPhoneUnitTestMain.m +++ b/UnitTesting/GTMIPhoneUnitTestMain.m @@ -22,6 +22,30 @@ #endif #import <UIKit/UIKit.h> +#if GTM_ENABLE_TCCSERVICE_ACCESS + +// Enable access to AddressBook, Calendar and Photos +// https://groups.google.com/forum/#!topic/kif-framework/xayP4VVBPyg + +__asm(".section __TEXT,__entitlements"); +__asm(".ascii \"" + "<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\n" + "<!DOCTYPE plist PUBLIC \\\"-//Apple//DTD PLIST 1.0//EN\\\" " + "\\\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\\\">" + "<plist version=\\\"1.0\\\">" + "<dict>" + "<key>com.apple.private.tcc.allow</key>" + "<array>" + "<string>kTCCServiceAddressBook</string>" + "<string>kTCCServiceCalendar</string>" + "<string>kTCCServicePhotos</string>" + "</array>" + "</dict>" + "</plist>" + "\""); + +#endif // GTM_ENABLE_TCCSERVICE_ACCESS + // Creates an application that runs all tests from classes extending // SenTestCase, outputs results and test run time, and terminates right // afterwards. @@ -32,8 +56,8 @@ int main(int argc, char *argv[]) { #else NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; #endif -#if GTM_IPHONE_USE_SENTEST - // Is using SenTest, just create a dummy app that can be used as the +#if GTM_IPHONE_USE_SENTEST || GTM_USING_XCTEST + // Is using SenTest or XCTest, just create a dummy app that can be used as the // TEST_HOST. retVal = UIApplicationMain(argc, argv, nil, nil); #else diff --git a/UnitTesting/GTMNSObject+BindingUnitTesting.h b/UnitTesting/GTMNSObject+BindingUnitTesting.h deleted file mode 100644 index feac5b3..0000000 --- a/UnitTesting/GTMNSObject+BindingUnitTesting.h +++ /dev/null @@ -1,120 +0,0 @@ -// -// GTMNSObject+BindingUnitTesting.h -// -// Utilities for doing advanced unittesting with object bindings. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#include <Foundation/Foundation.h> - -// Utility functions for GTMTestExposedBindings Macro. Don't use it directly -// but use the macro below instead -BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, - NSArray **errors); - -// Tests the setters and getters for exposed bindings -// For objects that expose bindings, this tests them for you, saving you from -// having to write a whole pile of set/get test code if you add binding support. -// You will need to implement valueClassForBinding: for your bindings, -// and you may possibly want to implement unitTestExposedBindingsToIgnore -// and unitTestExposedBindingsTestValues. See descriptions of those -// methods below for details. -// Implemented as a macro to match the rest of the SenTest macros. -// -// Args: -// a1: The object to be checked. -// description: A format string as in the printf() function. -// Can be nil or an empty string but must be present. -// ...: A variable number of arguments to the format string. Can be absent. -// -#define GTMTestExposedBindings(a1, description, ...) \ -do { \ - NSObject *a1Object = (a1); \ - NSArray *errors = nil; \ - BOOL isGood = GTMDoExposedBindingsFunctionCorrectly(a1Object, &errors); \ - if (!isGood) { \ - NSString *failString; \ - GTM_FOREACH_OBJECT(failString, errors) { \ - if (description != nil) { \ - STFail(@"%@: %@", failString, STComposeString(description, ##__VA_ARGS__)); \ - } else { \ - STFail(@"%@", failString); \ - } \ - } \ - } \ -} while(0) - -// Utility class for setting up Binding Tests. Basically a pair of a value to -// set a binding to, followed by the expected return value. -// See description of gtm_unitTestExposedBindingsTestValues: below -// for example of usage. -@interface GTMBindingUnitTestData : NSObject { - @private - id valueToSet_; - id expectedValue_; -} - -+ (id)testWithIdentityValue:(id)value; -+ (id)testWithValue:(id)value expecting:(id)expecting; -- (id)initWithValue:(id)value expecting:(id)expecting; -- (id)valueToSet; -- (id)expectedValue; -@end - -@interface NSObject (GTMBindingUnitTestingAdditions) -// Allows you to ignore certain bindings when running GTMTestExposedBindings -// If you have bindings you want to ignore, add them to the array returned -// by this method. The standard way to implement this would be: -// - (NSMutableArray*)unitTestExposedBindingsToIgnore { -// NSMutableArray *array = [super unitTestExposedBindingsToIgnore]; -// [array addObject:@"bindingToIgnore1"]; -// ... -// return array; -// } -// The NSObject implementation by default will ignore NSFontBoldBinding, -// NSFontFamilyNameBinding, NSFontItalicBinding, NSFontNameBinding and -// NSFontSizeBinding if your exposed bindings contains NSFontBinding because -// the NSFont*Bindings are NOT KVC/KVO compliant. -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore; - -// Allows you to set up test values for your different bindings. -// if you have certain values you want to test against your bindings, add -// them to the array returned by this method. The array is an array of -// GTMBindingUnitTestData. -// The standard way to implement this would be: -// - (NSMutableArray*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding { -// NSMutableArray *dict = [super unitTestExposedBindingsTestValues:binding]; -// if ([binding isEqualToString:@"myBinding"]) { -// MySpecialBindingValueSet *value -// = [[[MySpecialBindingValueSet alloc] init] autorelease]; -// [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; -// ... -// else if ([binding isEqualToString:@"myBinding2"]) { -// ... -// } -// return array; -// } -// The NSObject implementation handles many of the default bindings, and -// gives you a reasonable set of test values to start. -// See the implementation for the current list of bindings, and values that we -// set for those bindings. -- (NSMutableArray*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding; - -// A special version of isEqualTo to test whether two binding values are equal -// by default it calls directly to isEqualTo: but can be overridden for special -// cases (like NSImages) where the standard isEqualTo: isn't sufficient. -- (BOOL)gtm_unitTestIsEqualTo:(id)value; -@end diff --git a/UnitTesting/GTMNSObject+BindingUnitTesting.m b/UnitTesting/GTMNSObject+BindingUnitTesting.m deleted file mode 100644 index 4b43f58..0000000 --- a/UnitTesting/GTMNSObject+BindingUnitTesting.m +++ /dev/null @@ -1,577 +0,0 @@ -// -// GTMNSObject+BindingUnitTesting.m -// -// An informal protocol for doing advanced binding unittesting with objects. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <AppKit/AppKit.h> -#import "GTMDefines.h" -#import "GTMNSObject+BindingUnitTesting.h" -#import "GTMSystemVersion.h" - -BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, - NSArray **errors) { - NSMutableArray *errorArray = [NSMutableArray array]; - if (errors) { - *errors = nil; - } - NSArray *bindings = [object exposedBindings]; - if ([bindings count]) { - NSArray *bindingsToIgnore = [object gtm_unitTestExposedBindingsToIgnore]; - NSString *bindingKey; - GTM_FOREACH_OBJECT(bindingKey, bindings) { - if (![bindingsToIgnore containsObject:bindingKey]) { - Class theClass = [object valueClassForBinding:bindingKey]; - if (!theClass) { - NSString *error - = [NSString stringWithFormat:@"%@ should have valueClassForBinding '%@'", - object, bindingKey]; - [errorArray addObject:error]; - continue; - } - @try { - @try { - [object valueForKey:bindingKey]; - } - @catch (NSException *e) { - _GTMDevLog(@"%@ is not key value coding compliant for key %@", - object, bindingKey); - continue; - } // COV_NF_LINE - compiler bug - NSArray *testValues - = [object gtm_unitTestExposedBindingsTestValues:bindingKey]; - GTMBindingUnitTestData *testData; - GTM_FOREACH_OBJECT(testData, testValues) { - id valueToSet = [testData valueToSet]; - [object setValue:valueToSet forKey:bindingKey]; - id valueReceived = [object valueForKey:bindingKey]; - id desiredValue = [testData expectedValue]; - if (![desiredValue gtm_unitTestIsEqualTo:valueReceived]) { - NSString *error - = [NSString stringWithFormat:@"%@ unequal to expected %@ for binding '%@'", - valueReceived, desiredValue, bindingKey]; - [errorArray addObject:error]; - continue; - } - } - } - @catch(NSException *e) { - NSString *error - = [NSString stringWithFormat:@"%@:%@-> Binding %@", - [e name], [e reason], bindingKey]; - [errorArray addObject:error]; - } // COV_NF_LINE - compiler bug - } - } - } else { - NSString *error = - [NSString stringWithFormat:@"%@ does not have any exposed bindings", - object]; - [errorArray addObject:error]; - } - if (errors) { - *errors = errorArray; - } - return [errorArray count] == 0; -} - -@implementation GTMBindingUnitTestData -+ (id)testWithIdentityValue:(id)value { - return [self testWithValue:value expecting:value]; -} - -+ (id)testWithValue:(id)value expecting:(id)expecting { - return [[[self alloc] initWithValue:value expecting:expecting] autorelease]; -} - -- (id)initWithValue:(id)value expecting:(id)expecting { - if ((self = [super init])) { - valueToSet_ = [value retain]; - expectedValue_ = [expecting retain]; - } - return self; -} - -- (BOOL)isEqual:(id)object { - BOOL isEqual = [object isMemberOfClass:[self class]]; - if (isEqual) { - id objValue = [object valueToSet]; - id objExpect = [object expectedValue]; - isEqual = (((valueToSet_ == objValue) || ([valueToSet_ isEqual:objValue])) - && ((expectedValue_ == objExpect) || ([expectedValue_ isEqual:objExpect]))); - } - return isEqual; -} - -- (NSUInteger)hash { - return [valueToSet_ hash] + [expectedValue_ hash]; -} - -- (void)dealloc { - [valueToSet_ release]; - [expectedValue_ release]; - [super dealloc]; -} - -- (id)valueToSet { - return valueToSet_; -} - -- (id)expectedValue { - return expectedValue_; -} -@end - -@implementation NSObject (GTMBindingUnitTestingAdditions) - -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { - NSMutableArray *array = [NSMutableArray arrayWithObject:NSValueBinding]; - if ([[self exposedBindings] containsObject:NSFontBinding]) { - NSString *fontBindings[] = { NSFontBoldBinding, NSFontFamilyNameBinding, - NSFontItalicBinding, NSFontNameBinding, NSFontSizeBinding }; - for (size_t i = 0; i < sizeof(fontBindings) / sizeof(NSString*); ++i) { - [array addObject:fontBindings[i]]; - } - } - return array; -} - -- (NSMutableArray*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding { - - NSMutableArray *array = [NSMutableArray array]; - id value = [self valueForKey:binding]; - - // Always test identity if possible - if (value) { - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } - - // Now some default test values for a variety of bindings to make - // sure that we cover all the bases and save other people writing lots of - // duplicate test code. - - // If anybody can think of more to add, please go nuts. - if ([binding isEqualToString:NSAlignmentBinding]) { - value = [NSNumber numberWithInt:NSLeftTextAlignment]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithInt:NSRightTextAlignment]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithInt:NSCenterTextAlignment]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithInt:NSJustifiedTextAlignment]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithInt:NSNaturalTextAlignment]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - NSNumber *valueToSet = [NSNumber numberWithInt:500]; - [array addObject:[GTMBindingUnitTestData testWithValue:valueToSet - expecting:value]]; - valueToSet = [NSNumber numberWithInt:-1]; - [array addObject:[GTMBindingUnitTestData testWithValue:valueToSet - expecting:value]]; - } else if ([binding isEqualToString:NSAlternateImageBinding] || - [binding isEqualToString:NSImageBinding] || - [binding isEqualToString:NSMixedStateImageBinding] || - [binding isEqualToString:NSOffStateImageBinding] || - [binding isEqualToString:NSOnStateImageBinding]) { - // This handles all image bindings - value = [NSImage imageNamed:@"NSApplicationIcon"]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } else if ([binding isEqualToString:NSAnimateBinding] || - [binding isEqualToString:NSDocumentEditedBinding] || - [binding isEqualToString:NSEditableBinding] || - [binding isEqualToString:NSEnabledBinding] || - [binding isEqualToString:NSHiddenBinding] || - [binding isEqualToString:NSVisibleBinding] || - [binding isEqualToString:NSIsIndeterminateBinding] || - // NSTranparentBinding 10.5 only - [binding isEqualToString:@"transparent"]) { - // This handles all bool value bindings - value = [NSNumber numberWithBool:YES]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithBool:NO]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } else if ([binding isEqualToString:NSAlternateTitleBinding] || - [binding isEqualToString:NSHeaderTitleBinding] || - [binding isEqualToString:NSLabelBinding] || - [binding isEqualToString:NSTitleBinding] || - [binding isEqualToString:NSToolTipBinding]) { - // This handles all string value bindings - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:@"happy"]]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:@""]]; - - // Test some non-ascii roman text - char a_not_alpha[] = { 'A', 0xE2, 0x89, 0xA2, 0xCE, 0x91, '.', 0x00 }; - value = [NSString stringWithUTF8String:a_not_alpha]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - // Test some korean - char hangugo[] = { 0xED, 0x95, 0x9C, 0xEA, 0xB5, - 0xAD, 0xEC, 0x96, 0xB4, 0x00 }; - value = [NSString stringWithUTF8String:hangugo]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - // Test some japanese - char nihongo[] = { 0xE6, 0x97, 0xA5, 0xE6, 0x9C, - 0xAC, 0xE8, 0xAA, 0x9E, 0x00 }; - value = [NSString stringWithUTF8String:nihongo]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - // Test some arabic - char arabic[] = { 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x83, 0xd8, 0xa7, 0x00 }; - value = [NSString stringWithUTF8String:arabic]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } else if ([binding isEqualToString:NSRepresentedFilenameBinding]) { - // This handles all path bindings - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:@"/happy"]]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:@"/"]]; - - // Test some non-ascii roman text - char a_not_alpha[] = { '/', 'A', 0xE2, 0x89, 0xA2, 0xCE, 0x91, '.', 0x00 }; - value = [NSString stringWithUTF8String:a_not_alpha]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - // Test some korean - char hangugo[] = { '/', 0xED, 0x95, 0x9C, 0xEA, 0xB5, - 0xAD, 0xEC, 0x96, 0xB4, 0x00 }; - value = [NSString stringWithUTF8String:hangugo]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - // Test some japanese - char nihongo[] = { '/', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, - 0xAC, 0xE8, 0xAA, 0x9E, 0x00 }; - value = [NSString stringWithUTF8String:nihongo]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - // Test some arabic - char arabic[] = { '/', 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x83, 0xd8, 0xa7, 0x00 }; - value = [NSString stringWithUTF8String:arabic]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } else if ([binding isEqualToString:NSMaximumRecentsBinding]) { - value = [NSNumber numberWithInt:0]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithInt:-1]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithInt:INT16_MAX]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithInt:INT16_MIN]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } else if ([binding isEqualToString:NSRowHeightBinding]) { - NSNumber *valueOne = [NSNumber numberWithInt:1]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:valueOne]]; - value = [NSNumber numberWithInt:0]; - id value2 = [NSNumber numberWithInt:INT16_MIN]; - // Row height no longer accepts <= 0 values on SnowLeopard - // which is a good thing. - if ([GTMSystemVersion isSnowLeopardOrGreater]) { - [array addObject:[GTMBindingUnitTestData testWithValue:value - expecting:valueOne]]; - - [array addObject:[GTMBindingUnitTestData testWithValue:value2 - expecting:valueOne]]; - } else { - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value2]]; - } - value = [NSNumber numberWithInt:INT16_MAX]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } else if ([binding isEqualToString:NSMaxValueBinding] || - [binding isEqualToString:NSMaxWidthBinding] || - [binding isEqualToString:NSMinValueBinding] || - [binding isEqualToString:NSMinWidthBinding] || - [binding isEqualToString:NSContentWidthBinding] || - [binding isEqualToString:NSContentHeightBinding] || - [binding isEqualToString:NSWidthBinding] || - [binding isEqualToString:NSAnimationDelayBinding]) { - // NSAnimationDelay is deprecated on SnowLeopard. We continue to test it - // to make sure it doesn't get broken. - - // This handles all float value bindings - value = [NSNumber numberWithFloat:0]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithFloat:FLT_MAX]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithFloat:-FLT_MAX]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithFloat:FLT_MIN]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithFloat:-FLT_MIN]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithFloat:FLT_EPSILON]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSNumber numberWithFloat:-FLT_EPSILON]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } else if ([binding isEqualToString:NSTextColorBinding]) { - // This handles all color value bindings - value = [NSColor colorWithCalibratedWhite:1.0 alpha:1.0]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSColor colorWithCalibratedWhite:1.0 alpha:0.0]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSColor colorWithCalibratedWhite:1.0 alpha:0.5]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSColor colorWithCalibratedRed:0.5 green:0.5 blue:0.5 alpha:0.5]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSColor colorWithDeviceCyan:0.25 magenta:0.25 yellow:0.25 - black:0.25 alpha:0.25]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } else if ([binding isEqualToString:NSFontBinding]) { - // This handles all font value bindings - value = [NSFont boldSystemFontOfSize:[NSFont systemFontSize]]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSFont toolTipsFontOfSize:[NSFont smallSystemFontSize]]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - value = [NSFont labelFontOfSize:144.0]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } else if ([binding isEqualToString:NSRecentSearchesBinding] || - [binding isEqualToString:NSSortDescriptorsBinding]) { - // This handles all array value bindings - value = [NSArray array]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } else if ([binding isEqualToString:NSTargetBinding]) { - value = [NSNull null]; - [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; - } else { - _GTMDevLog(@"Skipped Binding: %@ for %@", binding, self); // COV_NF_LINE - } - return array; -} - -- (BOOL)gtm_unitTestIsEqualTo:(id)value { - return [self isEqualTo:value]; -} - -@end - -#pragma mark - -#pragma mark All the special AppKit Bindings issues below - -@interface NSImage (GTMBindingUnitTestingAdditions) -@end - -@implementation NSImage (GTMBindingUnitTestingAdditions) -- (BOOL)gtm_unitTestIsEqualTo:(id)value { - // NSImage just does pointer equality in the default isEqualTo implementation - // we need something a little more heavy duty that actually compares the - // images internally. - return [[self TIFFRepresentation] isEqualTo:[value TIFFRepresentation]]; -} -@end - -@interface NSScroller (GTMBindingUnitTestingAdditions) -@end - -@implementation NSScroller (GTMBindingUnitTestingAdditions) -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { - NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - SInt32 major, minor, bugFix; - [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix]; - if (major <= 10 && minor <= 5 && bugFix <= 5) { - // rdar://5849154 - NSScroller exposes binding with no value - // class for NSValueBinding - [array addObject:NSValueBinding]; - } - if (major <= 10 && minor <= 6) { - // Broken on SnowLeopard and below - // rdar://5849236 - NSScroller exposes binding for NSFontBinding - [array addObject:NSFontBinding]; - } - return array; -} -@end - -@interface NSTextField (GTMBindingUnitTestingAdditions) -@end - -@implementation NSTextField (GTMBindingUnitTestingAdditions) - -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { - NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - // Not KVC Compliant - for (int i = 0; i < 10; i++) { - [array addObject:[NSString stringWithFormat:@"displayPatternValue%d", i]]; - } - return array; -} - -- (NSMutableArray *)gtm_unitTestExposedBindingsTestValues:(NSString*)binding { - NSMutableArray *array = [super gtm_unitTestExposedBindingsTestValues:binding]; - if ([binding isEqualToString:NSAlignmentBinding]) { - SInt32 major, minor, bugFix; - [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix]; - if (major <= 10 && minor <= 6) { - // rdar://5851487 - If NSAlignmentBinding for a NSTextField is set to -1 - // and then got it returns 7 - NSNumber *textAlignment = [NSNumber numberWithInt:NSNaturalTextAlignment]; - GTMBindingUnitTestData *dataToRemove = - [GTMBindingUnitTestData testWithValue:[NSNumber numberWithInt:-1] - expecting:textAlignment]; - [array removeObject:dataToRemove]; - GTMBindingUnitTestData *dataToAdd = - [GTMBindingUnitTestData testWithValue:[NSNumber numberWithInt:-1] - expecting:[NSNumber numberWithInt:7]]; - [array addObject:dataToAdd]; - } - } - return array; -} -@end - -@interface NSSearchField (GTMBindingUnitTestingAdditions) -@end - -@implementation NSSearchField (GTMBindingUnitTestingAdditions) - -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { - NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - SInt32 major, minor, bugFix; - [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix]; - if (major <= 10 && minor <= 6) { - // rdar://5851491 - Setting NSAlignmentBinding of search field to - // NSCenterTextAlignment broken - // Broken on 10.6 and below. - [array addObject:NSAlignmentBinding]; - } - // Not KVC Compliant - [array addObject:NSPredicateBinding]; - return array; -} - -@end - -@interface NSWindow (GTMBindingUnitTestingAdditions) -@end - -@implementation NSWindow (GTMBindingUnitTestingAdditions) - -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { - NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - // Not KVC Compliant - [array addObject:NSContentWidthBinding]; - [array addObject:NSContentHeightBinding]; - for (int i = 0; i < 10; i++) { - [array addObject:[NSString stringWithFormat:@"displayPatternTitle%d", i]]; - } - return array; -} - -@end - -@interface NSBox (GTMBindingUnitTestingAdditions) -@end - -@implementation NSBox (GTMBindingUnitTestingAdditions) - -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { - NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - // Not KVC Compliant - for (int i = 0; i < 10; i++) { - [array addObject:[NSString stringWithFormat:@"displayPatternTitle%d", i]]; - } - return array; -} - -@end - -@interface NSTableView (GTMBindingUnitTestingAdditions) -@end - -@implementation NSTableView (GTMBindingUnitTestingAdditions) - -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { - NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - SInt32 major, minor, bugFix; - [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix]; - if (major <= 10 && minor <= 6) { - // rdar://6288332 - NSTableView does not respond to NSFontBinding - // Broken on 10.5 and SnowLeopard - [array addObject:NSFontBinding]; - } - // Not KVC Compliant - [array addObject:NSContentBinding]; - [array addObject:NSDoubleClickTargetBinding]; - [array addObject:NSDoubleClickArgumentBinding]; - [array addObject:NSSelectionIndexesBinding]; - return array; -} - -@end - -@interface NSTextView (GTMBindingUnitTestingAdditions) -@end - -@implementation NSTextView (GTMBindingUnitTestingAdditions) - -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { - NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - SInt32 major, minor, bugFix; - [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix]; - if (major <= 10 && minor <= 6) { - //rdar://5849335 - NSTextView only partially KVC compliant for key - // NSAttributedStringBinding - [array addObject:NSAttributedStringBinding]; - } - // Not KVC Compliant - [array addObject:NSDataBinding]; - [array addObject:NSValueURLBinding]; - [array addObject:NSValuePathBinding]; - return array; -} - -@end - -@interface NSTabView (GTMBindingUnitTestingAdditions) -@end - -@implementation NSTabView (GTMBindingUnitTestingAdditions) - -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { - NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - SInt32 major, minor, bugFix; - [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix]; - if (major <= 10 && minor <= 6) { - // rdar://5849248 - NSTabView exposes binding with no value class - // for NSSelectedIdentifierBinding - [array addObject:NSSelectedIdentifierBinding]; - } - // Not KVC Compliant - [array addObject:NSSelectedIndexBinding]; - [array addObject:NSSelectedLabelBinding]; - return array; -} - -@end - -@interface NSButton (GTMBindingUnitTestingAdditions) -@end - -@implementation NSButton (GTMBindingUnitTestingAdditions) - -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { - NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - // Not KVC Compliant - [array addObject:NSArgumentBinding]; - return array; -} - -@end - -@interface NSProgressIndicator (GTMBindingUnitTestingAdditions) -@end - -@implementation NSProgressIndicator (GTMBindingUnitTestingAdditions) - -- (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { - NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - // Not KVC Compliant - [array addObject:NSAnimateBinding]; - return array; -} - -@end diff --git a/UnitTesting/GTMNSObject+UnitTesting.h b/UnitTesting/GTMNSObject+UnitTesting.h deleted file mode 100644 index e98828a..0000000 --- a/UnitTesting/GTMNSObject+UnitTesting.h +++ /dev/null @@ -1,430 +0,0 @@ -// -// GTMNSObject+UnitTesting.h -// -// Utilities for doing advanced unittesting with objects. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMDefines.h" -#import <Foundation/Foundation.h> - -#if GTM_MACOS_SDK -#import <ApplicationServices/ApplicationServices.h> -#elif GTM_IPHONE_SDK -#import <CoreGraphics/CoreGraphics.h> -#endif - -#import "GTMSenTestCase.h" - -// NOTE: for "arch" in the file names on iOS, it is not CPU (armv6, armv7), but -// instead is "iPhone" or "iPad" for the device form factor. - -// Utility functions for GTMAssert* Macros. Don't use them directly -// but use the macros below instead -BOOL GTMIsObjectImageEqualToImageNamed(id object, - NSString *filename, - NSString **error); -BOOL GTMIsObjectStateEqualToStateNamed(id object, - NSString *filename, - NSString **error); - -// Fails when image of |a1| does not equal image in image file named |a2| -// -// Generates a failure when the unittest image of |a1| is not equal to the -// image stored in the image file named |a2|, or |a2| does not exist in the -// executable code's bundle. -// If |a2| does not exist in the executable code's bundle, we save a image -// representation of |a1| in the save directory with name |a2|. This can then -// be included in the bundle as the master to test against. -// If |a2| != |a1|, we save a image representation of |a1| in the save -// directory named |a2|_Failed and a file named |a2|_Failed_Diff showing the -// diff in red so that we can see what has changed. -// See pathForImageNamed to see how name is searched for. -// The save directory is specified by +gtm_setUnitTestSaveToDirectory, and is -// the desktop by default. -// Implemented as a macro to match the rest of the SenTest macros. -// -// Args: -// a1: The object to be checked. Must implement the -createUnitTestImage method. -// a2: The name of the image file to check against. -// Do not include the extension -// description: A format string as in the printf() function. -// Can be nil or an empty string but must be present. -// ...: A variable number of arguments to the format string. Can be absent. -// -#define GTMAssertObjectImageEqualToImageNamed(a1, a2, description, ...) \ -do { \ - id a1Object = (a1); \ - NSString* a2String = (a2); \ - NSString *failString = nil; \ - BOOL isGood = GTMIsObjectImageEqualToImageNamed(a1Object, a2String, &failString); \ - if (!isGood) { \ - if (description != nil) { \ - STFail(@"%@: %@", failString, STComposeString(description, ##__VA_ARGS__)); \ - } else { \ - STFail(@"%@", failString); \ - } \ - } \ -} while(0) - -// Fails when state of |a1| does not equal state in file |a2| -// -// Generates a failure when the unittest state of |a1| is not equal to the -// state stored in the state file named |a2|, or |a2| does not exist in the -// executable code's bundle. -// If |a2| does not exist in the executable code's bundle, we save a state -// representation of |a1| in the save directiry with name |a2|. This can then -// be included in the bundle as the master to test against. -// If |a2| != |a1|, we save a state representation of |a1| in the save -// directory with name |a2|_Failed so that we can compare the two files to see -// what has changed. -// The save directory is specified by +gtm_setUnitTestSaveToDirectory, and is -// the desktop by default. -// Implemented as a macro to match the rest of the SenTest macros. -// -// Args: -// a1: The object to be checked. Must implement the -createUnitTestImage method. -// a2: The name of the state file to check against. -// Do not include the extension -// description: A format string as in the printf() function. -// Can be nil or an empty string but must be present. -// ...: A variable number of arguments to the format string. Can be absent. -// -#define GTMAssertObjectStateEqualToStateNamed(a1, a2, description, ...) \ -do { \ - id a1Object = (a1); \ - NSString* a2String = (a2); \ - NSString *failString = nil; \ - BOOL isGood = GTMIsObjectStateEqualToStateNamed(a1Object, a2String, &failString); \ - if (!isGood) { \ - if (description != nil) { \ - STFail(@"%@: %@", failString, STComposeString(description, ##__VA_ARGS__)); \ - } else { \ - STFail(@"%@", failString); \ - } \ - } \ -} while(0); - -// test both GTMAssertObjectImageEqualToImageNamed and GTMAssertObjectStateEqualToStateNamed -// -// Combines the above two macros into a single ubermacro for comparing -// both state and image. When only the best will do... -#define GTMAssertObjectEqualToStateAndImageNamed(a1, a2, description, ...) \ -do { \ - GTMAssertObjectImageEqualToImageNamed(a1, a2, description, ##__VA_ARGS__); \ - GTMAssertObjectStateEqualToStateNamed(a1, a2, description, ##__VA_ARGS__); \ -} while (0) - -// Create a CGBitmapContextRef appropriate for using in creating a unit test -// image. If data is non-NULL, returns the buffer that the bitmap is -// using for it's underlying storage. You must free this buffer using -// free. If data is NULL, uses it's own internal storage. -// Defined as a C function instead of an obj-c method because you have to -// release the CGContextRef that is returned. -// -// Returns: -// an CGContextRef of the object. Caller must release - -CGContextRef GTMCreateUnitTestBitmapContextOfSizeWithData(CGSize size, - unsigned char **data); - -// GTMUnitTestingImaging protocol is for objects which need to save their -// image for using with the unit testing categories -@protocol GTMUnitTestingImaging -// Create a CGImageRef containing a representation suitable for use in -// comparing against a master image. -// -// Returns: -// an CGImageRef of the object. -- (CGImageRef)gtm_unitTestImage; -@end - -// GTMUnitTestingEncoding protocol is for objects which need to save their -// "state" for using with the unit testing categories -@protocol GTMUnitTestingEncoding -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. Encode data in the coder in the same -// manner that you would encode data in any other Keyed NSCoder subclass. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder; -@end - -// Category for saving and comparing object state and image for unit tests -// -// The GTMUnitTestAdditions category gives object the ability to store their -// state for use in unittesting in two different manners. -// 1) Objects can elect to save their "image" that we can compare at -// runtime to an image file to make sure that the representation hasn't -// changed. All views and Windows can save their image. In the case of Windows, -// they are "bluescreened" so that any transparent areas can be compared between -// machines. -// 2) Objects can elect to save their "state". State is the attributes that we -// want to verify when running unit tests. Applications, Windows, Views, -// Controls and Cells currently return a variety of state information. If you -// want to customize the state information that a particular object returns, you -// can do it via the GTMUnitTestingEncodedObjectNotification. Items that have -// delegates (Applications/Windows) can also have their delegates return state -// information if appropriate via the unitTestEncoderDidEncode:inCoder: delegate -// method. -// To compare state/image in your unit tests, you can use the three macros above -// GTMAssertObjectStateEqualToStateNamed, GTMAssertObjectImageEqualToImageNamed and -// GTMAssertObjectEqualToStateAndImageNamed. -@interface NSObject (GTMUnitTestingAdditions) <GTMUnitTestingEncoding> -// Allows you to control where the unit test utilities save any files -// (image or state) that they create on your behalf. By default they -// will save to the desktop. -+ (void)gtm_setUnitTestSaveToDirectory:(NSString*)path; -+ (NSString *)gtm_getUnitTestSaveToDirectory; - -// Checks to see that system settings are valid for doing an image comparison. -// Most of these are set by our unit test app. See the unit test app main.m -// for details. -// -// Returns: -// YES if we can do image comparisons for this object type. -- (BOOL)gtm_areSystemSettingsValidForDoingImage; - -// Return the type of image to work with. Only valid types on the iPhone -// are kUTTypeJPEG and kUTTypePNG. MacOS supports several more. -- (CFStringRef)gtm_imageUTI; - -// Return the extension to be used for saving unittest images -// -// Returns -// An extension (e.g. "png") -- (NSString*)gtm_imageExtension; - -// Return image data in the format expected for gtm_imageExtension -// So for a "png" extension I would expect "png" data -// -// Returns -// NSData for image -- (NSData*)gtm_imageDataForImage:(CGImageRef)image; - -// Save the unitTestImage to a image file with name -// |name|.arch.OSVersionMajor.OSVersionMinor.OSVersionBugfix.extension -// in the save folder (desktop by default) -// -// Args: -// name: The name for the image file you would like saved. -// -// Returns: -// YES if the file was successfully saved. -// -- (BOOL)gtm_saveToImageNamed:(NSString*)name; - -// Save unitTestImage of |self| to an image file at path |path|. -// All non-drawn areas will be transparent. -// -// Args: -// name: The name for the image file you would like saved. -// -// Returns: -// YES if the file was successfully saved. -// -- (BOOL)gtm_saveToImageAt:(NSString*)path; - -// Compares unitTestImage of |self| to the image located at |path| -// -// Args: -// path: the path to the image file you want to compare against. -// If diff is non-nil, it will contain an auto-released diff of the images. -// -// Returns: -// YES if they are equal, NO is they are not -// If diff is non-nil, it will contain a diff of the images. Must -// be released by caller. -// -- (BOOL)gtm_compareWithImageAt:(NSString*)path diffImage:(CGImageRef*)diff; - -// Find the path for a image by name in your bundle. -// Searches for the following: -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension" -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.arch.extension" -// "name.CompilerSDK.OSVersionMajor.arch.extension" -// "name.CompilerSDK.arch.extension" -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension" -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.extension" -// "name.CompilerSDK.OSVersionMajor.extension" -// "name.CompilerSDK.extension" -// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension" -// "name.OSVersionMajor.OSVersionMinor.arch.extension" -// "name.OSVersionMajor.arch.extension" -// "name.arch.extension" -// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension" -// "name.OSVersionMajor.OSVersionMinor.extension" -// "name.OSVersionMajor.extension" -// "name.extension" -// Do not include the extension on your name. -// -// Args: -// name: The name for the image file you would like to find. -// -// Returns: -// the path if the image exists in your bundle -// or nil if no image to be found -// -- (NSString *)gtm_pathForImageNamed:(NSString*)name; - -// Generates a CGImageRef from the image at |path| -// Args: -// path: The path to the image. -// -// Returns: -// An autoreleased CGImageRef own, or nil if no image at path -- (CGImageRef)gtm_imageWithContentsOfFile:(NSString*)path; - -// Generates a path for a image in the save directory, which is desktop -// by default. -// Path will be: -// SaveDir/|name|.arch.OSVersionMajor.OSVersionMinor.OSVersionBugfix.extension -// -// Args: -// name: The name for the image file you would like to generate a path for. -// -// Returns: -// the path -// -- (NSString *)gtm_saveToPathForImageNamed:(NSString*)name; - -// Gives us a representation of unitTestImage of |self|. -// -// Returns: -// a representation if successful -// nil if failed -// -- (NSData *)gtm_imageRepresentation; - -// Return the extension to be used for saving unittest states -// -// Returns -// An extension (e.g. "gtmUTState") -- (NSString*)gtm_stateExtension; - -// Save the encoded unit test state to a state file with name -// |name|.arch.OSVersionMajor.OSVersionMinor.OSVersionBugfix.extension -// in the save folder (desktop by default) -// -// Args: -// name: The name for the state file you would like saved. -// -// Returns: -// YES if the file was successfully saved. -// -- (BOOL)gtm_saveToStateNamed:(NSString*)name; - -// Save encoded unit test state of |self| to a state file at path |path|. -// -// Args: -// name: The name for the state file you would like saved. -// -// Returns: -// YES if the file was successfully saved. -// -- (BOOL)gtm_saveToStateAt:(NSString*)path; - -// Compares encoded unit test state of |self| to the state file located at |path| -// -// Args: -// path: the path to the state file you want to compare against. -// -// Returns: -// YES if they are equal, NO is they are not -// -- (BOOL)gtm_compareWithStateAt:(NSString*)path; - - -// Find the path for a state by name in your bundle. -// Searches for: -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension" -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.arch.extension" -// "name.CompilerSDK.OSVersionMajor.arch.extension" -// "name.CompilerSDK.arch.extension" -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension" -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.extension" -// "name.CompilerSDK.OSVersionMajor.extension" -// "name.CompilerSDK.extension" -// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension" -// "name.OSVersionMajor.OSVersionMinor.arch.extension" -// "name.OSVersionMajor.arch.extension" -// "name.arch.extension" -// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension" -// "name.OSVersionMajor.OSVersionMinor.extension" -// "name.OSVersionMajor.extension" -// "name.extension" -// Do not include the extension on your name. -// -// Args: -// name: The name for the state file you would like to find. -// -// Returns: -// the path if the state exists in your bundle -// or nil if no state to be found -// -- (NSString *)gtm_pathForStateNamed:(NSString*)name; - -// Generates a path for a state in the save directory, which is desktop -// by default. -// Path will be: -// SaveDir/|name|.arch.OSVersionMajor.OSVersionMinor.OSVersionBugfix.extension -// -// Args: -// name: The name for the state file you would like to generate a path for. -// -// Returns: -// the path -// -- (NSString *)gtm_saveToPathForStateNamed:(NSString*)name; - -// Gives us the encoded unit test state for |self| -// -// Returns: -// the encoded state if successful -// nil if failed -// -- (NSDictionary *)gtm_stateRepresentation; - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. Encode data in the coder in the same -// manner that you would encode data in any other Keyed NSCoder subclass. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder; -@end - -// Informal protocol for delegates that wanst to be able to add state info -// when state info is collected for their "owned" objects -@interface NSObject (GTMUnitTestingEncodingAdditions) -// Delegate function for unit test objects that have delegates. Delegates have -// the option of encoding more data into the coder to store their state for -// unittest usage. -- (void)gtm_unitTestEncoderWillEncode:(id)sender inCoder:(NSCoder*)inCoder; -@end - -// Whenever an object is encoded by the unit test encoder, it send out a -// notification so that objects who want to add data to the encoded objects unit -// test state can do so. The Coder will be in the userInfo dictionary for the -// notification under the GTMUnitTestingEncoderKey key. -GTM_EXTERN NSString *const GTMUnitTestingEncodedObjectNotification; - -// Key for finding the encoder in the userInfo dictionary for -// GTMUnitTestingEncodedObjectNotification notifications. -GTM_EXTERN NSString *const GTMUnitTestingEncoderKey; diff --git a/UnitTesting/GTMNSObject+UnitTesting.m b/UnitTesting/GTMNSObject+UnitTesting.m deleted file mode 100644 index 5b60a6d..0000000 --- a/UnitTesting/GTMNSObject+UnitTesting.m +++ /dev/null @@ -1,1047 +0,0 @@ -// -// GTMNSObject+UnitTesting.m -// -// An informal protocol for doing advanced unittesting with objects. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMNSObject+UnitTesting.h" -#import "GTMSystemVersion.h" - -#if GTM_IPHONE_SDK -#import <UIKit/UIKit.h> -#else -#import <AppKit/AppKit.h> -#endif - -NSString *const GTMUnitTestingEncodedObjectNotification - = @"GTMUnitTestingEncodedObjectNotification"; -NSString *const GTMUnitTestingEncoderKey = @"GTMUnitTestingEncoderKey"; - -#if GTM_IPHONE_SDK -// No UTIs on iPhone. Only two we need. -const CFStringRef kUTTypePNG = CFSTR("public.png"); -const CFStringRef kUTTypeJPEG = CFSTR("public.jpeg"); -#endif - -// This class exists so that we can locate our bundle using [NSBundle -// bundleForClass:]. We don't use [NSBundle mainBundle] because when we are -// being run as a unit test, we aren't the mainBundle -@interface GTMUnitTestingAdditionsBundleFinder : NSObject { - // Nothing here -} -// or here -@end - -@implementation GTMUnitTestingAdditionsBundleFinder -// Nothing here. We're just interested in the name for finding our bundle. -@end - -#if GTM_IPHONE_SDK -static NSString *iOS_Idiom(void) { - UIUserInterfaceIdiom idiom; -#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_3_2 - idiom = [[UIDevice currentDevice] userInterfaceIdiom]; -#else - idiom = UI_USER_INTERFACE_IDIOM(); -#endif - if (idiom == UIUserInterfaceIdiomPad) { - return @"iPad"; - } - _GTMDevAssert((idiom == UIUserInterfaceIdiomPhone), - @"unknown idiom %zd", idiom); - return @"iPhone"; -} -#endif // GTM_IPHONE_SDK - -BOOL GTMIsObjectImageEqualToImageNamed(id object, - NSString* filename, - NSString **error) { - NSString *failString = nil; - if (error) { - *error = nil; - } - BOOL isGood = [object respondsToSelector:@selector(gtm_unitTestImage)]; - if (isGood) { - if ([object gtm_areSystemSettingsValidForDoingImage]) { - NSString *aPath = [object gtm_pathForImageNamed:filename]; - CGImageRef diff = nil; - isGood = aPath != nil; - if (isGood) { - isGood = [object gtm_compareWithImageAt:aPath diffImage:&diff]; - } - if (!isGood) { - if (aPath) { - filename = [filename stringByAppendingString:@"_Failed"]; - } - BOOL aSaved = [object gtm_saveToImageNamed:filename]; - NSString *fileNameWithExtension - = [NSString stringWithFormat:@"%@.%@", - filename, [object gtm_imageExtension]]; - NSString *fullSavePath = [object gtm_saveToPathForImageNamed:filename]; - if (NO == aSaved) { - if (!aPath) { - failString = [NSString stringWithFormat:@"File %@ did not exist in " - @"bundle. Tried to save as %@ and failed.", - fileNameWithExtension, fullSavePath]; - } else { - failString = [NSString stringWithFormat:@"Object image different " - @"than file %@. Tried to save as %@ and failed.", - aPath, fullSavePath]; - } - } else { - if (!aPath) { - failString = [NSString stringWithFormat:@"File %@ did not exist in " - @" bundle. Saved to %@", fileNameWithExtension, - fullSavePath]; - } else { - NSString *diffPath = [filename stringByAppendingString:@"_Diff"]; - diffPath = [object gtm_saveToPathForImageNamed:diffPath]; - NSData *data = nil; - if (diff) { - data = [object gtm_imageDataForImage:diff]; - } - if ([data writeToFile:diffPath atomically:YES]) { - failString = [NSString stringWithFormat:@"Object image different " - @"than file\n%@\nSaved image to\n%@\n" - @"Saved diff to\n%@\n", - aPath, fullSavePath, diffPath]; - } else { - failString = [NSString stringWithFormat:@"Object image different " - @"than file\n%@\nSaved image to\n%@\nUnable to save " - @"diff. Most likely the image and diff are " - @"different sizes.", - aPath, fullSavePath]; - } - } - } - } - CGImageRelease(diff); - } else { - failString = @"systemSettings not valid for taking image"; // COV_NF_LINE - } - } else { - if (object == nil) { - failString = @"Testing a nil image."; - } else { - failString = @"Object does not conform to GTMUnitTestingImaging protocol"; - } - } - if (error) { - *error = failString; - } - return isGood; -} - -BOOL GTMIsObjectStateEqualToStateNamed(id object, - NSString* filename, - NSString **error) { - NSString *failString = nil; - if (error) { - *error = nil; - } - BOOL isGood = [object conformsToProtocol:@protocol(GTMUnitTestingEncoding)]; - if (isGood) { - NSString *aPath = [object gtm_pathForStateNamed:filename]; - isGood = aPath != nil; - if (isGood) { - isGood = [object gtm_compareWithStateAt:aPath]; - } - if (!isGood) { - if (aPath) { - filename = [filename stringByAppendingString:@"_Failed"]; - } - BOOL aSaved = [object gtm_saveToStateNamed:filename]; - NSString *fileNameWithExtension = [NSString stringWithFormat:@"%@.%@", - filename, [object gtm_stateExtension]]; - NSString *fullSavePath = [object gtm_saveToPathForStateNamed:filename]; - if (NO == aSaved) { - if (!aPath) { - failString = [NSString stringWithFormat:@"File %@ did not exist in " - @"bundle. Tried to save as %@ and failed.", - fileNameWithExtension, fullSavePath]; - } else { - failString = [NSString stringWithFormat:@"Object state different " - @"than file %@. Tried to save as %@ and failed.", - aPath, fullSavePath]; - } - } else { - if (!aPath) { - failString = [NSString stringWithFormat:@"File %@ did not exist in " - @ "bundle. Saved to %@", fileNameWithExtension, - fullSavePath]; - } else { - failString = [NSString stringWithFormat:@"Object state different " - @"than file %@. Saved to %@", aPath, fullSavePath]; - } - } - } - } else { - failString = @"Object does not conform to GTMUnitTestingEncoding protocol"; - } - if (error) { - *error = failString; - } - return isGood; -} - -CGContextRef GTMCreateUnitTestBitmapContextOfSizeWithData(CGSize size, - unsigned char **data) { - CGContextRef context = NULL; - size_t height = size.height; - size_t width = size.width; - size_t bytesPerRow = width * 4; - size_t bitsPerComponent = 8; - CGColorSpaceRef cs = NULL; -#if GTM_IPHONE_SDK - cs = CGColorSpaceCreateDeviceRGB(); -#else - cs = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); -#endif - _GTMDevAssert(cs, @"Couldn't create colorspace"); - CGBitmapInfo info - = kCGImageAlphaPremultipliedLast | kCGBitmapByteOrderDefault; - if (data) { - *data = (unsigned char*)calloc(bytesPerRow, height); - _GTMDevAssert(*data, @"Couldn't create bitmap"); - } - context = CGBitmapContextCreate(data ? *data : NULL, width, height, - bitsPerComponent, bytesPerRow, cs, info); - _GTMDevAssert(context, @"Couldn't create an context"); - if (!data) { - CGContextClearRect(context, CGRectMake(0, 0, size.width, size.height)); - } - CGContextSetRenderingIntent(context, kCGRenderingIntentRelativeColorimetric); - CGContextSetInterpolationQuality(context, kCGInterpolationNone); - CGContextSetShouldAntialias(context, NO); - CGContextSetAllowsAntialiasing(context, NO); - CGContextSetShouldSmoothFonts(context, NO); - CGColorSpaceRelease(cs); - return context; -} - -@interface NSObject (GTMUnitTestingAdditionsPrivate) -/// Find the path for a file named name.extension in your bundle. -// Searches for the following: -// "name.extension", -// "name.arch.extension", -// "name.arch.OSVersionMajor.extension" -// "name.arch.OSVersionMajor.OSVersionMinor.extension" -// "name.arch.OSVersionMajor.OSVersionMinor.OSVersion.bugfix.extension" -// "name.arch.OSVersionMajor.extension" -// "name.OSVersionMajor.arch.extension" -// "name.OSVersionMajor.OSVersionMinor.arch.extension" -// "name.OSVersionMajor.OSVersionMinor.OSVersion.bugfix.arch.extension" -// "name.OSVersionMajor.extension" -// "name.OSVersionMajor.OSVersionMinor.extension" -// "name.OSVersionMajor.OSVersionMinor.OSVersion.bugfix.extension" -// Do not include the ".extension" extension on your name. -// -// Args: -// name: The name for the file you would like to find. -// extension: the extension for the file you would like to find -// -// Returns: -// the path if the file exists in your bundle -// or nil if no file is found -// -- (NSString *)gtm_pathForFileNamed:(NSString*)name - extension:(NSString*)extension; -- (NSString *)gtm_saveToPathForFileNamed:(NSString*)name - extension:(NSString*)extension; -- (CGImageRef)gtm_unitTestImage; -// Returns nil if there is no override -- (NSString *)gtm_getOverrideDefaultUnitTestSaveToDirectory; -@end - -// This is a keyed coder for storing unit test state data. It is used only by -// the GTMUnitTestingAdditions category. Most of the work is done in -// encodeObject:forKey:. -@interface GTMUnitTestingKeyedCoder : NSCoder { - NSMutableDictionary *dictionary_; // storage for data (STRONG) -} - -// get the data stored in coder. -// -// Returns: -// NSDictionary with currently stored data. -- (NSDictionary*)dictionary; -@end - -// Small utility function for checking to see if a is b +/- 1. -GTM_INLINE BOOL almostEqual(unsigned char a, unsigned char b) { - unsigned char diff = a > b ? a - b : b - a; - BOOL notEqual = diff < 2; - return notEqual; -} - -@implementation GTMUnitTestingKeyedCoder - -// Set up storage for coder. Stores type and version. -// Version 1 -// -// Returns: -// self -- (id)init { - self = [super init]; - if (self != nil) { - dictionary_ = [[NSMutableDictionary alloc] initWithCapacity:2]; - [dictionary_ setObject:@"GTMUnitTestingArchive" forKey:@"$GTMArchive"]; - - // Version number can be changed here. - [dictionary_ setObject:[NSNumber numberWithInt:1] forKey:@"$GTMVersion"]; - } - return self; -} - -// Standard dealloc -- (void)dealloc { - [dictionary_ release]; - [super dealloc]; -} - -// Utility function for checking for a key value. We don't want duplicate keys -// in any of our dictionaries as we may be writing over data stored by previous -// objects. -// -// Arguments: -// key - key to check for in dictionary -- (void)checkForKey:(NSString*)key { - _GTMDevAssert(![dictionary_ objectForKey:key], - @"Key already exists for %@", key); -} - -// Key routine for the encoder. We store objects in our dictionary based on -// their key. As we encode objects we send out notifications to let other -// classes doing tests add their specific data to the base types. If we can't -// encode the object (it doesn't support gtm_unitTestEncodeState) and we don't -// get any info back from the notifier, we attempt to store it's description. -// -// Arguments: -// objv - object to be encoded -// key - key to encode it with -// -- (void)encodeObject:(id)objv forKey:(NSString *)key { - // Sanity checks - if (!objv) return; - [self checkForKey:key]; - - // Set up a new dictionary for the current object - NSMutableDictionary *curDictionary = dictionary_; - dictionary_ = [[NSMutableDictionary alloc] initWithCapacity:0]; - - // If objv responds to gtm_unitTestEncodeState get it to record - // its data. - if ([objv respondsToSelector:@selector(gtm_unitTestEncodeState:)]) { - [objv gtm_unitTestEncodeState:self]; - } - - // We then send out a notification to let other folks - // add data for this object - NSDictionary *notificationDict - = [NSDictionary dictionaryWithObject:self forKey:GTMUnitTestingEncoderKey]; - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc postNotificationName:GTMUnitTestingEncodedObjectNotification - object:objv - userInfo:notificationDict]; - - // If we got anything from the object, or from the notification, store it in - // our dictionary. Otherwise store the description. - if ([dictionary_ count] > 0) { - [curDictionary setObject:dictionary_ forKey:key]; - } else { - NSString *description = [objv description]; - // If description has a pointer value in it, we don't want to store it - // as the pointer value can change from run to run - if (description && [description rangeOfString:@"0x"].length == 0) { - [curDictionary setObject:description forKey:key]; - } else { - _GTMDevAssert(NO, @"Unable to encode forKey: %@", key); // COV_NF_LINE - } - } - [dictionary_ release]; - dictionary_ = curDictionary; -} - -// Basic encoding methods for POD types. -// -// Arguments: -// *v - value to encode -// key - key to encode it in - -- (void)encodeBool:(BOOL)boolv forKey:(NSString *)key { - [self checkForKey:key]; - [dictionary_ setObject:[NSNumber numberWithBool:boolv] forKey:key]; -} - -- (void)encodeInt:(int)intv forKey:(NSString *)key { - [self checkForKey:key]; - [dictionary_ setObject:[NSNumber numberWithInt:intv] forKey:key]; -} - -- (void)encodeInt32:(int32_t)intv forKey:(NSString *)key { - [self checkForKey:key]; - [dictionary_ setObject:[NSNumber numberWithLong:intv] forKey:key]; -} - -- (void)encodeInt64:(int64_t)intv forKey:(NSString *)key { - [self checkForKey:key]; - [dictionary_ setObject:[NSNumber numberWithLongLong:intv] forKey:key]; -} - -- (void)encodeFloat:(float)realv forKey:(NSString *)key { - [self checkForKey:key]; - [dictionary_ setObject:[NSNumber numberWithFloat:realv] forKey:key]; -} - -- (void)encodeDouble:(double)realv forKey:(NSString *)key { - [self checkForKey:key]; - [dictionary_ setObject:[NSNumber numberWithDouble:realv] forKey:key]; -} - -- (void)encodeBytes:(const uint8_t *)bytesp - length:(NSUInteger)lenv - forKey:(NSString *)key { - [self checkForKey:key]; - [dictionary_ setObject:[NSData dataWithBytes:bytesp - length:lenv] - forKey:key]; -} - -// Get our storage back as an NSDictionary -// -// Returns: -// NSDictionary containing our encoded info --(NSDictionary*)dictionary { - return [[dictionary_ retain] autorelease]; -} - -@end - -static NSString *gGTMUnitTestSaveToDirectory = nil; - -@implementation NSObject (GTMUnitTestingAdditions) - -+ (void)gtm_setUnitTestSaveToDirectory:(NSString*)path { - @synchronized([self class]) { - [gGTMUnitTestSaveToDirectory autorelease]; - gGTMUnitTestSaveToDirectory = [path copy]; - } -} - -+ (NSString *)gtm_getUnitTestSaveToDirectory { - NSString *result = nil; - @synchronized([self class]) { - if (!gGTMUnitTestSaveToDirectory) { -#if GTM_IPHONE_SDK - // About the only thing safe for the sandbox is the documents directory. - NSArray *documentsDirs - = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, - NSUserDomainMask, YES); - gGTMUnitTestSaveToDirectory = [documentsDirs objectAtIndex:0]; -#else - NSArray *desktopDirs - = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, - NSUserDomainMask, - YES); - gGTMUnitTestSaveToDirectory = [desktopDirs objectAtIndex:0]; -#endif - // Did we get overridden? - NSString *override = [self gtm_getOverrideDefaultUnitTestSaveToDirectory]; - if (override) { - gGTMUnitTestSaveToDirectory = override; - } - [gGTMUnitTestSaveToDirectory retain]; - } - result = gGTMUnitTestSaveToDirectory; - } - - return result; -} - -// Return nil if there is no override -- (NSString *)gtm_getOverrideDefaultUnitTestSaveToDirectory { - NSString *result = nil; - - // If we have an environment variable that ends in "BUILD_NUMBER" odds are - // we're on an automated build system, so use the build products dir as an - // override instead of writing on the desktop. - NSDictionary *env = [[NSProcessInfo processInfo] environment]; - NSString *key; - GTM_FOREACH_KEY(key, env) { - if ([key hasSuffix:@"BUILD_NUMBER"]) { - break; - } - } - if (key) { - result = [env objectForKey:@"BUILT_PRODUCTS_DIR"]; - } - - if (result && [result length] == 0) { - result = nil; - } - return result; -} - -/// Find the path for a file named name.extension in your bundle. -// Searches for the following: -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension" -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.arch.extension" -// "name.CompilerSDK.OSVersionMajor.arch.extension" -// "name.CompilerSDK.arch.extension" -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension" -// "name.CompilerSDK.OSVersionMajor.OSVersionMinor.extension" -// "name.CompilerSDK.OSVersionMajor.extension" -// "name.CompilerSDK.extension" -// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.arch.extension" -// "name.OSVersionMajor.OSVersionMinor.arch.extension" -// "name.OSVersionMajor.arch.extension" -// "name.arch.extension" -// "name.OSVersionMajor.OSVersionMinor.OSVersionBugFix.extension" -// "name.OSVersionMajor.OSVersionMinor.extension" -// "name.OSVersionMajor.extension" -// "name.extension" -// Do not include the ".extension" extension on your name. -// -// Args: -// name: The name for the file you would like to find. -// extension: the extension for the file you would like to find -// -// Returns: -// the path if the file exists in your bundle -// or nil if no file is found -// -- (NSString *)gtm_pathForFileNamed:(NSString*)name - extension:(NSString*)extension { - NSString *thePath = nil; - Class bundleClass = [GTMUnitTestingAdditionsBundleFinder class]; - NSBundle *myBundle = [NSBundle bundleForClass:bundleClass]; - _GTMDevAssert(myBundle, - @"Couldn't find bundle for class: %@ searching for file:%@.%@", - NSStringFromClass(bundleClass), name, extension); - // System Version - SInt32 major, minor, bugFix; - [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix]; - NSString *systemVersions[4]; - systemVersions[0] = [NSString stringWithFormat:@".%d.%d.%d", - (int)major, (int)minor, (int)bugFix]; - systemVersions[1] - = [NSString stringWithFormat:@".%d.%d", (int)major, (int)minor]; - systemVersions[2] = [NSString stringWithFormat:@".%d", (int)major]; - systemVersions[3] = @""; - // Architecture - NSString *architecture[2]; -#if GTM_IPHONE_SDK - architecture[0] - = [NSString stringWithFormat:@".%@", iOS_Idiom()]; -#else - architecture[0] - = [NSString stringWithFormat:@".%@", - [GTMSystemVersion runtimeArchitecture]]; -#endif - architecture[1] = @""; - // Compiler SDK - // Some times Apple changes how things work based on the SDK built against. - NSString *sdks[2]; -#if GTM_MACOS_SDK -# if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7 - sdks[0] = @".10_7_SDK"; -# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6 - sdks[0] = @".10_6_SDK"; -# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - sdks[0] = @".10_5_SDK"; -# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_4 - sdks[0] = @".10_4_SDK"; -# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_3 - sdks[0] = @".10_3_SDK"; -# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_2 - sdks[0] = @".10_2_SDK"; -# elif MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_1 - sdks[0] = @".10_1_SDK"; -# else - sdks[0] = @".10_0_SDK"; -# endif -#else // !GTM_MACOS_SDK -# if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_5_0 - sdks[0] = @".5_0_SDK"; -# elif __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_4_3 - sdks[0] = @".4_3_SDK"; -# else - sdks[0] = @""; -# endif -#endif // GTM_MACOS_SDK - sdks[1] = @""; - - // Note that we are searching for the most exact match first. - for (size_t i = 0; - !thePath && i < sizeof(sdks) / sizeof(*sdks); - ++i) { - for (size_t j = 0; - !thePath && j < sizeof(architecture) / sizeof(*architecture); - j++) { - for (size_t k = 0; - !thePath && k < sizeof(systemVersions) / sizeof(*systemVersions); - k++) { - NSString *fullName = [NSString stringWithFormat:@"%@%@%@%@", - name, sdks[i], systemVersions[k], architecture[j]]; - thePath = [myBundle pathForResource:fullName ofType:extension]; - } - } - } - - return thePath; -} - -- (NSString *)gtm_saveToPathForFileNamed:(NSString*)name - extension:(NSString*)extension { -#if GTM_IPHONE_SDK - NSString *systemArchitecture = iOS_Idiom(); -#else - NSString *systemArchitecture = [GTMSystemVersion runtimeArchitecture]; -#endif - - SInt32 major, minor, bugFix; - [GTMSystemVersion getMajor:&major minor:&minor bugFix:&bugFix]; - - // We don't include the CompilerSDK in here because it is not something that - // that is commonly needed. - NSString *fullName = [NSString stringWithFormat:@"%@.%d.%d.%d.%@", - name, (int)major, (int)minor, (int)bugFix, systemArchitecture]; - - NSString *basePath = [[self class] gtm_getUnitTestSaveToDirectory]; - return [[basePath stringByAppendingPathComponent:fullName] - stringByAppendingPathExtension:extension]; -} - -#pragma mark UnitTestImage - -// Checks to see that system settings are valid for doing an image comparison. -// To be overridden by subclasses. -// Returns: -// YES if we can do image comparisons for this object type. -- (BOOL)gtm_areSystemSettingsValidForDoingImage { - return YES; -} - -- (CFStringRef)gtm_imageUTI { -#if GTM_IPHONE_SDK - return kUTTypePNG; -#else - // Currently can't use PNG on Leopard. (10.5.2) - // Radar:5844618 PNG importer/exporter in ImageIO is lossy - return kUTTypeTIFF; -#endif -} - -// Return the extension to be used for saving unittest images -// -// Returns -// An extension (e.g. "png") -- (NSString*)gtm_imageExtension { - CFStringRef uti = [self gtm_imageUTI]; -#if GTM_IPHONE_SDK - if (CFEqual(uti, kUTTypePNG)) { - return @"png"; - } else if (CFEqual(uti, kUTTypeJPEG)) { - return @"jpg"; - } else { - _GTMDevAssert(NO, @"Illegal UTI for iPhone"); - } - return nil; -#else - CFStringRef extension - = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassFilenameExtension); - _GTMDevAssert(extension, @"No extension for uti: %@", uti); - - return GTMCFAutorelease(extension); -#endif -} - -// Return image data in the format expected for gtm_imageExtension -// So for a "png" extension I would expect "png" data -// -// Returns -// NSData for image -- (NSData*)gtm_imageDataForImage:(CGImageRef)image { - NSData *data = nil; -#if GTM_IPHONE_SDK - // iPhone support - UIImage *uiImage = [UIImage imageWithCGImage:image]; - CFStringRef uti = [self gtm_imageUTI]; - if (CFEqual(uti, kUTTypePNG)) { - data = UIImagePNGRepresentation(uiImage); - } else if (CFEqual(uti, kUTTypeJPEG)) { - data = UIImageJPEGRepresentation(uiImage, 1.0f); - } else { - _GTMDevAssert(NO, @"Illegal UTI for iPhone"); - } -#else - data = [NSMutableData data]; - CGImageDestinationRef dest - = CGImageDestinationCreateWithData((CFMutableDataRef)data, - [self gtm_imageUTI], - 1, - NULL); - // LZW Compression for TIFF - NSDictionary *tiffDict - = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber gtm_numberWithUnsignedInteger:NSTIFFCompressionLZW], - (const NSString*)kCGImagePropertyTIFFCompression, - nil]; - NSDictionary *destProps - = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithFloat:1.0f], - (const NSString*)kCGImageDestinationLossyCompressionQuality, - tiffDict, - (const NSString*)kCGImagePropertyTIFFDictionary, - nil]; - CGImageDestinationAddImage(dest, image, (CFDictionaryRef)destProps); - CGImageDestinationFinalize(dest); - CFRelease(dest); -#endif - return data; - -} - -// Save the unitTestImage to an image file with name |name| at -// ~/Desktop/|name|.extension. -// -// Note: When running under Pulse automation output is redirected to the -// Pulse base directory. -// -// Args: -// name: The name for the image file you would like saved. -// -// Returns: -// YES if the file was successfully saved. -// -- (BOOL)gtm_saveToImageNamed:(NSString*)name { - NSString *newPath = [self gtm_saveToPathForImageNamed:name]; - return [self gtm_saveToImageAt:newPath]; -} - -// Save unitTestImage of |self| to an image file at path |path|. -// -// Args: -// name: The name for the image file you would like saved. -// -// Returns: -// YES if the file was successfully saved. -// -- (BOOL)gtm_saveToImageAt:(NSString*)path { - if (!path) return NO; - NSData *data = [self gtm_imageRepresentation]; - return [data writeToFile:path atomically:YES]; -} - -// Generates a CGImageRef from the image at |path| -// Args: -// path: The path to the image. -// -// Returns: -// A CGImageRef that you own, or nil if no image at path -- (CGImageRef)gtm_imageWithContentsOfFile:(NSString*)path { - CGImageRef imageRef = nil; -#if GTM_IPHONE_SDK - UIImage *image = [UIImage imageWithContentsOfFile:path]; - if (image) { - imageRef = CGImageRetain(image.CGImage); - } -#else - CFURLRef url = CFURLCreateWithFileSystemPath(NULL, (CFStringRef)path, - kCFURLPOSIXPathStyle, NO); - if (url) { - CGImageSourceRef imageSource = CGImageSourceCreateWithURL(url, NULL); - CFRelease(url); - if (imageSource) { - imageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL); - CFRelease(imageSource); - } - } -#endif - return (CGImageRef)GTMCFAutorelease(imageRef); -} - -/// Compares unitTestImage of |self| to the image located at |path| -// -// Args: -// path: the path to the image file you want to compare against. -// If diff is non-nil, it will contain an auto-released diff of the images. -// -// Returns: -// YES if they are equal, NO is they are not -// If diff is non-nil, it will contain an auto-released diff of the images. -// -- (BOOL)gtm_compareWithImageAt:(NSString*)path diffImage:(CGImageRef*)diff { - BOOL answer = NO; - if (diff) { - *diff = nil; - } - CGImageRef fileRep = [self gtm_imageWithContentsOfFile:path]; - _GTMDevAssert(fileRep, @"Unable to create imagerep from %@", path); - - CGImageRef imageRep = [self gtm_unitTestImage]; - _GTMDevAssert(imageRep, @"Unable to create imagerep for %@", self); - - size_t fileHeight = CGImageGetHeight(fileRep); - size_t fileWidth = CGImageGetWidth(fileRep); - size_t imageHeight = CGImageGetHeight(imageRep); - size_t imageWidth = CGImageGetWidth(imageRep); - if (fileHeight == imageHeight && fileWidth == imageWidth) { - // if all the sizes are equal, run through the bytes and compare - // them for equality. - // Do an initial fast check, if this fails and the caller wants a - // diff, we'll do the slow path and create the diff. The diff path - // could be optimized, but probably not necessary at this point. - answer = YES; - - CGSize imageSize = CGSizeMake(fileWidth, fileHeight); - CGRect imageRect = CGRectMake(0, 0, fileWidth, fileHeight); - unsigned char *fileData; - unsigned char *imageData; - CGContextRef fileContext - = GTMCreateUnitTestBitmapContextOfSizeWithData(imageSize, &fileData); - _GTMDevAssert(fileContext, @"Unable to create filecontext"); - CGContextDrawImage(fileContext, imageRect, fileRep); - CGContextRef imageContext - = GTMCreateUnitTestBitmapContextOfSizeWithData(imageSize, &imageData); - _GTMDevAssert(imageContext, @"Unable to create imageContext"); - CGContextDrawImage(imageContext, imageRect, imageRep); - - size_t fileBytesPerRow = CGBitmapContextGetBytesPerRow(fileContext); - size_t imageBytesPerRow = CGBitmapContextGetBytesPerRow(imageContext); - size_t row, col; - - _GTMDevAssert(imageWidth * 4 <= imageBytesPerRow, - @"We expect image data to be 32bit RGBA"); - - for (row = 0; row < fileHeight && answer; row++) { - answer = memcmp(fileData + fileBytesPerRow * row, - imageData + imageBytesPerRow * row, - imageWidth * 4) == 0; - } - if (!answer && diff) { - answer = YES; - unsigned char *diffData; - CGContextRef diffContext - = GTMCreateUnitTestBitmapContextOfSizeWithData(imageSize, &diffData); - _GTMDevAssert(diffContext, @"Can't make diff context"); - size_t diffRowBytes = CGBitmapContextGetBytesPerRow(diffContext); - for (row = 0; row < imageHeight; row++) { - uint32_t *imageRow = (uint32_t*)(imageData + imageBytesPerRow * row); - uint32_t *fileRow = (uint32_t*)(fileData + fileBytesPerRow * row); - uint32_t* diffRow = (uint32_t*)(diffData + diffRowBytes * row); - for (col = 0; col < imageWidth; col++) { - uint32_t imageColor = imageRow[col]; - uint32_t fileColor = fileRow[col]; - - unsigned char imageAlpha = imageColor & 0xF; - unsigned char imageBlue = imageColor >> 8 & 0xF; - unsigned char imageGreen = imageColor >> 16 & 0xF; - unsigned char imageRed = imageColor >> 24 & 0xF; - unsigned char fileAlpha = fileColor & 0xF; - unsigned char fileBlue = fileColor >> 8 & 0xF; - unsigned char fileGreen = fileColor >> 16 & 0xF; - unsigned char fileRed = fileColor >> 24 & 0xF; - - // Check to see if color is almost right. - // No matter how hard I've tried, I've still gotten occasionally - // screwed over by colorspaces not mapping correctly, and small - // sampling errors coming in. This appears to work for most cases. - // Almost equal is defined to check within 1% on all components. - BOOL equal = almostEqual(imageRed, fileRed) && - almostEqual(imageGreen, fileGreen) && - almostEqual(imageBlue, fileBlue) && - almostEqual(imageAlpha, fileAlpha); - answer &= equal; - if (diff) { - uint32_t newColor; - if (equal) { - newColor = (((uint32_t)imageRed) << 24) + - (((uint32_t)imageGreen) << 16) + - (((uint32_t)imageBlue) << 8) + - (((uint32_t)imageAlpha) / 2); - } else { - newColor = 0xFF0000FF; - } - diffRow[col] = newColor; - } - } - } - *diff = CGBitmapContextCreateImage(diffContext); - free(diffData); - CFRelease(diffContext); - } - free(fileData); - CFRelease(fileContext); - free(imageData); - CFRelease(imageContext); - } - return answer; -} - -// Find the path for an image by name in your bundle. -// Do not include the extension on your name. -// -// Args: -// name: The name for the image file you would like to find. -// -// Returns: -// the path if the image exists in your bundle -// or nil if no image to be found -// -- (NSString *)gtm_pathForImageNamed:(NSString*)name { - return [self gtm_pathForFileNamed:name - extension:[self gtm_imageExtension]]; -} - -- (NSString *)gtm_saveToPathForImageNamed:(NSString*)name { - return [self gtm_saveToPathForFileNamed:name - extension:[self gtm_imageExtension]]; -} - -// Gives us a representation of unitTestImage of |self|. -// -// Returns: -// a representation of image if successful -// nil if failed -// -- (NSData *)gtm_imageRepresentation { - CGImageRef imageRep = [self gtm_unitTestImage]; - NSData *data = [self gtm_imageDataForImage:imageRep]; - _GTMDevAssert(data, @"unable to create %@ from %@", - [self gtm_imageExtension], self); - return data; -} - -#pragma mark UnitTestState - -// Return the extension to be used for saving unittest states -// -// Returns -// An extension (e.g. "gtmUTState") -- (NSString*)gtm_stateExtension { - return @"gtmUTState"; -} - -// Save the encoded unit test state to a state file with name |name| at -// ~/Desktop/|name|.extension. -// -// Note: When running under Pulse automation output is redirected to the -// Pulse base directory. -// -// Args: -// name: The name for the state file you would like saved. -// -// Returns: -// YES if the file was successfully saved. -// -- (BOOL)gtm_saveToStateNamed:(NSString*)name { - NSString *newPath = [self gtm_saveToPathForStateNamed:name]; - return [self gtm_saveToStateAt:newPath]; -} - -// Save encoded unit test state of |self| to a state file at path |path|. -// -// Args: -// name: The name for the state file you would like saved. -// -// Returns: -// YES if the file was successfully saved. -// -- (BOOL)gtm_saveToStateAt:(NSString*)path { - if (!path) return NO; - NSDictionary *dictionary = [self gtm_stateRepresentation]; - return [dictionary writeToFile:path atomically:YES]; -} - -// Compares encoded unit test state of |self| to the state file located at -// |path| -// -// Args: -// path: the path to the state file you want to compare against. -// -// Returns: -// YES if they are equal, NO is they are not -// -- (BOOL)gtm_compareWithStateAt:(NSString*)path { - NSDictionary *masterDict = [NSDictionary dictionaryWithContentsOfFile:path]; - _GTMDevAssert(masterDict, @"Unable to create dictionary from %@", path); - NSDictionary *selfDict = [self gtm_stateRepresentation]; - return [selfDict isEqual: masterDict]; -} - -// Find the path for a state by name in your bundle. -// Do not include the extension. -// -// Args: -// name: The name for the state file you would like to find. -// -// Returns: -// the path if the state exists in your bundle -// or nil if no state to be found -// -- (NSString *)gtm_pathForStateNamed:(NSString*)name { - return [self gtm_pathForFileNamed:name extension:[self gtm_stateExtension]]; -} - -- (NSString *)gtm_saveToPathForStateNamed:(NSString*)name { - return [self gtm_saveToPathForFileNamed:name - extension:[self gtm_stateExtension]]; -} - -// Gives us the encoded unit test state |self| -// -// Returns: -// the encoded state if successful -// nil if failed -// -- (NSDictionary *)gtm_stateRepresentation { - NSDictionary *dictionary = nil; - if ([self conformsToProtocol:@protocol(GTMUnitTestingEncoding)]) { - id<GTMUnitTestingEncoding> encoder = (id<GTMUnitTestingEncoding>)self; - GTMUnitTestingKeyedCoder *archiver; - archiver = [[[GTMUnitTestingKeyedCoder alloc] init] autorelease]; - [encoder gtm_unitTestEncodeState:archiver]; - dictionary = [archiver dictionary]; - } - return dictionary; -} - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. Encode data in the coder in the same -// manner that you would encode data in any other Keyed NSCoder subclass. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - // All impls of gtm_unitTestEncodeState - // should be calling [super gtm_unitTestEncodeState] as their first action. - _GTMDevAssert([inCoder isKindOfClass:[GTMUnitTestingKeyedCoder class]], - @"Coder must be of kind GTMUnitTestingKeyedCoder"); - - // If the object has a delegate, give it a chance to respond - if ([self respondsToSelector:@selector(delegate)]) { - id delegate = [self performSelector:@selector(delegate)]; - if (delegate && - [delegate respondsToSelector:@selector(gtm_unitTestEncoderWillEncode:inCoder:)]) { - [delegate gtm_unitTestEncoderWillEncode:self inCoder:inCoder]; - } - } -} - -@end diff --git a/UnitTesting/GTMSenTestCase.h b/UnitTesting/GTMSenTestCase.h index a96cb20..6b7198b 100644 --- a/UnitTesting/GTMSenTestCase.h +++ b/UnitTesting/GTMSenTestCase.h @@ -90,7 +90,7 @@ #define _XCExceptionFormatString @"throwing \"%@\"" #define _XCUnknownExceptionString @"throwing an unknown exception" -#if defined(__IPHONE_8_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0 +#if (defined(__IPHONE_8_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0) || (GTM_MACOS_SDK == 1) // They changed the call to _XCTRegisterFailure in iOS 8. Once we no longer need to support // the iOS 7 SDK, we can remove this. #define _GTMXCRegisterFailure(expression, format...) _XCTRegisterFailure(self, expression, format) @@ -111,7 +111,7 @@ @try { \ __typeof__(a1) _a1value = (a1); \ if (_a1value != noErr) { \ - _failure = [NSString stringWithFormat:@"%ld != noErr", (long)_a1value]; \ + _failure = [NSString stringWithFormat:@"%d != noErr", (int)_a1value]; \ } \ } \ @catch (NSException *_exception) { \ @@ -142,7 +142,7 @@ __typeof__(a1) _a1value = (a1); \ __typeof__(a2) _a2value = (a2); \ if (_a1value != _a2value) { \ - _failure = [NSString stringWithFormat:@"(%ld) != (%ld)", (long)_a1value, (long)_a2value]; \ + _failure = [NSString stringWithFormat:@"(%d) != (%d)", (int)_a1value, (int)_a2value]; \ } \ } \ @catch (NSException *_exception) { \ @@ -152,7 +152,7 @@ _failure = @": " _XCUnknownExceptionString; \ } \ if (_failure) { \ - NSString *_expression = [NSString stringWithFormat:@"((%@) != (@%)) failed %@", @#a1, @#a2, _failure]; \ + NSString *_expression = [NSString stringWithFormat:@"((%@) != (%@)) failed %@", @#a1, @#a2, _failure]; \ _GTMXCRegisterFailure(_expression, format); \ } \ }) @@ -734,12 +734,12 @@ do { \ // SENTE_BEGIN /*" Generates a failure when !{ [a1 isEqualTo:a2] } is false - (or one is nil and the other is not). - _{a1 The object on the left.} - _{a2 The object on the right.} - _{description A format string as in the printf() function. Can be nil or - an empty string but must be present.} - _{... A variable number of arguments to the format string. Can be absent.} + (or one is nil and the other is not). + _{a1 The object on the left.} + _{a2 The object on the right.} + _{description A format string as in the printf() function. Can be nil or + an empty string but must be present.} + _{... A variable number of arguments to the format string. Can be absent.} "*/ #define STAssertEqualObjects(a1, a2, description, ...) \ do { \ diff --git a/UnitTesting/GTMSenTestCase.m b/UnitTesting/GTMSenTestCase.m index b7a59a3..5236c51 100644 --- a/UnitTesting/GTMSenTestCase.m +++ b/UnitTesting/GTMSenTestCase.m @@ -19,12 +19,7 @@ #import "GTMSenTestCase.h" #import <unistd.h> -#if GTM_IPHONE_SIMULATOR #import <objc/message.h> -#endif - -#import "GTMObjC2Runtime.h" -#import "GTMUnitTestDevLog.h" #if GTM_IPHONE_SDK #import <UIKit/UIKit.h> @@ -401,22 +396,6 @@ static NSInteger MethodSort(id a, id b, void *context) { @implementation GTMTestCase -- (void)invokeTest { - NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init]; - Class devLogClass = NSClassFromString(@"GTMUnitTestDevLog"); - if (devLogClass) { - [devLogClass performSelector:@selector(enableTracking)]; - [devLogClass performSelector:@selector(verifyNoMoreLogsExpected)]; - - } - [super invokeTest]; - if (devLogClass) { - [devLogClass performSelector:@selector(verifyNoMoreLogsExpected)]; - [devLogClass performSelector:@selector(disableTracking)]; - } - [localPool drain]; -} - + (BOOL)isAbstractTestCase { NSString *name = NSStringFromClass(self); return [name rangeOfString:@"AbstractTest"].location != NSNotFound; diff --git a/UnitTesting/GTMSenTestCaseTest.m b/UnitTesting/GTMSenTestCaseTest.m index 9d9a594..33055ad 100644 --- a/UnitTesting/GTMSenTestCaseTest.m +++ b/UnitTesting/GTMSenTestCaseTest.m @@ -16,6 +16,15 @@ // the License. // +#import "GTMDefines.h" + +// This test currently executes under XCTest and under the GTM SenTest replacement. +#if !GTM_USING_XCTEST +#define XCTAssertFalse STAssertFalse +#define XCTAssertEqual STAssertEquals +#define XCTAssertTrue STAssertTrue +#endif // !GTM_USING_XCTEST + #import "GTMSenTestCase.h" // These make use of the fact that methods are run in alphebetical order @@ -39,8 +48,8 @@ static int gZzCheckCalls_ = 0; @implementation GTMTestingAbstractTest - (void)testAbstractUnitTest { - STAssertFalse([self isMemberOfClass:[GTMTestingAbstractTest class]], - @"test should not run on the abstract class"); + XCTAssertFalse([self isMemberOfClass:[GTMTestingAbstractTest class]], + @"test should not run on the abstract class"); ++gAbstractCalls_; } @@ -51,11 +60,12 @@ static int gZzCheckCalls_ = 0; - (void)testZZCheck { ++gZzCheckCalls_; if ([self isMemberOfClass:[GTMTestingTestOne class]]) { - STAssertEquals(gAbstractCalls_, 1, + XCTAssertEqual(gAbstractCalls_, 1, @"wrong number of abstract calls at this point"); } else { - STAssertTrue([self isMemberOfClass:[GTMTestingTestTwo class]], nil); - STAssertEquals(gAbstractCalls_, 2, + XCTAssertTrue([self isMemberOfClass:[GTMTestingTestTwo class]], + @"Not member of class"); + XCTAssertEqual(gAbstractCalls_, 2, @"wrong number of abstract calls at this point"); } } @@ -66,7 +76,7 @@ static int gZzCheckCalls_ = 0; - (void)testZZZCheck { // Test defined at this leaf, it should always run, check on the other methods. - STAssertEquals(gZzCheckCalls_, 2, @"the parent class method wasn't called"); + XCTAssertEqual(gZzCheckCalls_, 2, @"the parent class method wasn't called"); } @end diff --git a/UnitTesting/GTMTestTimerTest.m b/UnitTesting/GTMTestTimerTest.m index 86f9d22..27758ff 100644 --- a/UnitTesting/GTMTestTimerTest.m +++ b/UnitTesting/GTMTestTimerTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -25,32 +25,32 @@ @implementation GTMTestTimerTest - (void)testTimer { GTMTestTimer *timer = GTMTestTimerCreate(); - STAssertNotNULL(timer, nil); + XCTAssertNotNULL(timer); GTMTestTimerRetain(timer); GTMTestTimerRelease(timer); - STAssertEqualsWithAccuracy(GTMTestTimerGetSeconds(timer), 0.0, 0.0, nil); + XCTAssertEqualWithAccuracy(GTMTestTimerGetSeconds(timer), 0.0, 0.0); GTMTestTimerStart(timer); - STAssertTrue(GTMTestTimerIsRunning(timer), nil); + XCTAssertTrue(GTMTestTimerIsRunning(timer)); NSRunLoop *loop = [NSRunLoop currentRunLoop]; [loop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; GTMTestTimerStop(timer); - - // We use greater than (and an almost absurd less than) because + + // We use greater than (and an almost absurd less than) because // these tests are very dependant on machine load, and we don't want // automated tests reporting false negatives. - STAssertGreaterThan(GTMTestTimerGetSeconds(timer), 0.1, nil); - STAssertGreaterThan(GTMTestTimerGetMilliseconds(timer), 100.0,nil); - STAssertGreaterThan(GTMTestTimerGetMicroseconds(timer), 100000.0, nil); - + XCTAssertGreaterThan(GTMTestTimerGetSeconds(timer), 0.1); + XCTAssertGreaterThan(GTMTestTimerGetMilliseconds(timer), 100.0); + XCTAssertGreaterThan(GTMTestTimerGetMicroseconds(timer), 100000.0); + // Check to make sure we're not WAY off the mark (by a factor of 10) - STAssertLessThan(GTMTestTimerGetMicroseconds(timer), 1000000.0, nil); - + XCTAssertLessThan(GTMTestTimerGetMicroseconds(timer), 1000000.0); + [loop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; GTMTestTimerStart(timer); [loop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - STAssertGreaterThan(GTMTestTimerGetSeconds(timer), 0.2, nil); + XCTAssertGreaterThan(GTMTestTimerGetSeconds(timer), 0.2); GTMTestTimerStop(timer); - STAssertEquals(GTMTestTimerGetIterations(timer), (NSUInteger)2, nil); + XCTAssertEqual(GTMTestTimerGetIterations(timer), (NSUInteger)2); GTMTestTimerRelease(timer); } @end diff --git a/UnitTesting/GTMUIKit+UnitTesting.h b/UnitTesting/GTMUIKit+UnitTesting.h deleted file mode 100644 index a9052f2..0000000 --- a/UnitTesting/GTMUIKit+UnitTesting.h +++ /dev/null @@ -1,128 +0,0 @@ -// -// GTMUIKit+UnitTesting.h -// -// Code for making unit testing of graphics/UI easier. Generally you -// will only want to look at the macros: -// GTMAssertDrawingEqualToFile -// GTMAssertViewRepEqualToFile -// and the protocol GTMUnitTestViewDrawer. When using these routines -// make sure you are using device colors and not calibrated/generic colors -// or else your test graphics WILL NOT match across devices/graphics cards. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <UIKit/UIKit.h> -#import "GTMNSObject+UnitTesting.h" - -@protocol GTMUnitTestViewDrawer; - -// Fails when the |a1|'s drawing in an area |a2| does not equal the image file named |a3|. -// See the description of the GTMAssertViewRepEqualToFile macro -// to understand how |a3| is found and written out. -// See the description of the GTMUnitTestView for a better idea -// how the view works. -// Implemented as a macro to match the rest of the SenTest macros. -// -// Args: -// a1: The object that implements the GTMUnitTestViewDrawer protocol -// that is doing the drawing. -// a2: The size of the drawing -// a3: The name of the image file to check against. -// Do not include the extension -// a4: contextInfo to pass to drawer -// description: A format string as in the printf() function. -// Can be nil or an empty string but must be present. -// ...: A variable number of arguments to the format string. Can be absent. -// - -#define GTMAssertDrawingEqualToFile(a1, a2, a3, a4, description, ...) \ - do { \ - id<GTMUnitTestViewDrawer> a1Drawer = (a1); \ - CGSize a2Size = (a2); \ - NSString* a3String = (a3); \ - void *a4ContextInfo = (a4); \ - CGRect frame = CGRectMake(0, 0, a2Size.width, a2Size.height); \ - GTMUnitTestView *view = [[[GTMUnitTestView alloc] initWithFrame:frame drawer:a1Drawer contextInfo:a4ContextInfo] autorelease]; \ - GTMAssertObjectImageEqualToImageNamed(view, a3String, @"%@", STComposeString(description, ##__VA_ARGS__)); \ - } while(0) - -// Category for making unit testing of graphics/UI easier. - -// Allows you to take a state of a view. Supports both image and state. -// See GTMNSObject+UnitTesting.h for details. -@interface UIView (GTMUnitTestingAdditions) <GTMUnitTestingImaging> - -// Encodes the state of an object in a manner suitable for comparing against a master state file -// This enables us to determine whether the object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder; - -// Returns whether gtm_unitTestEncodeState should recurse into subviews -// -// Returns: -// should gtm_unitTestEncodeState pick up subview state. -- (BOOL)gtm_shouldEncodeStateForSubviews; -@end - -// Category to help UIImage testing. UIImage can be tested using -// GTMAssertObjectImageEqualToImageNamed macro, which automatically creates -// result images and diff images in case test fails. -@interface UIImage (GTMUnitTestingAdditions) <GTMUnitTestingImaging> -@end - -// A view that allows you to delegate out drawing using the formal -// GTMUnitTestViewDelegate protocol -// This is useful when writing up unit tests for visual elements. -// Your test will often end up looking like this: -// - (void)testFoo { -// GTMAssertDrawingEqualToFile(self, CGSizeMake(200, 200), @"Foo", nil, nil); -// } -// and your testSuite will also implement the unitTestViewDrawRect method to do -// it's actual drawing. The above creates a view of size 200x200 that draws -// it's content using |self|'s unitTestViewDrawRect method and compares it to -// the contents of the file Foo.tif to make sure it's valid -@interface GTMUnitTestView : UIView { - @private - id<GTMUnitTestViewDrawer> drawer_; // delegate for doing drawing (STRONG) - void* contextInfo_; // info passed in by user for them to use when drawing -} - -// Create a GTMUnitTestView. -// -// Args: -// rect: the area to draw. -// drawer: the object that will do the drawing via the GTMUnitTestViewDrawer -// protocol -// contextInfo: -- (id)initWithFrame:(CGRect)frame drawer:(id<GTMUnitTestViewDrawer>)drawer contextInfo:(void*)contextInfo; - -@end - -/// \cond Protocols - -// Formal protocol for doing unit testing of views. See description of -// GTMUnitTestView for details. -@protocol GTMUnitTestViewDrawer <NSObject> - -// Draw the view. Equivalent to drawRect on a standard UIView. -// -// Args: -// rect: the area to draw. -- (void)gtm_unitTestViewDrawRect:(CGRect)rect contextInfo:(void*)contextInfo; - -@end diff --git a/UnitTesting/GTMUIKit+UnitTesting.m b/UnitTesting/GTMUIKit+UnitTesting.m deleted file mode 100644 index 7d3f200..0000000 --- a/UnitTesting/GTMUIKit+UnitTesting.m +++ /dev/null @@ -1,122 +0,0 @@ -// -// GTMUIKit+UnitTesting.m -// -// Category for making unit testing of graphics/UI easier. -// Allows you to save a view out to a image file, and compare a view -// with a previously stored representation to make sure it hasn't changed. -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMUIKit+UnitTesting.h" -#import "GTMCALayer+UnitTesting.h" -#import "GTMDefines.h" - -#if !GTM_IPHONE_SDK -#error This file is for iPhone use only -#endif // GTM_IPHONE_SDK - -// A view that allows you to delegate out drawing using the formal -// GTMUnitTestViewDelegate protocol above. This is useful when writing up unit -// tests for visual elements. -// Your test will often end up looking like this: -// - (void)testFoo { -// GTMAssertDrawingEqualToFile(self, CGSizeMake(200, 200), @"Foo", nil, nil); -// } -// and your testSuite will also implement the unitTestViewDrawRect method to do -// it's actual drawing. The above creates a view of size 200x200 that draws -// it's content using |self|'s unitTestViewDrawRect method and compares it to -// the contents of the file Foo.tif to make sure it's valid -@implementation GTMUnitTestView - -- (id)initWithFrame:(CGRect)frame - drawer:(id<GTMUnitTestViewDrawer>)drawer - contextInfo:(void*)contextInfo{ - self = [super initWithFrame:frame]; - if (self != nil) { - drawer_ = [drawer retain]; - contextInfo_ = contextInfo; - } - return self; -} - -- (void)dealloc { - [drawer_ release]; - [super dealloc]; -} - -- (void)drawRect:(CGRect)rect { - [drawer_ gtm_unitTestViewDrawRect:rect contextInfo:contextInfo_]; -} - -@end - -@implementation UIView (GTMUnitTestingAdditions) - -// Returns an image containing a representation of the object -// suitable for use in comparing against a master image. -// NB this means that all colors should be from "NSDevice" color space -// Does all of it's drawing with smoothfonts and antialiasing off -// to avoid issues with font smoothing settings and antialias differences -// between ppc and x86. -// -// Returns: -// an image of the object -- (CGImageRef)gtm_unitTestImage { - CALayer* layer = [self layer]; - return [layer gtm_unitTestImage]; -} - -// Encodes the state of an object in a manner suitable for comparing -// against a master state file so we can determine whether the -// object is in a suitable state. -// -// Arguments: -// inCoder - the coder to encode our state into -- (void)gtm_unitTestEncodeState:(NSCoder*)inCoder { - [super gtm_unitTestEncodeState:inCoder]; - [inCoder encodeBool:[self isHidden] forKey:@"ViewIsHidden"]; - CALayer* layer = [self layer]; - if (layer) { - [layer gtm_unitTestEncodeState:inCoder]; - } - if ([self gtm_shouldEncodeStateForSubviews]) { - int i = 0; - for (UIView *subview in [self subviews]) { - [inCoder encodeObject:subview - forKey:[NSString stringWithFormat:@"ViewSubView %d", i]]; - i++; - } - } -} - -// Returns whether gtm_unitTestEncodeState should recurse into subviews -// -// Returns: -// should gtm_unitTestEncodeState pick up subview state. -- (BOOL)gtm_shouldEncodeStateForSubviews { - return YES; -} - -- (BOOL)gtm_shouldEncodeStateForSublayersOfLayer:(CALayer*)layer { - return NO; -} -@end - -@implementation UIImage (GTMUnitTestingAdditions) -- (CGImageRef)gtm_unitTestImage { - return [self CGImage]; -} -@end diff --git a/UnitTesting/GTMUIKit+UnitTestingTest.m b/UnitTesting/GTMUIKit+UnitTestingTest.m deleted file mode 100644 index 4b0387c..0000000 --- a/UnitTesting/GTMUIKit+UnitTestingTest.m +++ /dev/null @@ -1,67 +0,0 @@ -// -// GTMUIKit+UnitTestingTest.m -// -// Copyright 2006-2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <CoreGraphics/CoreGraphics.h> -#import "GTMUIKit+UnitTesting.h" -#import "GTMSenTestCase.h" - -@interface GTMUIView_UnitTestingTest : GTMTestCase <GTMUnitTestViewDrawer> -@end - -@implementation GTMUIView_UnitTestingTest - -- (void)testDrawing { - GTMAssertDrawingEqualToFile(self, - CGSizeMake(200,200), - @"GTMUIViewUnitTestingTest", - [UIApplication sharedApplication], - nil); -} - -- (void)testState { - UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)] autorelease]; - UIView *subview = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)] autorelease]; - [view addSubview:subview]; - GTMAssertObjectStateEqualToStateNamed(view, @"GTMUIViewUnitTestingTest", nil); -} - -- (void)testUIImage { - NSString* name = @"GTMUIViewUnitTestingTest"; - NSBundle *bundle = [NSBundle bundleForClass:[self class]]; - NSString *imagePath = [bundle pathForResource:name ofType:@"png"]; - STAssertNotNil(imagePath, nil); - UIImage* image = [UIImage imageWithContentsOfFile:imagePath]; - GTMAssertObjectImageEqualToImageNamed(image, name, nil); -} - -- (void)gtm_unitTestViewDrawRect:(CGRect)rect contextInfo:(void*)contextInfo { - UIApplication *app = [UIApplication sharedApplication]; - STAssertEqualObjects(app, - contextInfo, - @"Should be a UIApplication"); - CGPoint center = CGPointMake(CGRectGetMidX(rect), - CGRectGetMidY(rect)); - rect = CGRectMake(center.x - 50, center.y - 50, 100, 100); - CGContextRef context = UIGraphicsGetCurrentContext(); - CGContextAddEllipseInRect(context, rect); - CGContextSetLineWidth(context, 5); - [[UIColor redColor] set]; - CGContextStrokePath(context); -} - -@end diff --git a/UnitTesting/GTMUIUnitTestingHarness/English.lproj/MainMenu.xib b/UnitTesting/GTMUIUnitTestingHarness/English.lproj/MainMenu.xib index 2a5aa22..346c749 100644 --- a/UnitTesting/GTMUIUnitTestingHarness/English.lproj/MainMenu.xib +++ b/UnitTesting/GTMUIUnitTestingHarness/English.lproj/MainMenu.xib @@ -1,2065 +1,311 @@ -<?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03"> - <data> - <int key="IBDocument.SystemTarget">0</int> - <string key="IBDocument.SystemVersion">9G55</string> - <string key="IBDocument.InterfaceBuilderVersion">677</string> - <string key="IBDocument.AppKitVersion">949.43</string> - <string key="IBDocument.HIToolboxVersion">353.00</string> - <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> - <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="377"/> - </object> - <object class="NSArray" key="IBDocument.PluginDependencies"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - </object> - <object class="NSMutableDictionary" key="IBDocument.Metadata"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSCustomObject" id="1021"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSCustomObject" id="1014"> - <string key="NSClassName">FirstResponder</string> - </object> - <object class="NSCustomObject" id="1050"> - <string key="NSClassName">NSApplication</string> - </object> - <object class="NSMenu" id="649796088"> - <string key="NSTitle">AMainMenu</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="694149608"> - <reference key="NSMenu" ref="649796088"/> - <string key="NSTitle">NewApplication</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <object class="NSCustomResource" key="NSOnImage" id="35465992"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSMenuCheckmark</string> - </object> - <object class="NSCustomResource" key="NSMixedImage" id="513340101"> - <string key="NSClassName">NSImage</string> - <string key="NSResourceName">NSMenuMixedState</string> - </object> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="110575045"> - <string key="NSTitle">NewApplication</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="238522557"> - <reference key="NSMenu" ref="110575045"/> - <string key="NSTitle">About NewApplication</string> - <string key="NSKeyEquiv"/> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="304266470"> - <reference key="NSMenu" ref="110575045"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="609285721"> - <reference key="NSMenu" ref="110575045"/> - <string type="base64-UTF8" key="NSTitle">UHJlZmVyZW5jZXPigKY</string> - <string key="NSKeyEquiv">,</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="481834944"> - <reference key="NSMenu" ref="110575045"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="1046388886"> - <reference key="NSMenu" ref="110575045"/> - <string key="NSTitle">Services</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="752062318"> - <string key="NSTitle">Services</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <string key="NSName">_NSServicesMenu</string> - </object> - </object> - <object class="NSMenuItem" id="646227648"> - <reference key="NSMenu" ref="110575045"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="755159360"> - <reference key="NSMenu" ref="110575045"/> - <string key="NSTitle">Hide NewApplication</string> - <string key="NSKeyEquiv">h</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="342932134"> - <reference key="NSMenu" ref="110575045"/> - <string key="NSTitle">Hide Others</string> - <string key="NSKeyEquiv">h</string> - <int key="NSKeyEquivModMask">1572864</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="908899353"> - <reference key="NSMenu" ref="110575045"/> - <string key="NSTitle">Show All</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="1056857174"> - <reference key="NSMenu" ref="110575045"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="632727374"> - <reference key="NSMenu" ref="110575045"/> - <string key="NSTitle">Quit NewApplication</string> - <string key="NSKeyEquiv"/> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - </object> - <string key="NSName">_NSAppleMenu</string> - </object> - </object> - <object class="NSMenuItem" id="379814623"> - <reference key="NSMenu" ref="649796088"/> - <string key="NSTitle">File</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="720053764"> - <string key="NSTitle">File</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="705341025"> - <reference key="NSMenu" ref="720053764"/> - <string key="NSTitle">New</string> - <string key="NSKeyEquiv">n</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="722745758"> - <reference key="NSMenu" ref="720053764"/> - <string type="base64-UTF8" key="NSTitle">T3BlbuKApg</string> - <string key="NSKeyEquiv">o</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="1025936716"> - <reference key="NSMenu" ref="720053764"/> - <string key="NSTitle">Open Recent</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="1065607017"> - <string key="NSTitle">Open Recent</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="759406840"> - <reference key="NSMenu" ref="1065607017"/> - <string key="NSTitle">Clear Menu</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - </object> - <string key="NSName">_NSRecentDocumentsMenu</string> - </object> - </object> - <object class="NSMenuItem" id="425164168"> - <reference key="NSMenu" ref="720053764"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="776162233"> - <reference key="NSMenu" ref="720053764"/> - <string key="NSTitle">Close</string> - <string key="NSKeyEquiv">w</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="1023925487"> - <reference key="NSMenu" ref="720053764"/> - <string key="NSTitle">Save</string> - <string key="NSKeyEquiv">s</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="117038363"> - <reference key="NSMenu" ref="720053764"/> - <string type="base64-UTF8" key="NSTitle">U2F2ZSBBc+KApg</string> - <string key="NSKeyEquiv">S</string> - <int key="NSKeyEquivModMask">1179648</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="579971712"> - <reference key="NSMenu" ref="720053764"/> - <string key="NSTitle">Revert to Saved</string> - <string key="NSKeyEquiv"/> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="1010469920"> - <reference key="NSMenu" ref="720053764"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="294629803"> - <reference key="NSMenu" ref="720053764"/> - <string key="NSTitle">Page Setup...</string> - <string key="NSKeyEquiv">P</string> - <int key="NSKeyEquivModMask">1179648</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSToolTip"/> - </object> - <object class="NSMenuItem" id="49223823"> - <reference key="NSMenu" ref="720053764"/> - <string type="base64-UTF8" key="NSTitle">UHJpbnTigKY</string> - <string key="NSKeyEquiv">p</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - </object> - </object> - </object> - <object class="NSMenuItem" id="952259628"> - <reference key="NSMenu" ref="649796088"/> - <string key="NSTitle">Edit</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="789758025"> - <string key="NSTitle">Edit</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="1058277027"> - <reference key="NSMenu" ref="789758025"/> - <string key="NSTitle">Undo</string> - <string key="NSKeyEquiv">z</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="790794224"> - <reference key="NSMenu" ref="789758025"/> - <string key="NSTitle">Redo</string> - <string key="NSKeyEquiv">Z</string> - <int key="NSKeyEquivModMask">1179648</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="1040322652"> - <reference key="NSMenu" ref="789758025"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="296257095"> - <reference key="NSMenu" ref="789758025"/> - <string key="NSTitle">Cut</string> - <string key="NSKeyEquiv">x</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="860595796"> - <reference key="NSMenu" ref="789758025"/> - <string key="NSTitle">Copy</string> - <string key="NSKeyEquiv">c</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="29853731"> - <reference key="NSMenu" ref="789758025"/> - <string key="NSTitle">Paste</string> - <string key="NSKeyEquiv">v</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="437104165"> - <reference key="NSMenu" ref="789758025"/> - <string key="NSTitle">Delete</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="583158037"> - <reference key="NSMenu" ref="789758025"/> - <string key="NSTitle">Select All</string> - <string key="NSKeyEquiv">a</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="212016141"> - <reference key="NSMenu" ref="789758025"/> - <bool key="NSIsDisabled">YES</bool> - <bool key="NSIsSeparator">YES</bool> - <string key="NSTitle"/> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="892235320"> - <reference key="NSMenu" ref="789758025"/> - <string key="NSTitle">Find</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="963351320"> - <string key="NSTitle">Find</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="447796847"> - <reference key="NSMenu" ref="963351320"/> - <string type="base64-UTF8" key="NSTitle">RmluZOKApg</string> - <string key="NSKeyEquiv">f</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <int key="NSTag">1</int> - </object> - <object class="NSMenuItem" id="326711663"> - <reference key="NSMenu" ref="963351320"/> - <string key="NSTitle">Find Next</string> - <string key="NSKeyEquiv">g</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <int key="NSTag">2</int> - </object> - <object class="NSMenuItem" id="270902937"> - <reference key="NSMenu" ref="963351320"/> - <string key="NSTitle">Find Previous</string> - <string key="NSKeyEquiv">G</string> - <int key="NSKeyEquivModMask">1179648</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <int key="NSTag">3</int> - </object> - <object class="NSMenuItem" id="159080638"> - <reference key="NSMenu" ref="963351320"/> - <string key="NSTitle">Use Selection for Find</string> - <string key="NSKeyEquiv">e</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <int key="NSTag">7</int> - </object> - <object class="NSMenuItem" id="88285865"> - <reference key="NSMenu" ref="963351320"/> - <string key="NSTitle">Jump to Selection</string> - <string key="NSKeyEquiv">j</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - </object> - </object> - </object> - <object class="NSMenuItem" id="972420730"> - <reference key="NSMenu" ref="789758025"/> - <string key="NSTitle">Spelling and Grammar</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="769623530"> - <string key="NSTitle">Spelling and Grammar</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="679648819"> - <reference key="NSMenu" ref="769623530"/> - <string type="base64-UTF8" key="NSTitle">U2hvdyBTcGVsbGluZ+KApg</string> - <string key="NSKeyEquiv">:</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="96193923"> - <reference key="NSMenu" ref="769623530"/> - <string key="NSTitle">Check Spelling</string> - <string key="NSKeyEquiv">;</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="948374510"> - <reference key="NSMenu" ref="769623530"/> - <string key="NSTitle">Check Spelling While Typing</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="967646866"> - <reference key="NSMenu" ref="769623530"/> - <string key="NSTitle">Check Grammar With Spelling</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - </object> - </object> - </object> - <object class="NSMenuItem" id="507821607"> - <reference key="NSMenu" ref="789758025"/> - <string key="NSTitle">Substitutions</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="698887838"> - <string key="NSTitle">Substitutions</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="605118523"> - <reference key="NSMenu" ref="698887838"/> - <string key="NSTitle">Smart Copy/Paste</string> - <string key="NSKeyEquiv">f</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <int key="NSTag">1</int> - </object> - <object class="NSMenuItem" id="197661976"> - <reference key="NSMenu" ref="698887838"/> - <string key="NSTitle">Smart Quotes</string> - <string key="NSKeyEquiv">g</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <int key="NSTag">2</int> - </object> - <object class="NSMenuItem" id="708854459"> - <reference key="NSMenu" ref="698887838"/> - <string key="NSTitle">Smart Links</string> - <string key="NSKeyEquiv">G</string> - <int key="NSKeyEquivModMask">1179648</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <int key="NSTag">3</int> - </object> - </object> - </object> - </object> - <object class="NSMenuItem" id="676164635"> - <reference key="NSMenu" ref="789758025"/> - <string key="NSTitle">Speech</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="785027613"> - <string key="NSTitle">Speech</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="731782645"> - <reference key="NSMenu" ref="785027613"/> - <string key="NSTitle">Start Speaking</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="680220178"> - <reference key="NSMenu" ref="785027613"/> - <string key="NSTitle">Stop Speaking</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - </object> - </object> - </object> - </object> - </object> - </object> - <object class="NSMenuItem" id="626404410"> - <reference key="NSMenu" ref="649796088"/> - <string type="base64-UTF8" key="NSTitle">wqxNZW51IFRpdGxlA</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="502084290"> - <string type="base64-UTF8" key="NSTitle">wqxNZW51IFRpdGxlA</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="83534624"> - <reference key="NSMenu" ref="502084290"/> - <string type="base64-UTF8" key="NSTitle">wqxNZW51IEl0ZW0</string> - <string key="NSKeyEquiv">t</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="1028416764"> - <reference key="NSMenu" ref="502084290"/> - <string key="NSTitle">Show Colors</string> - <string key="NSKeyEquiv">C</string> - <int key="NSKeyEquivModMask">1179648</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - </object> - </object> - </object> - <object class="NSMenuItem" id="586577488"> - <reference key="NSMenu" ref="649796088"/> - <string key="NSTitle">View</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="466310130"> - <string key="NSTitle">View</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="102151532"> - <reference key="NSMenu" ref="466310130"/> - <string key="NSTitle">Show Toolbar</string> - <string key="NSKeyEquiv">t</string> - <int key="NSKeyEquivModMask">1572864</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - <object class="NSMenuItem" id="237841660"> - <reference key="NSMenu" ref="466310130"/> - <string type="base64-UTF8" key="NSTitle">Q3VzdG9taXplIFRvb2xiYXLigKY</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - </object> - </object> - </object> - <object class="NSMenuItem" id="391199113"> - <reference key="NSMenu" ref="649796088"/> - <string key="NSTitle">Help</string> - <string key="NSKeyEquiv"/> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - <string key="NSAction">submenuAction:</string> - <object class="NSMenu" key="NSSubmenu" id="374024848"> - <string key="NSTitle">Help</string> - <object class="NSMutableArray" key="NSMenuItems"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMenuItem" id="238773614"> - <reference key="NSMenu" ref="374024848"/> - <string key="NSTitle">NewApplication Help</string> - <string key="NSKeyEquiv">?</string> - <int key="NSKeyEquivModMask">1048576</int> - <int key="NSMnemonicLoc">2147483647</int> - <reference key="NSOnImage" ref="35465992"/> - <reference key="NSMixedImage" ref="513340101"/> - </object> - </object> - </object> - </object> - </object> - <string key="NSName">_NSMainMenu</string> - </object> - <object class="NSCustomObject" id="728136523"> - <string key="NSClassName">GTMUILocalizer</string> - </object> - </object> - <object class="IBObjectContainer" key="IBDocument.Objects"> - <object class="NSMutableArray" key="connectionRecords"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">print:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="49223823"/> - </object> - <int key="connectionID">86</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">runPageLayout:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="294629803"/> - </object> - <int key="connectionID">87</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">clearRecentDocuments:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="759406840"/> - </object> - <int key="connectionID">127</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">orderFrontStandardAboutPanel:</string> - <reference key="source" ref="1021"/> - <reference key="destination" ref="238522557"/> - </object> - <int key="connectionID">142</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">performClose:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="776162233"/> - </object> - <int key="connectionID">193</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">toggleContinuousSpellChecking:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="948374510"/> - </object> - <int key="connectionID">222</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">undo:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="1058277027"/> - </object> - <int key="connectionID">223</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">copy:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="860595796"/> - </object> - <int key="connectionID">224</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">checkSpelling:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="96193923"/> - </object> - <int key="connectionID">225</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">paste:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="29853731"/> - </object> - <int key="connectionID">226</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">stopSpeaking:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="680220178"/> - </object> - <int key="connectionID">227</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">cut:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="296257095"/> - </object> - <int key="connectionID">228</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">showGuessPanel:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="679648819"/> - </object> - <int key="connectionID">230</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">redo:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="790794224"/> - </object> - <int key="connectionID">231</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">selectAll:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="583158037"/> - </object> - <int key="connectionID">232</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">startSpeaking:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="731782645"/> - </object> - <int key="connectionID">233</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">delete:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="437104165"/> - </object> - <int key="connectionID">235</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">performFindPanelAction:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="447796847"/> - </object> - <int key="connectionID">241</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">centerSelectionInVisibleArea:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="88285865"/> - </object> - <int key="connectionID">245</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">toggleGrammarChecking:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="967646866"/> - </object> - <int key="connectionID">347</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">toggleSmartInsertDelete:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="605118523"/> - </object> - <int key="connectionID">355</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">toggleAutomaticQuoteSubstitution:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="197661976"/> - </object> - <int key="connectionID">356</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">toggleAutomaticLinkDetection:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="708854459"/> - </object> - <int key="connectionID">357</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">showHelp:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="238773614"/> - </object> - <int key="connectionID">360</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">orderFrontColorPanel:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="1028416764"/> - </object> - <int key="connectionID">361</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">saveDocument:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="1023925487"/> - </object> - <int key="connectionID">362</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">saveDocumentAs:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="117038363"/> - </object> - <int key="connectionID">363</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">revertDocumentToSaved:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="579971712"/> - </object> - <int key="connectionID">364</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">runToolbarCustomizationPalette:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="237841660"/> - </object> - <int key="connectionID">365</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">toggleToolbarShown:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="102151532"/> - </object> - <int key="connectionID">366</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">hide:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="755159360"/> - </object> - <int key="connectionID">367</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">hideOtherApplications:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="342932134"/> - </object> - <int key="connectionID">368</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">terminate:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="632727374"/> - </object> - <int key="connectionID">369</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">unhideAllApplications:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="908899353"/> - </object> - <int key="connectionID">370</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">newDocument:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="705341025"/> - </object> - <int key="connectionID">373</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBActionConnection" key="connection"> - <string key="label">openDocument:</string> - <reference key="source" ref="1014"/> - <reference key="destination" ref="722745758"/> - </object> - <int key="connectionID">374</int> - </object> - <object class="IBConnectionRecord"> - <object class="IBOutletConnection" key="connection"> - <string key="label">owner_</string> - <reference key="source" ref="728136523"/> - <reference key="destination" ref="1021"/> - </object> - <int key="connectionID">376</int> - </object> - </object> - <object class="IBMutableOrderedSet" key="objectRecords"> - <object class="NSArray" key="orderedObjects"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBObjectRecord"> - <int key="objectID">0</int> - <object class="NSArray" key="object" id="1049"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <reference key="children" ref="1048"/> - <nil key="parent"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-2</int> - <reference key="object" ref="1021"/> - <reference key="parent" ref="1049"/> - <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-1</int> - <reference key="object" ref="1014"/> - <reference key="parent" ref="1049"/> - <string key="objectName">First Responder</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">-3</int> - <reference key="object" ref="1050"/> - <reference key="parent" ref="1049"/> - <string key="objectName">Application</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">29</int> - <reference key="object" ref="649796088"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="694149608"/> - <reference ref="391199113"/> - <reference ref="952259628"/> - <reference ref="379814623"/> - <reference ref="586577488"/> - <reference ref="626404410"/> - </object> - <reference key="parent" ref="1049"/> - <string key="objectName">MainMenu</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">56</int> - <reference key="object" ref="694149608"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="110575045"/> - </object> - <reference key="parent" ref="649796088"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">103</int> - <reference key="object" ref="391199113"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="374024848"/> - </object> - <reference key="parent" ref="649796088"/> - <string key="objectName">1</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">217</int> - <reference key="object" ref="952259628"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="789758025"/> - </object> - <reference key="parent" ref="649796088"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">83</int> - <reference key="object" ref="379814623"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="720053764"/> - </object> - <reference key="parent" ref="649796088"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">81</int> - <reference key="object" ref="720053764"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1023925487"/> - <reference ref="117038363"/> - <reference ref="49223823"/> - <reference ref="722745758"/> - <reference ref="705341025"/> - <reference ref="1025936716"/> - <reference ref="294629803"/> - <reference ref="776162233"/> - <reference ref="425164168"/> - <reference ref="579971712"/> - <reference ref="1010469920"/> - </object> - <reference key="parent" ref="379814623"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">75</int> - <reference key="object" ref="1023925487"/> - <reference key="parent" ref="720053764"/> - <string key="objectName">3</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">80</int> - <reference key="object" ref="117038363"/> - <reference key="parent" ref="720053764"/> - <string key="objectName">8</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">78</int> - <reference key="object" ref="49223823"/> - <reference key="parent" ref="720053764"/> - <string key="objectName">6</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">72</int> - <reference key="object" ref="722745758"/> - <reference key="parent" ref="720053764"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">82</int> - <reference key="object" ref="705341025"/> - <reference key="parent" ref="720053764"/> - <string key="objectName">9</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">124</int> - <reference key="object" ref="1025936716"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1065607017"/> - </object> - <reference key="parent" ref="720053764"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">77</int> - <reference key="object" ref="294629803"/> - <reference key="parent" ref="720053764"/> - <string key="objectName">5</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">73</int> - <reference key="object" ref="776162233"/> - <reference key="parent" ref="720053764"/> - <string key="objectName">1</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">79</int> - <reference key="object" ref="425164168"/> - <reference key="parent" ref="720053764"/> - <string key="objectName">7</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">112</int> - <reference key="object" ref="579971712"/> - <reference key="parent" ref="720053764"/> - <string key="objectName">10</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">74</int> - <reference key="object" ref="1010469920"/> - <reference key="parent" ref="720053764"/> - <string key="objectName">2</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">125</int> - <reference key="object" ref="1065607017"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="759406840"/> - </object> - <reference key="parent" ref="1025936716"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">126</int> - <reference key="object" ref="759406840"/> - <reference key="parent" ref="1065607017"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">205</int> - <reference key="object" ref="789758025"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="437104165"/> - <reference ref="583158037"/> - <reference ref="1058277027"/> - <reference ref="212016141"/> - <reference ref="296257095"/> - <reference ref="29853731"/> - <reference ref="860595796"/> - <reference ref="1040322652"/> - <reference ref="790794224"/> - <reference ref="892235320"/> - <reference ref="972420730"/> - <reference ref="676164635"/> - <reference ref="507821607"/> - </object> - <reference key="parent" ref="952259628"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">202</int> - <reference key="object" ref="437104165"/> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">198</int> - <reference key="object" ref="583158037"/> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">207</int> - <reference key="object" ref="1058277027"/> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">214</int> - <reference key="object" ref="212016141"/> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">199</int> - <reference key="object" ref="296257095"/> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">203</int> - <reference key="object" ref="29853731"/> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">197</int> - <reference key="object" ref="860595796"/> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">206</int> - <reference key="object" ref="1040322652"/> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">215</int> - <reference key="object" ref="790794224"/> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">218</int> - <reference key="object" ref="892235320"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="963351320"/> - </object> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">216</int> - <reference key="object" ref="972420730"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="769623530"/> - </object> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">200</int> - <reference key="object" ref="769623530"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="948374510"/> - <reference ref="96193923"/> - <reference ref="679648819"/> - <reference ref="967646866"/> - </object> - <reference key="parent" ref="972420730"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">219</int> - <reference key="object" ref="948374510"/> - <reference key="parent" ref="769623530"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">201</int> - <reference key="object" ref="96193923"/> - <reference key="parent" ref="769623530"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">204</int> - <reference key="object" ref="679648819"/> - <reference key="parent" ref="769623530"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">220</int> - <reference key="object" ref="963351320"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="270902937"/> - <reference ref="88285865"/> - <reference ref="159080638"/> - <reference ref="326711663"/> - <reference ref="447796847"/> - </object> - <reference key="parent" ref="892235320"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">213</int> - <reference key="object" ref="270902937"/> - <reference key="parent" ref="963351320"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">210</int> - <reference key="object" ref="88285865"/> - <reference key="parent" ref="963351320"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">221</int> - <reference key="object" ref="159080638"/> - <reference key="parent" ref="963351320"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">208</int> - <reference key="object" ref="326711663"/> - <reference key="parent" ref="963351320"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">209</int> - <reference key="object" ref="447796847"/> - <reference key="parent" ref="963351320"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">106</int> - <reference key="object" ref="374024848"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="238773614"/> - </object> - <reference key="parent" ref="391199113"/> - <string key="objectName">2</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">111</int> - <reference key="object" ref="238773614"/> - <reference key="parent" ref="374024848"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">57</int> - <reference key="object" ref="110575045"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="238522557"/> - <reference ref="755159360"/> - <reference ref="908899353"/> - <reference ref="632727374"/> - <reference ref="646227648"/> - <reference ref="609285721"/> - <reference ref="481834944"/> - <reference ref="304266470"/> - <reference ref="1046388886"/> - <reference ref="1056857174"/> - <reference ref="342932134"/> - </object> - <reference key="parent" ref="694149608"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">58</int> - <reference key="object" ref="238522557"/> - <reference key="parent" ref="110575045"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">134</int> - <reference key="object" ref="755159360"/> - <reference key="parent" ref="110575045"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">150</int> - <reference key="object" ref="908899353"/> - <reference key="parent" ref="110575045"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">136</int> - <reference key="object" ref="632727374"/> - <reference key="parent" ref="110575045"/> - <string key="objectName">1111</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">144</int> - <reference key="object" ref="646227648"/> - <reference key="parent" ref="110575045"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">129</int> - <reference key="object" ref="609285721"/> - <reference key="parent" ref="110575045"/> - <string key="objectName">121</string> - </object> - <object class="IBObjectRecord"> - <int key="objectID">143</int> - <reference key="object" ref="481834944"/> - <reference key="parent" ref="110575045"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">236</int> - <reference key="object" ref="304266470"/> - <reference key="parent" ref="110575045"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">131</int> - <reference key="object" ref="1046388886"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="752062318"/> - </object> - <reference key="parent" ref="110575045"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">149</int> - <reference key="object" ref="1056857174"/> - <reference key="parent" ref="110575045"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">145</int> - <reference key="object" ref="342932134"/> - <reference key="parent" ref="110575045"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">130</int> - <reference key="object" ref="752062318"/> - <reference key="parent" ref="1046388886"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">295</int> - <reference key="object" ref="586577488"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="466310130"/> - </object> - <reference key="parent" ref="649796088"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">296</int> - <reference key="object" ref="466310130"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="102151532"/> - <reference ref="237841660"/> - </object> - <reference key="parent" ref="586577488"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">297</int> - <reference key="object" ref="102151532"/> - <reference key="parent" ref="466310130"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">298</int> - <reference key="object" ref="237841660"/> - <reference key="parent" ref="466310130"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">299</int> - <reference key="object" ref="626404410"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="502084290"/> - </object> - <reference key="parent" ref="649796088"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">300</int> - <reference key="object" ref="502084290"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="1028416764"/> - <reference ref="83534624"/> - </object> - <reference key="parent" ref="626404410"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">345</int> - <reference key="object" ref="1028416764"/> - <reference key="parent" ref="502084290"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">211</int> - <reference key="object" ref="676164635"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="785027613"/> - </object> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">212</int> - <reference key="object" ref="785027613"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="680220178"/> - <reference ref="731782645"/> - </object> - <reference key="parent" ref="676164635"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">195</int> - <reference key="object" ref="680220178"/> - <reference key="parent" ref="785027613"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">196</int> - <reference key="object" ref="731782645"/> - <reference key="parent" ref="785027613"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">346</int> - <reference key="object" ref="967646866"/> - <reference key="parent" ref="769623530"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">348</int> - <reference key="object" ref="507821607"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="698887838"/> - </object> - <reference key="parent" ref="789758025"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">349</int> - <reference key="object" ref="698887838"/> - <object class="NSMutableArray" key="children"> - <bool key="EncodedWithXMLCoder">YES</bool> - <reference ref="605118523"/> - <reference ref="197661976"/> - <reference ref="708854459"/> - </object> - <reference key="parent" ref="507821607"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">350</int> - <reference key="object" ref="605118523"/> - <reference key="parent" ref="698887838"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">351</int> - <reference key="object" ref="197661976"/> - <reference key="parent" ref="698887838"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">354</int> - <reference key="object" ref="708854459"/> - <reference key="parent" ref="698887838"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">375</int> - <reference key="object" ref="728136523"/> - <reference key="parent" ref="1049"/> - </object> - <object class="IBObjectRecord"> - <int key="objectID">377</int> - <reference key="object" ref="83534624"/> - <reference key="parent" ref="502084290"/> - </object> - </object> - </object> - <object class="NSMutableDictionary" key="flattenedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> - <string>-3.IBPluginDependency</string> - <string>103.IBPluginDependency</string> - <string>103.ImportedFromIB2</string> - <string>106.IBEditorWindowLastContentRect</string> - <string>106.IBPluginDependency</string> - <string>106.ImportedFromIB2</string> - <string>106.editorWindowContentRectSynchronizationRect</string> - <string>111.IBPluginDependency</string> - <string>111.ImportedFromIB2</string> - <string>112.IBPluginDependency</string> - <string>112.ImportedFromIB2</string> - <string>124.IBPluginDependency</string> - <string>124.ImportedFromIB2</string> - <string>125.IBPluginDependency</string> - <string>125.ImportedFromIB2</string> - <string>125.editorWindowContentRectSynchronizationRect</string> - <string>126.IBPluginDependency</string> - <string>126.ImportedFromIB2</string> - <string>129.IBPluginDependency</string> - <string>129.ImportedFromIB2</string> - <string>130.IBPluginDependency</string> - <string>130.ImportedFromIB2</string> - <string>130.editorWindowContentRectSynchronizationRect</string> - <string>131.IBPluginDependency</string> - <string>131.ImportedFromIB2</string> - <string>134.IBPluginDependency</string> - <string>134.ImportedFromIB2</string> - <string>136.IBPluginDependency</string> - <string>136.ImportedFromIB2</string> - <string>143.IBPluginDependency</string> - <string>143.ImportedFromIB2</string> - <string>144.IBPluginDependency</string> - <string>144.ImportedFromIB2</string> - <string>145.IBPluginDependency</string> - <string>145.ImportedFromIB2</string> - <string>149.IBPluginDependency</string> - <string>149.ImportedFromIB2</string> - <string>150.IBPluginDependency</string> - <string>150.ImportedFromIB2</string> - <string>195.IBPluginDependency</string> - <string>195.ImportedFromIB2</string> - <string>196.IBPluginDependency</string> - <string>196.ImportedFromIB2</string> - <string>197.IBPluginDependency</string> - <string>197.ImportedFromIB2</string> - <string>198.IBPluginDependency</string> - <string>198.ImportedFromIB2</string> - <string>199.IBPluginDependency</string> - <string>199.ImportedFromIB2</string> - <string>200.IBPluginDependency</string> - <string>200.ImportedFromIB2</string> - <string>200.editorWindowContentRectSynchronizationRect</string> - <string>201.IBPluginDependency</string> - <string>201.ImportedFromIB2</string> - <string>202.IBPluginDependency</string> - <string>202.ImportedFromIB2</string> - <string>203.IBPluginDependency</string> - <string>203.ImportedFromIB2</string> - <string>204.IBPluginDependency</string> - <string>204.ImportedFromIB2</string> - <string>205.IBEditorWindowLastContentRect</string> - <string>205.IBPluginDependency</string> - <string>205.ImportedFromIB2</string> - <string>205.editorWindowContentRectSynchronizationRect</string> - <string>206.IBPluginDependency</string> - <string>206.ImportedFromIB2</string> - <string>207.IBPluginDependency</string> - <string>207.ImportedFromIB2</string> - <string>208.IBPluginDependency</string> - <string>208.ImportedFromIB2</string> - <string>209.IBPluginDependency</string> - <string>209.ImportedFromIB2</string> - <string>210.IBPluginDependency</string> - <string>210.ImportedFromIB2</string> - <string>211.IBPluginDependency</string> - <string>211.ImportedFromIB2</string> - <string>212.IBPluginDependency</string> - <string>212.ImportedFromIB2</string> - <string>212.editorWindowContentRectSynchronizationRect</string> - <string>213.IBPluginDependency</string> - <string>213.ImportedFromIB2</string> - <string>214.IBPluginDependency</string> - <string>214.ImportedFromIB2</string> - <string>215.IBPluginDependency</string> - <string>215.ImportedFromIB2</string> - <string>216.IBPluginDependency</string> - <string>216.ImportedFromIB2</string> - <string>217.IBPluginDependency</string> - <string>217.ImportedFromIB2</string> - <string>218.IBPluginDependency</string> - <string>218.ImportedFromIB2</string> - <string>219.IBPluginDependency</string> - <string>219.ImportedFromIB2</string> - <string>220.IBPluginDependency</string> - <string>220.ImportedFromIB2</string> - <string>220.editorWindowContentRectSynchronizationRect</string> - <string>221.IBPluginDependency</string> - <string>221.ImportedFromIB2</string> - <string>236.IBPluginDependency</string> - <string>236.ImportedFromIB2</string> - <string>29.IBEditorWindowLastContentRect</string> - <string>29.IBPluginDependency</string> - <string>29.ImportedFromIB2</string> - <string>29.WindowOrigin</string> - <string>29.editorWindowContentRectSynchronizationRect</string> - <string>295.IBPluginDependency</string> - <string>296.IBEditorWindowLastContentRect</string> - <string>296.IBPluginDependency</string> - <string>296.editorWindowContentRectSynchronizationRect</string> - <string>297.IBPluginDependency</string> - <string>298.IBPluginDependency</string> - <string>299.IBPluginDependency</string> - <string>300.IBEditorWindowLastContentRect</string> - <string>300.IBPluginDependency</string> - <string>300.editorWindowContentRectSynchronizationRect</string> - <string>345.IBPluginDependency</string> - <string>346.IBPluginDependency</string> - <string>346.ImportedFromIB2</string> - <string>348.IBPluginDependency</string> - <string>348.ImportedFromIB2</string> - <string>349.IBPluginDependency</string> - <string>349.ImportedFromIB2</string> - <string>349.editorWindowContentRectSynchronizationRect</string> - <string>350.IBPluginDependency</string> - <string>350.ImportedFromIB2</string> - <string>351.IBPluginDependency</string> - <string>351.ImportedFromIB2</string> - <string>354.IBPluginDependency</string> - <string>354.ImportedFromIB2</string> - <string>375.IBPluginDependency</string> - <string>377.IBPluginDependency</string> - <string>56.IBPluginDependency</string> - <string>56.ImportedFromIB2</string> - <string>57.IBEditorWindowLastContentRect</string> - <string>57.IBPluginDependency</string> - <string>57.ImportedFromIB2</string> - <string>57.editorWindowContentRectSynchronizationRect</string> - <string>58.IBPluginDependency</string> - <string>58.ImportedFromIB2</string> - <string>72.IBPluginDependency</string> - <string>72.ImportedFromIB2</string> - <string>73.IBPluginDependency</string> - <string>73.ImportedFromIB2</string> - <string>74.IBPluginDependency</string> - <string>74.ImportedFromIB2</string> - <string>75.IBPluginDependency</string> - <string>75.ImportedFromIB2</string> - <string>77.IBPluginDependency</string> - <string>77.ImportedFromIB2</string> - <string>78.IBPluginDependency</string> - <string>78.ImportedFromIB2</string> - <string>79.IBPluginDependency</string> - <string>79.ImportedFromIB2</string> - <string>80.IBPluginDependency</string> - <string>80.ImportedFromIB2</string> - <string>81.IBEditorWindowLastContentRect</string> - <string>81.IBPluginDependency</string> - <string>81.ImportedFromIB2</string> - <string>81.editorWindowContentRectSynchronizationRect</string> - <string>82.IBPluginDependency</string> - <string>82.ImportedFromIB2</string> - <string>83.IBPluginDependency</string> - <string>83.ImportedFromIB2</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilderKit</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <integer value="1" id="9"/> - <string>{{417, 1069}, {216, 23}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{596, 852}, {216, 23}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{522, 812}, {146, 23}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{436, 809}, {64, 6}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{608, 612}, {275, 83}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{186, 593}, {243, 243}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{187, 434}, {243, 243}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{608, 612}, {167, 43}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{608, 612}, {241, 103}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{2560, 1536}, {442, 20}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{74, 862}</string> - <string>{{6, 978}, {478, 20}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{296, 1049}, {234, 43}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{475, 832}, {234, 43}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{2790, 1493}, {176, 43}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{231, 634}, {176, 43}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{608, 612}, {215, 63}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{12, 909}, {245, 183}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{23, 794}, {245, 183}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{144, 633}, {199, 203}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{145, 474}, {199, 203}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - </object> - </object> - <object class="NSMutableDictionary" key="unlocalizedProperties"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="activeLocalization"/> - <object class="NSMutableDictionary" key="localizations"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> - </object> - <nil key="sourceID"/> - <int key="maxID">388</int> - </object> - <object class="IBClassDescriber" key="IBDocument.Classes"> - <object class="NSMutableArray" key="referencedPartialClassDescriptions"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="IBPartialClassDescription"> - <string key="className">GTMLargeTypeWindow</string> - <string key="superclassName">NSPanel</string> - <object class="NSMutableDictionary" key="actions"> - <string key="NS.key.0">copy:</string> - <string key="NS.object.0">id</string> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMLargeTypeWindow.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">GTMUILocalizer</string> - <string key="superclassName">NSObject</string> - <object class="NSMutableDictionary" key="outlets"> - <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>otherObjectToLocalize_</string> - <string>owner_</string> - <string>yetAnotherObjectToLocalize_</string> - </object> - <object class="NSMutableArray" key="dict.values"> - <bool key="EncodedWithXMLCoder">YES</bool> - <string>id</string> - <string>id</string> - <string>id</string> - </object> - </object> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMUILocalizer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSApplication</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier" id="271775925"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMAppKit+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSControl</string> - <reference key="sourceIdentifier" ref="271775925"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenu</string> - <reference key="sourceIdentifier" ref="271775925"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSMenuItem</string> - <reference key="sourceIdentifier" ref="271775925"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMCarbonEvent.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">AppKit/GTMDelegatingTableColumn.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMHTTPServer.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSAppleEventDescriptor+Foundation.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">Foundation/GTMNSObject+KeyValueObserving.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMCALayer+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+BindingUnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSObject</string> - <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">UnitTesting/GTMNSObject+UnitTesting.h</string> - </object> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSView</string> - <reference key="sourceIdentifier" ref="271775925"/> - </object> - <object class="IBPartialClassDescription"> - <string key="className">NSWindow</string> - <reference key="sourceIdentifier" ref="271775925"/> - </object> - </object> - </object> - <int key="IBDocument.localizationMode">0</int> - <string key="IBDocument.LastKnownRelativeProjectPath">../../../GTM.xcodeproj</string> - <int key="IBDocument.defaultPropertyAccessControl">3</int> - </data> -</archive> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="15G31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> + <dependencies> + <deployment identifier="macosx"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/> + </dependencies> + <objects> + <customObject id="-2" userLabel="File's Owner" customClass="NSApplication"/> + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> + <customObject id="-3" userLabel="Application"/> + <menu title="AMainMenu" systemMenu="main" id="29" userLabel="MainMenu"> + <items> + <menuItem title="NewApplication" id="56"> + <menu key="submenu" title="NewApplication" systemMenu="apple" id="57"> + <items> + <menuItem title="About NewApplication" id="58"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="236"> + <modifierMask key="keyEquivalentModifierMask" command="YES"/> + </menuItem> + <menuItem title="Preferences…" keyEquivalent="," id="129" userLabel="121"/> + <menuItem isSeparatorItem="YES" id="143"> + <modifierMask key="keyEquivalentModifierMask" command="YES"/> + </menuItem> + <menuItem title="Services" id="131"> + <menu key="submenu" title="Services" systemMenu="services" id="130"/> + </menuItem> + <menuItem isSeparatorItem="YES" id="144"> + <modifierMask key="keyEquivalentModifierMask" command="YES"/> + </menuItem> + <menuItem title="Hide NewApplication" keyEquivalent="h" id="134"> + <connections> + <action selector="hide:" target="-1" id="367"/> + </connections> + </menuItem> + <menuItem title="Hide Others" keyEquivalent="h" id="145"> + <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> + <connections> + <action selector="hideOtherApplications:" target="-1" id="368"/> + </connections> + </menuItem> + <menuItem title="Show All" id="150"> + <connections> + <action selector="unhideAllApplications:" target="-1" id="370"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="149"> + <modifierMask key="keyEquivalentModifierMask" command="YES"/> + </menuItem> + <menuItem title="Quit NewApplication" id="136" userLabel="1111"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="terminate:" target="-1" id="369"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="File" id="83"> + <menu key="submenu" title="File" id="81"> + <items> + <menuItem title="New" keyEquivalent="n" id="82" userLabel="9"> + <connections> + <action selector="newDocument:" target="-1" id="373"/> + </connections> + </menuItem> + <menuItem title="Open…" keyEquivalent="o" id="72"> + <connections> + <action selector="openDocument:" target="-1" id="374"/> + </connections> + </menuItem> + <menuItem title="Open Recent" id="124"> + <menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="125"> + <items> + <menuItem title="Clear Menu" id="126"> + <connections> + <action selector="clearRecentDocuments:" target="-1" id="127"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem isSeparatorItem="YES" id="79" userLabel="7"> + <modifierMask key="keyEquivalentModifierMask" command="YES"/> + </menuItem> + <menuItem title="Close" keyEquivalent="w" id="73" userLabel="1"> + <connections> + <action selector="performClose:" target="-1" id="193"/> + </connections> + </menuItem> + <menuItem title="Save" keyEquivalent="s" id="75" userLabel="3"> + <connections> + <action selector="saveDocument:" target="-1" id="362"/> + </connections> + </menuItem> + <menuItem title="Save As…" keyEquivalent="S" id="80" userLabel="8"> + <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/> + <connections> + <action selector="saveDocumentAs:" target="-1" id="363"/> + </connections> + </menuItem> + <menuItem title="Revert to Saved" id="112" userLabel="10"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="revertDocumentToSaved:" target="-1" id="364"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="74" userLabel="2"> + <modifierMask key="keyEquivalentModifierMask" command="YES"/> + </menuItem> + <menuItem title="Page Setup..." keyEquivalent="P" id="77" userLabel="5"> + <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/> + <connections> + <action selector="runPageLayout:" target="-1" id="87"/> + </connections> + </menuItem> + <menuItem title="Print…" keyEquivalent="p" id="78" userLabel="6"> + <connections> + <action selector="print:" target="-1" id="86"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Edit" id="217"> + <menu key="submenu" title="Edit" id="205"> + <items> + <menuItem title="Undo" keyEquivalent="z" id="207"> + <connections> + <action selector="undo:" target="-1" id="223"/> + </connections> + </menuItem> + <menuItem title="Redo" keyEquivalent="Z" id="215"> + <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/> + <connections> + <action selector="redo:" target="-1" id="231"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="206"> + <modifierMask key="keyEquivalentModifierMask" command="YES"/> + </menuItem> + <menuItem title="Cut" keyEquivalent="x" id="199"> + <connections> + <action selector="cut:" target="-1" id="228"/> + </connections> + </menuItem> + <menuItem title="Copy" keyEquivalent="c" id="197"> + <connections> + <action selector="copy:" target="-1" id="224"/> + </connections> + </menuItem> + <menuItem title="Paste" keyEquivalent="v" id="203"> + <connections> + <action selector="paste:" target="-1" id="226"/> + </connections> + </menuItem> + <menuItem title="Delete" id="202"> + <connections> + <action selector="delete:" target="-1" id="235"/> + </connections> + </menuItem> + <menuItem title="Select All" keyEquivalent="a" id="198"> + <connections> + <action selector="selectAll:" target="-1" id="232"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="214"> + <modifierMask key="keyEquivalentModifierMask" command="YES"/> + </menuItem> + <menuItem title="Find" id="218"> + <menu key="submenu" title="Find" id="220"> + <items> + <menuItem title="Find…" tag="1" keyEquivalent="f" id="209"> + <connections> + <action selector="performFindPanelAction:" target="-1" id="241"/> + </connections> + </menuItem> + <menuItem title="Find Next" tag="2" keyEquivalent="g" id="208"/> + <menuItem title="Find Previous" tag="3" keyEquivalent="G" id="213"> + <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/> + </menuItem> + <menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="221"/> + <menuItem title="Jump to Selection" keyEquivalent="j" id="210"> + <connections> + <action selector="centerSelectionInVisibleArea:" target="-1" id="245"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Spelling and Grammar" id="216"> + <menu key="submenu" title="Spelling and Grammar" id="200"> + <items> + <menuItem title="Show Spelling…" keyEquivalent=":" id="204"> + <connections> + <action selector="showGuessPanel:" target="-1" id="230"/> + </connections> + </menuItem> + <menuItem title="Check Spelling" keyEquivalent=";" id="201"> + <connections> + <action selector="checkSpelling:" target="-1" id="225"/> + </connections> + </menuItem> + <menuItem title="Check Spelling While Typing" id="219"> + <connections> + <action selector="toggleContinuousSpellChecking:" target="-1" id="222"/> + </connections> + </menuItem> + <menuItem title="Check Grammar With Spelling" id="346"> + <connections> + <action selector="toggleGrammarChecking:" target="-1" id="347"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Substitutions" id="348"> + <menu key="submenu" title="Substitutions" id="349"> + <items> + <menuItem title="Smart Copy/Paste" tag="1" keyEquivalent="f" id="350"> + <connections> + <action selector="toggleSmartInsertDelete:" target="-1" id="355"/> + </connections> + </menuItem> + <menuItem title="Smart Quotes" tag="2" keyEquivalent="g" id="351"> + <connections> + <action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="356"/> + </connections> + </menuItem> + <menuItem title="Smart Links" tag="3" keyEquivalent="G" id="354"> + <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/> + <connections> + <action selector="toggleAutomaticLinkDetection:" target="-1" id="357"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Speech" id="211"> + <menu key="submenu" title="Speech" id="212"> + <items> + <menuItem title="Start Speaking" id="196"> + <connections> + <action selector="startSpeaking:" target="-1" id="233"/> + </connections> + </menuItem> + <menuItem title="Stop Speaking" id="195"> + <connections> + <action selector="stopSpeaking:" target="-1" id="227"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="¬Menu Title" id="299"> + <menu key="submenu" title="¬Menu Title" id="300"> + <items> + <menuItem title="¬Menu Item" keyEquivalent="t" id="377"/> + <menuItem title="Show Colors" keyEquivalent="C" id="345"> + <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/> + <connections> + <action selector="orderFrontColorPanel:" target="-1" id="361"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="View" id="295"> + <menu key="submenu" title="View" id="296"> + <items> + <menuItem title="Show Toolbar" keyEquivalent="t" id="297"> + <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/> + <connections> + <action selector="toggleToolbarShown:" target="-1" id="366"/> + </connections> + </menuItem> + <menuItem title="Customize Toolbar…" id="298"> + <connections> + <action selector="runToolbarCustomizationPalette:" target="-1" id="365"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + <menuItem title="Help" id="103" userLabel="1"> + <menu key="submenu" title="Help" id="106" userLabel="2"> + <items> + <menuItem title="NewApplication Help" keyEquivalent="?" id="111"> + <connections> + <action selector="showHelp:" target="-1" id="360"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> + </items> + </menu> + <customObject id="375" customClass="GTMUILocalizer"> + <connections> + <outlet property="owner_" destination="-2" id="376"/> + </connections> + </customObject> + </objects> +</document> diff --git a/UnitTesting/GTMUIUnitTestingHarness/main.m b/UnitTesting/GTMUIUnitTestingHarness/main.m index 7438499..ceff0c9 100644 --- a/UnitTesting/GTMUIUnitTestingHarness/main.m +++ b/UnitTesting/GTMUIUnitTestingHarness/main.m @@ -19,14 +19,11 @@ #import <Cocoa/Cocoa.h> -#import "GTMAppKitUnitTestingUtilities.h" #import "GTMFoundationUnitTestingUtilities.h" int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [GTMAppKitUnitTestingUtilities setUpForUIUnitTestsIfBeingTested]; - // Give ourselves a max of 10 minutes for the tests. Sometimes (in automated // builds) the unittesting bundle fails to load which causes the app to keep // running forever. This will force it to exit after a certain amount of time diff --git a/UnitTesting/GTMUnitTestDevLog.h b/UnitTesting/GTMUnitTestDevLog.h index 2be231e..35d5e0d 100644 --- a/UnitTesting/GTMUnitTestDevLog.h +++ b/UnitTesting/GTMUnitTestDevLog.h @@ -16,69 +16,16 @@ // the License. // -#import "GTMDefines.h" #import <Foundation/Foundation.h> +#import "GTMDefines.h" -// GTMUnitTestDevLog tracks what messages are logged to verify that you only -// log what you expect to log during the running of unittests. This allows you -// to log with impunity from your actual core implementations and still be able -// to find unexpected logs in your output when running unittests. -// In your unittests you tell GTMUnitTestDevLog what messages you expect your -// test to spit out, and it will cause any that don't match to appear as errors -// in your unittest run output. You can match on exact strings or standard -// regexps. -// Set GTM_SHOW_UNITTEST_DEVLOGS in the environment to show the logs that that -// are expected and encountered. Otherwise they aren't display to keep the -// unit test results easier to read. +// GTMUnitTestDevLog modifies assertion logs so they don't get trapped by +// build systems. @interface GTMUnitTestDevLog : NSObject -// Log a message -+ (void)log:(NSString*)format, ... NS_FORMAT_FUNCTION(1, 2); -+ (void)log:(NSString*)format args:(va_list)args NS_FORMAT_FUNCTION(1, 0); // Turn tracking on/off + (void)enableTracking; + (void)disableTracking; -+ (BOOL)isTrackingEnabled; - -// Note that you are expecting a string that has an exact match. No need to -// escape any pattern characters. -+ (void)expectString:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2); - -// Note that you are expecting a pattern. Pattern characters that you want -// exact matches on must be escaped. See [GTMRegex escapedPatternForString]. -// Patterns match across newlines (kGTMRegexOptionSupressNewlineSupport) making -// it easier to match output from the descriptions of NS collection types such -// as NSArray and NSDictionary. -+ (void)expectPattern:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2); - -// Note that you are expecting exactly 'n' strings -+ (void)expect:(NSUInteger)n - casesOfString:(NSString *)format, ... NS_FORMAT_FUNCTION(2, 3); -// Note that you are expecting exactly 'n' patterns -+ (void)expect:(NSUInteger)n - casesOfPattern:(NSString*)format, ... NS_FORMAT_FUNCTION(2, 3); -+ (void)expect:(NSUInteger)n - casesOfPattern:(NSString*)format - args:(va_list)args NS_FORMAT_FUNCTION(2, 0); - -// Call when you want to verify that you have matched all the logs you expect -// to match. If your unittests inherit from GTMTestcase (like they should) you -// will get this called for free. -+ (void)verifyNoMoreLogsExpected; - -// Resets the expected logs so that you don't have anything expected. -// In general should not be needed, unless you have a variable logging case -// of some sort. -+ (void)resetExpectedLogs; @end - -// Does the same as GTMUnitTestDevLog, but the logs are only expected in debug. -// ie-the expect requests don't count in release builds. -@interface GTMUnitTestDevLogDebug : GTMUnitTestDevLog -@end - -// The name of the exception that is raised when GTMUnitTestDevLog -// finds a problem. -GTM_EXTERN NSString *const GTMLogFailureException; diff --git a/UnitTesting/GTMUnitTestDevLog.m b/UnitTesting/GTMUnitTestDevLog.m index 7a12bb0..ae4050f 100644 --- a/UnitTesting/GTMUnitTestDevLog.m +++ b/UnitTesting/GTMUnitTestDevLog.m @@ -18,52 +18,12 @@ #import "GTMUnitTestDevLog.h" - -#import "GTMRegex.h" -#import "GTMSenTestCase.h" - -#if !defined(__clang__) && (__GNUC__*10+__GNUC_MINOR__ >= 42) -// Some versions of GCC (4.2 and below AFAIK) aren't great about supporting -// -Wmissing-format-attribute -// when the function is anything more complex than foo(NSString *fmt, ...). -// You see the error inside the function when you turn ... into va_args and -// attempt to call another function (like vsprintf for example). -// So we just shut off the warning for this file. We reenable it at the end. -#pragma GCC diagnostic ignored "-Wmissing-format-attribute" -#endif // !__clang__ - -#if !GTM_IPHONE_SDK -// Add support for grabbing messages from Carbon. -#import <CoreServices/CoreServices.h> -static void GTMDevLogDebugAssert(OSType componentSignature, - UInt32 options, - const char *assertionString, - const char *exceptionLabelString, - const char *errorString, - const char *fileName, - long lineNumber, - void *value, - ConstStr255Param outputMsg) { - NSString *outLog = [[[NSString alloc] initWithBytes:&(outputMsg[1]) - length:StrLength(outputMsg) - encoding:NSMacOSRomanStringEncoding] - autorelease]; - _GTMDevLog(@"%@", outLog); // Don't want any percents in outLog honored -} -static inline void GTMInstallDebugAssertOutputHandler(void) { - InstallDebugAssertOutputHandler(GTMDevLogDebugAssert); -} -static inline void GTMUninstallDebugAssertOutputHandler(void) { - InstallDebugAssertOutputHandler(NULL); -} -#else // GTM_IPHONE_SDK -static inline void GTMInstallDebugAssertOutputHandler(void) {}; -static inline void GTMUninstallDebugAssertOutputHandler(void) {}; -#endif // GTM_IPHONE_SDK - -NSString *const GTMLogFailureException = @"GTMLogFailureException"; - @interface GTMUnttestDevLogAssertionHandler : NSAssertionHandler +- (void)handleFailure:(NSString *)functionName + file:(NSString *)fileName + lineNumber:(NSInteger)line + description:(NSString *)format + arguments:(va_list)argList NS_FORMAT_FUNCTION(4,0); @end @implementation GTMUnttestDevLogAssertionHandler @@ -72,24 +32,18 @@ NSString *const GTMLogFailureException = @"GTMLogFailureException"; file:(NSString *)fileName lineNumber:(NSInteger)line description:(NSString *)format, ... { + NSString *call = [NSString stringWithFormat:@"[%@ %@]", + NSStringFromClass([object class]), + NSStringFromSelector(selector)]; + va_list argList; va_start(argList, format); - NSString *descStr - = [[[NSString alloc] initWithFormat:format arguments:argList] autorelease]; + [self handleFailure:call + file:fileName + lineNumber:line + description:format + arguments:argList]; va_end(argList); - - // You need a format that will be useful in logs, but won't trip up Xcode or - // any other build systems parsing of the output. - NSString *outLog - = [NSString stringWithFormat:@"RecordedNSAssert in %@ - %@ (%@:%ld)", - NSStringFromSelector(selector), - descStr, - fileName, (long)line]; - // To avoid unused variable warning when _GTMDevLog is stripped. - (void)outLog; - _GTMDevLog(@"%@", outLog); // Don't want any percents in outLog honored - [NSException raise:NSInternalInconsistencyException - format:@"NSAssert raised"]; } - (void)handleFailureInFunction:(NSString *)functionName @@ -98,45 +52,38 @@ NSString *const GTMLogFailureException = @"GTMLogFailureException"; description:(NSString *)format, ... { va_list argList; va_start(argList, format); - NSString *descStr - = [[[NSString alloc] initWithFormat:format arguments:argList] autorelease]; + [self handleFailure:functionName + file:fileName + lineNumber:line + description:format + arguments:argList]; va_end(argList); +} + +- (void)handleFailure:(NSString *)failure + file:(NSString *)fileName + lineNumber:(NSInteger)line + description:(NSString *)format + arguments:(va_list)argList { + NSString *descStr + = [[[NSString alloc] initWithFormat:format arguments:argList] autorelease]; // You need a format that will be useful in logs, but won't trip up Xcode or // any other build systems parsing of the output. NSString *outLog - = [NSString stringWithFormat:@"RecordedNSAssert in %@ - %@ (%@:%ld)", - functionName, - descStr, - fileName, (long)line]; + = [NSString stringWithFormat:@"RecordedNSAssert in %@ - %@ (%@:%ld)", + failure, descStr, fileName, (long)line]; // To avoid unused variable warning when _GTMDevLog is stripped. (void)outLog; _GTMDevLog(@"%@", outLog); // Don't want any percents in outLog honored [NSException raise:NSInternalInconsistencyException format:@"NSAssert raised"]; } - @end @implementation GTMUnitTestDevLog -// If unittests are ever being run on separate threads, this may need to be -// made a thread local variable. -static BOOL gTrackingEnabled = NO; - -+ (NSMutableArray *)patterns { - static NSMutableArray *patterns = nil; - if (!patterns) { - patterns = [[NSMutableArray array] retain]; - } - return patterns; -} - -+ (BOOL)isTrackingEnabled { - return gTrackingEnabled; -} + (void)enableTracking { - GTMInstallDebugAssertOutputHandler(); NSMutableDictionary *threadDictionary = [[NSThread currentThread] threadDictionary]; @@ -148,154 +95,14 @@ static BOOL gTrackingEnabled = NO; GTMUnttestDevLogAssertionHandler *handler = [[[GTMUnttestDevLogAssertionHandler alloc] init] autorelease]; [threadDictionary setObject:handler forKey:@"NSAssertionHandler"]; - - gTrackingEnabled = YES; } + (void)disableTracking { - GTMUninstallDebugAssertOutputHandler(); // Clear our assertion handler back out. NSMutableDictionary *threadDictionary = [[NSThread currentThread] threadDictionary]; [threadDictionary removeObjectForKey:@"NSAssertionHandler"]; - - gTrackingEnabled = NO; } -+ (void)log:(NSString*)format, ... { - va_list argList; - va_start(argList, format); - [self log:format args:argList]; - va_end(argList); -} - -+ (void)log:(NSString*)format args:(va_list)args { - if ([self isTrackingEnabled]) { - NSString *logString = [[[NSString alloc] initWithFormat:format - arguments:args] autorelease]; - @synchronized(self) { - NSMutableArray *patterns = [self patterns]; - BOOL logError = [patterns count] == 0 ? YES : NO; - GTMRegex *regex = nil; - if (!logError) { - regex = [[[patterns objectAtIndex:0] retain] autorelease]; - logError = [regex matchesString:logString] ? NO : YES; - [patterns removeObjectAtIndex:0]; - } - if (logError) { - - if (regex) { - [NSException raise:GTMLogFailureException - format:@"Unexpected log: %@\nExpected: %@", - logString, regex]; - } else { - [NSException raise:GTMLogFailureException - format:@"Unexpected log: %@", logString]; - } - } else { - static BOOL envChecked = NO; - static BOOL showExpectedLogs = YES; - if (!envChecked) { - showExpectedLogs = getenv("GTM_SHOW_UNITTEST_DEVLOGS") ? YES : NO; - } - if (showExpectedLogs) { - NSLog(@"Expected Log: %@", logString); - } - } - } - } else { - NSLogv(format, args); - } -} - -+ (void)expectString:(NSString *)format, ... { - va_list argList; - va_start(argList, format); - NSString *string = [[[NSString alloc] initWithFormat:format - arguments:argList] autorelease]; - va_end(argList); - NSString *pattern = [GTMRegex escapedPatternForString:string]; - [self expect:1 casesOfPattern:@"%@", pattern]; - -} - -+ (void)expectPattern:(NSString *)format, ... { - va_list argList; - va_start(argList, format); - [self expect:1 casesOfPattern:format args:argList]; - va_end(argList); -} - -+ (void)expect:(NSUInteger)n casesOfString:(NSString *)format, ... { - va_list argList; - va_start(argList, format); - NSString *string = [[[NSString alloc] initWithFormat:format - arguments:argList] autorelease]; - va_end(argList); - NSString *pattern = [GTMRegex escapedPatternForString:string]; - [self expect:n casesOfPattern:@"%@", pattern]; -} - -+ (void)expect:(NSUInteger)n casesOfPattern:(NSString*)format, ... { - va_list argList; - va_start(argList, format); - [self expect:n casesOfPattern:format args:argList]; - va_end(argList); -} - -+ (void)expect:(NSUInteger)n -casesOfPattern:(NSString*)format - args:(va_list)args { - NSString *pattern = [[[NSString alloc] initWithFormat:format - arguments:args] autorelease]; - GTMRegex *regex = [GTMRegex regexWithPattern:pattern - options:kGTMRegexOptionSupressNewlineSupport]; - @synchronized(self) { - NSMutableArray *patterns = [self patterns]; - for (NSUInteger i = 0; i < n; ++i) { - [patterns addObject:regex]; - } - } -} - -+ (void)verifyNoMoreLogsExpected { - @synchronized(self) { - NSMutableArray *patterns = [self patterns]; - if ([patterns count] > 0) { - NSMutableArray *patternsCopy = [[patterns copy] autorelease]; - [self resetExpectedLogs]; - [NSException raise:GTMLogFailureException - format:@"Logs still expected %@", patternsCopy]; - } - } -} - -+ (void)resetExpectedLogs { - @synchronized(self) { - NSMutableArray *patterns = [self patterns]; - [patterns removeAllObjects]; - } -} @end - - -@implementation GTMUnitTestDevLogDebug - -+ (void)expect:(NSUInteger)n -casesOfPattern:(NSString*)format - args:(va_list)args { -#if DEBUG - // In debug, let the base work happen - [super expect:n casesOfPattern:format args:args]; -#else - // nothing when not in debug -#endif -} - -@end - -#if !defined(__clang__) && (__GNUC__*10+__GNUC_MINOR__ >= 42) -// See comment at top of file. -#pragma GCC diagnostic error "-Wmissing-format-attribute" -#endif // !__clang__ diff --git a/UnitTesting/GTMUnitTestingBindingTest.m b/UnitTesting/GTMUnitTestingBindingTest.m deleted file mode 100644 index 26ae5df..0000000 --- a/UnitTesting/GTMUnitTestingBindingTest.m +++ /dev/null @@ -1,116 +0,0 @@ -// -// GTMUnitTestingBindingTest.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMUnitTestingTest.h" -#import "GTMNSObject+BindingUnitTesting.h" - -@interface GTMUnitTestingBindingTest : GTMTestCase { - int expectedFailureCount_; -} -@end - -@interface GTMUnitTestingBindingBadClass : NSObject -@end - -@implementation GTMUnitTestingBindingTest - -// Iterates through all of our subviews testing the exposed bindings -- (void)doSubviewBindingTest:(NSView*)view { - NSArray *subviews = [view subviews]; - NSView *subview; - GTM_FOREACH_OBJECT(subview, subviews) { - GTMTestExposedBindings(subview, @"testing %@", subview); - [self doSubviewBindingTest:subview]; - } -} - -- (void)testBindings { - // Get our window to work with and test it's bindings - GTMUnitTestingTestController *testWindowController - = [[GTMUnitTestingTestController alloc] initWithWindowNibName:@"GTMUnitTestingTest"]; - NSWindow *window = [testWindowController window]; - GTMTestExposedBindings(window, @"Window failed binding test"); - [self doSubviewBindingTest:[window contentView]]; - [window close]; - [testWindowController release]; - - // Run a test against something with no bindings. - // We're expecting a failure here. - expectedFailureCount_ = 1; - GTMTestExposedBindings(@"foo", @"testing no bindings"); - STAssertEquals(expectedFailureCount_, 0, @"Didn't get expected failures testing bindings"); - - // Run test against some with bad bindings. - // We're expecting failures here. - expectedFailureCount_ = 4; - GTMUnitTestingBindingBadClass *bad = [[[GTMUnitTestingBindingBadClass alloc] init] autorelease]; - GTMTestExposedBindings(bad, @"testing bad bindings"); - STAssertEquals(expectedFailureCount_, 0, @"Didn't get expected failures testing bad bindings"); -} - -- (void)failWithException:(NSException *)anException { - if (expectedFailureCount_ > 0) { - expectedFailureCount_ -= 1; - } else { - [super failWithException:anException]; // COV_NF_LINE - not expecting exception - } -} - -@end - -// Forces several error cases in our binding tests to test them -@implementation GTMUnitTestingBindingBadClass - -NSString *const kGTMKeyWithNoClass = @"keyWithNoClass"; -NSString *const kGTMKeyWithNoValue = @"keyWithNoValue"; -NSString *const kGTMKeyWeCantSet = @"keyWeCantSet"; -NSString *const kGTMKeyThatIsntEqual = @"keyThatIsntEqual"; - -- (NSArray *)exposedBindings { - return [NSArray arrayWithObjects:kGTMKeyWithNoClass, - kGTMKeyWithNoValue, - kGTMKeyWeCantSet, - kGTMKeyThatIsntEqual, - nil]; -} - -- (NSArray*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding { - GTMBindingUnitTestData *data - = [GTMBindingUnitTestData testWithIdentityValue:kGTMKeyThatIsntEqual]; - return [NSArray arrayWithObject:data]; -} - -- (Class)valueClassForBinding:(NSString*)binding { - return [binding isEqualTo:kGTMKeyWithNoClass] ? nil : [NSString class]; -} - -- (id)valueForKey:(NSString*)binding { - if ([binding isEqualTo:kGTMKeyWithNoValue]) { - [NSException raise:NSUndefinedKeyException format:@""]; - } - return @"foo"; -} - -- (void)setValue:(id)value forKey:(NSString*)binding { - if ([binding isEqualTo:kGTMKeyWeCantSet]) { - [NSException raise:NSUndefinedKeyException format:@""]; - } -} -@end - diff --git a/UnitTesting/GTMUnitTestingTest.h b/UnitTesting/GTMUnitTestingTest.h deleted file mode 100644 index ea9521b..0000000 --- a/UnitTesting/GTMUnitTestingTest.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// GTMUnitTestingTest.h -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <AppKit/AppKit.h> - -// GTMUnitTestingTestController controller so that initWithWindowNibName can -// find the appropriate bundle to load our nib from. See [GTMUnitTestingTest -// -testUnitTestingFramework] for more info -@interface GTMUnitTestingTestController : NSWindowController { - IBOutlet NSTextField *field_; -} - -- (NSTextField *)textField; -@end diff --git a/UnitTesting/GTMUnitTestingTest.m b/UnitTesting/GTMUnitTestingTest.m deleted file mode 100644 index 0f87d28..0000000 --- a/UnitTesting/GTMUnitTestingTest.m +++ /dev/null @@ -1,253 +0,0 @@ -// -// GTMUnitTestingTest.m -// -// Copyright 2008 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMSenTestCase.h" -#import "GTMUnitTestingTest.h" -#import "GTMAppKit+UnitTesting.h" - -NSString *const kGTMWindowNibName = @"GTMUnitTestingTest"; -NSString *const kGTMWindowSaveFileName = @"GTMUnitTestingWindow"; - -@interface GTMUnitTestingTest : GTMTestCase { - int expectedFailureCount_; -} -@end - -// GTMUnitTestingTest support classes -@interface GTMUnitTestingView : NSObject <GTMUnitTestViewDrawer> { - BOOL goodContext_; -} -- (BOOL)hadGoodContext; -@end - -@interface GTMUnitTestingDelegate : NSObject <NSImageDelegate> { - BOOL didEncode_; -} -- (BOOL)didEncode; -@end - -@interface GTMUnitTestingProxyTest : NSProxy -- (id)init; -@end - -@implementation GTMUnitTestingTest - -// Brings up the window defined in the nib and takes a snapshot of it. -// We use the "empty" GTMUnitTestingTestController controller so that -// initWithWindowNibName can find the appropriate bundle to load our nib from. -// For some reason when running unit tests, with all the injecting going on -// the nib loader can get confused as to where it should load a nib from. -// Having a NSWindowController subclass in the same bundle as the nib seems -// to help the nib loader find the nib, and any custom classes that are attached -// to it. -- (void)testUnitTestingFramework { - // set up our delegates so we can test delegate handling - GTMUnitTestingDelegate *appDelegate = [[GTMUnitTestingDelegate alloc] init]; - [NSApp setDelegate:appDelegate]; - - // Get our window - GTMUnitTestingTestController *testWindowController - = [[GTMUnitTestingTestController alloc] initWithWindowNibName:kGTMWindowNibName]; - NSWindow *window = [testWindowController window]; - // Test the app state. This will cover windows and menus - GTMAssertObjectStateEqualToStateNamed(NSApp, - @"GTMUnitTestingTestApp", - @"Testing the app state"); - - // Test the window image and state - GTMAssertObjectEqualToStateAndImageNamed(window, - kGTMWindowSaveFileName, - @"Testing the window image and state"); - - // Verify that all of our delegate encoders got called - STAssertTrue([appDelegate didEncode], @"app delegate didn't get called?"); - - // Clean up - [NSApp setDelegate:nil]; - [appDelegate release]; - [testWindowController release]; -} - -- (void)testViewUnitTesting { - GTMUnitTestingView *unitTestingView = [[GTMUnitTestingView alloc] init]; - GTMAssertDrawingEqualToImageNamed(unitTestingView, - NSMakeSize(200,200), - @"GTMUnitTestingView", - NSApp, - @"Testing view drawing"); - STAssertTrue([unitTestingView hadGoodContext], @"bad context?"); - [unitTestingView release]; -} - -- (void)testImageUnitTesting { - NSImage *image = [NSImage imageNamed:@"NSApplicationIcon"]; - GTMUnitTestingDelegate *imgDelegate = [[GTMUnitTestingDelegate alloc] init]; - [image setDelegate:imgDelegate]; - GTMAssertObjectEqualToStateAndImageNamed(image, - @"GTMUnitTestingImage", - @"Testing NSImage image and state"); - STAssertTrue([imgDelegate didEncode], @"imgDelegate didn't get called?"); - [image setDelegate:nil]; - [imgDelegate release]; -} - -- (void)testFailures { - NSString *const bogusTestName = @"GTMUnitTestTestingFailTest"; - NSString *tempDir = NSTemporaryDirectory(); - STAssertNotNil(tempDir, @"No Temp Dir?"); - NSString *originalPath = [NSObject gtm_getUnitTestSaveToDirectory]; - STAssertNotNil(originalPath, @"No save dir?"); - [NSObject gtm_setUnitTestSaveToDirectory:tempDir]; - STAssertEqualObjects(tempDir, [NSObject gtm_getUnitTestSaveToDirectory], - @"Save to dir not set?"); - NSString *statePath = [self gtm_saveToPathForStateNamed:bogusTestName]; - STAssertNotNil(statePath, @"no state path?"); - NSString *imagePath = [self gtm_saveToPathForImageNamed:bogusTestName]; - STAssertNotNil(imagePath, @"no image path?"); - GTMUnitTestingTestController *testWindowController - = [[GTMUnitTestingTestController alloc] initWithWindowNibName:kGTMWindowNibName]; - NSWindow *window = [testWindowController window]; - - // Test against a golden master filename that doesn't exist - expectedFailureCount_ = 2; - GTMAssertObjectEqualToStateAndImageNamed(window, - bogusTestName, - @"Creating image and state files"); - STAssertEquals(expectedFailureCount_, 0, - @"Didn't get expected failures creating files"); - - // Change our image and state and verify failures - [[testWindowController textField] setStringValue:@"Foo"]; - expectedFailureCount_ = 2; - GTMAssertObjectEqualToStateAndImageNamed(window, - kGTMWindowSaveFileName, - @"Testing the window image and state"); - STAssertEquals(expectedFailureCount_, 0, - @"Didn't get expected failures testing files"); - - // Now change the size of our image and verify failures - NSRect oldFrame = [window frame]; - NSRect newFrame = oldFrame; - newFrame.size.width += 1; - [window setFrame:newFrame display:YES]; - expectedFailureCount_ = 1; - GTMAssertObjectImageEqualToImageNamed(window, - kGTMWindowSaveFileName, - @"Testing the changed window size"); - [window setFrame:oldFrame display:YES]; - - // Set our unit test save dir to a bogus directory and - // run the tests again. - [NSObject gtm_setUnitTestSaveToDirectory:@"/zim/blatz/foo/bob/bar"]; - expectedFailureCount_ = 2; - GTMAssertObjectEqualToStateAndImageNamed(window, - kGTMWindowSaveFileName, - @"Testing the window image and state"); - STAssertEquals(expectedFailureCount_, 0, - @"Didn't get expected failures testing files"); - expectedFailureCount_ = 2; - GTMAssertObjectEqualToStateAndImageNamed(window, - @"GTMUnitTestingWindowDoesntExist", - @"Testing the window image and state"); - STAssertEquals(expectedFailureCount_, 0, - @"Didn't get expected failures testing files"); - - // Reset our unit test save dir - [NSObject gtm_setUnitTestSaveToDirectory:nil]; - - // Test against something that doesn't have an image - expectedFailureCount_ = 1; - GTMAssertObjectImageEqualToImageNamed(@"a string", - @"GTMStringsDontHaveImages", - @"Testing that strings should fail"); - STAssertEquals(expectedFailureCount_, 0, @"Didn't get expected failures testing files"); - - // Test against something that doesn't implement our support - expectedFailureCount_ = 1; - GTMUnitTestingProxyTest *proxy = [[GTMUnitTestingProxyTest alloc] init]; - GTMAssertObjectStateEqualToStateNamed(proxy, - @"NSProxiesDontDoState", - @"Testing that NSProxy should fail"); - STAssertEquals(expectedFailureCount_, 0, @"Didn't get expected failures testing proxy"); - [proxy release]; - - [window close]; -} - -- (void)failWithException:(NSException *)anException { - if (expectedFailureCount_ > 0) { - expectedFailureCount_ -= 1; - } else { - [super failWithException:anException]; // COV_NF_LINE - not expecting exception - } -} - - -@end - -@implementation GTMUnitTestingTestController -- (NSTextField *)textField { - return field_; -} - -@end - -@implementation GTMUnitTestingDelegate - -- (void)gtm_unitTestEncoderWillEncode:(id)sender inCoder:(NSCoder*)inCoder { - // Test various encodings - [inCoder encodeBool:YES forKey:@"BoolTest"]; - [inCoder encodeInt:1 forKey:@"IntTest"]; - [inCoder encodeInt32:1 forKey:@"Int32Test"]; - [inCoder encodeInt64:1 forKey:@"Int64Test"]; - [inCoder encodeFloat:1.0f forKey:@"FloatTest"]; - [inCoder encodeDouble:1.0 forKey:@"DoubleTest"]; - [inCoder encodeBytes:(const uint8_t*)"BytesTest" length:9 forKey:@"BytesTest"]; - didEncode_ = YES; -} - -- (BOOL)didEncode { - return didEncode_; -} -@end - -@implementation GTMUnitTestingView - -- (void)gtm_unitTestViewDrawRect:(NSRect)rect contextInfo:(void*)contextInfo { - [[NSColor redColor] set]; - NSRectFill(rect); - goodContext_ = [(id)contextInfo isEqualTo:NSApp]; -} - -- (BOOL)hadGoodContext { - return goodContext_; -} -@end - -// GTMUnitTestingProxyTest is for testing the case where we don't conform to -// the GTMUnitTestingEncoding protocol. -@implementation GTMUnitTestingProxyTest -- (id)init { - return self; -} - -- (BOOL)conformsToProtocol:(Protocol *)protocol { - return NO; -} - -@end diff --git a/UnitTesting/TestData/GTMUIViewUnitTestingTest.gtmUTState b/UnitTesting/TestData/GTMUIViewUnitTestingTest.gtmUTState deleted file mode 100644 index 87ae9e5..0000000 --- a/UnitTesting/TestData/GTMUIViewUnitTestingTest.gtmUTState +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>LayerIsDoublesided</key> - <true/> - <key>LayerIsHidden</key> - <false/> - <key>LayerIsOpaque</key> - <true/> - <key>LayerOpacity</key> - <real>1</real> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>LayerIsDoublesided</key> - <true/> - <key>LayerIsHidden</key> - <false/> - <key>LayerIsOpaque</key> - <true/> - <key>LayerOpacity</key> - <real>1</real> - <key>ViewIsHidden</key> - <false/> - </dict> -</dict> -</plist> diff --git a/UnitTesting/TestData/GTMUIViewUnitTestingTest.png b/UnitTesting/TestData/GTMUIViewUnitTestingTest.png Binary files differdeleted file mode 100644 index 03fd9f0..0000000 --- a/UnitTesting/TestData/GTMUIViewUnitTestingTest.png +++ /dev/null diff --git a/UnitTesting/TestData/GTMUnitTestingImage.10.6.tiff b/UnitTesting/TestData/GTMUnitTestingImage.10.6.tiff Binary files differdeleted file mode 100644 index ec06a53..0000000 --- a/UnitTesting/TestData/GTMUnitTestingImage.10.6.tiff +++ /dev/null diff --git a/UnitTesting/TestData/GTMUnitTestingImage.gtmUTState b/UnitTesting/TestData/GTMUnitTestingImage.gtmUTState deleted file mode 100644 index 969ddf6..0000000 --- a/UnitTesting/TestData/GTMUnitTestingImage.gtmUTState +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>BoolTest</key> - <true/> - <key>BytesTest</key> - <data> - Qnl0ZXNUZXN0 - </data> - <key>DoubleTest</key> - <real>1</real> - <key>FloatTest</key> - <real>1</real> - <key>ImageName</key> - <string>NSApplicationIcon</string> - <key>ImageSize</key> - <string>{128, 128}</string> - <key>Int32Test</key> - <integer>1</integer> - <key>Int64Test</key> - <integer>1</integer> - <key>IntTest</key> - <integer>1</integer> -</dict> -</plist> diff --git a/UnitTesting/TestData/GTMUnitTestingImage.tiff b/UnitTesting/TestData/GTMUnitTestingImage.tiff Binary files differdeleted file mode 100644 index 4d08297..0000000 --- a/UnitTesting/TestData/GTMUnitTestingImage.tiff +++ /dev/null diff --git a/UnitTesting/TestData/GTMUnitTestingTest.nib/classes.nib b/UnitTesting/TestData/GTMUnitTestingTest.nib/classes.nib deleted file mode 100644 index cc51f67..0000000 --- a/UnitTesting/TestData/GTMUnitTestingTest.nib/classes.nib +++ /dev/null @@ -1,86 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IBClasses</key> - <array> - <dict> - <key>CLASS</key> - <string>NSView</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSResponder</string> - </dict> - <dict> - <key>CLASS</key> - <string>NSApplication</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSResponder</string> - </dict> - <dict> - <key>CLASS</key> - <string>NSTextField</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSControl</string> - </dict> - <dict> - <key>CLASS</key> - <string>NSMenu</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSObject</string> - </dict> - <dict> - <key>CLASS</key> - <string>NSControl</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSView</string> - </dict> - <dict> - <key>CLASS</key> - <string>NSObject</string> - <key>LANGUAGE</key> - <string>ObjC</string> - </dict> - <dict> - <key>CLASS</key> - <string>NSCell</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSObject</string> - </dict> - <dict> - <key>CLASS</key> - <string>NSWindow</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSResponder</string> - </dict> - <dict> - <key>CLASS</key> - <string>GTMUnitTestingTestController</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>OUTLETS</key> - <dict> - <key>field_</key> - <string>NSTextField</string> - </dict> - <key>SUPERCLASS</key> - <string>NSWindowController</string> - </dict> - </array> - <key>IBVersion</key> - <string>1</string> -</dict> -</plist> diff --git a/UnitTesting/TestData/GTMUnitTestingTest.nib/designable.nib b/UnitTesting/TestData/GTMUnitTestingTest.nib/designable.nib new file mode 100644 index 0000000..b2aa6ee --- /dev/null +++ b/UnitTesting/TestData/GTMUnitTestingTest.nib/designable.nib @@ -0,0 +1,1144 @@ +<?xml version="1.0" encoding="UTF-8"?> +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00"> + <data> + <int key="IBDocument.SystemTarget">1050</int> + <string key="IBDocument.SystemVersion">15G1004</string> + <string key="IBDocument.InterfaceBuilderVersion">11201</string> + <string key="IBDocument.AppKitVersion">1404.47</string> + <string key="IBDocument.HIToolboxVersion">807.20</string> + <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="NS.object.0">11201</string> + </object> + <array key="IBDocument.IntegratedClassDependencies"> + <string>NSBox</string> + <string>NSButton</string> + <string>NSButtonCell</string> + <string>NSColorWell</string> + <string>NSCustomObject</string> + <string>NSProgressIndicator</string> + <string>NSScrollView</string> + <string>NSScroller</string> + <string>NSSearchField</string> + <string>NSSearchFieldCell</string> + <string>NSSlider</string> + <string>NSSliderCell</string> + <string>NSTabView</string> + <string>NSTabViewItem</string> + <string>NSTableColumn</string> + <string>NSTableHeaderView</string> + <string>NSTableView</string> + <string>NSTextField</string> + <string>NSTextFieldCell</string> + <string>NSTextView</string> + <string>NSView</string> + <string>NSWindowTemplate</string> + </array> + <array key="IBDocument.PluginDependencies"> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + </array> + <dictionary class="NSMutableDictionary" key="IBDocument.Metadata"/> + <array class="NSMutableArray" key="IBDocument.RootObjects" id="948991554"> + <object class="NSCustomObject" id="774623032"> + <string key="NSClassName">GTMUnitTestingTestController</string> + </object> + <object class="NSCustomObject" id="121913320"> + <string key="NSClassName">FirstResponder</string> + </object> + <object class="NSCustomObject" id="575648047"> + <string key="NSClassName">NSApplication</string> + </object> + <object class="NSWindowTemplate" id="392237883"> + <int key="NSWindowStyleMask">3</int> + <int key="NSWindowBacking">2</int> + <string key="NSWindowRect">{{196, 192}, {393, 318}}</string> + <int key="NSWTFlags">536871936</int> + <string key="NSWindowTitle">Window</string> + <string key="NSWindowClass">NSWindow</string> + <nil key="NSViewClass"/> + <nil key="NSUserInterfaceItemIdentifier"/> + <object class="NSView" key="NSWindowView" id="640013893"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <array class="NSMutableArray" key="NSSubviews"> + <object class="NSScrollView" id="85174318"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">268</int> + <array class="NSMutableArray" key="NSSubviews"> + <object class="NSClipView" id="410309725"> + <reference key="NSNextResponder" ref="85174318"/> + <int key="NSvFlags">2322</int> + <array class="NSMutableArray" key="NSSubviews"> + <object class="NSTableView" id="497150328"> + <reference key="NSNextResponder" ref="410309725"/> + <int key="NSvFlags">256</int> + <string key="NSFrameSize">{223, 32}</string> + <reference key="NSSuperview" ref="410309725"/> + <reference key="NSNextKeyView" ref="975309690"/> + <bool key="NSEnabled">YES</bool> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + <bool key="NSControlAllowsExpansionToolTips">YES</bool> + <object class="NSTableHeaderView" key="NSHeaderView" id="218180457"> + <reference key="NSNextResponder" ref="700173326"/> + <int key="NSvFlags">256</int> + <string key="NSFrameSize">{223, 23}</string> + <reference key="NSSuperview" ref="700173326"/> + <reference key="NSNextKeyView" ref="837150896"/> + <reference key="NSTableView" ref="497150328"/> + </object> + <object class="_NSCornerView" key="NSCornerView" id="837150896"> + <reference key="NSNextResponder" ref="85174318"/> + <int key="NSvFlags">256</int> + <string key="NSFrame">{{224, 0}, {16, 23}}</string> + <reference key="NSSuperview" ref="85174318"/> + <reference key="NSNextKeyView" ref="410309725"/> + </object> + <array class="NSMutableArray" key="NSTableColumns"> + <object class="NSTableColumn" id="867115630"> + <double key="NSWidth">101</double> + <double key="NSMinWidth">40</double> + <double key="NSMaxWidth">1000</double> + <object class="NSTableHeaderCell" key="NSHeaderCell"> + <int key="NSCellFlags">75497536</int> + <int key="NSCellFlags2">2048</int> + <string key="NSContents"/> + <object class="NSFont" key="NSSupport" id="26"> + <bool key="IBIsSystemFont">YES</bool> + <double key="NSSize">11</double> + <int key="NSfFlags">3100</int> + </object> + <object class="NSColor" key="NSBackgroundColor" id="907423441"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes> + </object> + <object class="NSColor" key="NSTextColor" id="1031637411"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">headerTextColor</string> + <object class="NSColor" key="NSColor" id="637251812"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MAA</bytes> + </object> + </object> + </object> + <object class="NSTextFieldCell" key="NSDataCell" id="1026765034"> + <int key="NSCellFlags">337641536</int> + <int key="NSCellFlags2">2048</int> + <string key="NSContents">Text Cell</string> + <object class="NSFont" key="NSSupport" id="719066366"> + <bool key="IBIsSystemFont">YES</bool> + <double key="NSSize">13</double> + <int key="NSfFlags">1044</int> + </object> + <reference key="NSControlView" ref="497150328"/> + <object class="NSColor" key="NSBackgroundColor" id="421034111"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlBackgroundColor</string> + <object class="NSColor" key="NSColor" id="450059627"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor" id="183411164"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlTextColor</string> + <reference key="NSColor" ref="637251812"/> + </object> + </object> + <int key="NSResizingMask">3</int> + <bool key="NSIsResizeable">YES</bool> + <bool key="NSIsEditable">YES</bool> + <reference key="NSTableView" ref="497150328"/> + </object> + <object class="NSTableColumn" id="328836390"> + <double key="NSWidth">116</double> + <double key="NSMinWidth">40</double> + <double key="NSMaxWidth">1000</double> + <object class="NSTableHeaderCell" key="NSHeaderCell"> + <int key="NSCellFlags">75497536</int> + <int key="NSCellFlags2">2048</int> + <string key="NSContents"/> + <reference key="NSSupport" ref="26"/> + <reference key="NSBackgroundColor" ref="907423441"/> + <reference key="NSTextColor" ref="1031637411"/> + </object> + <object class="NSTextFieldCell" key="NSDataCell" id="114565872"> + <int key="NSCellFlags">337641536</int> + <int key="NSCellFlags2">2048</int> + <string key="NSContents">Text Cell</string> + <reference key="NSSupport" ref="719066366"/> + <reference key="NSControlView" ref="497150328"/> + <reference key="NSBackgroundColor" ref="421034111"/> + <reference key="NSTextColor" ref="183411164"/> + </object> + <int key="NSResizingMask">3</int> + <bool key="NSIsResizeable">YES</bool> + <bool key="NSIsEditable">YES</bool> + <reference key="NSTableView" ref="497150328"/> + </object> + </array> + <double key="NSIntercellSpacingWidth">3</double> + <double key="NSIntercellSpacingHeight">2</double> + <reference key="NSBackgroundColor" ref="421034111"/> + <object class="NSColor" key="NSGridColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">gridColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MC41AA</bytes> + </object> + </object> + <double key="NSRowHeight">17</double> + <int key="NSTvFlags">-700448768</int> + <reference key="NSDelegate"/> + <reference key="NSDataSource"/> + <int key="NSColumnAutoresizingStyle">4</int> + <int key="NSDraggingSourceMaskForLocal">15</int> + <int key="NSDraggingSourceMaskForNonLocal">0</int> + <bool key="NSAllowsTypeSelect">YES</bool> + <int key="NSTableViewDraggingDestinationStyle">0</int> + <int key="NSTableViewGroupRowStyle">1</int> + </object> + </array> + <string key="NSFrame">{{1, 23}, {223, 32}}</string> + <reference key="NSSuperview" ref="85174318"/> + <reference key="NSNextKeyView" ref="497150328"/> + <reference key="NSDocView" ref="497150328"/> + <reference key="NSBGColor" ref="421034111"/> + <int key="NScvFlags">4</int> + <bool key="NSAutomaticallyAdjustsContentInsets">YES</bool> + </object> + <object class="NSScroller" id="975309690"> + <reference key="NSNextResponder" ref="85174318"/> + <int key="NSvFlags">256</int> + <string key="NSFrame">{{224, 23}, {15, 32}}</string> + <reference key="NSSuperview" ref="85174318"/> + <reference key="NSNextKeyView" ref="745203310"/> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + <string key="NSControlAction">_doScroller:</string> + <reference key="NSControlTarget" ref="85174318"/> + <reference key="NSTarget" ref="85174318"/> + <string key="NSAction">_doScroller:</string> + <double key="NSCurValue">37</double> + <double key="NSPercent">0.1947367936372757</double> + </object> + <object class="NSScroller" id="745203310"> + <reference key="NSNextResponder" ref="85174318"/> + <int key="NSvFlags">256</int> + <string key="NSFrame">{{1, 55}, {223, 15}}</string> + <reference key="NSSuperview" ref="85174318"/> + <reference key="NSNextKeyView" ref="826932166"/> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + <string key="NSControlAction">_doScroller:</string> + <reference key="NSControlTarget" ref="85174318"/> + <int key="NSsFlags">1</int> + <reference key="NSTarget" ref="85174318"/> + <string key="NSAction">_doScroller:</string> + <double key="NSPercent">0.57142859697341919</double> + </object> + <object class="NSClipView" id="700173326"> + <reference key="NSNextResponder" ref="85174318"/> + <int key="NSvFlags">2338</int> + <array class="NSMutableArray" key="NSSubviews"> + <reference ref="218180457"/> + </array> + <string key="NSFrame">{{1, 0}, {223, 23}}</string> + <reference key="NSSuperview" ref="85174318"/> + <reference key="NSNextKeyView" ref="218180457"/> + <reference key="NSDocView" ref="218180457"/> + <bool key="NSAutomaticallyAdjustsContentInsets">YES</bool> + </object> + <reference ref="837150896"/> + </array> + <string key="NSFrame">{{20, 227}, {240, 71}}</string> + <reference key="NSSuperview" ref="640013893"/> + <reference key="NSNextKeyView" ref="700173326"/> + <int key="NSsFlags">133170</int> + <reference key="NSVScroller" ref="975309690"/> + <reference key="NSHScroller" ref="745203310"/> + <reference key="NSContentView" ref="410309725"/> + <reference key="NSHeaderClipView" ref="700173326"/> + <reference key="NSCornerView" ref="837150896"/> + <bytes key="NSScrollAmts">QSAAAEEgAABBmAAAQZgAAA</bytes> + <double key="NSMinMagnification">0.25</double> + <double key="NSMaxMagnification">4</double> + <double key="NSMagnification">1</double> + </object> + <object class="NSBox" id="1010937789"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{266, 0}, {5, 318}}</string> + <reference key="NSSuperview" ref="640013893"/> + <reference key="NSNextKeyView" ref="321194065"/> + <string key="NSOffsets">{0, 0}</string> + <object class="NSTextFieldCell" key="NSTitleCell"> + <int key="NSCellFlags">67108864</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">Box</string> + <reference key="NSSupport" ref="719066366"/> + <object class="NSColor" key="NSBackgroundColor" id="938122495"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textBackgroundColor</string> + <object class="NSColor" key="NSColor" id="103793517"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MQA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">labelColor</string> + <reference key="NSColor" ref="637251812"/> + </object> + </object> + <int key="NSBorderType">3</int> + <int key="NSBoxType">2</int> + <int key="NSTitlePosition">0</int> + <bool key="NSTransparent">NO</bool> + </object> + <object class="NSTextField" id="321194065"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{280, 281}, {38, 17}}</string> + <reference key="NSSuperview" ref="640013893"/> + <reference key="NSNextKeyView" ref="437142657"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="765978048"> + <int key="NSCellFlags">68157504</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents">HaHa</string> + <reference key="NSSupport" ref="719066366"/> + <reference key="NSControlView" ref="321194065"/> + <object class="NSColor" key="NSBackgroundColor" id="434344295"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlColor</string> + <reference key="NSColor" ref="450059627"/> + </object> + <reference key="NSTextColor" ref="183411164"/> + </object> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + <int key="NSTextFieldAlignmentRectInsetsVersion">2</int> + </object> + <object class="NSSearchField" id="437142657"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{277, 251}, {96, 22}}</string> + <reference key="NSSuperview" ref="640013893"/> + <reference key="NSNextKeyView" ref="426312658"/> + <bool key="NSViewIsLayerTreeHost">YES</bool> + <bool key="NSEnabled">YES</bool> + <object class="NSSearchFieldCell" key="NSCell" id="581737406"> + <int key="NSCellFlags">342884416</int> + <int key="NSCellFlags2">268436480</int> + <string key="NSContents">Still Haven't Found What I'm Searching For</string> + <reference key="NSSupport" ref="719066366"/> + <reference key="NSControlView" ref="437142657"/> + <bool key="NSDrawsBackground">YES</bool> + <int key="NSTextBezelStyle">1</int> + <reference key="NSBackgroundColor" ref="938122495"/> + <reference key="NSTextColor" ref="183411164"/> + <object class="NSButtonCell" key="NSSearchButtonCell"> + <int key="NSCellFlags">0</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">search</string> + <reference key="NSControlView" ref="437142657"/> + <string key="NSAction">_searchFieldSearch:</string> + <reference key="NSTarget" ref="581737406"/> + <int key="NSButtonFlags">138690560</int> + <int key="NSButtonFlags2">0</int> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + <object class="NSButtonCell" key="NSCancelButtonCell"> + <int key="NSCellFlags">0</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">clear</string> + <array class="NSMutableArray" key="NSAccessibilityOverriddenAttributes"> + <dictionary class="NSMutableDictionary"> + <string key="AXDescription">cancel</string> + <integer value="1" key="NSAccessibilityEncodedAttributesValueType"/> + </dictionary> + </array> + <reference key="NSControlView" ref="437142657"/> + <string key="NSAction">_searchFieldCancel:</string> + <reference key="NSTarget" ref="581737406"/> + <int key="NSButtonFlags">138690560</int> + <int key="NSButtonFlags2">0</int> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">400</int> + <int key="NSPeriodicInterval">75</int> + </object> + <int key="NSMaximumRecents">255</int> + <bytes key="NSSearchFieldFlags">BgAAAA</bytes> + </object> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + <int key="NSTextFieldAlignmentRectInsetsVersion">2</int> + </object> + <object class="NSTextField" id="426312658"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{277, 219}, {96, 22}}</string> + <reference key="NSSuperview" ref="640013893"/> + <reference key="NSNextKeyView" ref="582902776"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="403080839"> + <int key="NSCellFlags">-1804599231</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents">Once upon a time</string> + <reference key="NSSupport" ref="719066366"/> + <reference key="NSControlView" ref="426312658"/> + <bool key="NSDrawsBackground">YES</bool> + <reference key="NSBackgroundColor" ref="938122495"/> + <object class="NSColor" key="NSTextColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">textColor</string> + <reference key="NSColor" ref="637251812"/> + </object> + </object> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + <int key="NSTextFieldAlignmentRectInsetsVersion">2</int> + </object> + <object class="NSButton" id="582902776"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{275, 195}, {96, 18}}</string> + <reference key="NSSuperview" ref="640013893"/> + <reference key="NSNextKeyView" ref="938586919"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="540877530"> + <int key="NSCellFlags">-2080374784</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents">CheckMate!</string> + <reference key="NSSupport" ref="719066366"/> + <reference key="NSControlView" ref="582902776"/> + <int key="NSButtonFlags">1211912448</int> + <int key="NSButtonFlags2">130</int> + <object class="NSCustomResource" key="NSNormalImage"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSSwitch</string> + </object> + <object class="NSButtonImageSource" key="NSAlternateImage"> + <string key="NSImageName">NSSwitch</string> + </object> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + </object> + <object class="NSSlider" id="938586919"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{276, 159}, {96, 21}}</string> + <reference key="NSSuperview" ref="640013893"/> + <reference key="NSNextKeyView" ref="672462228"/> + <bool key="NSEnabled">YES</bool> + <object class="NSSliderCell" key="NSCell" id="630356720"> + <int key="NSCellFlags">-2080374784</int> + <int key="NSCellFlags2">0</int> + <string key="NSContents"/> + <object class="NSFont" key="NSSupport"> + <string key="NSName">Helvetica</string> + <double key="NSSize">12</double> + <int key="NSfFlags">16</int> + </object> + <reference key="NSControlView" ref="938586919"/> + <double key="NSMaxValue">100</double> + <double key="NSMinValue">0.0</double> + <double key="NSValue">50</double> + <double key="NSAltIncValue">0.0</double> + <int key="NSNumberOfTickMarks">0</int> + <int key="NSTickMarkPosition">1</int> + <bool key="NSAllowsTickMarkValuesOnly">NO</bool> + <bool key="NSVertical">NO</bool> + </object> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + </object> + <object class="NSButton" id="728377240"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{275, 115}, {96, 32}}</string> + <reference key="NSSuperview" ref="640013893"/> + <reference key="NSNextKeyView" ref="146897443"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="808585577"> + <int key="NSCellFlags">67108864</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Cancel</string> + <reference key="NSSupport" ref="719066366"/> + <reference key="NSControlView" ref="728377240"/> + <int key="NSButtonFlags">-2038284288</int> + <int key="NSButtonFlags2">129</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + </object> + <object class="NSColorWell" id="469359029"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">268</int> + <set class="NSMutableSet" key="NSDragTypes"> + <string>NSColor pasteboard type</string> + </set> + <string key="NSFrame">{{279, 62}, {87, 23}}</string> + <reference key="NSSuperview" ref="640013893"/> + <bool key="NSEnabled">YES</bool> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + <bool key="NSIsBordered">YES</bool> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">1</int> + <bytes key="NSRGB">MC4wNTgxMzA0OTkgMC4wNTU1NDE4OTkgMQA</bytes> + </object> + </object> + <object class="NSProgressIndicator" id="146897443"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">1292</int> + <string key="NSFrame">{{280, 91}, {85, 12}}</string> + <reference key="NSSuperview" ref="640013893"/> + <reference key="NSNextKeyView" ref="469359029"/> + <int key="NSpiFlags">16648</int> + <double key="NSMinValue">16</double> + <double key="NSMaxValue">100</double> + </object> + <object class="NSScrollView" id="826932166"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">256</int> + <array class="NSMutableArray" key="NSSubviews"> + <object class="NSClipView" id="954815377"> + <reference key="NSNextResponder" ref="826932166"/> + <int key="NSvFlags">2322</int> + <array class="NSMutableArray" key="NSSubviews"> + <object class="NSTextView" id="1039988695"> + <reference key="NSNextResponder" ref="954815377"/> + <int key="NSvFlags">2322</int> + <string key="NSFrameSize">{223, 54}</string> + <reference key="NSSuperview" ref="954815377"/> + <reference key="NSNextKeyView" ref="767227615"/> + <object class="NSTextContainer" key="NSTextContainer" id="35629099"> + <object class="NSLayoutManager" key="NSLayoutManager"> + <object class="NSTextStorage" key="NSTextStorage"> + <object class="NSMutableString" key="NSString"> + <characters key="NS.bytes">Lorem ipsum dolor</characters> + </object> + <dictionary key="NSAttributes"> + <object class="NSFont" key="NSFont"> + <bool key="IBIsSystemFont">YES</bool> + <double key="NSSize">10</double> + <int key="NSfFlags">2843</int> + </object> + <object class="NSParagraphStyle" key="NSParagraphStyle"> + <int key="NSAlignment">3</int> + <array key="NSTabStops"> + <object class="NSTextTab"> + <double key="NSLocation">0.0</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">56</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">112</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">168</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">224</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">280</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">336</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">392</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">448</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">504</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">560</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">616</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">672</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">728</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">784</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">840</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">896</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">952</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1008</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1064</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1120</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1176</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1232</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1288</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1344</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1400</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1456</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1512</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1568</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1624</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1680</double> + </object> + <object class="NSTextTab"> + <double key="NSLocation">1736</double> + </object> + </array> + </object> + </dictionary> + <nil key="NSDelegate"/> + </object> + <array class="NSMutableArray" key="NSTextContainers"> + <reference ref="35629099"/> + </array> + <int key="NSLMFlags">38</int> + <nil key="NSDelegate"/> + </object> + <reference key="NSTextView" ref="1039988695"/> + <double key="NSWidth">223</double> + <int key="NSTCFlags">1</int> + </object> + <object class="NSTextViewSharedData" key="NSSharedData"> + <int key="NSFlags">67120103</int> + <int key="NSTextCheckingTypes">0</int> + <nil key="NSMarkedAttributes"/> + <reference key="NSBackgroundColor" ref="103793517"/> + <dictionary key="NSSelectedAttributes"> + <object class="NSColor" key="NSBackgroundColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">selectedTextBackgroundColor</string> + <reference key="NSColor" ref="450059627"/> + </object> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">selectedTextColor</string> + <reference key="NSColor" ref="637251812"/> + </object> + </dictionary> + <reference key="NSInsertionColor" ref="183411164"/> + <dictionary key="NSLinkAttributes"> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">1</int> + <bytes key="NSRGB">MCAwIDEAA</bytes> + </object> + <integer value="1" key="NSUnderline"/> + </dictionary> + <nil key="NSDefaultParagraphStyle"/> + <nil key="NSTextFinder"/> + <int key="NSPreferredTextFinderStyle">1</int> + </object> + <int key="NSTVFlags">70</int> + <string key="NSMaxSize">{463, 10000000}</string> + <nil key="NSDelegate"/> + </object> + </array> + <string key="NSFrame">{{1, 1}, {223, 54}}</string> + <reference key="NSSuperview" ref="826932166"/> + <reference key="NSNextKeyView" ref="1039988695"/> + <reference key="NSDocView" ref="1039988695"/> + <reference key="NSBGColor" ref="103793517"/> + <object class="NSCursor" key="NSCursor"> + <string key="NSHotSpot">{4, -5}</string> + <int key="NSCursorType">1</int> + </object> + <int key="NScvFlags">4</int> + <bool key="NSAutomaticallyAdjustsContentInsets">YES</bool> + </object> + <object class="NSScroller" id="767227615"> + <reference key="NSNextResponder" ref="826932166"/> + <int key="NSvFlags">256</int> + <string key="NSFrame">{{224, 1}, {15, 54}}</string> + <reference key="NSSuperview" ref="826932166"/> + <reference key="NSNextKeyView" ref="1010937789"/> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + <string key="NSControlAction">_doScroller:</string> + <reference key="NSControlTarget" ref="826932166"/> + <reference key="NSTarget" ref="826932166"/> + <string key="NSAction">_doScroller:</string> + <double key="NSCurValue">1</double> + <double key="NSPercent">0.73888885974884033</double> + </object> + <object class="NSScroller" id="666418199"> + <reference key="NSNextResponder" ref="826932166"/> + <int key="NSvFlags">-2147483392</int> + <string key="NSFrame">{{-100, -100}, {87, 18}}</string> + <reference key="NSSuperview" ref="826932166"/> + <reference key="NSNextKeyView" ref="954815377"/> + <bool key="NSAllowsLogicalLayoutDirection">NO</bool> + <string key="NSControlAction">_doScroller:</string> + <reference key="NSControlTarget" ref="826932166"/> + <int key="NSsFlags">1</int> + <reference key="NSTarget" ref="826932166"/> + <string key="NSAction">_doScroller:</string> + <double key="NSCurValue">1</double> + <double key="NSPercent">0.94565218687057495</double> + </object> + </array> + <string key="NSFrame">{{20, 163}, {240, 56}}</string> + <reference key="NSSuperview" ref="640013893"/> + <reference key="NSNextKeyView" ref="666418199"/> + <int key="NSsFlags">133138</int> + <reference key="NSVScroller" ref="767227615"/> + <reference key="NSHScroller" ref="666418199"/> + <reference key="NSContentView" ref="954815377"/> + <double key="NSMinMagnification">0.25</double> + <double key="NSMaxMagnification">4</double> + <double key="NSMagnification">1</double> + </object> + <object class="NSTabView" id="672462228"> + <reference key="NSNextResponder" ref="640013893"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{13, 25}, {254, 124}}</string> + <reference key="NSSuperview" ref="640013893"/> + <reference key="NSNextKeyView" ref="940943414"/> + <array class="NSMutableArray" key="NSTabViewItems"> + <object class="NSTabViewItem" id="229928186"> + <string key="NSIdentifier">1</string> + <object class="NSView" key="NSView" id="940943414"> + <reference key="NSNextResponder" ref="672462228"/> + <int key="NSvFlags">274</int> + <string key="NSFrame">{{10, 33}, {234, 78}}</string> + <reference key="NSSuperview" ref="672462228"/> + </object> + <string key="NSLabel">Tab</string> + <reference key="NSColor" ref="434344295"/> + <reference key="NSTabView" ref="672462228"/> + </object> + <object class="NSTabViewItem" id="984817245"> + <string key="NSIdentifier">2</string> + <object class="NSView" key="NSView" id="50036484"> + <nil key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <string key="NSFrame">{{10, 33}, {234, 78}}</string> + </object> + <string key="NSLabel">View</string> + <reference key="NSColor" ref="434344295"/> + <reference key="NSTabView" ref="672462228"/> + </object> + </array> + <reference key="NSSelectedTabViewItem" ref="229928186"/> + <reference key="NSFont" ref="719066366"/> + <int key="NSTvFlags">0</int> + <bool key="NSAllowTruncatedLabels">YES</bool> + <bool key="NSDrawsBackground">YES</bool> + <array class="NSMutableArray" key="NSSubviews"> + <reference ref="940943414"/> + </array> + </object> + </array> + <string key="NSFrameSize">{393, 318}</string> + <reference key="NSNextKeyView" ref="85174318"/> + </object> + <string key="NSScreenRect">{{0, 0}, {2560, 1577}}</string> + <bool key="NSWindowIsRestorable">YES</bool> + </object> + </array> + <object class="IBObjectContainer" key="IBDocument.Objects"> + <array key="connectionRecords"> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">field_</string> + <reference key="source" ref="774623032"/> + <reference key="destination" ref="426312658"/> + </object> + <int key="connectionID">45</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">window</string> + <reference key="source" ref="774623032"/> + <reference key="destination" ref="392237883"/> + </object> + <int key="connectionID">29</int> + </object> + </array> + <object class="IBMutableOrderedSet" key="objectRecords"> + <array key="orderedObjects"> + <object class="IBObjectRecord"> + <int key="objectID">0</int> + <array key="object" id="0"/> + <reference key="children" ref="948991554"/> + <nil key="parent"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-2</int> + <reference key="object" ref="774623032"/> + <reference key="parent" ref="0"/> + <string key="objectName">File's Owner</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-1</int> + <reference key="object" ref="121913320"/> + <reference key="parent" ref="0"/> + <string key="objectName">First Responder</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-3</int> + <reference key="object" ref="575648047"/> + <reference key="parent" ref="0"/> + <string key="objectName">Application</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">1</int> + <reference key="object" ref="392237883"/> + <array class="NSMutableArray" key="children"> + <reference ref="640013893"/> + </array> + <reference key="parent" ref="0"/> + <string key="objectName">Window (Window)</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">2</int> + <reference key="object" ref="640013893"/> + <array class="NSMutableArray" key="children"> + <reference ref="728377240"/> + <reference ref="85174318"/> + <reference ref="321194065"/> + <reference ref="437142657"/> + <reference ref="426312658"/> + <reference ref="582902776"/> + <reference ref="826932166"/> + <reference ref="1010937789"/> + <reference ref="938586919"/> + <reference ref="146897443"/> + <reference ref="469359029"/> + <reference ref="672462228"/> + </array> + <reference key="parent" ref="392237883"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">5</int> + <reference key="object" ref="728377240"/> + <array class="NSMutableArray" key="children"> + <reference ref="808585577"/> + </array> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">7</int> + <reference key="object" ref="85174318"/> + <array class="NSMutableArray" key="children"> + <reference ref="497150328"/> + <reference ref="745203310"/> + <reference ref="218180457"/> + <reference ref="975309690"/> + </array> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">10</int> + <reference key="object" ref="497150328"/> + <array class="NSMutableArray" key="children"> + <reference ref="867115630"/> + <reference ref="328836390"/> + </array> + <reference key="parent" ref="85174318"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">12</int> + <reference key="object" ref="867115630"/> + <array class="NSMutableArray" key="children"> + <reference ref="1026765034"/> + </array> + <reference key="parent" ref="497150328"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">15</int> + <reference key="object" ref="1026765034"/> + <reference key="parent" ref="867115630"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">13</int> + <reference key="object" ref="328836390"/> + <array class="NSMutableArray" key="children"> + <reference ref="114565872"/> + </array> + <reference key="parent" ref="497150328"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">14</int> + <reference key="object" ref="114565872"/> + <reference key="parent" ref="328836390"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">16</int> + <reference key="object" ref="321194065"/> + <array class="NSMutableArray" key="children"> + <reference ref="765978048"/> + </array> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">18</int> + <reference key="object" ref="437142657"/> + <array class="NSMutableArray" key="children"> + <reference ref="581737406"/> + </array> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">20</int> + <reference key="object" ref="426312658"/> + <array class="NSMutableArray" key="children"> + <reference ref="403080839"/> + </array> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">22</int> + <reference key="object" ref="582902776"/> + <array class="NSMutableArray" key="children"> + <reference ref="540877530"/> + </array> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">24</int> + <reference key="object" ref="826932166"/> + <array class="NSMutableArray" key="children"> + <reference ref="1039988695"/> + <reference ref="666418199"/> + <reference ref="767227615"/> + </array> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">27</int> + <reference key="object" ref="1039988695"/> + <reference key="parent" ref="826932166"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">28</int> + <reference key="object" ref="1010937789"/> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">66</int> + <reference key="object" ref="938586919"/> + <array class="NSMutableArray" key="children"> + <reference ref="630356720"/> + </array> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">68</int> + <reference key="object" ref="146897443"/> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">69</int> + <reference key="object" ref="469359029"/> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">70</int> + <reference key="object" ref="672462228"/> + <array class="NSMutableArray" key="children"> + <reference ref="229928186"/> + <reference ref="984817245"/> + </array> + <reference key="parent" ref="640013893"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">71</int> + <reference key="object" ref="229928186"/> + <array class="NSMutableArray" key="children"> + <reference ref="940943414"/> + </array> + <reference key="parent" ref="672462228"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">74</int> + <reference key="object" ref="940943414"/> + <reference key="parent" ref="229928186"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">72</int> + <reference key="object" ref="984817245"/> + <array class="NSMutableArray" key="children"> + <reference ref="50036484"/> + </array> + <reference key="parent" ref="672462228"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">73</int> + <reference key="object" ref="50036484"/> + <reference key="parent" ref="984817245"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">77</int> + <reference key="object" ref="808585577"/> + <reference key="parent" ref="728377240"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">78</int> + <reference key="object" ref="765978048"/> + <reference key="parent" ref="321194065"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">79</int> + <reference key="object" ref="581737406"/> + <reference key="parent" ref="437142657"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">80</int> + <reference key="object" ref="403080839"/> + <reference key="parent" ref="426312658"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">81</int> + <reference key="object" ref="540877530"/> + <reference key="parent" ref="582902776"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">82</int> + <reference key="object" ref="630356720"/> + <reference key="parent" ref="938586919"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">83</int> + <reference key="object" ref="745203310"/> + <reference key="parent" ref="85174318"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">84</int> + <reference key="object" ref="218180457"/> + <reference key="parent" ref="85174318"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">85</int> + <reference key="object" ref="975309690"/> + <reference key="parent" ref="85174318"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">86</int> + <reference key="object" ref="666418199"/> + <reference key="parent" ref="826932166"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">87</int> + <reference key="object" ref="767227615"/> + <reference key="parent" ref="826932166"/> + </object> + </array> + </object> + <dictionary class="NSMutableDictionary" key="flattenedProperties"> + <string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <boolean value="YES" key="1.NSWindowTemplate.visibleAtLaunch"/> + <string key="10.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="12.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="13.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="14.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="15.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="16.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="18.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="20.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="22.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="24.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="27.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="28.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="66.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="68.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="69.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="7.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="70.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="71.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="72.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="73.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="74.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="77.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="78.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="79.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="80.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="81.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="82.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="83.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="84.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="85.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="86.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="87.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + </dictionary> + <dictionary class="NSMutableDictionary" key="unlocalizedProperties"/> + <nil key="activeLocalization"/> + <dictionary class="NSMutableDictionary" key="localizations"/> + <nil key="sourceID"/> + <int key="maxID">87</int> + </object> + <object class="IBClassDescriber" key="IBDocument.Classes"/> + <int key="IBDocument.localizationMode">0</int> + <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> + <integer value="1050" key="NS.object.0"/> + </object> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> + <integer value="4600" key="NS.object.0"/> + </object> + <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> + <int key="IBDocument.defaultPropertyAccessControl">3</int> + <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> + <string key="NS.key.0">NSSwitch</string> + <string key="NS.object.0">{15, 15}</string> + </object> + </data> +</archive> diff --git a/UnitTesting/TestData/GTMUnitTestingTest.nib/info.nib b/UnitTesting/TestData/GTMUnitTestingTest.nib/info.nib deleted file mode 100644 index 3fb1618..0000000 --- a/UnitTesting/TestData/GTMUnitTestingTest.nib/info.nib +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IBFramework Version</key> - <string>644</string> - <key>IBLastKnownRelativeProjectPath</key> - <string>../GTM.xcodeproj</string> - <key>IBOldestOS</key> - <integer>5</integer> - <key>IBOpenObjects</key> - <array> - <integer>2</integer> - </array> - <key>IBSystem Version</key> - <string>9C31</string> - <key>targetFramework</key> - <string>IBCocoaFramework</string> -</dict> -</plist> diff --git a/UnitTesting/TestData/GTMUnitTestingTest.nib/keyedobjects.nib b/UnitTesting/TestData/GTMUnitTestingTest.nib/keyedobjects.nib Binary files differindex d3104e2..8a771e8 100644 --- a/UnitTesting/TestData/GTMUnitTestingTest.nib/keyedobjects.nib +++ b/UnitTesting/TestData/GTMUnitTestingTest.nib/keyedobjects.nib diff --git a/UnitTesting/TestData/GTMUnitTestingTestApp.10.6.gtmUTState b/UnitTesting/TestData/GTMUnitTestingTestApp.10.6.gtmUTState deleted file mode 100644 index 2f2ef56..0000000 --- a/UnitTesting/TestData/GTMUnitTestingTestApp.10.6.gtmUTState +++ /dev/null @@ -1,2608 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>ApplicationMainWindow</key> - <integer>0</integer> - <key>BoolTest</key> - <true/> - <key>BytesTest</key> - <data> - Qnl0ZXNUZXN0 - </data> - <key>DoubleTest</key> - <real>1</real> - <key>FloatTest</key> - <real>1</real> - <key>Int32Test</key> - <integer>1</integer> - <key>Int64Test</key> - <integer>1</integer> - <key>IntTest</key> - <integer>1</integer> - <key>MenuBar</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>About NewApplication</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 10</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Quit NewApplication</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>,</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Preferences…</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuTitle</key> - <string>Services</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Services</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>h</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Hide NewApplication</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>h</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Hide Others</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show All</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>n</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>New</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>o</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Open…</string> - </dict> - <key>MenuItem 10</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>P</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Page Setup...</string> - <key>MenuItemTooltip</key> - <string></string> - </dict> - <key>MenuItem 11</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>p</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Print…</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Clear Menu</string> - </dict> - <key>MenuTitle</key> - <string>Open Recent</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Open Recent</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>w</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Close</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <true/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>w</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Close All</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>s</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Save</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>S</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Save As…</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Revert to Saved</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuTitle</key> - <string>File</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>File</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>z</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Undo</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>Z</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Redo</string> - </dict> - <key>MenuItem 10</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>:</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling…</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>;</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 11</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>3</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 12</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 13</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 14</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Special Characters…</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>x</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>c</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>v</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Delete</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>a</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Select All</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>f</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Find…</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>g</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Find Next</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>G</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>3</integer> - <key>MenuItemTitle</key> - <string>Find Previous</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>e</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>7</integer> - <key>MenuItemTitle</key> - <string>Use Selection for Find</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>j</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Jump to Selection</string> - </dict> - <key>MenuTitle</key> - <string>Find</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Find</string> - </dict> - <key>MenuTitle</key> - <string>Edit</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Edit</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>t</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>¬Menu Item</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>C</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>¬Menu Title</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>¬Menu Title</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>t</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Toolbar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Customize Toolbar…</string> - </dict> - <key>MenuTitle</key> - <string>View</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>View</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>?</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>NewApplication Help</string> - </dict> - <key>MenuTitle</key> - <string>Help</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Help</string> - </dict> - <key>MenuTitle</key> - <string>AMainMenu</string> - </dict> - <key>Window 0</key> - <dict> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTableView</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 4</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>BoxBorderType</key> - <integer>3</integer> - <key>BoxTitle</key> - <string>Box</string> - <key>BoxTitlePosition</key> - <integer>0</integer> - <key>BoxType</key> - <integer>2</integer> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 10</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Fonts</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Bold</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Italic</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Underline</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Outline</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Styles…</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>Font</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Font</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling and Grammar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Document Now</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Correct Spelling Automatically</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Quotes</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Dashes</string> - </dict> - <key>MenuItem 10</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuItem 11</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Data Detectors</string> - </dict> - <key>MenuItem 12</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Text Replacement</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Add Links</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Text</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Substitutions</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Dashes</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Make Upper Case</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Make Lower Case</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Capitalize</string> - </dict> - <key>MenuTitle</key> - <string>Transformations</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Transformations</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paragraph</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string> Default</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string> Left to Right</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string> Right to Left</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Selection</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string> Default</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string> Left to Right</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string> Right to Left</string> - </dict> - <key>MenuTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuTitle</key> - <string>Menu</string> - </dict> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <true/> - </dict> - </dict> - <key>ViewSubView 11</key> - <dict> - <key>TabItem 0</key> - <dict> - <key>TabLabel</key> - <string>Tab</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>TabItem 1</key> - <dict> - <key>TabLabel</key> - <string>View</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>HaHa</string> - <key>CellValue</key> - <string>HaHa</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>HaHa</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Still Haven't Found What I'm Searching For</string> - <key>CellValue</key> - <string>Still Haven't Found What I'm Searching For</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSSearchField</string> - <key>ControlValue</key> - <string>Still Haven't Found What I'm Searching For</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 4</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Once upon a time</string> - <key>CellValue</key> - <string>Once upon a time</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>Once upon a time</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 5</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>CheckMate!</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 6</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string></string> - <key>CellValue</key> - <string>50</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSSlider</string> - <key>ControlValue</key> - <string>50</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 7</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Cancel</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 8</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSColorWell</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 9</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <true/> - <key>WindowTitle</key> - <string>Window</string> - </dict> -</dict> -</plist> diff --git a/UnitTesting/TestData/GTMUnitTestingTestApp.gtmUTState b/UnitTesting/TestData/GTMUnitTestingTestApp.gtmUTState deleted file mode 100644 index db045bf..0000000 --- a/UnitTesting/TestData/GTMUnitTestingTestApp.gtmUTState +++ /dev/null @@ -1,2204 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>ApplicationMainWindow</key> - <integer>0</integer> - <key>BoolTest</key> - <true/> - <key>BytesTest</key> - <data> - Qnl0ZXNUZXN0 - </data> - <key>DoubleTest</key> - <real>1</real> - <key>FloatTest</key> - <real>1</real> - <key>Int32Test</key> - <integer>1</integer> - <key>Int64Test</key> - <integer>1</integer> - <key>IntTest</key> - <integer>1</integer> - <key>MenuBar</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>About NewApplication</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 10</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Quit NewApplication</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>,</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Preferences…</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuTitle</key> - <string>Services</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Services</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>h</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Hide NewApplication</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>h</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Hide Others</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show All</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>n</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>New</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>o</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Open…</string> - </dict> - <key>MenuItem 10</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>P</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Page Setup...</string> - <key>MenuItemTooltip</key> - <string></string> - </dict> - <key>MenuItem 11</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>p</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Print…</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Clear Menu</string> - </dict> - <key>MenuTitle</key> - <string>Open Recent</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Open Recent</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>w</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Close</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <true/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>w</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Close All</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>s</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Save</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>S</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Save As…</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Revert to Saved</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuTitle</key> - <string>File</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>File</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>z</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Undo</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>Z</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Redo</string> - </dict> - <key>MenuItem 10</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>:</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling…</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>;</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 11</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>3</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 12</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 13</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 14</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Special Characters…</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>x</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>c</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>v</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Delete</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>a</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Select All</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>f</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Find…</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>g</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Find Next</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>G</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>3</integer> - <key>MenuItemTitle</key> - <string>Find Previous</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>e</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>7</integer> - <key>MenuItemTitle</key> - <string>Use Selection for Find</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>j</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Jump to Selection</string> - </dict> - <key>MenuTitle</key> - <string>Find</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Find</string> - </dict> - <key>MenuTitle</key> - <string>Edit</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Edit</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>t</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>¬Menu Item</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>C</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>¬Menu Title</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>¬Menu Title</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>t</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Toolbar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Customize Toolbar…</string> - </dict> - <key>MenuTitle</key> - <string>View</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>View</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string>?</string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>NewApplication Help</string> - </dict> - <key>MenuTitle</key> - <string>Help</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Help</string> - </dict> - <key>MenuTitle</key> - <string>AMainMenu</string> - </dict> - <key>Window 0</key> - <dict> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTableView</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 4</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>BoxBorderType</key> - <integer>3</integer> - <key>BoxTitle</key> - <string>Box</string> - <key>BoxTitlePosition</key> - <integer>0</integer> - <key>BoxType</key> - <integer>2</integer> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 10</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Fonts</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Bold</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Italic</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Underline</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Outline</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Styles…</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>Font</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Font</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling and Grammar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Document Now</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string>Default</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Left to Right</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Right to Left</string> - </dict> - <key>MenuTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuTitle</key> - <string>Menu</string> - </dict> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 11</key> - <dict> - <key>TabItem 0</key> - <dict> - <key>TabLabel</key> - <string>Tab</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>TabItem 1</key> - <dict> - <key>TabLabel</key> - <string>View</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>HaHa</string> - <key>CellValue</key> - <string>HaHa</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>HaHa</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Still Haven't Found What I'm Searching For</string> - <key>CellValue</key> - <string>Still Haven't Found What I'm Searching For</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSSearchField</string> - <key>ControlValue</key> - <string>Still Haven't Found What I'm Searching For</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 4</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Once upon a time</string> - <key>CellValue</key> - <string>Once upon a time</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>Once upon a time</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 5</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>CheckMate!</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 6</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string></string> - <key>CellValue</key> - <string>50</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSSlider</string> - <key>ControlValue</key> - <string>50</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 7</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Cancel</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 8</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSColorWell</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 9</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <true/> - <key>WindowTitle</key> - <string>Window</string> - </dict> -</dict> -</plist> diff --git a/UnitTesting/TestData/GTMUnitTestingView.10.6.tiff b/UnitTesting/TestData/GTMUnitTestingView.10.6.tiff Binary files differdeleted file mode 100644 index 3b7545b..0000000 --- a/UnitTesting/TestData/GTMUnitTestingView.10.6.tiff +++ /dev/null diff --git a/UnitTesting/TestData/GTMUnitTestingView.tiff b/UnitTesting/TestData/GTMUnitTestingView.tiff Binary files differdeleted file mode 100644 index 228df73..0000000 --- a/UnitTesting/TestData/GTMUnitTestingView.tiff +++ /dev/null diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.6.tiff b/UnitTesting/TestData/GTMUnitTestingWindow.10.5.6.tiff Binary files differdeleted file mode 100644 index 9179576..0000000 --- a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.6.tiff +++ /dev/null diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.7.tiff b/UnitTesting/TestData/GTMUnitTestingWindow.10.5.7.tiff Binary files differdeleted file mode 100644 index 9179576..0000000 --- a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.7.tiff +++ /dev/null diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.8.tiff b/UnitTesting/TestData/GTMUnitTestingWindow.10.5.8.tiff Binary files differdeleted file mode 100644 index 9179576..0000000 --- a/UnitTesting/TestData/GTMUnitTestingWindow.10.5.8.tiff +++ /dev/null diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.10.6.gtmUTState b/UnitTesting/TestData/GTMUnitTestingWindow.10.6.gtmUTState deleted file mode 100644 index 02ec00d..0000000 --- a/UnitTesting/TestData/GTMUnitTestingWindow.10.6.gtmUTState +++ /dev/null @@ -1,1308 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTableView</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 4</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>BoxBorderType</key> - <integer>3</integer> - <key>BoxTitle</key> - <string>Box</string> - <key>BoxTitlePosition</key> - <integer>0</integer> - <key>BoxType</key> - <integer>2</integer> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 10</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Fonts</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Bold</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Italic</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Underline</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Outline</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Styles…</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>Font</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Font</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling and Grammar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Document Now</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Correct Spelling Automatically</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Quotes</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Dashes</string> - </dict> - <key>MenuItem 10</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuItem 11</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Data Detectors</string> - </dict> - <key>MenuItem 12</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Text Replacement</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Add Links</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Replace Text</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Substitutions</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Dashes</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Make Upper Case</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Make Lower Case</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Capitalize</string> - </dict> - <key>MenuTitle</key> - <string>Transformations</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Transformations</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 9</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paragraph</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string> Default</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string> Left to Right</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string> Right to Left</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Selection</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string> Default</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string> Left to Right</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string> Right to Left</string> - </dict> - <key>MenuTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuTitle</key> - <string>Menu</string> - </dict> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <true/> - </dict> - </dict> - <key>ViewSubView 11</key> - <dict> - <key>TabItem 0</key> - <dict> - <key>TabLabel</key> - <string>Tab</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>TabItem 1</key> - <dict> - <key>TabLabel</key> - <string>View</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>HaHa</string> - <key>CellValue</key> - <string>HaHa</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>HaHa</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Still Haven't Found What I'm Searching For</string> - <key>CellValue</key> - <string>Still Haven't Found What I'm Searching For</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSSearchField</string> - <key>ControlValue</key> - <string>Still Haven't Found What I'm Searching For</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 4</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Once upon a time</string> - <key>CellValue</key> - <string>Once upon a time</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>Once upon a time</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 5</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>CheckMate!</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 6</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string></string> - <key>CellValue</key> - <string>50</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSSlider</string> - <key>ControlValue</key> - <string>50</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 7</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Cancel</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 8</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSColorWell</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 9</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <true/> - <key>WindowTitle</key> - <string>Window</string> -</dict> -</plist> diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.10.6.tiff b/UnitTesting/TestData/GTMUnitTestingWindow.10.6.tiff Binary files differdeleted file mode 100644 index 6a88f84..0000000 --- a/UnitTesting/TestData/GTMUnitTestingWindow.10.6.tiff +++ /dev/null diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.gtmUTState b/UnitTesting/TestData/GTMUnitTestingWindow.gtmUTState deleted file mode 100644 index 8cba4c4..0000000 --- a/UnitTesting/TestData/GTMUnitTestingWindow.gtmUTState +++ /dev/null @@ -1,904 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>$GTMArchive</key> - <string>GTMUnitTestingArchive</string> - <key>$GTMVersion</key> - <integer>1</integer> - <key>WindowContent</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTableView</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 4</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>BoxBorderType</key> - <integer>3</integer> - <key>BoxTitle</key> - <string>Box</string> - <key>BoxTitlePosition</key> - <integer>0</integer> - <key>BoxType</key> - <integer>2</integer> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 10</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewMenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Cut</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Copy</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Paste</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Fonts</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>2</integer> - <key>MenuItemTitle</key> - <string>Bold</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Italic</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Underline</string> - </dict> - <key>MenuItem 4</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Outline</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Styles…</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <false/> - <key>MenuItemIsSeparator</key> - <true/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string></string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Colors</string> - </dict> - <key>MenuTitle</key> - <string>Font</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Font</string> - </dict> - <key>MenuItem 5</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Show Spelling and Grammar</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Document Now</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Spelling While Typing</string> - </dict> - <key>MenuItem 3</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Check Grammar With Spelling</string> - </dict> - <key>MenuTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Spelling and Grammar</string> - </dict> - <key>MenuItem 6</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Copy/Paste</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Quotes</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Smart Links</string> - </dict> - <key>MenuTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Substitutions</string> - </dict> - <key>MenuItem 7</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Start Speaking</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Stop Speaking</string> - </dict> - <key>MenuTitle</key> - <string>Speech</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Speech</string> - </dict> - <key>MenuItem 8</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemSubmenu</key> - <dict> - <key>MenuItem 0</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>-1</integer> - <key>MenuItemTitle</key> - <string>Default</string> - </dict> - <key>MenuItem 1</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Left to Right</string> - </dict> - <key>MenuItem 2</key> - <dict> - <key>MenuItemIndentationLevel</key> - <integer>0</integer> - <key>MenuItemIsAlternate</key> - <false/> - <key>MenuItemIsEnabled</key> - <true/> - <key>MenuItemIsSeparator</key> - <false/> - <key>MenuItemKeyEquivalent</key> - <string></string> - <key>MenuItemState</key> - <integer>0</integer> - <key>MenuItemTag</key> - <integer>1</integer> - <key>MenuItemTitle</key> - <string>Right to Left</string> - </dict> - <key>MenuTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuItemTag</key> - <integer>0</integer> - <key>MenuItemTitle</key> - <string>Writing Direction</string> - </dict> - <key>MenuTitle</key> - <string>Menu</string> - </dict> - </dict> - </dict> - <key>ViewSubView 1</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <false/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSScroller</string> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 11</key> - <dict> - <key>TabItem 0</key> - <dict> - <key>TabLabel</key> - <string>Tab</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>TabItem 1</key> - <dict> - <key>TabLabel</key> - <string>View</string> - <key>TabView</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewIsHidden</key> - <false/> - <key>ViewSubView 0</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>ViewSubView 2</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>HaHa</string> - <key>CellValue</key> - <string>HaHa</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>HaHa</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 3</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Still Haven't Found What I'm Searching For</string> - <key>CellValue</key> - <string>Still Haven't Found What I'm Searching For</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSSearchField</string> - <key>ControlValue</key> - <string>Still Haven't Found What I'm Searching For</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 4</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Once upon a time</string> - <key>CellValue</key> - <string>Once upon a time</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSTextField</string> - <key>ControlValue</key> - <string>Once upon a time</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 5</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>CheckMate!</string> - <key>CellValue</key> - <string>1</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>1</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 6</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>1</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string></string> - <key>CellValue</key> - <string>50</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSSlider</string> - <key>ControlValue</key> - <string>50</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 7</key> - <dict> - <key>ButtonAlternateTitle</key> - <string></string> - <key>ControlIsEnabled</key> - <true/> - <key>ControlSelectedCell</key> - <dict> - <key>CellState</key> - <integer>0</integer> - <key>CellTag</key> - <integer>0</integer> - <key>CellTitle</key> - <string>Cancel</string> - <key>CellValue</key> - <string>0</string> - </dict> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSButton</string> - <key>ControlValue</key> - <string>0</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 8</key> - <dict> - <key>ControlIsEnabled</key> - <true/> - <key>ControlTag</key> - <integer>0</integer> - <key>ControlType</key> - <string>NSColorWell</string> - <key>ViewIsHidden</key> - <false/> - </dict> - <key>ViewSubView 9</key> - <dict> - <key>ViewIsHidden</key> - <false/> - </dict> - </dict> - <key>WindowIsMain</key> - <false/> - <key>WindowIsVisible</key> - <true/> - <key>WindowTitle</key> - <string>Window</string> -</dict> -</plist> diff --git a/UnitTesting/TestData/GTMUnitTestingWindow.tiff b/UnitTesting/TestData/GTMUnitTestingWindow.tiff Binary files differdeleted file mode 100644 index 63f5649..0000000 --- a/UnitTesting/TestData/GTMUnitTestingWindow.tiff +++ /dev/null diff --git a/XcodeConfig/Project/DebugiPhone30.xcconfig b/XcodeConfig/Project/DebugiPhone30.xcconfig deleted file mode 100644 index 9f4d015..0000000 --- a/XcodeConfig/Project/DebugiPhone30.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// DebugiPhone30.xcconfig -// -// Xcode configuration file for building a Debug configuration of a project -// for iPhone OS 3.0. -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use DebugiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone30.xcconfig" - -// Debug settings -#include "../subconfig/Debug.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/DebugiPhone31.xcconfig b/XcodeConfig/Project/DebugiPhone31.xcconfig deleted file mode 100644 index 99a1f9d..0000000 --- a/XcodeConfig/Project/DebugiPhone31.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// DebugiPhone31.xcconfig -// -// Xcode configuration file for building a Debug configuration of a project -// for iPhone OS 3.1. -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use DebugiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone31.xcconfig" - -// Debug settings -#include "../subconfig/Debug.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/DebugiPhone312.xcconfig b/XcodeConfig/Project/DebugiPhone312.xcconfig deleted file mode 100644 index 04e4db5..0000000 --- a/XcodeConfig/Project/DebugiPhone312.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// DebugiPhone312.xcconfig -// -// Xcode configuration file for building a Debug configuration of a project -// for iPhone OS 3.1.2. -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use DebugiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone312.xcconfig" - -// Debug settings -#include "../subconfig/Debug.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/DebugiPhone313.xcconfig b/XcodeConfig/Project/DebugiPhone313.xcconfig deleted file mode 100644 index aa41387..0000000 --- a/XcodeConfig/Project/DebugiPhone313.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// DebugiPhone313.xcconfig -// -// Xcode configuration file for building a Debug configuration of a project -// for iPhone OS 3.1.3. -// -// Copyright 2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use DebugiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone313.xcconfig" - -// Debug settings -#include "../subconfig/Debug.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/DebugiPhone32.xcconfig b/XcodeConfig/Project/DebugiPhone32.xcconfig deleted file mode 100644 index 7fea13e..0000000 --- a/XcodeConfig/Project/DebugiPhone32.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// DebugiPhone32.xcconfig -// -// Xcode configuration file for building a Debug configuration of a project -// for iPhone OS 3.2. -// -// Copyright 2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use DebugiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone32.xcconfig" - -// Debug settings -#include "../subconfig/Debug.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/DebugiPhone40.xcconfig b/XcodeConfig/Project/DebugiPhone40.xcconfig deleted file mode 100644 index bad8987..0000000 --- a/XcodeConfig/Project/DebugiPhone40.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// DebugiPhone40.xcconfig -// -// Xcode configuration file for building a Debug configuration of a project -// for iOS 4.0. -// -// Copyright 2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use DebugiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone40.xcconfig" - -// Debug settings -#include "../subconfig/Debug.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/DebugiPhone41.xcconfig b/XcodeConfig/Project/DebugiPhone41.xcconfig deleted file mode 100644 index ee0eb92..0000000 --- a/XcodeConfig/Project/DebugiPhone41.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// DebugiPhone41.xcconfig -// -// Xcode configuration file for building a Debug configuration of a project -// for iOS 4.1. -// -// Copyright 2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use DebugiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone41.xcconfig" - -// Debug settings -#include "../subconfig/Debug.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/ReleaseiPhone30.xcconfig b/XcodeConfig/Project/ReleaseiPhone30.xcconfig deleted file mode 100644 index 63bdf4c..0000000 --- a/XcodeConfig/Project/ReleaseiPhone30.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// ReleaseiPhone30.xcconfig -// -// Xcode configuration file for building a Release configuration of a project -// for iPhone OS 3.0. -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use ReleaseiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone30.xcconfig" - -// Release settings -#include "../subconfig/Release.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/ReleaseiPhone31.xcconfig b/XcodeConfig/Project/ReleaseiPhone31.xcconfig deleted file mode 100644 index 8a5a19c..0000000 --- a/XcodeConfig/Project/ReleaseiPhone31.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// ReleaseiPhone31.xcconfig -// -// Xcode configuration file for building a Release configuration of a project -// for iPhone OS 3.1. -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use ReleaseiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone31.xcconfig" - -// Release settings -#include "../subconfig/Release.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/ReleaseiPhone312.xcconfig b/XcodeConfig/Project/ReleaseiPhone312.xcconfig deleted file mode 100644 index 65c42b1..0000000 --- a/XcodeConfig/Project/ReleaseiPhone312.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// ReleaseiPhone312.xcconfig -// -// Xcode configuration file for building a Release configuration of a project -// for iPhone OS 3.1.2. -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use ReleaseiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone312.xcconfig" - -// Release settings -#include "../subconfig/Release.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/ReleaseiPhone313.xcconfig b/XcodeConfig/Project/ReleaseiPhone313.xcconfig deleted file mode 100644 index 65de50a..0000000 --- a/XcodeConfig/Project/ReleaseiPhone313.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// ReleaseiPhone313.xcconfig -// -// Xcode configuration file for building a Release configuration of a project -// for iPhone OS 3.1.3. -// -// Copyright 2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use ReleaseiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone313.xcconfig" - -// Release settings -#include "../subconfig/Release.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/ReleaseiPhone32.xcconfig b/XcodeConfig/Project/ReleaseiPhone32.xcconfig deleted file mode 100644 index 411a9a2..0000000 --- a/XcodeConfig/Project/ReleaseiPhone32.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// ReleaseiPhone32.xcconfig -// -// Xcode configuration file for building a Release configuration of a project -// for iPhone OS 3.2. -// -// Copyright 2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use ReleaseiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone32.xcconfig" - -// Release settings -#include "../subconfig/Release.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/ReleaseiPhone40.xcconfig b/XcodeConfig/Project/ReleaseiPhone40.xcconfig deleted file mode 100644 index 2887fbb..0000000 --- a/XcodeConfig/Project/ReleaseiPhone40.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// ReleaseiPhone40.xcconfig -// -// Xcode configuration file for building a Release configuration of a project -// for iOS 4.0. -// -// Copyright 2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use ReleaseiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone40.xcconfig" - -// Release settings -#include "../subconfig/Release.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/Project/ReleaseiPhone41.xcconfig b/XcodeConfig/Project/ReleaseiPhone41.xcconfig deleted file mode 100644 index f3965b5..0000000 --- a/XcodeConfig/Project/ReleaseiPhone41.xcconfig +++ /dev/null @@ -1,41 +0,0 @@ -// -// ReleaseiPhone41.xcconfig -// -// Xcode configuration file for building a Release configuration of a project -// for iOS 4.1. -// -// Copyright 2010 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. - -// -// This is a _Configuration_ Xcode config file for use in the "Based on" popup -// of the project configuration editor. Do _not_ use this as the config base -// and individual Xcode target, there are other configuration files for that -// purpose. - -// This file will be going away, please migrate off it. Instead Apple wants -// you to use the "current" SDK, use ReleaseiOS.xcconfig and set your min -// supported iOS version in your project file. - -// Pull in the general settings -#include "../subconfig/General.xcconfig" - -// iPhone settings. -#include "../subconfig/iPhone41.xcconfig" - -// Release settings -#include "../subconfig/Release.xcconfig" - -// Merge settings -#include "../subconfig/GTMMerge.xcconfig" diff --git a/XcodeConfig/subconfig/Unittest.xcconfig b/XcodeConfig/subconfig/Unittest.xcconfig index 96121ee..596c8db 100644 --- a/XcodeConfig/subconfig/Unittest.xcconfig +++ b/XcodeConfig/subconfig/Unittest.xcconfig @@ -9,9 +9,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -28,6 +28,3 @@ GCC_C_LANGUAGE_STANDARD = gnu99 // Deploment postprocessing is what triggers Xcode to strip, we don't strip // unittests DEPLOYMENT_POSTPROCESSING = NO - -// Most common unittests will be objective-c -WRAPPER_EXTENSION = octest diff --git a/iPhone/GTMFadeTruncatingLabelTest.m b/iPhone/GTMFadeTruncatingLabelTest.m index 052a32f..478ce9a 100644 --- a/iPhone/GTMFadeTruncatingLabelTest.m +++ b/iPhone/GTMFadeTruncatingLabelTest.m @@ -15,7 +15,6 @@ // License for the specific language governing permissions and limitations under // the License. // -#import "GTMNSObject+UnitTesting.h" #import "GTMSenTestCase.h" #import "GTMFadeTruncatingLabel.h" @@ -30,26 +29,14 @@ initWithFrame:CGRectMake(0, 0, 200, 25)] autorelease]; label.text = @"A very long string that won't fit"; - GTMAssertObjectImageEqualToImageNamed(label, - @"GTMFadeTruncatingLabelTest1", - @"Mismatched image."); label.text = @"A short string"; - GTMAssertObjectImageEqualToImageNamed(label, - @"GTMFadeTruncatingLabelTest2", - @"Mismatched image."); // Dark background, light text. label.backgroundColor = [UIColor blackColor]; [label setTextColor:[UIColor whiteColor]]; label.text = @"A very long string that won't fit"; - GTMAssertObjectImageEqualToImageNamed(label, - @"GTMFadeTruncatingLabelTest3", - @"Mismatched image."); label.text = @"A short string"; - GTMAssertObjectImageEqualToImageNamed(label, - @"GTMFadeTruncatingLabelTest4", - @"Mismatched image."); } - (void)testFadeTruncatingLabelLeftAndRight { @@ -59,9 +46,6 @@ label.truncateMode = GTMFadeTruncatingHeadAndTail; label.text = @"Fade on both left and right"; - GTMAssertObjectImageEqualToImageNamed(label, - @"GTMFadeTruncatingLabelTest5", - @"Mismatched image."); } @end diff --git a/iPhone/GTMUIFont+LineHeight.m b/iPhone/GTMUIFont+LineHeight.m index 6d5ef11..21f1fda 100644 --- a/iPhone/GTMUIFont+LineHeight.m +++ b/iPhone/GTMUIFont+LineHeight.m @@ -20,6 +20,11 @@ #import <Availability.h> +// Export a nonsense symbol to suppress a libtool warning when this is linked +// alone in a static lib. +__attribute__((visibility("default"))) + char GTMUIFont_LineHeightExportToSuppressLibToolWarning = 0; + @implementation UIFont (GTMLineHeight) - (CGFloat)gtm_lineHeight { #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 diff --git a/iPhone/GTMUIFont+LineHeightTest.m b/iPhone/GTMUIFont+LineHeightTest.m index 8da28eb..29e5021 100644 --- a/iPhone/GTMUIFont+LineHeightTest.m +++ b/iPhone/GTMUIFont+LineHeightTest.m @@ -6,9 +6,9 @@ // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at -// +// // http://www.apache.org/licenses/LICENSE-2.0 -// +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -27,14 +27,14 @@ - (void)testLineHeight { UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]]; - STAssertNotNil(font, nil); - STAssertGreaterThanOrEqual([font gtm_lineHeight], (CGFloat)5.0, nil); + XCTAssertNotNil(font); + XCTAssertGreaterThanOrEqual([font gtm_lineHeight], (CGFloat)5.0); UIFont *fontSmall = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]]; - STAssertNotNil(fontSmall, nil); - STAssertGreaterThanOrEqual([fontSmall gtm_lineHeight], (CGFloat)5.0, nil); - - STAssertGreaterThan([font gtm_lineHeight], [fontSmall gtm_lineHeight], nil); + XCTAssertNotNil(fontSmall); + XCTAssertGreaterThanOrEqual([fontSmall gtm_lineHeight], (CGFloat)5.0); + + XCTAssertGreaterThan([font gtm_lineHeight], [fontSmall gtm_lineHeight]); } @end diff --git a/iPhone/GTMUIImage+ResizeTest.m b/iPhone/GTMUIImage+ResizeTest.m index 458daa7..1bbe04e 100644 --- a/iPhone/GTMUIImage+ResizeTest.m +++ b/iPhone/GTMUIImage+ResizeTest.m @@ -17,14 +17,8 @@ // #import "GTMSenTestCase.h" -#import "GTMNSObject+UnitTesting.h" #import "GTMUIImage+Resize.h" -#define GTMUIImageResizeAssertImageEqual(imageObject, imageSuffix) \ - GTMAssertObjectImageEqualToImageNamed(imageObject, \ - @"GTMUIImage+Resize_" imageSuffix,\ - @"Resized image mismatched.") - @interface GTMUIImage_ResizeTest : GTMTestCase - (UIImage *)testImageNamed:(NSString *)imageName; @end @@ -43,7 +37,7 @@ UIImage *actual = [image gtm_imageByResizingToSize:CGSizeMake(100, 100) preserveAspectRatio:YES trimToFit:NO]; - STAssertNil(actual, @"Invalid inputs should return nil"); + XCTAssertNil(actual, @"Invalid inputs should return nil"); } - (void)testInvalidInput { @@ -53,62 +47,59 @@ actual = [image gtm_imageByResizingToSize:CGSizeZero preserveAspectRatio:YES trimToFit:NO]; - STAssertNil(actual, @"CGSizeZero resize should be ignored."); + XCTAssertNil(actual, @"CGSizeZero resize should be ignored."); actual = [image gtm_imageByResizingToSize:CGSizeMake(0.1, 0.1) preserveAspectRatio:YES trimToFit:NO]; - STAssertNil(actual, @"Invalid size should be ignored."); + XCTAssertNil(actual, @"Invalid size should be ignored."); actual = [image gtm_imageByResizingToSize:CGSizeMake(-100, -100) preserveAspectRatio:YES trimToFit:NO]; - STAssertNil(actual, @"Invalid size should be ignored."); + XCTAssertNil(actual, @"Invalid size should be ignored."); } - (void)testImageByResizingWithoutPreservingAspectRatio { UIImage *actual = nil; // Square image. UIImage *originalImage = [self testImageNamed:@"GTMUIImage+Resize_100x100"]; - STAssertNotNil(originalImage, @"Unable to read image."); + XCTAssertNotNil(originalImage, @"Unable to read image."); // Resize with same aspect ratio. CGSize size50x50 = CGSizeMake(50, 50); actual = [originalImage gtm_imageByResizingToSize:size50x50 preserveAspectRatio:NO trimToFit:NO]; - STAssertTrue(CGSizeEqualToSize([actual size], size50x50), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(size50x50), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"100x100_to_50x50"); + XCTAssertTrue(CGSizeEqualToSize([actual size], size50x50), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(size50x50), + NSStringFromCGSize([actual size])); // Resize with different aspect ratio CGSize size60x40 = CGSizeMake(60, 40); actual = [originalImage gtm_imageByResizingToSize:size60x40 preserveAspectRatio:NO trimToFit:NO]; - STAssertTrue(CGSizeEqualToSize([actual size], size60x40), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(size60x40), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"100x100_to_60x40"); + XCTAssertTrue(CGSizeEqualToSize([actual size], size60x40), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(size60x40), + NSStringFromCGSize([actual size])); CGSize size40x60 = CGSizeMake(40, 60); actual = [originalImage gtm_imageByResizingToSize:size40x60 preserveAspectRatio:NO trimToFit:NO]; - STAssertTrue(CGSizeEqualToSize([actual size], size40x60), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(size40x60), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"100x100_to_40x60"); + XCTAssertTrue(CGSizeEqualToSize([actual size], size40x60), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(size40x60), + NSStringFromCGSize([actual size])); } - (void)testImageByResizingPreservingAspectRatioWithoutClip { UIImage *actual = nil; UIImage *landscapeImage = [self testImageNamed:@"GTMUIImage+Resize_100x50"]; - STAssertNotNil(landscapeImage, @"Unable to read image."); + XCTAssertNotNil(landscapeImage, @"Unable to read image."); // Landscape resize to 50x50, but clipped to 50x25. CGSize size50x50 = CGSizeMake(50, 50); @@ -116,11 +107,10 @@ actual = [landscapeImage gtm_imageByResizingToSize:size50x50 preserveAspectRatio:YES trimToFit:NO]; - STAssertTrue(CGSizeEqualToSize([actual size], expected50x25), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(expected50x25), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_50x50_noclip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], expected50x25), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(expected50x25), + NSStringFromCGSize([actual size])); // Landscape resize to 60x40, but clipped to 60x30. CGSize size60x40 = CGSizeMake(60, 40); @@ -129,11 +119,10 @@ actual = [landscapeImage gtm_imageByResizingToSize:size60x40 preserveAspectRatio:YES trimToFit:NO]; - STAssertTrue(CGSizeEqualToSize([actual size], expected60x30), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(expected60x30), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_60x40_noclip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], expected60x30), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(expected60x30), + NSStringFromCGSize([actual size])); // Landscape resize to 40x60, but clipped to 40x20. CGSize expected40x20 = CGSizeMake(40, 20); @@ -141,11 +130,10 @@ actual = [landscapeImage gtm_imageByResizingToSize:size40x60 preserveAspectRatio:YES trimToFit:NO]; - STAssertTrue(CGSizeEqualToSize([actual size], expected40x20), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(expected40x20), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_40x60_noclip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], expected40x20), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(expected40x20), + NSStringFromCGSize([actual size])); // Portrait Image UIImage *portraitImage = [self testImageNamed:@"GTMUIImage+Resize_50x100"]; @@ -155,72 +143,66 @@ actual = [portraitImage gtm_imageByResizingToSize:size50x50 preserveAspectRatio:YES trimToFit:NO]; - STAssertTrue(CGSizeEqualToSize([actual size], expected25x50), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(expected25x50), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_50x50_noclip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], expected25x50), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(expected25x50), + NSStringFromCGSize([actual size])); // Portrait resize to 60x40, but clipped to 20x40. CGSize expected20x40 = CGSizeMake(20, 40); actual = [portraitImage gtm_imageByResizingToSize:size60x40 preserveAspectRatio:YES trimToFit:NO]; - STAssertTrue(CGSizeEqualToSize([actual size], expected20x40), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(expected20x40), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_60x40_noclip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], expected20x40), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(expected20x40), + NSStringFromCGSize([actual size])); // Portrait resize to 40x60, but clipped to 30x60. CGSize expected30x60 = CGSizeMake(30, 60); actual = [portraitImage gtm_imageByResizingToSize:size40x60 preserveAspectRatio:YES trimToFit:NO]; - STAssertTrue(CGSizeEqualToSize([actual size], expected30x60), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(expected30x60), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_40x60_noclip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], expected30x60), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(expected30x60), + NSStringFromCGSize([actual size])); } - (void)testImageByResizingPreservingAspectRatioWithClip { UIImage *actual = nil; UIImage *landscapeImage = [self testImageNamed:@"GTMUIImage+Resize_100x50"]; - STAssertNotNil(landscapeImage, @"Unable to read image."); + XCTAssertNotNil(landscapeImage, @"Unable to read image."); // Landscape resize to 50x50 CGSize size50x50 = CGSizeMake(50, 50); actual = [landscapeImage gtm_imageByResizingToSize:size50x50 preserveAspectRatio:YES trimToFit:YES]; - STAssertTrue(CGSizeEqualToSize([actual size], size50x50), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(size50x50), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_50x50_clip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], size50x50), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(size50x50), + NSStringFromCGSize([actual size])); // Landscape resize to 60x40 CGSize size60x40 = CGSizeMake(60, 40); actual = [landscapeImage gtm_imageByResizingToSize:size60x40 preserveAspectRatio:YES trimToFit:YES]; - STAssertTrue(CGSizeEqualToSize([actual size], size60x40), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(size60x40), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_60x40_clip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], size60x40), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(size60x40), + NSStringFromCGSize([actual size])); // Landscape resize to 40x60 CGSize size40x60 = CGSizeMake(40, 60); actual = [landscapeImage gtm_imageByResizingToSize:size40x60 preserveAspectRatio:YES trimToFit:YES]; - STAssertTrue(CGSizeEqualToSize([actual size], size40x60), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(size40x60), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"100x50_to_40x60_clip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], size40x60), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(size40x60), + NSStringFromCGSize([actual size])); // Portrait Image. UIImage *portraitImage = [self testImageNamed:@"GTMUIImage+Resize_50x100"]; @@ -229,56 +211,46 @@ actual = [portraitImage gtm_imageByResizingToSize:size50x50 preserveAspectRatio:YES trimToFit:YES]; - STAssertTrue(CGSizeEqualToSize([actual size], size50x50), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(size50x50), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_50x50_clip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], size50x50), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(size50x50), + NSStringFromCGSize([actual size])); // Portrait resize to 60x40 actual = [portraitImage gtm_imageByResizingToSize:size60x40 preserveAspectRatio:YES trimToFit:YES]; - STAssertTrue(CGSizeEqualToSize([actual size], size60x40), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(size60x40), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_60x40_clip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], size60x40), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(size60x40), + NSStringFromCGSize([actual size])); // Portrait resize to 40x60. actual = [portraitImage gtm_imageByResizingToSize:size40x60 preserveAspectRatio:YES trimToFit:YES]; - STAssertTrue(CGSizeEqualToSize([actual size], size40x60), - @"Resized image should equal size: %@ actual: %@", - NSStringFromCGSize(size40x60), - NSStringFromCGSize([actual size])); - GTMUIImageResizeAssertImageEqual(actual, @"50x100_to_40x60_clip"); + XCTAssertTrue(CGSizeEqualToSize([actual size], size40x60), + @"Resized image should equal size: %@ actual: %@", + NSStringFromCGSize(size40x60), + NSStringFromCGSize([actual size])); } - (void)testImageByRotating { UIImage *actual = nil; UIImage *landscapeImage = [self testImageNamed:@"GTMUIImage+Resize_100x50"]; - STAssertNotNil(landscapeImage, @"Unable to read image."); + XCTAssertNotNil(landscapeImage, @"Unable to read image."); // Rotate 90 degrees. actual = [landscapeImage gtm_imageByRotating:UIImageOrientationRight]; - GTMUIImageResizeAssertImageEqual(actual, @"50x100"); // Rotate 180 degrees. actual = [landscapeImage gtm_imageByRotating:UIImageOrientationDown]; - GTMUIImageResizeAssertImageEqual(actual, - @"100x50_flipped"); - // Rotate 270 degrees. actual = [landscapeImage gtm_imageByRotating:UIImageOrientationLeft]; - GTMUIImageResizeAssertImageEqual(actual, - @"50x100_flipped"); // Rotate 360 degrees. actual = [landscapeImage gtm_imageByRotating:UIImageOrientationUp]; - GTMUIImageResizeAssertImageEqual(actual, @"100x50"); } @end diff --git a/iPhone/GTMUILocalizerTest.m b/iPhone/GTMUILocalizerTest.m index a53c249..434e890 100644 --- a/iPhone/GTMUILocalizerTest.m +++ b/iPhone/GTMUILocalizerTest.m @@ -58,7 +58,7 @@ - (void)checkValues:(NSString *)value onController:(GTMUILocalizerTestViewController *)controller { // Label - STAssertEqualStrings(value, [[controller label] text], nil); + XCTAssertEqualStrings(value, [[controller label] text]); // Button UIControlState allStates[] = { UIControlStateNormal, UIControlStateHighlighted, @@ -66,33 +66,29 @@ UIControlStateSelected }; for (size_t idx = 0; idx < (sizeof(allStates)/sizeof(allStates[0])); ++idx) { UIControlState state = allStates[idx]; - STAssertEqualStrings(value, [[controller button] titleForState:state], nil); + XCTAssertEqualStrings(value, [[controller button] titleForState:state]); } // SegementedControl for (NSUInteger i = 0; i < [[controller segmentedControl] numberOfSegments]; ++i) { - STAssertEqualStrings(value, - [[controller segmentedControl] titleForSegmentAtIndex:i], nil); + XCTAssertEqualStrings(value, + [[controller segmentedControl] titleForSegmentAtIndex:i]); } // SearchBar - STAssertEqualStrings(value, [[controller searchBar] text], nil); - STAssertEqualStrings(value, [[controller searchBar] placeholder], nil); - STAssertEqualStrings(value, [[controller searchBar] prompt], nil); + XCTAssertEqualStrings(value, [[controller searchBar] text]); + XCTAssertEqualStrings(value, [[controller searchBar] placeholder]); + XCTAssertEqualStrings(value, [[controller searchBar] prompt]); // Accessibility label seems to not be working at all. They always are nil. // Even when setting those explicitly there, the getter always returns nil. // This might be because the gobal accessibility switch is not on during the // tests. #if 0 - STAssertEqualStrings(value, [[controller view] accessibilityLabel], - nil); - STAssertEqualStrings(value, [[controller view] accessibilityHint], - nil); - STAssertEqualStrings(value, [[controller label] accessibilityLabel], - nil); - STAssertEqualStrings(value, [[controller label] accessibilityHint], - nil); + XCTAssertEqualStrings(value, [[controller view] accessibilityLabel]); + XCTAssertEqualStrings(value, [[controller view] accessibilityHint]); + XCTAssertEqualStrings(value, [[controller label] accessibilityLabel]); + XCTAssertEqualStrings(value, [[controller label] accessibilityHint]); #endif } diff --git a/iPhone/GTMUIView+SubtreeDescription.h b/iPhone/GTMUIView+SubtreeDescription.h deleted file mode 100644 index e713d3d..0000000 --- a/iPhone/GTMUIView+SubtreeDescription.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// GTMUIView+SubtreeDescription.h -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. -// -#import <UIKit/UIKit.h> - -// This entire file, and the corresponding .m is similar to, and predates -// Apple's recursiveDescription, used like so: -// -// (lldb) po [[self view] recursiveDescription] -// -// As documented in Technical Note TN2239 iOS Debugging Magic. - -// This entire file, and the corresponding .m is DEBUG only. -// But you can define INCLUDE_UIVIEW_SUBTREE_DESCRIPTION to no-zero to override. -#if DEBUG || INCLUDE_UIVIEW_SUBTREE_DESCRIPTION - -// Example, in debugger, pause the program, then type: -// po [[[UIApplication sharedApplication] keyWindow] subtreeDescription] - -@interface UIView (SubtreeDescription) - -// Returns one line, without leading indent, but with a trailing newline, -// describing the view. -// If you define a |myViewDescriptionLine| method in your own UIView classes, -// this will append that result to its description. -- (NSString *)gtm_subtreeDescriptionLine; - -// For debugging. Returns a nicely indented representation of this view's -// subview hierarchy, each with frame and isHidden. -- (NSString *)subtreeDescription; - -// For debugging. Returns a nicely indented representation of this view's -// layer hierarchy, with frames and isHidden. -// Requires QuartzCore to be useful, but your app will still link without it. -// TODO: should there be an analog of myViewDescriptionLine for layers? -- (NSString *)sublayersDescription; - -@end - -@protocol GTMUIViewSubtreeDescription -// A UIView can implement this and it can add it's own custom description -// in gtm_subtreeDescriptionLine. -- (NSString *)myViewDescriptionLine; -@end - -#endif // DEBUG diff --git a/iPhone/GTMUIView+SubtreeDescription.m b/iPhone/GTMUIView+SubtreeDescription.m deleted file mode 100644 index 519aed0..0000000 --- a/iPhone/GTMUIView+SubtreeDescription.m +++ /dev/null @@ -1,145 +0,0 @@ -// -// GTMUIView+SubtreeDescription.m -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. -// -#import "GTMUIView+SubtreeDescription.h" - -#if DEBUG || INCLUDE_UIVIEW_SUBTREE_DESCRIPTION - -static void AppendLabelFloat(NSMutableString *s, NSString *label, float f) { - [s appendString:label]; - // Respects gcc warning about using == with floats. - if (fabs(f - floor(f)) < 1.0e-8) { // Essentially integer. - int d = f; - // Respects gcc warning about casting floats to ints. - [s appendFormat:@"%d", d]; - } else { - [s appendFormat:@"%3.1f", f]; - } -} - -static NSMutableString *SublayerDescriptionLine(CALayer *layer) { - NSMutableString *result = [NSMutableString string]; - [result appendFormat:@"%@ %p {", [layer class], layer]; - CGRect frame = [layer frame]; - if (!CGRectIsEmpty(frame)) { - AppendLabelFloat(result, @"x:", frame.origin.x); - AppendLabelFloat(result, @" y:", frame.origin.y); - AppendLabelFloat(result, @" w:", frame.size.width); - AppendLabelFloat(result, @" h:", frame.size.height); - } - [result appendFormat:@"}"]; - if ([layer isHidden]) { - [result appendString:@" hid"]; - } - [result appendString:@"\n"]; - return result; -} - -// |sublayersDescription| has a guard so we'll only call this if it is safe -// to call. -static NSMutableString *SublayerDescriptionAtLevel(CALayer *layer, int level) { - NSMutableString *result = [NSMutableString string]; - for (int i = 0; i < level; ++i) { - [result appendString:@" "]; - } - [result appendString:SublayerDescriptionLine(layer)]; - // |sublayers| is defined in the QuartzCore framework, which isn't guaranteed - // to be linked to this program. (So we don't include the header.) - NSArray *layers = [layer performSelector:NSSelectorFromString(@"sublayers")]; - for (CALayer *l in layers) { - [result appendString:SublayerDescriptionAtLevel(l, level+1)]; - } - return result; -} - -@implementation UIView (SubtreeDescription) - -// TODO: Consider flagging things which might help in debugging: -// - alpha < 10% -// - origin not zero -// - non-opaque -// - transform if not identity -// - view not entirely within ancestor views -// - (possibly) tag==0 -- (NSString *)gtm_subtreeDescriptionLine { - NSMutableString *result = [NSMutableString string]; - [result appendFormat:@"%@ %p {", [self class], self]; - CGRect frame = [self frame]; - if (!CGRectIsEmpty(frame)) { - AppendLabelFloat(result, @"x:", frame.origin.x); - AppendLabelFloat(result, @" y:", frame.origin.y); - AppendLabelFloat(result, @" w:", frame.size.width); - AppendLabelFloat(result, @" h:", frame.size.height); - } - [result appendString:@"}"]; - if ([self isHidden]) { - [result appendString:@" hid"]; - } - - if ([self respondsToSelector:@selector(myViewDescriptionLine)]) { - NSString *customDescription = - [self performSelector:@selector(myViewDescriptionLine)]; - if (customDescription != nil) { - [result appendFormat:@" %@", customDescription]; - } - } - - [result appendString:@"\n"]; - return result; -} - -- (NSString *)gtm_subtreeDescriptionAtLevel:(int)level { - NSMutableString *result = [NSMutableString string]; - for (int i = 0; i < level; ++i) { - [result appendString:@" "]; - } - [result appendString:[self gtm_subtreeDescriptionLine]]; - for (UIView *v in [self subviews]) { - [result appendString:[v gtm_subtreeDescriptionAtLevel:level+1]]; - } - return result; -} - -- (NSString *)subtreeDescription { - NSMutableString *result = - [[[self gtm_subtreeDescriptionLine] mutableCopy] autorelease]; - for (UIView *v in [self subviews]) { - [result appendString:[v gtm_subtreeDescriptionAtLevel:1]]; - } - return result; -} - -// for debugging dump the layer hierarchy, frames and isHidden. -- (NSString *)sublayersDescription { - CALayer *layer = [self layer]; - SEL sublayers = NSSelectorFromString(@"sublayers"); - if (![layer respondsToSelector:sublayers]) { - return @"*** Sorry: This app is not linked with the QuartzCore framework."; - } - NSMutableString *result = SublayerDescriptionLine(layer); - NSArray *layers = [layer performSelector:sublayers]; - for (CALayer *l in layers) { - [result appendString:SublayerDescriptionAtLevel(l, 1)]; - } - return result; -} - -@end - -#endif // DEBUG - - diff --git a/iPhone/GTMUIView+SubtreeDescriptionTest.m b/iPhone/GTMUIView+SubtreeDescriptionTest.m deleted file mode 100644 index b691cd5..0000000 --- a/iPhone/GTMUIView+SubtreeDescriptionTest.m +++ /dev/null @@ -1,150 +0,0 @@ -// -// GTMUIView+SubtreeDescriptionTest.m -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations -// under the License. -// - -#import "GTMNSObject+UnitTesting.h" -#import "GTMSenTestCase.h" -#import "GTMUIView+SubtreeDescription.h" - -#if !NDEBUG - -@interface GTMUIView_SubtreeDescriptionTest : GTMTestCase -@end - -@implementation GTMUIView_SubtreeDescriptionTest - -- (void)testSubtreeDescription { - // Test a single, simple view. - CGRect frame1 = CGRectMake(0, 0, 100, 200); - UIView *view1 = [[[UIView alloc] initWithFrame:frame1] autorelease]; - NSString *actual = [view1 subtreeDescription]; - NSString *expected = [NSString stringWithFormat: - @"UIView %p {x:0 y:0 w:100 h:200}\n", view1]; - STAssertEqualObjects(actual, expected, @"a single, simple view failed"); - - // Test a view with one child. - CGRect frame2 = CGRectMake(2, 2, 102, 202); - UIView *view2 = [[[UIView alloc] initWithFrame:frame2] autorelease]; - [view1 addSubview:view2]; - NSString *actual2 = [view1 subtreeDescription]; - NSString *expected2 = [NSString stringWithFormat: - @"UIView %p {x:0 y:0 w:100 h:200}\n" - @" UIView %p {x:2 y:2 w:102 h:202}\n", view1, view2]; - STAssertEqualObjects(actual2, expected2, @"a view with one child"); - - // Test a view with two children. - CGRect frame3 = CGRectMake(3, 3, 103, 203); - UIView *view3 = [[[UIView alloc] initWithFrame:frame3] autorelease]; - [view1 addSubview:view3]; - NSString *actual3 = [view1 subtreeDescription]; - NSString *expected3 = [NSString stringWithFormat: - @"UIView %p {x:0 y:0 w:100 h:200}\n" - @" UIView %p {x:2 y:2 w:102 h:202}\n" - @" UIView %p {x:3 y:3 w:103 h:203}\n", - view1, view2, view3]; - STAssertEqualObjects(actual3, expected3, @"a view with two children"); - - // Test a view with two children, one hidden. - [view3 setHidden:YES]; - NSString *actual4 = [view1 subtreeDescription]; - NSString *expected4 = [NSString stringWithFormat: - @"UIView %p {x:0 y:0 w:100 h:200}\n" - @" UIView %p {x:2 y:2 w:102 h:202}\n" - @" UIView %p {x:3 y:3 w:103 h:203} hid\n", - view1, view2, view3]; - STAssertEqualObjects(actual4, expected4, @"with two children, one hidden"); -} - -- (void)testSublayersDescription { - // Test a single, simple layer. - CGRect frame1 = CGRectMake(0, 0, 100, 200); - UIView *view1 = [[[UIView alloc] initWithFrame:frame1] autorelease]; - NSString *actual = [view1 sublayersDescription]; - NSString *expected = [NSString stringWithFormat: - @"CALayer %p {x:0 y:0 w:100 h:200}\n", [view1 layer]]; - STAssertEqualObjects(actual, expected, @"a single, simple layer failed"); - - // Test a layer with one child. - CGRect frame2 = CGRectMake(2, 2, 102, 202); - UIView *view2 = [[[UIView alloc] initWithFrame:frame2] autorelease]; - [view1 addSubview:view2]; - NSString *actual2 = [view1 sublayersDescription]; - NSString *expected2 = [NSString stringWithFormat: - @"CALayer %p {x:0 y:0 w:100 h:200}\n" - @" CALayer %p {x:2 y:2 w:102 h:202}\n", - [view1 layer], [view2 layer]]; - STAssertEqualObjects(actual2, expected2, @"a layer with one child"); - - // Test a layer with two children. - CGRect frame3 = CGRectMake(3, 3, 103, 203); - UIView *view3 = [[[UIView alloc] initWithFrame:frame3] autorelease]; - [view1 addSubview:view3]; - NSString *actual3 = [view1 sublayersDescription]; - NSString *expected3 = [NSString stringWithFormat: - @"CALayer %p {x:0 y:0 w:100 h:200}\n" - @" CALayer %p {x:2 y:2 w:102 h:202}\n" - @" CALayer %p {x:3 y:3 w:103 h:203}\n", - [view1 layer], [view2 layer], [view3 layer]]; - STAssertEqualObjects(actual3, expected3, @"a layer with two children"); - - // Test a layer with two children, one hidden. - [view3 setHidden:YES]; - NSString *actual4 = [view1 sublayersDescription]; - NSString *expected4 = [NSString stringWithFormat: - @"CALayer %p {x:0 y:0 w:100 h:200}\n" - @" CALayer %p {x:2 y:2 w:102 h:202}\n" - @" CALayer %p {x:3 y:3 w:103 h:203} hid\n", - [view1 layer], [view2 layer], [view3 layer]]; - STAssertEqualObjects(actual4, expected4, @"with two children, one hidden"); -} - -@end - -@interface UIMyTestView : UIView -- (NSString *)myViewDescriptionLine; -@end - -@implementation UIMyTestView -- (NSString *)myViewDescriptionLine { - NSString *result = [NSString stringWithFormat:@"alpha: %3.1f", [self alpha]]; - return result; -} -@end - -@interface GTMUIView_SubtreeSubClassDescriptionTest : GTMTestCase -@end - -@implementation GTMUIView_SubtreeSubClassDescriptionTest -- (void)testSubtreeDescription { - CGRect frame1 = CGRectMake(0, 0, 100, 200); - UIView *view1 = [[[UIView alloc] initWithFrame:frame1] autorelease]; - - // Test a view with one child. - CGRect frame2 = CGRectMake(2, 2, 102, 202); - UIView *view2 = [[[UIMyTestView alloc] initWithFrame:frame2] autorelease]; - [view1 addSubview:view2]; - NSString *actual2 = [view1 subtreeDescription]; - NSString *expected2 = [NSString stringWithFormat: - @"UIView %p {x:0 y:0 w:100 h:200}\n" - @" UIMyTestView %p {x:2 y:2 w:102 h:202} alpha: 1.0\n", - view1, view2]; - STAssertEqualObjects(actual2, expected2, @"a view with one subclassed child"); -} -@end - - -#endif diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest1.5.png b/iPhone/TestData/GTMFadeTruncatingLabelTest1.5.png Binary files differdeleted file mode 100644 index 27a1d90..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest1.5.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest1.6.png b/iPhone/TestData/GTMFadeTruncatingLabelTest1.6.png Binary files differdeleted file mode 100644 index e2a2777..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest1.6.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest1.png b/iPhone/TestData/GTMFadeTruncatingLabelTest1.png Binary files differdeleted file mode 100644 index d5d7910..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest1.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest2.5.png b/iPhone/TestData/GTMFadeTruncatingLabelTest2.5.png Binary files differdeleted file mode 100644 index 49377c4..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest2.5.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest2.6.png b/iPhone/TestData/GTMFadeTruncatingLabelTest2.6.png Binary files differdeleted file mode 100644 index cb840ba..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest2.6.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest2.png b/iPhone/TestData/GTMFadeTruncatingLabelTest2.png Binary files differdeleted file mode 100644 index 80d95fd..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest2.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest3.5.png b/iPhone/TestData/GTMFadeTruncatingLabelTest3.5.png Binary files differdeleted file mode 100644 index dd68fe9..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest3.5.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest3.6.png b/iPhone/TestData/GTMFadeTruncatingLabelTest3.6.png Binary files differdeleted file mode 100644 index b9a07fa..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest3.6.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest3.png b/iPhone/TestData/GTMFadeTruncatingLabelTest3.png Binary files differdeleted file mode 100644 index eba21b2..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest3.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest4.5.png b/iPhone/TestData/GTMFadeTruncatingLabelTest4.5.png Binary files differdeleted file mode 100644 index f3bbfb0..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest4.5.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest4.6.png b/iPhone/TestData/GTMFadeTruncatingLabelTest4.6.png Binary files differdeleted file mode 100644 index 1fecc29..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest4.6.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest4.png b/iPhone/TestData/GTMFadeTruncatingLabelTest4.png Binary files differdeleted file mode 100644 index e9f59c8..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest4.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest5.5.png b/iPhone/TestData/GTMFadeTruncatingLabelTest5.5.png Binary files differdeleted file mode 100644 index 60d4242..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest5.5.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest5.6.png b/iPhone/TestData/GTMFadeTruncatingLabelTest5.6.png Binary files differdeleted file mode 100644 index 8c2db75..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest5.6.png +++ /dev/null diff --git a/iPhone/TestData/GTMFadeTruncatingLabelTest5.png b/iPhone/TestData/GTMFadeTruncatingLabelTest5.png Binary files differdeleted file mode 100644 index ba378d2..0000000 --- a/iPhone/TestData/GTMFadeTruncatingLabelTest5.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_100x100_to_40x60.png b/iPhone/TestData/GTMUIImage+Resize_100x100_to_40x60.png Binary files differdeleted file mode 100644 index 10223fd..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_100x100_to_40x60.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_100x100_to_50x50.png b/iPhone/TestData/GTMUIImage+Resize_100x100_to_50x50.png Binary files differdeleted file mode 100644 index ab71afb..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_100x100_to_50x50.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_100x100_to_60x40.png b/iPhone/TestData/GTMUIImage+Resize_100x100_to_60x40.png Binary files differdeleted file mode 100644 index 5683f17..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_100x100_to_60x40.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_100x50_flipped.png b/iPhone/TestData/GTMUIImage+Resize_100x50_flipped.png Binary files differdeleted file mode 100644 index c6b1d8f..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_100x50_flipped.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_100x50_to_40x60_clip.png b/iPhone/TestData/GTMUIImage+Resize_100x50_to_40x60_clip.png Binary files differdeleted file mode 100644 index b7721ad..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_100x50_to_40x60_clip.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_100x50_to_40x60_noclip.png b/iPhone/TestData/GTMUIImage+Resize_100x50_to_40x60_noclip.png Binary files differdeleted file mode 100644 index 0e2c9de..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_100x50_to_40x60_noclip.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_100x50_to_50x50_clip.png b/iPhone/TestData/GTMUIImage+Resize_100x50_to_50x50_clip.png Binary files differdeleted file mode 100644 index e913bfb..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_100x50_to_50x50_clip.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_100x50_to_50x50_noclip.png b/iPhone/TestData/GTMUIImage+Resize_100x50_to_50x50_noclip.png Binary files differdeleted file mode 100644 index 365dfb6..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_100x50_to_50x50_noclip.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_100x50_to_60x40_clip.png b/iPhone/TestData/GTMUIImage+Resize_100x50_to_60x40_clip.png Binary files differdeleted file mode 100644 index b8e6c06..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_100x50_to_60x40_clip.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_100x50_to_60x40_noclip.png b/iPhone/TestData/GTMUIImage+Resize_100x50_to_60x40_noclip.png Binary files differdeleted file mode 100644 index 14d96b0..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_100x50_to_60x40_noclip.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_50x100_flipped.png b/iPhone/TestData/GTMUIImage+Resize_50x100_flipped.png Binary files differdeleted file mode 100644 index bdce5a2..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_50x100_flipped.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_50x100_to_40x60_clip.png b/iPhone/TestData/GTMUIImage+Resize_50x100_to_40x60_clip.png Binary files differdeleted file mode 100644 index 3c68940..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_50x100_to_40x60_clip.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_50x100_to_40x60_noclip.png b/iPhone/TestData/GTMUIImage+Resize_50x100_to_40x60_noclip.png Binary files differdeleted file mode 100644 index 8a9b227..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_50x100_to_40x60_noclip.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_50x100_to_50x50_clip.png b/iPhone/TestData/GTMUIImage+Resize_50x100_to_50x50_clip.png Binary files differdeleted file mode 100644 index 6d6a5df..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_50x100_to_50x50_clip.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_50x100_to_50x50_noclip.png b/iPhone/TestData/GTMUIImage+Resize_50x100_to_50x50_noclip.png Binary files differdeleted file mode 100644 index c79873a..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_50x100_to_50x50_noclip.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_50x100_to_60x40_clip.png b/iPhone/TestData/GTMUIImage+Resize_50x100_to_60x40_clip.png Binary files differdeleted file mode 100644 index 87feb9b..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_50x100_to_60x40_clip.png +++ /dev/null diff --git a/iPhone/TestData/GTMUIImage+Resize_50x100_to_60x40_noclip.png b/iPhone/TestData/GTMUIImage+Resize_50x100_to_60x40_noclip.png Binary files differdeleted file mode 100644 index be94dc6..0000000 --- a/iPhone/TestData/GTMUIImage+Resize_50x100_to_60x40_noclip.png +++ /dev/null |