package ns.foundation;
import ns.foundation.NSDictionary;
import ns.foundation.NSNotification;
import ns.foundation.NSNotificationCenter;
import ns.foundation.NSSelectable;
import ns.foundation.NSSelector;
public class TestNSNotificationCenter extends BaseTestCase {
public static class TestObserver implements NSSelectable {
boolean invoked = false;
Object userInfo = null;
public void invoked(NSNotification notification) {
invoked = true;
userInfo = notification.userInfo();
}
}
public void testDefaultCenter() {
NSNotificationCenter nc = NSNotificationCenter.defaultCenter();
assertNotNull(nc);
}
public void testAddObserver() {
NSNotificationCenter nc = NSNotificationCenter.defaultCenter();
TestObserver observer = new TestObserver();
nc.addObserver(observer, new NSSelector<Void>("invoked", new Class[] { NSNotification.class }), "test", null);
try {
nc.addObserver(observer, new NSSelector<Void>("invoked", new Class[] { Object.class }), "test", null);
fail("IllegalArgumentException expected");
} catch (IllegalArgumentException e) {
}
}
public void testPostNotificationNSNotification() {
NSNotificationCenter nc = NSNotificationCenter.defaultCenter();
TestObserver observer = new TestObserver();
nc.addObserver(observer, new NSSelector<Void>("invoked", new Class[] { NSNotification.class }), "test", null);
NSNotification notification = new NSNotification("test", null);
nc.postNotification(notification);
assertTrue(observer.invoked);
}
public void testPostNotificationStringObject() {
NSNotificationCenter nc = NSNotificationCenter.defaultCenter();
TestObserver observer = new TestObserver();
nc.addObserver(observer, new NSSelector<Void>("invoked", new Class[] { NSNotification.class }), "test", null);
nc.postNotification("test", this);
assertTrue(observer.invoked);
}
public void testPostNotificationStringObjectNSDictionaryOfStringObject() {
NSNotificationCenter nc = NSNotificationCenter.defaultCenter();
TestObserver observer = new TestObserver();
nc.addObserver(observer, new NSSelector<Void>("invoked", new Class[] { NSNotification.class }), "test", null);
NSDictionary<String, Object> userInfo = new NSDictionary<String, Object>("value", "key");
nc.postNotification("test", this, userInfo);
assertTrue(observer.invoked);
assertEquals(userInfo, observer.userInfo);
}
public void testRemoveObserverObject() {
NSNotificationCenter nc = NSNotificationCenter.defaultCenter();
TestObserver observer = new TestObserver();
nc.addObserver(observer, new NSSelector<Void>("invoked", new Class[] { NSNotification.class }), "test", null);
nc.removeObserver(observer);
nc.postNotification("test", this);
assertFalse(observer.invoked);
}
public void testRemoveObserverObjectStringObject() {
NSNotificationCenter nc = NSNotificationCenter.defaultCenter();
TestObserver observer1 = new TestObserver();
TestObserver observer2 = new TestObserver();
nc.addObserver(observer1, new NSSelector<Void>("invoked", new Class[] { NSNotification.class }), "test", null);
nc.addObserver(observer2, new NSSelector<Void>("invoked", new Class[] { NSNotification.class }), "test", null);
nc.removeObserver(observer2, "test", null);
nc.postNotification("test", this);
assertTrue(observer1.invoked);
assertFalse(observer2.invoked);
}
}