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    }