package jp.hrtdotnet.java.util;

import jp.hrtdotnet.java.util.TimeUtil;
import junit.framework.TestCase;

public class TimeUtilTest extends TestCase {

    /* (非 Javadoc)
     * @see junit.framework.TestCase#setUp()
     */
    protected void setUp() throws Exception {
        super.setUp();
    }

    /* (非 Javadoc)
     * @see junit.framework.TestCase#tearDown()
     */
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    /**
     * {@link jp.hrtdotnet.java.util.TimeUtil#TimeUtil()} のためのテスト・メソッド。
     */
    public void testTimeUtil() {
        new TimeUtil();
    }

    /**
     * {@link jp.hrtdotnet.java.util.TimeUtil#TimeUtil(long, long)} のためのテスト・メソッド。
     */
    public void testTimeUtil_LongLong() {
        new TimeUtil(100L, 100L);
        new TimeUtil(2000L, -1L);
        new TimeUtil(-1L, 2000L);
        new TimeUtil(10L, 1L);
        try {
            new TimeUtil(1L, 10L);
            fail();
        } catch(IllegalArgumentException e) {            
        }
    }

    /**
     * {@link jp.hrtdotnet.java.util.TimeUtil#start()} のためのテスト・メソッド。
     */
    public void testStart() {
        //不要
    }

    /**
     * {@link jp.hrtdotnet.java.util.TimeUtil#stop()} のためのテスト・メソッド。
     */
    public void testStop() {
        TimeUtil c = new TimeUtil();
        c.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
        assertTrue(c.stop());
    }

    /**
     * {@link jp.hrtdotnet.java.util.TimeUtil#check()} のためのテスト・メソッド。
     */
    public void testCheck() {
        TimeUtil c = new TimeUtil(10000L, -1L);
        c.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
        c.stop();
        assertTrue(c.check());

        c = new TimeUtil(1000L, -1L);
        c.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
        c.stop();
        assertFalse(c.check());

        c = new TimeUtil(-1L, 1000L);
        c.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
        c.stop();
        assertTrue(c.check());

        c = new TimeUtil(-1L, 10000L);
        c.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
        c.stop();
        assertFalse(c.check());    
    }

    /**
     * {@link jp.hrtdotnet.java.util.TimeUtil#getDiff()} のためのテスト・メソッド。
     */
    public void testGetDiff() {
        TimeUtil c = new TimeUtil();
        c.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
        c.stop();
        assertTrue(c.getDiff() >= 5000L);
    }

    /**
     * {@link jp.hrtdotnet.java.util.TimeUtil#clear()} のためのテスト・メソッド。
     */
    public void testClear() {
        TimeUtil c = new TimeUtil();
        c.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }
        c.stop();
        c.clear();
        assertEquals(c.getDiff(), 0L);
    }

    /**
     * {@link jp.hrtdotnet.java.util.TimeUtil#checkTrue()} のためのテスト・メソッド。
     */
    public void testCheckTrue() {
        //不要
    }

    /**
     * {@link jp.hrtdotnet.java.util.TimeUtil#checkFalse()} のためのテスト・メソッド。
     */
    public void testCheckFalse() {
        //不要
    }
}

class TimeCheckTestEx extends TimeUtil {
    
    int i = 0;
    
    public void checkTrue() {
        i = 1;
    }
    
    public void checkFalse() {
        i = 2;
    }

}