private void callTest(boolean useExecutor) { int testInt = 10; String testStr = StringUtils.makeRandomString(10); List<TestImp> listeners = new ArrayList<>(TEST_QTY); ListenerHelper<TestInterface> ch = makeListenerHelper(TestInterface.class); for (int i = 0; i < TEST_QTY; i++) { TestImp ti = new TestImp(); listeners.add(ti); if (useExecutor) { ch.addListener(ti, SameThreadSubmitterExecutor.instance()); } else { ch.addListener(ti); } } ch.call().call(testInt, testStr); Iterator<TestImp> it = listeners.iterator(); while (it.hasNext()) { TestImp ti = it.next(); assertEquals(testInt, ti.lastInt); assertEquals(testStr, ti.lastString); } }
@Test public void getSubscribedListenersTest() { ListenerHelper<TestInterface> lh = makeListenerHelper(TestInterface.class); assertTrue(lh.getSubscribedListeners().isEmpty()); TestImp ti = new TestImp(); lh.addListener(ti); assertTrue(lh.getSubscribedListeners().contains(ti)); lh.removeListener(ti); assertTrue(lh.getSubscribedListeners().isEmpty()); }
@Test public void getSubscribedListenersMixedExecutionTest() { ListenerHelper<TestInterface> lh = makeListenerHelper(TestInterface.class); TestImp ti1 = new TestImp(); TestImp ti2 = new TestImp(); lh.addListener(ti1); lh.addListener(ti2, SameThreadSubmitterExecutor.instance()); assertTrue(lh.getSubscribedListeners().contains(ti1)); assertTrue(lh.getSubscribedListeners().contains(ti2)); }
int secondCallInt = 1337; String secondCallStr = StringUtils.makeRandomString(10); final TestImp addedListener = new TestImp(); final ListenerHelper<TestInterface> ch = makeListenerHelper(TestInterface.class); TestImp ti = new TestImp() { @Override public void call(int i, String s) { ch.addListener(new TestImp()); ch.addListener(new TestImp()); TestImp lastListener = new TestImp(); ch.addListener(lastListener);
int secondCallInt = 1337; String secondCallStr = StringUtils.makeRandomString(10); final TestImp removedListener = new TestImp(); final ListenerHelper<TestInterface> ch = makeListenerHelper(TestInterface.class); TestImp ti = new TestImp() { @Override public void call(int i, String s) { ch.addListener(new TestImp(), executor); ch.addListener(new TestImp(), executor); ch.addListener(ti, executor); ch.addListener(new TestImp(), executor); ch.addListener(new TestImp(), executor); ch.addListener(removedListener, executor); ch.addListener(new TestImp(), executor); ch.addListener(new TestImp(), executor); TestImp lastListener = new TestImp(); ch.addListener(lastListener, executor);
@Test public void listenerExceptionTest() { int testInt = 10; String testStr = StringUtils.makeRandomString(10); TestExceptionHandler teh = new TestExceptionHandler(); ExceptionUtils.setThreadExceptionHandler(teh); final RuntimeException e = new SuppressedStackRuntimeException(); ListenerHelper<TestInterface> ch = makeListenerHelper(TestInterface.class); ch.addListener(new TestInterface() { @Override public void call(int i, String s) { throw e; } }); TestImp ti = new TestImp(); ch.addListener(ti); ch.call().call(testInt, testStr); // verify exception was handled assertEquals(1, teh.getCallCount()); assertEquals(Thread.currentThread(), teh.getCalledWithThread()); assertEquals(e, teh.getLastThrowable()); // verify other listeners were called assertEquals(testInt, ti.lastInt); assertEquals(testStr, ti.lastString); }
private void removeListenerTest(Executor executor) { ListenerHelper<TestInterface> ch = makeListenerHelper(TestInterface.class); TestImp ti = new TestImp(); assertFalse(ch.removeListener(null)); ch.addListener(ti, executor); assertFalse(ch.removeListener(null)); assertFalse(ch.removeListener(new TestImp())); assertEquals(1, ch.registeredListenerCount()); assertTrue(ch.removeListener(ti)); assertEquals(0, ch.registeredListenerCount()); ch.call().call(10, StringUtils.makeRandomString(10)); // verify not called assertNull(ti.lastString); }
@Test public void registeredListenerCountTest() { ListenerHelper<TestInterface> ch = makeListenerHelper(TestInterface.class); assertEquals(0, ch.registeredListenerCount()); ch.addListener(new TestImp()); assertEquals(1, ch.registeredListenerCount()); ch.addListener(new TestImp(), SameThreadSubmitterExecutor.instance()); assertEquals(2, ch.registeredListenerCount()); }
@Test public void addListenerTest() { ListenerHelper<TestInterface> ch = makeListenerHelper(TestInterface.class); TestImp ti = new TestImp(); ch.addListener(ti); assertEquals(1, ch.registeredListenerCount()); if (ch instanceof DefaultExecutorListenerHelper) { // special case for extending class assertTrue(Pair.containsLeft(ch.executorListeners, ti)); } else { assertTrue(ch.inThreadListeners.contains(ti)); } }
@Test public void getSubscribedListenersExecutorOnlyTest() { ListenerHelper<TestInterface> lh = makeListenerHelper(TestInterface.class); TestImp ti = new TestImp(); lh.addListener(ti, SameThreadSubmitterExecutor.instance()); assertTrue(lh.getSubscribedListeners().contains(ti)); }
@Test public void clearListenersTest() { ListenerHelper<TestInterface> ch = makeListenerHelper(TestInterface.class); ch.addListener(new TestImp()); ch.addListener(new TestImp(), SameThreadSubmitterExecutor.instance()); assertEquals(2, ch.registeredListenerCount()); ch.clearListeners(); assertEquals(0, ch.registeredListenerCount()); }
@Test public void getSubscribedListenersInThreadOnlyTest() { ListenerHelper<TestInterface> lh = makeListenerHelper(TestInterface.class); TestImp ti = new TestImp(); lh.addListener(ti); assertTrue(lh.getSubscribedListeners().contains(ti)); }
@Test public void addListenerWithExecutorTest() { ListenerHelper<TestInterface> ch = makeListenerHelper(TestInterface.class); TestImp ti = new TestImp(); Executor executor = new SameThreadSubmitterExecutor(); ch.addListener(ti, executor); assertEquals(1, ch.registeredListenerCount()); assertTrue(Pair.containsLeft(ch.executorListeners, ti)); }