1   package com.atlassian.core.cron.parser;
2   
3   import com.atlassian.core.util.DateUtils;
4   import junit.framework.TestCase;
5   
6   /**
7    *
8    */
9   public class TestCronHourEntry extends TestCase
10  {
11      public void testCronHoursEntryNoIncrementOrRange()
12      {
13          CronHoursEntry cronHoursEntry = new CronHoursEntry("2");
14          assertTrue(cronHoursEntry.isValid());
15          assertEquals(2, cronHoursEntry.getRunOnce());
16          assertEquals(DateUtils.AM, cronHoursEntry.getRunOnceMeridian());
17          assertEquals(-1, cronHoursEntry.getFrom());
18          assertNull(cronHoursEntry.getFromMeridian());
19          assertEquals(-1, cronHoursEntry.getTo());
20          assertNull(cronHoursEntry.getToMeridian());
21          assertEquals(-1, cronHoursEntry.getIncrement());
22          assertFalse(cronHoursEntry.hasIncrement());
23          assertTrue(cronHoursEntry.isRunOnce());
24      }
25  
26      public void testCronHoursEntryWithIncrementNoRange()
27      {
28          CronHoursEntry cronHoursEntry = new CronHoursEntry("2/3");
29          assertTrue(cronHoursEntry.isValid());
30          assertEquals(-1, cronHoursEntry.getRunOnce());
31          assertNull(cronHoursEntry.getRunOnceMeridian());
32          assertEquals(2, cronHoursEntry.getFrom());
33          assertEquals(DateUtils.AM, cronHoursEntry.getFromMeridian());
34          assertEquals(2, cronHoursEntry.getTo());
35          assertEquals(DateUtils.AM, cronHoursEntry.getToMeridian());
36          assertEquals(3, cronHoursEntry.getIncrement());
37          assertTrue(cronHoursEntry.hasIncrement());
38          assertFalse(cronHoursEntry.isRunOnce());
39      }
40  
41      public void testCronHoursEntryWithIncrementAndRange()
42      {
43          CronHoursEntry cronHoursEntry = new CronHoursEntry("2-16/3");
44          assertTrue(cronHoursEntry.isValid());
45          assertEquals(2, cronHoursEntry.getFrom());
46          assertEquals(DateUtils.AM, cronHoursEntry.getFromMeridian());
47          assertEquals(5, cronHoursEntry.getTo());
48          assertEquals(DateUtils.PM, cronHoursEntry.getToMeridian());
49          assertEquals(-1, cronHoursEntry.getRunOnce());
50          assertNull(cronHoursEntry.getRunOnceMeridian());
51          assertEquals(3, cronHoursEntry.getIncrement());
52          assertTrue(cronHoursEntry.hasIncrement());
53          assertFalse(cronHoursEntry.isRunOnce());
54      }
55  
56      public void testInvalidCronHours()
57      {
58          CronHoursEntry cronHoursEntry = new CronHoursEntry("2,16/3");
59          assertFalse(cronHoursEntry.isValid());
60      }
61  
62      public void testOutOfRange()
63      {
64          assertFalse(new CronHoursEntry("42").isValid());
65          assertFalse(new CronHoursEntry("1-25").isValid());
66          assertFalse(new CronHoursEntry("0-24").isValid());
67          assertFalse(new CronHoursEntry("44/2").isValid());
68      }
69  
70      public void test12HourEdgeCases()
71      {
72          CronHoursEntry cronHoursEntry = new CronHoursEntry("0-11/3");
73          assertTrue(cronHoursEntry.isValid());
74          assertEquals(12, cronHoursEntry.getFrom());
75          assertEquals(DateUtils.AM, cronHoursEntry.getFromMeridian());
76          assertEquals(12, cronHoursEntry.getTo());
77          assertEquals(DateUtils.PM, cronHoursEntry.getToMeridian());
78          assertEquals(-1, cronHoursEntry.getRunOnce());
79          assertFalse(cronHoursEntry.isRunOnce());
80  
81          cronHoursEntry = new CronHoursEntry("12-23/3");
82          assertTrue(cronHoursEntry.isValid());
83          assertEquals(12, cronHoursEntry.getFrom());
84          assertEquals(DateUtils.PM, cronHoursEntry.getFromMeridian());
85          assertEquals(12, cronHoursEntry.getTo());
86          assertEquals(DateUtils.AM, cronHoursEntry.getToMeridian());
87          assertEquals(-1, cronHoursEntry.getRunOnce());
88          assertFalse(cronHoursEntry.isRunOnce());
89      }
90  
91      public void testStar() throws Exception
92      {
93          CronHoursEntry cronHoursEntry = new CronHoursEntry("*");
94          assertTrue(cronHoursEntry.isValid());
95          assertEquals(12, cronHoursEntry.getFrom());
96          assertEquals(DateUtils.AM, cronHoursEntry.getFromMeridian());
97          assertEquals(12, cronHoursEntry.getTo());
98          assertEquals(DateUtils.AM, cronHoursEntry.getToMeridian());
99          assertEquals(1, cronHoursEntry.getIncrement());
100         assertTrue(cronHoursEntry.hasIncrement());
101         assertEquals(-1, cronHoursEntry.getRunOnce());
102         assertFalse(cronHoursEntry.isRunOnce());
103     }
104 
105     public void testStarWithIncrement() throws Exception
106     {
107         CronHoursEntry cronHoursEntry = new CronHoursEntry("*/2");
108         assertTrue(cronHoursEntry.isValid());
109         assertEquals(12, cronHoursEntry.getFrom());
110         assertEquals(DateUtils.AM, cronHoursEntry.getFromMeridian());
111         assertEquals(12, cronHoursEntry.getTo());
112         assertEquals(DateUtils.AM, cronHoursEntry.getToMeridian());
113         assertEquals(2, cronHoursEntry.getIncrement());
114         assertTrue(cronHoursEntry.hasIncrement());
115         assertEquals(-1, cronHoursEntry.getRunOnce());
116         assertFalse(cronHoursEntry.isRunOnce());
117     }
118 
119 }