### Question:
ProgressListenerCallbackExecutor { public static ProgressListenerCallbackExecutor wrapListener(ProgressListener listener) { return listener == null ? null : new ProgressListenerCallbackExecutor(listener); } ProgressListenerCallbackExecutor(ProgressListener listener);  ProgressListenerCallbackExecutor(); static Future<?> progressChanged(final ProgressListener listener,
            final ProgressEvent progressEvent); void progressChanged(final ProgressEvent progressEvent); static ProgressListenerCallbackExecutor wrapListener(ProgressListener listener);  }### Answer:
@Test public void testWrapListener() throws InterruptedException { final List<ProgressEvent> capturedEvents = new ArrayList<ProgressEvent>(); final List<Long> threadIds = new ArrayList<Long>(); threadIds.add(Thread.currentThread().getId()); ProgressListener pl = new ProgressListener() { @Override public void progressChanged(ProgressEvent progressEvent) { threadIds.add(Thread.currentThread().getId()); capturedEvents.add(progressEvent); } }; ProgressEvent toSend = new ProgressEvent(0); ProgressListenerCallbackExecutor.wrapListener(pl); pl.progressChanged(toSend); ExecutorService service = ProgressListenerCallbackExecutor.getExecutorService(); service.shutdown(); service.awaitTermination(10, TimeUnit.SECONDS); ProgressListenerCallbackExecutor.executor = ProgressListenerCallbackExecutor .createNewExecutorService(); assertEquals(threadIds.size(), 2); assertEquals(capturedEvents.size(), 1); assertSame(capturedEvents.get(0), toSend); }