001 package org.hackystat.utilities.tstamp; 002 003 import static org.junit.Assert.assertEquals; 004 import static org.junit.Assert.assertFalse; 005 import static org.junit.Assert.assertTrue; 006 007 import java.util.ArrayList; 008 import java.util.List; 009 010 import javax.xml.datatype.XMLGregorianCalendar; 011 012 import org.junit.Test; 013 014 /** 015 * Tests the Tstamp class. 016 * @author Philip Johnson 017 */ 018 public class TestTstamp { 019 /** 020 * Tests the Tstamp class. 021 * @throws Exception if problems occur. 022 */ 023 @Test public void testTstampArithmetic () throws Exception { 024 XMLGregorianCalendar date1 = Tstamp.makeTimestamp("2007-08-01"); 025 XMLGregorianCalendar date2 = Tstamp.makeTimestamp("2007-08-02"); 026 XMLGregorianCalendar date3 = Tstamp.makeTimestamp("2007-08-03"); 027 assertTrue("Test equal", Tstamp.equal(date1, date1)); 028 assertTrue("Test increment days", Tstamp.equal(date2, Tstamp.incrementDays(date1, 1))); 029 030 XMLGregorianCalendar date4 = Tstamp.makeTimestamp("2007-08-01T01:00:00"); 031 assertTrue("Test increment hours", Tstamp.equal(date4, Tstamp.incrementHours(date1, 1))); 032 033 XMLGregorianCalendar date5 = Tstamp.makeTimestamp("2007-08-01T00:01:00"); 034 assertTrue("Test increment mins", Tstamp.equal(date5, Tstamp.incrementMinutes(date1, 1))); 035 036 XMLGregorianCalendar date6 = Tstamp.makeTimestamp("2007-08-01T00:00:01"); 037 assertTrue("Test increment secs", Tstamp.equal(date6, Tstamp.incrementSeconds(date1, 1))); 038 039 assertTrue("Test greater than 1", Tstamp.greaterThan(date2, date1)); 040 assertFalse("Test greater than 2", Tstamp.greaterThan(date1, date2)); 041 assertFalse("Test greater than 3", Tstamp.greaterThan(date1, date1)); 042 043 assertTrue("Test less than 1", Tstamp.lessThan(date1, date2)); 044 assertFalse("Test less than 2", Tstamp.lessThan(date2, date1)); 045 assertFalse("Test less than 3", Tstamp.lessThan(date1, date1)); 046 047 assertTrue("Test inbetween 1", Tstamp.inBetween(date1, date2, date3)); 048 assertTrue("Test inbetween 2", Tstamp.inBetween(date1, date1, date2)); 049 assertTrue("Test inbetween 3", Tstamp.inBetween(date1, date2, date2)); 050 assertFalse("Test inbetween 4", Tstamp.inBetween(date1, date3, date2)); 051 052 assertFalse("Test bogus time check", Tstamp.isBogusStartTime(date1)); 053 } 054 055 /** 056 * Tests time span. 057 * 058 * @throws Exception If problem occurs 059 */ 060 @Test public void testTstampSpan() throws Exception { 061 XMLGregorianCalendar date1 = Tstamp.makeTimestamp("2007-08-01T01:00:00.000"); 062 XMLGregorianCalendar date2 = Tstamp.makeTimestamp("2007-08-01T01:01:20.200"); 063 XMLGregorianCalendar date3 = Tstamp.makeTimestamp("2007-08-01T01:01:20.400"); 064 assertEquals("Test timespan 80200 ms", 80200, Tstamp.diff(date1, date2)); 065 assertEquals("Test timespan 200 ms", 200, Tstamp.diff(date2, date3)); 066 } 067 068 /** 069 * Test to make sure that the is* methods work OK. 070 * @throws Exception If problems occur. 071 */ 072 @Test public void testOrLater() throws Exception { 073 long millisInADay = 1000 * 60 * 60 * 24; 074 XMLGregorianCalendar today = Tstamp.makeTimestamp(); 075 long todayInMillis = today.toGregorianCalendar().getTimeInMillis(); 076 long yesterdayInMillis = todayInMillis - millisInADay; 077 XMLGregorianCalendar yesterday = Tstamp.makeTimestamp(yesterdayInMillis); 078 long tomorrowInMillis = todayInMillis + millisInADay; 079 XMLGregorianCalendar tomorrow = Tstamp.makeTimestamp(tomorrowInMillis); 080 long lastWeekInMillis = todayInMillis - (millisInADay * 7); 081 XMLGregorianCalendar lastWeek = Tstamp.makeTimestamp(lastWeekInMillis); 082 assertTrue("Testing todayOrLater 1", Tstamp.isTodayOrLater(today)); 083 assertTrue("Testing todayOrLater 2", Tstamp.isTodayOrLater(tomorrow)); 084 assertFalse("Testing todayOrLater 3", Tstamp.isTodayOrLater(yesterday)); 085 assertTrue("Testing yesterdayOrLater 1", Tstamp.isYesterdayOrLater(today)); 086 assertTrue("Testing yesterdayOrLater 2", Tstamp.isYesterdayOrLater(tomorrow)); 087 assertTrue("Testing yesterdayOrLater 3", Tstamp.isYesterdayOrLater(yesterday)); 088 assertFalse("Testing yesterdayOrLater 4", Tstamp.isYesterdayOrLater(lastWeek)); 089 } 090 091 /** 092 * Test to make sure that the daysBetween method works correctly. 093 * @throws Exception If problems occur. 094 */ 095 @Test public void testDaysBetween() throws Exception { 096 XMLGregorianCalendar today = Tstamp.makeTimestamp(); 097 assertEquals("Test daysBetween 1", 0, Tstamp.daysBetween(today, today)); 098 XMLGregorianCalendar tomorrow = Tstamp.incrementDays(today, 1); 099 assertEquals("Test daysBetween 2", 1, Tstamp.daysBetween(today, tomorrow)); 100 XMLGregorianCalendar nextWeek = Tstamp.incrementDays(today, 7); 101 assertEquals("Test daysBetween 3", 7, Tstamp.daysBetween(today, nextWeek)); 102 // Test a whole year, which might find DST issues. 103 for (int i = 1; i <= 365; i++) { 104 XMLGregorianCalendar newDay = Tstamp.incrementDays(today, i); 105 assertEquals("Test daysBetween 4", i, Tstamp.daysBetween(today, newDay)); 106 } 107 } 108 109 /** 110 * Tests that the sort() method works. 111 * @throws Exception If problems occur. 112 */ 113 @Test public void testSorting() throws Exception { 114 XMLGregorianCalendar tstamp1 = Tstamp.makeTimestamp(); 115 XMLGregorianCalendar tstamp2 = Tstamp.incrementSeconds(tstamp1, 1); 116 XMLGregorianCalendar tstamp3 = Tstamp.incrementSeconds(tstamp1, 2); 117 XMLGregorianCalendar tstamp4 = Tstamp.incrementSeconds(tstamp1, 3); 118 List<XMLGregorianCalendar> tstamps = new ArrayList<XMLGregorianCalendar>(); 119 tstamps.add(tstamp2); 120 tstamps.add(tstamp1); 121 tstamps.add(tstamp4); 122 tstamps.add(tstamp3); 123 List<XMLGregorianCalendar> sortedList = Tstamp.sort(tstamps); 124 assertEquals("Test sort1", tstamp1, sortedList.get(0)); 125 assertEquals("Test sort2", tstamp2, sortedList.get(1)); 126 assertEquals("Test sort3", tstamp3, sortedList.get(2)); 127 assertEquals("Test sort4", tstamp4, sortedList.get(3)); 128 } 129 130 131 }