/* Test/example program for the base library Copyright (C) 2005 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is part of the GNUstep Base Library. */ /* The simplest of tests for the NSNotification and NSNotificationCenter classes. These tests should be expanded. (The Tcp*Port classes, however, do test the notification mechanism further.) */ #include @interface Observer : NSObject - (void) gotNotificationFoo: not; @end @implementation Observer - (void) gotNotificationFoo: (NSNotification*)not { printf ("Got %s\n", [[not name] cString]); } - (void) gotNotificationFooNoObject: (NSNotification*)not { printf ("Got %s without object\n", [[not name] cString]); } @end id foo = @"NotificationTestFoo"; int main () { id o1; id observer1; id arp; arp = [NSAutoreleasePool new]; NSLog(@"Make string object"); o1 = [NSString new]; NSLog(@"Make Observer object"); observer1 = [Observer new]; NSLog(@"Add observer to process centre"); [[NSNotificationCenter defaultCenter] addObserver: observer1 selector: @selector(gotNotificationFoo:) name: foo object: o1]; NSLog(@"Add observer to distributed centre"); [[NSDistributedNotificationCenter defaultCenter] addObserver: observer1 selector: @selector(gotNotificationFoo:) name: foo object: o1]; NSLog(@"Add observer to process centre"); [[NSNotificationCenter defaultCenter] addObserver: observer1 selector: @selector(gotNotificationFooNoObject:) name: foo object: nil]; NSLog(@"Add observer to distributed centre"); [[NSDistributedNotificationCenter defaultCenter] addObserver: observer1 selector: @selector(gotNotificationFooNoObject:) name: foo object: nil]; NSLog(@"Post to process centre"); /* This will cause two messages to be printed, one for each request above. */ [[NSNotificationCenter defaultCenter] postNotificationName: foo object: o1]; NSLog(@"Post to distributed centre"); /* This will cause two messages to be printed, one for each request above. */ [[NSDistributedNotificationCenter defaultCenter] postNotificationName: foo object: o1]; NSLog(@"Post to process centre"); /* This will cause one message to be printed. */ [[NSNotificationCenter defaultCenter] postNotificationName: foo object: nil]; NSLog(@"Post to distributed centre"); /* This will cause one message to be printed. */ [[NSDistributedNotificationCenter defaultCenter] postNotificationName: foo object: nil]; NSLog(@"Remove observer from process centre"); [[NSNotificationCenter defaultCenter] removeObserver: observer1 name: nil object: o1]; /* This will cause message to be printed. */ [[NSNotificationCenter defaultCenter] postNotificationName: foo object: o1]; [[NSNotificationCenter defaultCenter] removeObserver: observer1]; /* This will cause no messages to be printed. */ [[NSNotificationCenter defaultCenter] postNotificationName: foo object: o1]; [[NSDistributedNotificationCenter defaultCenter] addObserver: observer1 selector: @selector(gotNotificationFooNoObject:) name: foo object: nil]; [[NSDistributedNotificationCenter defaultCenter] postNotificationName: foo object: @"hello"]; [arp release]; exit (0); }