aboutsummaryrefslogtreecommitdiff
path: root/UnitTesting/GTMUnitTestingBindingTest.m
diff options
context:
space:
mode:
Diffstat (limited to 'UnitTesting/GTMUnitTestingBindingTest.m')
-rw-r--r--UnitTesting/GTMUnitTestingBindingTest.m117
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
+