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
65
66
67 public void testBothHourAndMinuteIncrements()
68 {
69 assertCronStringRoundTripsOk("0 0/15 */2 ? * *");
70 }
71
72
73
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
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
159 return;
160 }
161 fail("This cronstring should have not passed the test: " + cronString);
162 }
163 }