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 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); }