// Copyright (c) 2006 Dustin Sallings <dustin@spy.net> package net.spy.util; import junit.framework.TestCase; /** * Test the looping thread. */ public class LoopingThreadTest extends TestCase { public void testSimple() throws Exception { TestLoopingThread tlt=new TestLoopingThread(); tlt.setMsPerLoop(10); assertFalse(tlt.started); tlt.start(); Thread.sleep(100); tlt.requestStop(); Thread.sleep(250); assertTrue("Didn't start?", tlt.started); assertTrue("Didn't finish?", tlt.shutdown); assertTrue("Didn't run enough", tlt.runs > 8); assertTrue("Ran too many times", tlt.runs < 12); } public void testNameConstructor() throws Exception { TestLoopingThread tlt=new TestLoopingThread("X"); assertEquals("X", tlt.getName()); } public void testThreadGroupConstructor() throws Exception { ThreadGroup tg=new ThreadGroup("Test"); tg.setDaemon(true); TestLoopingThread tlt=new TestLoopingThread(tg, "Y"); assertEquals("Y", tlt.getName()); assertSame(tg, tlt.getThreadGroup()); tg.destroy(); } public void testInterruption() throws Exception { TestLoopingThread tlt=new TestLoopingThread(); tlt.setMsPerLoop(10000); tlt.start(); Thread.sleep(100); assertTrue(tlt.started); assertFalse(tlt.wasInterrupted); tlt.interrupt(); Thread.sleep(100); assertTrue(tlt.wasInterrupted); tlt.requestStop(); Thread.sleep(100); assertTrue(tlt.shutdown); } private static class TestLoopingThread extends LoopingThread { public volatile int runs=0; public volatile boolean started=false; public volatile boolean shutdown=false; public volatile boolean wasInterrupted=false; public TestLoopingThread() { super(); } public TestLoopingThread(String name) { super(name); } public TestLoopingThread(ThreadGroup tg, String name) { super(tg, name); } @Override protected void runLoop() { runs++; } @Override protected void shuttingDown() { super.shuttingDown(); shutdown=true; } @Override protected void startingUp() { super.startingUp(); started=true; } @Override protected void delayInterrupted(InterruptedException e) { super.delayInterrupted(e); wasInterrupted=true; } } }