blob: 82ef13c57b5466771b2555adec75e75a1e252c1d [file] [log] [blame]
/* APPLE LOCAL file radar 4582997 */
/* Test that property need not be declared in @implementation for it to be used. */
/* APPLE LOCAL radar 4899595 */
/* { dg-options "-fno-objc-new-property -mmacosx-version-min=10.5 -framework Cocoa" } */
/* { dg-do run { target *-*-darwin* } } */
#include <Foundation/Foundation.h>
@interface Foo : NSObject
{
@private
int _userDefined;
}
@property (ivar) int bar;
@property int userDefined;
@end
@implementation Foo
@property int bar;
- (void)setUserDefined:(int)f
{
_userDefined = f;
if (self.userDefined != _userDefined)
abort ();
}
- (int)userDefined
{
return _userDefined;
}
@end
@interface MyObserver : NSObject
@end
@implementation MyObserver
-(void)observeValueForKeyPath:(NSString*)keypath ofObject:obj change:(NSDictionary *)change context:(void *) context
{
# if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 || __OBJC2__)
printf("observing %s is now %d\n", [keypath UTF8String], ((Foo *)obj).bar);
#else
printf("observing %s is now %d\n", [keypath cString], ((Foo *)obj).bar);
#endif
}
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Foo *f = [[Foo alloc] init];
[f addObserver:[[MyObserver alloc] init] forKeyPath:@"bar" options:NSKeyValueObservingOptionNew context:0];
f.bar = 707;
f.bar = 808;
f.bar = 909;
f.userDefined = 707;
f.userDefined = 808;
f.userDefined = 909;
[pool release];
return 0;
}