diff options
Diffstat (limited to 'UnitTesting/GTMUnitTestingBindingTest.m')
-rw-r--r-- | UnitTesting/GTMUnitTestingBindingTest.m | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/UnitTesting/GTMUnitTestingBindingTest.m b/UnitTesting/GTMUnitTestingBindingTest.m new file mode 100644 index 0000000..c0ef93c --- /dev/null +++ b/UnitTesting/GTMUnitTestingBindingTest.m @@ -0,0 +1,117 @@ +// +// 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 <SenTestingKit/SenTestingKit.h> +#import "GTMUnitTestingTest.h" +#import "GTMNSObject+BindingUnitTesting.h" + +@interface GTMUnitTestingBindingTest : SenTestCase { + 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]; + NSEnumerator *subviewEnum = [subviews objectEnumerator]; + NSView *subview; + while ((subview = [subviewEnum nextObject])) { + 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]]; + [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]; +} + +- (NSMutableDictionary*)gtm_unitTestExposedBindingsTestValues:(NSString*)binding { + + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + [dict setObject:kGTMKeyThatIsntEqual forKey:kGTMKeyThatIsntEqual]; + return dict; +} + +- (Class)valueClassForBinding:(NSString*)binding { + return [binding isEqualTo:kGTMKeyWithNoClass] ? nil : [NSString class]; +} + +- (id)valueForKey:(NSString*)binding { + if ([binding isEqualTo:kGTMKeyWithNoValue]) { + [NSException raise:NSUndefinedKeyException format:nil]; + } + return @"foo"; +} + +- (void)setValue:(id)value forKey:(NSString*)binding { + if ([binding isEqualTo:kGTMKeyWeCantSet]) { + [NSException raise:NSUndefinedKeyException format:nil]; + } +} +@end + |