package org.threadly.concurrent; import static org.junit.Assert.*; import java.util.concurrent.ExecutionException; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.threadly.ThreadlyTestUtil; import org.threadly.concurrent.future.ListenableFuture; @SuppressWarnings("javadoc") public class SameThreadSubmitterExecutorTest extends SubmitterExecutorInterfaceTest { private SameThreadSubmitterExecutor executor; @BeforeClass public static void classSetup() { ThreadlyTestUtil.setIgnoreExceptionHandler(); } @Before public void setup() { executor = new SameThreadSubmitterExecutor(); } @After public void cleanup() { executor = null; } @Override protected SubmitterExecutorFactory getSubmitterExecutorFactory() { return new ExecutorFactory(); } @Test @Override public void executeTest() { TestRunnable tr = new TestRunnable(); executor.execute(tr); assertTrue(tr.ranOnce()); assertTrue(tr.executedThread == Thread.currentThread()); super.executeTest(); } @Test @Override public void submitRunnableTest() throws InterruptedException, ExecutionException { TestRunnable tr = new TestRunnable(); ListenableFuture<?> future = executor.submit(tr); assertTrue(tr.ranOnce()); assertTrue(tr.executedThread == Thread.currentThread()); assertTrue(future.isDone()); assertTrue(future.get() == null); super.submitRunnableTest(); } @Test @Override public void submitRunnableWithResultTest() throws InterruptedException, ExecutionException { Object result = new Object(); TestRunnable tr = new TestRunnable(); ListenableFuture<?> future = executor.submit(tr, result); assertTrue(tr.ranOnce()); assertTrue(tr.executedThread == Thread.currentThread()); assertTrue(future.isDone()); assertTrue(future.get() == result); super.submitRunnableWithResultTest(); } @Test public void staticInstanceTest() { assertNotNull(SameThreadSubmitterExecutor.instance()); } private static class TestRunnable extends org.threadly.test.concurrent.TestRunnable { private Thread executedThread = null; @Override public void handleRunStart() { executedThread = Thread.currentThread(); } } private static class ExecutorFactory implements SubmitterExecutorFactory { @Override public SubmitterExecutor makeSubmitterExecutor(int poolSize, boolean prestartIfAvailable) { return new SameThreadSubmitterExecutor(); } @Override public void shutdown() { // ignored } } }