/* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
*
*/
package org.puredata.core.utils;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.puredata.core.PdBase;
import org.puredata.core.PdListener;
/**
*
* Tests for {@link PdDispatcher}.
*
* @author Peter Brinkmann (peter.brinkmann@gmail.com)
*
*/
public class PdDispatcherTest {
private PdDispatcher dispatcher;
private PdListener listener1, listener2;
@Before
public void setUp() {
listener1 = EasyMock.createStrictMock(PdListener.class);
listener2 = EasyMock.createStrictMock(PdListener.class);
dispatcher = new PdDispatcher() {
@Override
public void print(String s) {
// Nothing to test here.
}
};
}
@After
public void tearDown() {
dispatcher.release();
PdBase.release();
}
@Test
public void testSubscription() {
PdBase.setReceiver(dispatcher);
assertFalse(PdBase.exists("foo"));
assertFalse(PdBase.exists("bar"));
dispatcher.addListener("foo", listener1);
assertTrue(PdBase.exists("foo"));
assertFalse(PdBase.exists("bar"));
dispatcher.addListener("bar", listener2);
assertTrue(PdBase.exists("foo"));
assertTrue(PdBase.exists("bar"));
dispatcher.addListener("foo", listener2);
assertTrue(PdBase.exists("foo"));
assertTrue(PdBase.exists("bar"));
dispatcher.removeListener("foo", listener1);
assertTrue(PdBase.exists("foo"));
assertTrue(PdBase.exists("bar"));
dispatcher.removeListener("bar", listener1);
assertTrue(PdBase.exists("foo"));
assertTrue(PdBase.exists("bar"));
dispatcher.removeListener("bar", listener2);
assertTrue(PdBase.exists("foo"));
assertFalse(PdBase.exists("bar"));
dispatcher.removeListener("foo", listener2);
assertFalse(PdBase.exists("foo"));
assertFalse(PdBase.exists("bar"));
}
@Test
public void testCallbacks() {
dispatcher.addListener("foo", listener1);
dispatcher.addListener("bar", listener2);
listener1.receiveBang("foo");
listener2.receiveBang("bar");
listener1.receiveFloat("foo", 0f);
listener2.receiveFloat("bar", 1.5f);
listener1.receiveSymbol("foo", "hund");
listener2.receiveSymbol("bar", "katze");
listener1.receiveList("foo", 0f, "call", 3f, "me", 7f, "ishmael");
listener2.receiveList("bar", "test", 1f, 2f);
listener1.receiveMessage("foo", "dest", -3f);
listener2.receiveMessage("bar", "zzz", "eggs");
EasyMock.replay(listener1, listener2);
dispatcher.receiveBang("foo");
dispatcher.receiveBang("bar");
dispatcher.receiveFloat("foo", 0f);
dispatcher.receiveFloat("bar", 1.5f);
dispatcher.receiveSymbol("foo", "hund");
dispatcher.receiveSymbol("bar", "katze");
dispatcher.receiveList("foo", 0f, "call", 3f, "me", 7f, "ishmael");
dispatcher.receiveList("bar", "test", 1f, 2f);
dispatcher.receiveMessage("foo", "dest", -3f);
dispatcher.receiveMessage("bar", "zzz", "eggs");
dispatcher.receiveBang("spam");
EasyMock.verify(listener1, listener2);
}
@Test
public void testMultipleListeners() {
dispatcher.addListener("spam", listener1);
dispatcher.addListener("spam", listener2);
listener1.receiveBang("spam");
listener2.receiveBang("spam");
EasyMock.replay(listener1, listener2);
dispatcher.receiveBang("spam");
EasyMock.verify(listener1, listener2);
}
}