/*
 * LOGICAL-PARADOX.ORG
 * Copyright (C)2005 satoshi akabane(akabane@logical-paradox.org)
 * $Id: DateTimeTest.java,v 1.1 2005/02/28 13:25:47 rampil Exp $
 */
package org.logical_paradox.common.util;

import java.util.Calendar;

import junit.framework.TestCase;

/**
 * 日付操作ユーティリティのテストケース
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.1 $
 */
public class DateTimeTest extends TestCase {

	/**
	 * Constructor for DateTimeTest.
	 * @param arg0
	 */
	public DateTimeTest(String arg0) {
		super(arg0);
	}
	/**
	 * 現在の日付が正しく取得できるかどうかのテスト
	 */
	public void testCurrentDateTime() {
		DateTime dt = DateTime.getInstance();
		long a = System.currentTimeMillis();
		long b = dt.currentTimeInMillis();

		// 差異が5ms以下であればOKとする
		assertTrue(a-b < 5);
	}
	/**
	 * 過去の日付に設定するテスト
	 */
	public void testPastDateTime() throws InterruptedException {
		Calendar cal = Calendar.getInstance();
		cal.set(2004,10,26);
		// 2004-10-26に現在日時を設定
		long time = cal.getTimeInMillis();
		DateTime dt = DateTime.getInstance(time);
		long pasttime = dt.getCurrentTime().getTime();
		// 1日以上の差異をもって，過去の日付とする
		assertTrue(System.currentTimeMillis() - pasttime > 1000*60*60*24);

		// 現在の日付を復元する
		cal.setTimeInMillis(pasttime);
		assertEquals(2004, cal.get(Calendar.YEAR));
		assertEquals(10, cal.get(Calendar.MONTH));
		assertEquals(26, cal.get(Calendar.DAY_OF_MONTH));

		System.out.println("現在日時=" + dt.getCurrentTime());

		// 2秒待つ
		Thread.sleep(1010);
		long pastpasttime = dt.currentTimeInMillis();

		// さっきとの差分が1000以上あるかどうかテスト
		assertTrue(pastpasttime - pasttime >= 1000);

		System.out.println("現在日時=" + dt.getCurrentTime());
	}
	/**
	 * 未来の日付を設定するテスト
	 *
	 */
	public void testFutureDateTime() throws InterruptedException {
		Calendar cal = Calendar.getInstance();
		cal.set(2006,2,20);
		// 2006-02-20に現在日時を設定
		long time = cal.getTimeInMillis();
		DateTime dt = DateTime.getInstance(time);
		long pasttime = dt.getCurrentTime().getTime();
		// 1日以上の差異をもって，過去の日付とする
		assertTrue(pasttime - System.currentTimeMillis() > 1000*60*60*24);

		// 現在の日付を復元する
		cal.setTimeInMillis(pasttime);
		assertEquals(2006, cal.get(Calendar.YEAR));
		assertEquals(2, cal.get(Calendar.MONTH));
		assertEquals(20, cal.get(Calendar.DAY_OF_MONTH));

		System.out.println("現在日時=" + dt.getCurrentTime());

		// 1秒待つ
		Thread.sleep(1010);
		long pastpasttime = dt.currentTimeInMillis();

		// さっきとの差分が1000以上あるかどうかテスト
		assertTrue(pastpasttime - pasttime >= 1000);

		System.out.println("現在日時=" + dt.getCurrentTime());
	}
}
