/** * Adds a listener to be executed on the next {@link #call()} to this instance. This is the same * as adding a listener and providing null for the {@link Executor}. * * @param listener Listener to be called when {@link #call()} is invoked */ public void addListener(T listener) { addListener(listener, null); }
/** * Adds a listener to be executed on the next {@link #call()} to this instance. This is the same * as adding a listener and providing null for the {@link Executor}. * * @param listener Listener to be called when {@link #call()} is invoked */ public void addListener(T listener) { addListener(listener, null); }
private static <T> T setupHelper(ListenerHelper<T> lh, T ... instances) { for (T instance : instances) { lh.addListener(instance); } return lh.call(); } }
@Override public void addListener(T listener, Executor executor) { if (listener == null) { return; } if (executor == null) { executor = taskDistributor.getExecutorForKey(listener); } super.addListener(listener, executor); } }
private static <T> T setupHelper(ListenerHelper<T> lh, T ... instances) { for (T instance : instances) { lh.addListener(instance); } return lh.call(); } }
@Override public void addListener(T listener, Executor executor) { if (listener == null) { return; } if (executor == null) { executor = taskDistributor.getExecutorForKey(listener); } super.addListener(listener, executor); } }
@Override public void call(int i, String s) { super.call(i, s); ch.addListener(addedListener); } };
@Test public void addNullListenerTest() { makeListenerHelper(TestInterface.class).addListener(null); // no exception thrown }
@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)); }
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 getSubscribedListenersInThreadOnlyTest() { ListenerHelper<TestInterface> lh = makeListenerHelper(TestInterface.class); TestImp ti = new TestImp(); lh.addListener(ti); assertTrue(lh.getSubscribedListeners().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 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 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()); }
TestMultipleFunctionImp ti = new TestMultipleFunctionImp(); listeners.add(ti); ch.addListener(ti);
@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 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)); }
@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); }