aboutsummaryrefslogtreecommitdiff
path: root/Foundation/GTMNSObject+KeyValueObservingTest.m
diff options
context:
space:
mode:
authorGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2010-03-22 18:05:14 +0000
committerGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2010-03-22 18:05:14 +0000
commita2e257158f491a0428926d0bf99e9200d3e0617f (patch)
treef68f6322039b389133b9e04b546abef63b7d35a8 /Foundation/GTMNSObject+KeyValueObservingTest.m
parent4d67e716e5a2b1b50d5eb09db4f19fd7c1ba04ae (diff)
[Author: dmaclach]
Added some KVO debugging help. Specifically forces can access instance variables by KVO to NO in debug mode. R=thomasvl DELTA=340 (269 added, 21 deleted, 50 changed)
Diffstat (limited to 'Foundation/GTMNSObject+KeyValueObservingTest.m')
-rw-r--r--Foundation/GTMNSObject+KeyValueObservingTest.m65
1 files changed, 65 insertions, 0 deletions
diff --git a/Foundation/GTMNSObject+KeyValueObservingTest.m b/Foundation/GTMNSObject+KeyValueObservingTest.m
index ec35bc3..03cbebf 100644
--- a/Foundation/GTMNSObject+KeyValueObservingTest.m
+++ b/Foundation/GTMNSObject+KeyValueObservingTest.m
@@ -50,6 +50,7 @@
}
- (void)testSingleChange {
+ count_ = 0;
[dict_ gtm_addObserver:self
forKeyPath:@"key"
selector:@selector(observeValueChange:)
@@ -65,6 +66,22 @@
STAssertEquals(count_, (int32_t)1, nil);
}
+- (void)testStopObservingKeyPaths {
+ count_ = 0;
+ [dict_ gtm_addObserver:self
+ forKeyPath:@"key"
+ selector:@selector(observeValueChange:)
+ userInfo:@"userInfo"
+ options:NSKeyValueObservingOptionNew];
+ expectedValue_ = @"bar";
+ [dict_ setObject:expectedValue_ forKey:@"key"];
+ STAssertEquals(count_, (int32_t)1, nil);
+ [self gtm_stopObservingKeyPaths];
+ [dict_ setObject:@"foo" forKey:@"key"];
+ STAssertEquals(count_, (int32_t)1, nil);
+}
+
+
- (void)testRemoving {
[GTMUnitTestDevLogDebug expectPattern:@"-\\[GTMNSObject_KeyValueObservingTest"
@" testRemoving\\] was not observing.*"];
@@ -107,3 +124,51 @@
}
@end
+
+#if GTM_PERFORM_KVO_CHECKS
+@interface GTMNSObject_KeyValueObservingChecksTest: GTMTestCase {
+ @private
+ id value_;
+ id _value2;
+ __weak NSArray *value3_;
+ __weak NSString *value4;
+}
+- (NSString *)value4;
+@end
+
+@implementation GTMNSObject_KeyValueObservingChecksTest
+
+- (void)testAddingObserver {
+ [GTMUnitTestDevLogDebug expectPattern:@"warning:.*"];
+ [self addObserver:self forKeyPath:@"value_" options:0 context:NULL];
+ [GTMUnitTestDevLogDebug expectPattern:@"warning:.*"];
+ [self addObserver:self forKeyPath:@"_value2" options:0 context:NULL];
+ value3_ = [NSArray arrayWithObject:@"foo"];
+ NSIndexSet *set = [NSIndexSet indexSetWithIndex:0];
+ [GTMUnitTestDevLogDebug expectPattern:@"warning:.*"];
+ [value3_ addObserver:self toObjectsAtIndexes:set forKeyPath:@"_fronttest"
+ options:0 context:NULL];
+ [GTMUnitTestDevLogDebug expectPattern:@"warning:.*"];
+ [value3_ addObserver:self toObjectsAtIndexes:set forKeyPath:@"backtest_"
+ options:0 context:NULL];
+#if DEBUG
+ // Should only throw in debug
+ STAssertThrows([self valueForKey:@"value_"], nil);
+#else
+ STAssertNoThrow([self valueForKey:@"value_"], nil);
+#endif
+ value4 = @"Hello";
+ STAssertEqualObjects([self valueForKey:@"value4"], @"Hello", nil);
+ [self removeObserver:self forKeyPath:@"value_"];
+ [self removeObserver:self forKeyPath:@"_value2"];
+ [value3_ removeObserver:self fromObjectsAtIndexes:set forKeyPath:@"_fronttest"];
+ [value3_ removeObserver:self fromObjectsAtIndexes:set forKeyPath:@"backtest_"];
+}
+
+- (NSString *)value4 {
+ return value4;
+}
+@end
+
+#endif // GTM_PERFORM_KVO_CHECKS
+