litesoft
@ 151
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
// This Source Code is in the Public Domain per: http://litesoft.org/License.txt package org.litesoft.delayed; import java.util.*; import junit.framework.*; import org.litesoft.core.delayed.*; import org.litesoft.core.util.*; import org.litesoft.delayed.nonpublic.*; public class ThreadBasedDelayedTimedRunnableRunnerTest extends TestCase { public static TestSuite suite() { return new TestSuite( ThreadBasedDelayedTimedRunnableRunnerTest.class ); } @Override protected void setUp() throws Exception { super.setUp(); mAfter = null; mRan = false; mError = null; mTimer = new ThreadBasedDelayedTimedRunnableRunner(); mTimer.initialize( new TimedRunnable() { @Override public Again runOnce() { mAfter = new Date().getTime(); mRan = true; return null; } }, new UnexpectedExceptionHandler() { @Override public void onUnexpectedException( String pFrom, Throwable pException ) { mRan = true; mError = pException; } } ); } private volatile Long mAfter; private volatile boolean mRan; private volatile Throwable mError; private ThreadBasedDelayedTimedRunnableRunner mTimer; public void testTimer() throws Exception { long before = new Date().getTime(); long targetTime = before + 100; mTimer.scheduleFor( targetTime ); // Give it upto a full second to run... for ( int i = 0; i < 100; i++ ) { Thread.sleep( 10 ); if ( mRan ) { break; } } assertTrue( mRan ); assertTrue( mAfter >= targetTime ); assertNull( mError ); } public void testCancelTimer() throws Exception { long before = new Date().getTime(); mTimer.scheduleFor( before + 1000 ); Thread.sleep( 10 ); mTimer.cancel(); Thread.sleep( 10 ); assertFalse( "!Canceled", mTimer.isScheduled() ); assertFalse( "Timed thread was supposed to be canceled", mRan ); assertNull( mError ); } } |