1 package com.atlassian.core.cron.generator;
2
3 import com.atlassian.core.cron.CronEditorBean;
4 import com.atlassian.core.util.DateUtils;
5 import junit.framework.TestCase;
6
7
8
9
10 public class TestCronExpressionGenerator extends TestCase
11 {
12 public void testDailyCronWithRunOnce()
13 {
14 CronEditorBean cronEditorBean = new CronEditorBean();
15 cronEditorBean.setMode(CronEditorBean.DAILY_SPEC_MODE);
16 cronEditorBean.setHoursRunOnce("9");
17 cronEditorBean.setHoursRunOnceMeridian(DateUtils.AM);
18 cronEditorBean.setMinutes("35");
19 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
20 assertEquals("0 35 9 ? * *", cronExpressionGenerator.getCronExpressionFromInput(cronEditorBean));
21 }
22
23 public void testDailyCronWithFromAndTo()
24 {
25 CronEditorBean cronEditorBean = new CronEditorBean();
26 cronEditorBean.setMode(CronEditorBean.DAILY_SPEC_MODE);
27
28 cronEditorBean.setHoursFrom("1");
29 cronEditorBean.setHoursFromMeridian(DateUtils.AM);
30 cronEditorBean.setHoursTo("1");
31 cronEditorBean.setHoursToMeridian(DateUtils.PM);
32
33 cronEditorBean.setIncrementInMinutes("180");
34
35 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
36 assertEquals("0 0 1-12/3 ? * *", cronExpressionGenerator.getCronExpressionFromInput(cronEditorBean));
37 }
38
39 public void testDayOfWeekWithRunOnce()
40 {
41 CronEditorBean cronEditorBean = new CronEditorBean();
42 cronEditorBean.setMode(CronEditorBean.DAYS_OF_WEEK_SPEC_MODE);
43
44 cronEditorBean.setHoursRunOnce("9");
45 cronEditorBean.setHoursRunOnceMeridian(DateUtils.AM);
46 cronEditorBean.setMinutes("35");
47
48 cronEditorBean.setSpecifiedDaysOfWeek("2,3,4");
49
50 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
51 assertEquals("0 35 9 ? * 2,3,4", cronExpressionGenerator.getCronExpressionFromInput(cronEditorBean));
52 }
53
54 public void testDayOfWeekWithFromTo()
55 {
56 CronEditorBean cronEditorBean = new CronEditorBean();
57 cronEditorBean.setMode(CronEditorBean.DAYS_OF_WEEK_SPEC_MODE);
58
59 cronEditorBean.setHoursFrom("1");
60 cronEditorBean.setHoursFromMeridian(DateUtils.AM);
61 cronEditorBean.setHoursTo("1");
62 cronEditorBean.setHoursToMeridian(DateUtils.PM);
63
64 cronEditorBean.setIncrementInMinutes("180");
65
66 cronEditorBean.setSpecifiedDaysOfWeek("2,3,4");
67
68 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
69 assertEquals("0 0 1-12/3 ? * 2,3,4", cronExpressionGenerator.getCronExpressionFromInput(cronEditorBean));
70 }
71
72 public void testDayOfMonth()
73 {
74 CronEditorBean cronEditorBean = new CronEditorBean();
75 cronEditorBean.setMode(CronEditorBean.DAYS_OF_MONTH_SPEC_MODE);
76
77 cronEditorBean.setMinutes("59");
78 cronEditorBean.setHoursRunOnce("12");
79 cronEditorBean.setHoursRunOnceMeridian(DateUtils.PM);
80
81 cronEditorBean.setDayOfMonth("13");
82 cronEditorBean.setDayOfWeekOfMonth(false);
83
84 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
85 assertEquals("0 59 12 13 * ?", cronExpressionGenerator.getCronExpressionFromInput(cronEditorBean));
86 }
87
88 public void testDayOfWeekOfMonth()
89 {
90 CronEditorBean cronEditorBean = new CronEditorBean();
91 cronEditorBean.setMode(CronEditorBean.DAYS_OF_MONTH_SPEC_MODE);
92
93 cronEditorBean.setMinutes("59");
94 cronEditorBean.setHoursRunOnce("12");
95 cronEditorBean.setHoursRunOnceMeridian(DateUtils.AM);
96
97 cronEditorBean.setSpecifiedDaysOfWeek("2");
98 cronEditorBean.setDayInMonthOrdinal("3");
99 cronEditorBean.setDayOfWeekOfMonth(true);
100
101 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
102 assertEquals("0 59 0 ? * 2#3", cronExpressionGenerator.getCronExpressionFromInput(cronEditorBean));
103 }
104
105 public void testGenerateDailySpecWithIntervalAndRunOnce()
106 {
107 CronEditorBean cronEditorBean = new CronEditorBean();
108 cronEditorBean.setMode(CronEditorBean.DAILY_SPEC_MODE);
109 cronEditorBean.setIncrementInMinutes("60");
110 cronEditorBean.setHoursRunOnce("9");
111 cronEditorBean.setHoursRunOnceMeridian(DateUtils.AM);
112 cronEditorBean.setMinutes("35");
113 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
114 try
115 {
116 cronExpressionGenerator.generateDailySpec(cronEditorBean);
117 fail();
118 }
119 catch (IllegalStateException expected)
120 {
121
122 }
123 }
124
125 public void testGenerateDailySpecWithNoIntervalAndNoRunOnce()
126 {
127 CronEditorBean cronEditorBean = new CronEditorBean();
128 cronEditorBean.setMode(CronEditorBean.DAILY_SPEC_MODE);
129 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
130 try
131 {
132 cronExpressionGenerator.generateDailySpec(cronEditorBean);
133 fail();
134 }
135 catch (IllegalStateException expected)
136 {
137
138 }
139 }
140
141 public void testGenerateDailySpecRunOnce()
142 {
143 CronEditorBean cronEditorBean = new CronEditorBean();
144 cronEditorBean.setMode(CronEditorBean.DAILY_SPEC_MODE);
145 cronEditorBean.setHoursRunOnce("4");
146 cronEditorBean.setMinutes("25");
147 cronEditorBean.setIncrementInMinutes("0");
148 cronEditorBean.setHoursRunOnceMeridian(DateUtils.PM);
149 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
150 String dailySpec = cronExpressionGenerator.generateDailySpec(cronEditorBean);
151 assertEquals("0 25 16", dailySpec);
152 }
153
154 public void testGenerateDailySpecRunOnceInMonthMode()
155 {
156 CronEditorBean cronEditorBean = new CronEditorBean();
157 cronEditorBean.setMode(CronEditorBean.DAYS_OF_MONTH_SPEC_MODE);
158 cronEditorBean.setHoursRunOnce("4");
159 cronEditorBean.setMinutes("25");
160
161
162 cronEditorBean.setIncrementInMinutes("120");
163 cronEditorBean.setHoursRunOnceMeridian(DateUtils.PM);
164 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
165 String dailySpec = cronExpressionGenerator.generateDailySpec(cronEditorBean);
166 assertEquals("0 25 16", dailySpec);
167 }
168
169 public void testGenerateDailySpecFromToWithHourInterval()
170 {
171 CronEditorBean cronEditorBean = new CronEditorBean();
172 cronEditorBean.setMode(CronEditorBean.DAILY_SPEC_MODE);
173 cronEditorBean.setHoursFrom("4");
174 cronEditorBean.setHoursFromMeridian(DateUtils.AM);
175 cronEditorBean.setHoursTo("4");
176 cronEditorBean.setHoursToMeridian(DateUtils.PM);
177 cronEditorBean.setIncrementInMinutes("120");
178 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
179 String dailySpec = cronExpressionGenerator.generateDailySpec(cronEditorBean);
180 assertEquals("0 0 4-15/2", dailySpec);
181 }
182
183 public void testGenerateDailySpecFromToWithMinuteInterval()
184 {
185 CronEditorBean cronEditorBean = new CronEditorBean();
186 cronEditorBean.setMode(CronEditorBean.DAILY_SPEC_MODE);
187 cronEditorBean.setHoursFrom("4");
188 cronEditorBean.setHoursFromMeridian(DateUtils.AM);
189 cronEditorBean.setHoursTo("4");
190 cronEditorBean.setHoursToMeridian(DateUtils.PM);
191 cronEditorBean.setIncrementInMinutes("15");
192 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
193 String dailySpec = cronExpressionGenerator.generateDailySpec(cronEditorBean);
194 assertEquals("0 0/15 4-15", dailySpec);
195 }
196
197 public void testGenerateDailySpecWithEqualFromToMinuteInterval()
198 {
199 CronEditorBean cronEditorBean = new CronEditorBean();
200 cronEditorBean.setMode(CronEditorBean.DAILY_SPEC_MODE);
201 cronEditorBean.setHoursFrom("4");
202 cronEditorBean.setHoursFromMeridian(DateUtils.AM);
203 cronEditorBean.setHoursTo("4");
204 cronEditorBean.setHoursToMeridian(DateUtils.AM);
205 cronEditorBean.setIncrementInMinutes("15");
206 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
207 String dailySpec = cronExpressionGenerator.generateDailySpec(cronEditorBean);
208 assertEquals("0 0/15 *", dailySpec);
209 }
210
211 public void testGenerateDailySpecWithEqualFromToHourInterval()
212 {
213 CronEditorBean cronEditorBean = new CronEditorBean();
214 cronEditorBean.setMode(CronEditorBean.DAILY_SPEC_MODE);
215 cronEditorBean.setHoursFrom("4");
216 cronEditorBean.setHoursFromMeridian(DateUtils.AM);
217 cronEditorBean.setHoursTo("4");
218 cronEditorBean.setHoursToMeridian(DateUtils.AM);
219 cronEditorBean.setIncrementInMinutes("120");
220 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
221 String dailySpec = cronExpressionGenerator.generateDailySpec(cronEditorBean);
222 assertEquals("0 0 */2", dailySpec);
223 }
224
225 public void testGenerateDaysOfWeekSpecWithDaysSet()
226 {
227 CronEditorBean cronEditorBean = new CronEditorBean();
228 String specifiedDaysOfWeek = "2,3,4";
229 cronEditorBean.setSpecifiedDaysOfWeek(specifiedDaysOfWeek);
230 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
231 assertEquals(specifiedDaysOfWeek, cronExpressionGenerator.generateDaysOfWeekSpec(cronEditorBean));
232 }
233
234 public void testGenerateDaysOfWeekSpecWithDaysNotSet()
235 {
236 CronEditorBean cronEditorBean = new CronEditorBean();
237 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
238 try
239 {
240 cronExpressionGenerator.generateDaysOfWeekSpec(cronEditorBean);
241 fail();
242 }
243 catch (IllegalStateException e)
244 {
245
246 }
247 }
248
249 public void testGenerateDayOfMonthSpecWithDayOfMonthSet()
250 {
251 CronEditorBean cronEditorBean = new CronEditorBean();
252 String dayOfMonth = "20";
253 cronEditorBean.setDayOfMonth(dayOfMonth);
254 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
255 assertEquals(dayOfMonth + " * ?", cronExpressionGenerator.generateDayOfMonthSpec(cronEditorBean));
256 }
257
258 public void testGenerateDayOfMonthSpecWithDayOfMonthNotSet()
259 {
260 CronEditorBean cronEditorBean = new CronEditorBean();
261 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
262 try
263 {
264 cronExpressionGenerator.generateDaysOfWeekSpec(cronEditorBean);
265 fail();
266 }
267 catch (IllegalStateException ise)
268 {
269
270 }
271 }
272
273 public void testGenerateDayOfWeekOfMonthSpecLastMonday()
274 {
275 CronEditorBean cronEditorBean = new CronEditorBean();
276 cronEditorBean.setDayInMonthOrdinal("L");
277 cronEditorBean.setSpecifiedDaysOfWeek("2");
278 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
279 assertEquals("? * 2L", cronExpressionGenerator.generateDayOfWeekOfMonthSpec(cronEditorBean));
280 }
281
282 public void testGenerateDayOfWeekOfMonthSpecSecondTuesday()
283 {
284 CronEditorBean cronEditorBean = new CronEditorBean();
285 cronEditorBean.setDayInMonthOrdinal("2");
286 cronEditorBean.setSpecifiedDaysOfWeek("3");
287 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
288 assertEquals("? * 3#2", cronExpressionGenerator.generateDayOfWeekOfMonthSpec(cronEditorBean));
289 }
290
291 public void testGenerateDayOfWeekOfMonthWithoutOrdinal()
292 {
293 CronEditorBean cronEditorBean = new CronEditorBean();
294 cronEditorBean.setSpecifiedDaysOfWeek("3");
295 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
296
297 try
298 {
299 cronExpressionGenerator.generateDayOfWeekOfMonthSpec(cronEditorBean);
300 fail();
301 }
302 catch (IllegalStateException e)
303 {
304
305 }
306 }
307
308 public void testGenerateDayOfWeekOfMonthWithoutSpecifiedDaysPerWeek()
309 {
310 CronEditorBean cronEditorBean = new CronEditorBean();
311 cronEditorBean.setDayInMonthOrdinal("2");
312 CronExpressionGenerator cronExpressionGenerator = new CronExpressionGenerator();
313
314 try
315 {
316 cronExpressionGenerator.generateDayOfWeekOfMonthSpec(cronEditorBean);
317 fail();
318 }
319 catch (IllegalStateException e)
320 {
321
322 }
323 }
324
325
326 }