BackgroundWorkerTest.java

package edu.hawaii.ics.yucheng;

import junit.framework.TestCase;

/**
 * Tests the BackgroundWorker class.
 */
public class BackgroundWorkerTest extends TestCase {

    class TestWorker extends BackgroundWorker<String, String> {

        boolean   error     = false;
        Exception exception = null;
        boolean   progress  = false;
        String    result    = null;


        @Override
        protected void processError(final Exception e) {
            exception = e;
            super.processError(e);
        }


        @Override
        protected void processProgress(final String p) {
            result = p;
            super.processProgress(p);
        }


        @Override
        protected String run() throws Exception {
            if (progress)
                sendProgress("Test Progress");
            if (error)
                throw new Exception("Test Exception");
            while (!isCancelled())
                Thread.yield();
            return "Test Result";
        }
    }


    /**
     * Tests the cancel method.
     * 
     * @throws Exception
     */
    public void testCancel() throws Exception {
        final TestWorker worker = new TestWorker();
        worker.start();
        Thread.sleep(100);
        assertFalse(worker.isCancelled());
        worker.cancel();
        assertTrue(worker.isCancelled());
        worker.cancel();
        worker.join();
    }


    /**
     * Tests the isCancelled method.
     * 
     * @throws Exception
     */
    public void testIsCancelled() throws Exception {
        final TestWorker worker = new TestWorker();
        worker.start();
        Thread.sleep(100);
        assertFalse(worker.isCancelled());
        worker.cancel();
        assertTrue(worker.isCancelled());
        worker.cancel();
        worker.join();
    }


    /**
     * Tests the isRunning method.
     * 
     * @throws Exception
     */
    public void testIsRunning() throws Exception {
        final TestWorker worker = new TestWorker();
        assertFalse(worker.isRunning());
        worker.start();
        Thread.sleep(100);
        assertTrue(worker.isRunning());
        worker.cancel();
        worker.join();
        assertFalse(worker.isRunning());
    }


    /**
     * Tests the join method.
     * 
     * @throws Exception
     */
    public void testJoin1() throws Exception {
        final TestWorker worker = new TestWorker();
        worker.join();
    }


    /**
     * Tests the join method.
     * 
     * @throws Exception
     */
    public void testJoin2() throws Exception {
        final TestWorker worker = new TestWorker();
        worker.start();
        Thread.sleep(100);
        worker.cancel();
        worker.join();
    }


    /**
     * Tests the processDelegate method.
     * 
     * @throws Exception
     */
    public void testProcessDelegate1() throws Exception {
        final TestWorker worker = new TestWorker();
        worker.progress = true;
        worker.error = true;
        worker.start();
        Thread.sleep(100);
        worker.cancel();
        worker.join();
        assertEquals("Test Exception", worker.exception.getMessage());
        assertEquals("Test Progress", worker.result);
    }


    /**
     * Tests the start method.
     * 
     * @throws Exception
     */
    public void testStart1() throws Exception {
        final TestWorker worker = new TestWorker();
        worker.start();
        Thread.sleep(100);
        worker.cancel();
        worker.join();
    }


    /**
     * Tests the start method.
     * 
     * @throws Exception
     */
    public void testStart2() throws Exception {
        final TestWorker worker = new TestWorker();
        worker.start();
        Thread.sleep(100);
        try {
            worker.start();
            fail();
        } catch (final IllegalStateException e) {
            // This is expected.
        }
        worker.cancel();
        worker.join();
    }
}
Valid HTML 4.01 Valid CSS