diff options
Diffstat (limited to 'UnitTesting/GTMNSObject+BindingUnitTesting.m')
-rw-r--r-- | UnitTesting/GTMNSObject+BindingUnitTesting.m | 347 |
1 files changed, 234 insertions, 113 deletions
diff --git a/UnitTesting/GTMNSObject+BindingUnitTesting.m b/UnitTesting/GTMNSObject+BindingUnitTesting.m index 7773542..1ce1c88 100644 --- a/UnitTesting/GTMNSObject+BindingUnitTesting.m +++ b/UnitTesting/GTMNSObject+BindingUnitTesting.m @@ -20,6 +20,7 @@ #import "GTMDefines.h" #import "GTMNSObject+BindingUnitTesting.h" +#import "GTMSystemVersion.h" BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, NSArray **errors) { @@ -36,8 +37,10 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, if (![bindingsToIgnore containsObject:bindingKey]) { Class theClass = [object valueClassForBinding:bindingKey]; if (!theClass) { - [errorArray addObject:[NSString stringWithFormat:@"%@ should have valueClassForBinding '%@'", - object, bindingKey]]; + NSString *error + = [NSString stringWithFormat:@"%@ should have valueClassForBinding '%@'", + object, bindingKey]; + [errorArray addObject:error]; continue; } @try { @@ -45,32 +48,41 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, [object valueForKey:bindingKey]; } @catch (NSException *e) { - _GTMDevLog(@"%@ is not key value coding compliant for key %@", object, bindingKey); + _GTMDevLog(@"%@ is not key value coding compliant for key %@", + object, bindingKey); continue; } // COV_NF_LINE - compiler bug - NSDictionary *testValues = [object gtm_unitTestExposedBindingsTestValues:bindingKey]; - NSEnumerator *testEnum = [testValues keyEnumerator]; - id testValue; - while ((testValue = [testEnum nextObject])) { - [object setValue:testValue forKey:bindingKey]; - id value = [object valueForKey:bindingKey]; - id desiredValue = [testValues objectForKey:testValue]; - if (![desiredValue gtm_unitTestIsEqualTo:value]) { - [errorArray addObject:[NSString stringWithFormat:@"%@ unequal to %@ for binding '%@'", - value, desiredValue, bindingKey]]; + NSArray *testValues + = [object gtm_unitTestExposedBindingsTestValues:bindingKey]; + NSEnumerator *testEnum = [testValues objectEnumerator]; + GTMBindingUnitTestData *testData; + while ((testData = [testEnum nextObject])) { + 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) { - [errorArray addObject:[NSString stringWithFormat:@"%@:%@-> Binding %@", - [e name], [e reason], bindingKey]]; + NSString *error + = [NSString stringWithFormat:@"%@:%@-> Binding %@", + [e name], [e reason], bindingKey]; + [errorArray addObject:error]; } // COV_NF_LINE - compiler bug } } } else { - [errorArray addObject:[NSString stringWithFormat:@"%@ does not have any exposed bindings", - object]]; + NSString *error = + [NSString stringWithFormat:@"%@ does not have any exposed bindings", + object]; + [errorArray addObject:error]; } if (errors) { *errors = errorArray; @@ -78,10 +90,51 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, return [errorArray count] == 0; } -// Utility for simplifying unitTestExposedBindingsTestValues implementations -@interface NSMutableDictionary (GTMUnitTestingAdditions) -// Sets an object and a key to the same value in a dictionary. -- (void)gtm_setObjectAndKey:(id)objectAndKey; +@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) @@ -98,14 +151,14 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, return array; } -- (NSMutableDictionary*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding { +- (NSMutableArray*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding { - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + NSMutableArray *array = [NSMutableArray array]; id value = [self valueForKey:binding]; // Always test identity if possible if (value) { - [dict gtm_setObjectAndKey:value]; + [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; } // Now some default test values for a variety of bindings to make @@ -114,21 +167,30 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, // If anybody can think of more to add, please go nuts. if ([binding isEqualToString:NSAlignmentBinding]) { - [dict gtm_setObjectAndKey:[NSNumber numberWithInt:NSLeftTextAlignment]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithInt:NSRightTextAlignment]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithInt:NSCenterTextAlignment]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithInt:NSJustifiedTextAlignment]]; - NSNumber *natural = [NSNumber numberWithInt:NSNaturalTextAlignment]; - [dict gtm_setObjectAndKey:natural]; - [dict setObject:natural forKey:[NSNumber numberWithInt:500]]; - [dict setObject:natural forKey:[NSNumber numberWithInt:-1]]; + 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 - [dict gtm_setObjectAndKey:[NSImage imageNamed:@"NSApplicationIcon"]]; + value = [NSImage imageNamed:@"NSApplicationIcon"]; + [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; } else if ([binding isEqualToString:NSAnimateBinding] || [binding isEqualToString:NSDocumentEditedBinding] || [binding isEqualToString:NSEditableBinding] || @@ -139,57 +201,88 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, // NSTranparentBinding 10.5 only [binding isEqualToString:@"transparent"]) { // This handles all bool value bindings - [dict gtm_setObjectAndKey:[NSNumber numberWithBool:YES]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithBool:NO]]; + 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 - [dict gtm_setObjectAndKey:@"happy"]; - [dict gtm_setObjectAndKey:@""]; + [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 }; - [dict gtm_setObjectAndKey:[NSString stringWithUTF8String:a_not_alpha]]; + 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 }; - [dict gtm_setObjectAndKey:[NSString stringWithUTF8String:hangugo]]; + 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 }; - [dict gtm_setObjectAndKey:[NSString stringWithUTF8String:nihongo]]; + value = [NSString stringWithUTF8String:nihongo]; + [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; // Test some arabic char arabic[] = { 0xd9, 0x83, 0xd8, 0xa7, 0xd9, 0x83, 0xd8, 0xa7, 0x00 }; - [dict gtm_setObjectAndKey:[NSString stringWithUTF8String:arabic]]; + value = [NSString stringWithUTF8String:arabic]; + [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; } else if ([binding isEqualToString:NSRepresentedFilenameBinding]) { // This handles all path bindings - [dict gtm_setObjectAndKey:@"/happy"]; - [dict gtm_setObjectAndKey:@"/"]; + [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 }; - [dict gtm_setObjectAndKey:[NSString stringWithUTF8String:a_not_alpha]]; + 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 }; - [dict gtm_setObjectAndKey:[NSString stringWithUTF8String:hangugo]]; + 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 }; - [dict gtm_setObjectAndKey:[NSString stringWithUTF8String:nihongo]]; + 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 }; - [dict gtm_setObjectAndKey:[NSString stringWithUTF8String:arabic]]; - } else if ([binding isEqualToString:NSMaximumRecentsBinding] || - [binding isEqualToString:NSRowHeightBinding]) { - // This handles all int value bindings - [dict gtm_setObjectAndKey:[NSNumber numberWithInt:0]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithInt:-1]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithInt:INT16_MAX]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithInt:INT16_MIN]]; + 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] || @@ -198,39 +291,57 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, [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 - [dict gtm_setObjectAndKey:[NSNumber numberWithFloat:0]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithFloat:FLT_MAX]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithFloat:-FLT_MAX]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithFloat:FLT_MIN]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithFloat:-FLT_MIN]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithFloat:FLT_EPSILON]]; - [dict gtm_setObjectAndKey:[NSNumber numberWithFloat:-FLT_EPSILON]]; + 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 - [dict gtm_setObjectAndKey:[NSColor colorWithCalibratedWhite:1.0 alpha:1.0]]; - [dict gtm_setObjectAndKey:[NSColor colorWithCalibratedWhite:1.0 alpha:0.0]]; - [dict gtm_setObjectAndKey:[NSColor colorWithCalibratedWhite:1.0 alpha:0.5]]; - [dict gtm_setObjectAndKey:[NSColor colorWithCalibratedRed:0.5 green:0.5 - blue:0.5 alpha:0.5]]; - [dict gtm_setObjectAndKey:[NSColor colorWithDeviceCyan:0.25 magenta:0.25 - yellow:0.25 black:0.25 - alpha:0.25]]; + 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 - [dict gtm_setObjectAndKey:[NSFont boldSystemFontOfSize:[NSFont systemFontSize]]]; - [dict gtm_setObjectAndKey:[NSFont toolTipsFontOfSize:[NSFont smallSystemFontSize]]]; - [dict gtm_setObjectAndKey:[NSFont labelFontOfSize:144.0]]; + 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 - [dict gtm_setObjectAndKey:[NSArray array]]; + value = [NSArray array]; + [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; } else if ([binding isEqualToString:NSTargetBinding]) { - [dict gtm_setObjectAndKey:[NSNull null]]; + value = [NSNull null]; + [array addObject:[GTMBindingUnitTestData testWithIdentityValue:value]]; } else { _GTMDevLog(@"Skipped Binding: %@ for %@", binding, self); // COV_NF_LINE } - return dict; + return array; } - (BOOL)gtm_unitTestIsEqualTo:(id)value { @@ -239,13 +350,6 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, @end -@implementation NSMutableDictionary (GTMUnitTestingAdditions) -// Sets an object and a key to the same value in a dictionary. -- (void)gtm_setObjectAndKey:(id)objectAndKey { - [self setObject:objectAndKey forKey:objectAndKey]; -} -@end - #pragma mark - #pragma mark All the special AppKit Bindings issues below @@ -267,10 +371,17 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, @implementation NSScroller (GTMBindingUnitTestingAdditions) - (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - // rdar://5849154 - NSScroller exposes binding with no value class for NSValueBinding - [array addObject:NSValueBinding]; - // rdar://5849236 - NSScroller exposes binding for NSFontBinding - [array addObject:NSFontBinding]; + 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 ([GTMSystemVersion isBuildLessThanOrEqualTo:kGTMSystemBuild10_6_0_WWDC]) { + // Broken on SnowLeopard WWDC and below + // rdar://5849236 - NSScroller exposes binding for NSFontBinding + [array addObject:NSFontBinding]; + } return array; } @end @@ -289,13 +400,22 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, return array; } -- (NSMutableDictionary*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding { - NSMutableDictionary *dict = [super gtm_unitTestExposedBindingsTestValues:binding]; +- (NSMutableArray *)gtm_unitTestExposedBindingsTestValues:(NSString*)binding { + NSMutableArray *array = [super gtm_unitTestExposedBindingsTestValues:binding]; if ([binding isEqualToString:NSAlignmentBinding]) { - // rdar://5851487 - If NSAlignmentBinding for a NSTextField is set to -1 and then got it returns 7 - [dict setObject:[NSNumber numberWithInt:7] forKey:[NSNumber numberWithInt:-1]]; + if ([GTMSystemVersion isBuildLessThanOrEqualTo:kGTMSystemBuild10_6_0_WWDC]) { + // rdar://5851487 - If NSAlignmentBinding for a NSTextField is set to -1 and then got it returns 7 + GTMBindingUnitTestData *dataToRemove = + [GTMBindingUnitTestData testWithValue:[NSNumber numberWithInt:-1] + expecting:[NSNumber numberWithInt:NSNaturalTextAlignment]]; + [array removeObject:dataToRemove]; + GTMBindingUnitTestData *dataToAdd = + [GTMBindingUnitTestData testWithValue:[NSNumber numberWithInt:-1] + expecting:[NSNumber numberWithInt:7]]; + [array addObject:dataToAdd]; + } } - return dict; + return array; } @end @@ -304,21 +424,15 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, @implementation NSSearchField (GTMBindingUnitTestingAdditions) -- (NSMutableDictionary*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding { - NSMutableDictionary *dict = [super gtm_unitTestExposedBindingsTestValues:binding]; -#if !__LP64__ - if ([binding isEqualToString:NSAlignmentBinding]) { - // rdar://5851491 - Setting NSAlignmentBinding of search field to NSCenterTextAlignment broken - // This appears to not be a bug in 64 bit. Strange. - [dict setObject:[NSNumber numberWithInt:NSNaturalTextAlignment] - forKey:[NSNumber numberWithInt:NSCenterTextAlignment]]; - } -#endif - return dict; -} - - (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://5851491 - Setting NSAlignmentBinding of search field to NSCenterTextAlignment broken + // Broken on 10.5.5 and below. + [array addObject:NSAlignmentBinding]; + } // Not KVC Compliant [array addObject:NSPredicateBinding]; return array; @@ -367,8 +481,11 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, - (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - // rdar://5849684 - NSTableView should throw exception when attempting to set NSFontBinding - [array addObject:NSFontBinding]; + if ([GTMSystemVersion isBuildLessThanOrEqualTo:kGTMSystemBuild10_6_0_WWDC]) { + // rdar://6288332 - NSTableView does not respond to NSFontBinding + // Broken on 10.5, and SnowLeopard WWDC + [array addObject:NSFontBinding]; + } // Not KVC Compliant [array addObject:NSContentBinding]; [array addObject:NSDoubleClickTargetBinding]; @@ -386,8 +503,10 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, - (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - //rdar://5849335 - NSTextView only partially KVC compliant for key NSAttributedStringBinding - [array addObject:NSAttributedStringBinding]; + if ([GTMSystemVersion isBuildLessThanOrEqualTo:kGTMSystemBuild10_6_0_WWDC]) { + //rdar://5849335 - NSTextView only partially KVC compliant for key NSAttributedStringBinding + [array addObject:NSAttributedStringBinding]; + } // Not KVC Compliant [array addObject:NSDataBinding]; [array addObject:NSValueURLBinding]; @@ -404,8 +523,10 @@ BOOL GTMDoExposedBindingsFunctionCorrectly(NSObject *object, - (NSMutableArray*)gtm_unitTestExposedBindingsToIgnore { NSMutableArray *array = [super gtm_unitTestExposedBindingsToIgnore]; - // rdar://5849248 - NSTabView exposes binding with no value class for NSSelectedIdentifierBinding - [array addObject:NSSelectedIdentifierBinding]; + if ([GTMSystemVersion isBuildLessThanOrEqualTo:kGTMSystemBuild10_6_0_WWDC]) { + // rdar://5849248 - NSTabView exposes binding with no value class for NSSelectedIdentifierBinding + [array addObject:NSSelectedIdentifierBinding]; + } // Not KVC Compliant [array addObject:NSSelectedIndexBinding]; [array addObject:NSSelectedLabelBinding]; |