View Javadoc

1   package com.atlassian.core.cron;
2   
3   import com.atlassian.core.cron.generator.CronExpressionGenerator;
4   import com.atlassian.core.cron.parser.CronExpressionParser;
5   import junit.framework.TestCase;
6   
7   /**
8    *
9    */
10  public class TestRoundTripParserGenerator extends TestCase
11  {
12  
13      public void testHoursMinutes()
14      {
15          assertCronStringRoundTripsOk("0 10 5 ? * *");
16      }
17  
18      public void testHoursWithIncrement3()
19      {
20          assertCronStringRoundTripsOk("0 0 4-17/3 ? * *");
21      }
22  
23      public void testHoursWithIncrement2()
24      {
25          assertCronStringRoundTripsOk("0 0 4-17/2 ? * *");
26      }
27  
28      public void testHoursWithIncrement1()
29      {
30          assertCronStringRoundTripsOk("0 0 4-17/1 ? * *");
31      }
32  
33      public void testHourRangeWithMinutesIncrement15()
34      {
35          assertCronStringRoundTripsOk("0 0/15 5-10 ? * *");
36      }
37  
38      public void testHourRangeWithMinutesIncrement30()
39      {
40          assertCronStringRoundTripsOk("0 0/30 1-10 ? * *");
41      }
42  
43      public void testHourRangeStartingAtMidnight()
44      {
45          assertCronStringRoundTripsOk("0 0 0-5/2 ? * *");
46      }
47  
48      public void testHourRangeEndingAtMidnight()
49      {
50          assertCronStringRoundTripsOk("0 0 18-23/2 ? * *");
51      }
52  
53      public void testHourRangeAllDayWithIncrement15()
54      {
55          assertCronStringRoundTripsOk("0 0/15 * ? * *");
56      }
57  
58      public void testHourRangeAllDayWithIncrement120()
59      {
60          assertCronStringRoundTripsOk("0 0 */2 ? * *");
61      }
62  
63      /**
64       * If both hour and minute increments are specified, and the hour increment is more than 1, then the resulting
65       * CronEditorBean will be in "advanced mode", and thus should round trip okay
66       */
67      public void testBothHourAndMinuteIncrements()
68      {
69          assertCronStringRoundTripsOk("0 0/15 */2 ? * *");
70      }
71  
72      /**
73       * The following cron expr will also result in "advanced mode" being triggered
74       */
75      public void testMinuteIncrementForSingleHour()
76      {
77          assertCronStringRoundTripsOk("0 0/15 6 ? * *");
78      }
79  
80      public void testMinuteIncrementForSingleHourRange()
81      {
82          assertCronStringRoundTripsOk("0 0/15 6-6 ? * *");
83      }
84  
85      public void testMidnight()
86      {
87          assertCronStringRoundTripsOk("0 0 0 ? * *");
88      }
89  
90      public void testDayOfMonthRunOnce()
91      {
92          assertCronStringRoundTripsOk("0 30 9 24 * ?");
93      }
94  
95      // NOTE: a day of month AND day of week of month with from/to is not valid, day of month only does run once
96  
97      public void testDayOfWeekRunOnce()
98      {
99          assertCronStringRoundTripsOk("0 30 9 ? * 2,3,4");
100     }
101 
102     public void testOneDayOfWeekRunOnce()
103     {
104         assertCronStringRoundTripsOk("0 30 9 ? * 2");
105     }
106 
107 
108     public void testDayOfWeekFromTo()
109     {
110         assertCronStringRoundTripsOk("0 0 9-20/2 ? * 2,3,4");
111     }
112 
113     public void testDayOfWeekOfMonthRunOnce()
114     {
115         assertCronStringRoundTripsOk("0 20 9 ? * 2#2");
116         assertCronStringRoundTripsOk("0 20 0 ? * 7#4");
117     }
118 
119     public void testDayOfWeekOfMonthRunOnceLastOfMonth()
120     {
121         assertCronStringRoundTripsOk("0 20 9 ? * 2L");
122     }
123 
124     public void testRunOnceAllDaysOfWeek()
125     {
126         assertCronStringRoundTripsOk("0 45 9 ? * 1,2,3,4,5,6,7");
127     }
128 
129     public void testYearMode()
130     {
131         assertCronStringRoundTripsOk("0 15 10 * * ? *");
132     }
133 
134     public void testAdvanced()
135     {
136         assertCronStringRoundTripsOk("0 0 10 1/3 * ?");
137     }
138 
139     public void testDefault() {
140         assertCronStringRoundTripsOk(CronExpressionParser.DEFAULT_CRONSTRING);
141     }
142 
143     void assertCronStringRoundTripsOk(String cronString)
144     {
145         CronEditorBean bean = new CronExpressionParser(cronString).getCronEditorBean();
146         CronExpressionGenerator generator = new CronExpressionGenerator();
147         assertEquals(cronString, generator.getCronExpressionFromInput(bean));
148     }
149 
150     void assertCronStringRoundTripsNotOk(String cronString)
151     {
152         try
153         {
154             assertCronStringRoundTripsOk(cronString);
155         }
156         catch (Error e)
157         {
158             // expected
159             return;
160         }
161         fail("This cronstring should have not passed the test: " + cronString);
162     }
163 }