package org.oddjob.framework;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicBoolean;
import junit.framework.TestCase;
import org.oddjob.scheduling.MockExecutorService;
import org.oddjob.scheduling.MockFuture;
public class AsyncExecutionSupportTest extends TestCase {
private class OurExecutor extends MockExecutorService {
List<Runnable> submitted = new ArrayList<Runnable>();
@Override
public Future<?> submit(Runnable task) {
submitted.add(task);
return new MockFuture<Object>() {
};
}
}
public void testAddTwoJobs() {
OurExecutor executor = new OurExecutor();
final AtomicBoolean done = new AtomicBoolean();
AsyncExecutionSupport test = new AsyncExecutionSupport(new Runnable() {
@Override
public void run() {
done.set(true);
}
});
test.submitJob(executor, new Runnable() {
@Override
public void run() {
}
});
test.submitJob(executor, new Runnable() {
@Override
public void run() {
}
});
test.startWatchingJobs();
assertEquals(false, done.get());
executor.submitted.get(1).run();
assertEquals(false, done.get());
executor.submitted.get(0).run();
assertEquals(true, done.get());
}
public void testStopBeforeAnyJobsSubmitted() {
final AtomicBoolean done = new AtomicBoolean();
AsyncExecutionSupport test = new AsyncExecutionSupport(new Runnable() {
@Override
public void run() {
done.set(true);
}
});
test.startWatchingJobs();
assertEquals("done=" + done.get(), true, done.get());
}
}