package com.yoursway.utils.tests.broadcaster; import static com.yoursway.utils.broadcaster.BroadcasterFactory.newBroadcaster; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import com.yoursway.utils.broadcaster.Broadcaster; import com.yoursway.utils.bugs.Bugs; import com.yoursway.utils.bugs.NopBugHandler; import com.yoursway.utils.bugs.Severity; public class BroadcasterSimpleTests { private Broadcaster<MyListener> broadcaster; private MyProducer producer; private int calls = 0; @Before public void createBroadcaster() { broadcaster = newBroadcaster(MyListener.class); producer = new MyProducer(); } @Test public void canBeCalledWithoutListeners() throws Exception { broadcaster.fire().changed(producer); } @Test public void callsListener() throws Exception { MyListener myListener = new MyListener() { public void changed(MyProducer aProducer) { assertEquals(producer, aProducer); calls++; } }; broadcaster.addListener(myListener); assertEquals(0, calls); broadcaster.fire().changed(producer); assertEquals(1, calls); } @Test public void callsTwoListeners() throws Exception { MyListener myListener = new MyListener() { public void changed(MyProducer aProducer) { assertEquals(producer, aProducer); calls++; } }; MyListener myListener2 = new MyListener() { public void changed(MyProducer aProducer) { assertEquals(producer, aProducer); calls += 100; } }; broadcaster.addListener(myListener); broadcaster.addListener(myListener2); assertEquals(0, calls); broadcaster.fire().changed(producer); assertEquals(101, calls); } @Test public void catchesExceptions() throws Exception { MyListener myListener = new MyListener() { public void changed(MyProducer aProducer) { throw new AssertionError("Mua-ha-ha"); } }; MyListener myListener2 = new MyListener() { public void changed(MyProducer aProducer) { assertEquals(producer, aProducer); calls += 42; } }; broadcaster.addListener(myListener); broadcaster.addListener(myListener2); Bugs.setHandler(new NopBugHandler() { public void error(Severity severity, Throwable error, String details) { calls += 24; } }); assertEquals(0, calls); broadcaster.fire().changed(producer); assertEquals(42 + 24, calls); } }