diff --git a/Foundation/CPKeyValueObserving.j b/Foundation/CPKeyValueObserving.j index a08100481..c457baba5 100644 --- a/Foundation/CPKeyValueObserving.j +++ b/Foundation/CPKeyValueObserving.j @@ -360,7 +360,7 @@ var kvoNewAndOld = CPKeyValueObservingOptionNew|CPKeyValueObservingOptionOld, newValue = [CPNull null]; var changes = [CPDictionary dictionaryWithObject:newValue forKey:CPKeyValueChangeNewKey]; - [anObserver observeValueForKeyPath:aPath ofObject:self change:changes context:aContext]; + [anObserver observeValueForKeyPath:aPath ofObject:_targetObject change:changes context:aContext]; } } diff --git a/Tests/AppKit/CPKeyValueObservingTest.j b/Tests/AppKit/CPKeyValueObservingTest.j new file mode 100644 index 000000000..593bd01e0 --- /dev/null +++ b/Tests/AppKit/CPKeyValueObservingTest.j @@ -0,0 +1,62 @@ +@import + +@implementation CPKeyValueObservingTest : OJTestCase +{ + CPString _lastKeyPath; + id _lastObject; + CPDictionary _lastChange; + id _lastContext; +} + +- (void)setup +{ + _lastKeyPath = _lastObject = _lastChange = _lastContext = nil; +} + +- (void)testInitialObserving +{ + var tester = [ObservingTester testerWithCheese:@"CHEESE!"]; + [tester addObserver:self forKeyPath:@"cheese" options:CPKeyValueObservingOptionNew | CPKeyValueObservingOptionInitial context:nil]; + + [self assert:@"cheese" equals:_lastKeyPath]; + [self assert:tester equals:_lastObject]; + [self assert:[CPDictionary dictionaryWithObject:@"CHEESE!" forKey:CPKeyValueChangeNewKey] equals:_lastChange]; + [self assert:nil equals:_lastContext]; +} + +- (void)observeValueForKeyPath:(CPString)aKeyPath + ofObject:(id)anObject + change:(CPDictionary)aChange + context:(id)aContext +{ + _lastKeyPath = aKeyPath; + _lastObject = anObject; + _lastChange = aChange; + _lastContext = aContext; +} + +@end + +@implementation ObservingTester : CPObject +{ + id cheese; +} + ++ (id)testerWithCheese:(id)aCheese +{ + var tester = [[self alloc] init]; + [tester setCheese:aCheese]; + return tester; +} + +- (void)setCheese:(id)aCheese +{ + cheese = aCheese; +} + +- (id)cheese +{ + return cheese; +} + +@end \ No newline at end of file