1 package com.atlassian.scheduler.core.tests;
2
3 import org.junit.Test;
4
5 import static com.atlassian.scheduler.core.tests.CronExpressionAssertions.satisfiedBy;
6 import static com.atlassian.scheduler.core.tests.CronExpressionAssertions.unsatisfiedBy;
7
8
9
10
11
12
13 public abstract class CronExpressionDayOfMonthTest extends AbstractCronExpressionTest {
14 protected CronExpressionDayOfMonthTest(CronFactory cronFactory) {
15 super(cronFactory);
16 }
17
18 @Test
19 public void testLastDayOfMonth() {
20 assertCron("L (normal)", "0 0 0 L * ?",
21 unsatisfiedBy(0, 0, 0, 30, 1, 2014),
22 satisfiedBy(0, 0, 0, 31, 1, 2014),
23 unsatisfiedBy(0, 0, 0, 1, 2, 2014),
24 unsatisfiedBy(0, 0, 0, 1, 3, 2014),
25 satisfiedBy(0, 0, 0, 31, 3, 2014),
26 satisfiedBy(0, 0, 0, 30, 4, 2014),
27 satisfiedBy(0, 0, 0, 30, 9, 2014),
28 satisfiedBy(0, 0, 0, 31, 12, 2014));
29
30 assertCron("L (February)", "0 0 0 L * ?",
31 unsatisfiedBy(0, 0, 0, 28, 2, 2000),
32 satisfiedBy(0, 0, 0, 29, 2, 2000),
33 unsatisfiedBy(0, 0, 0, 27, 2, 2014),
34 satisfiedBy(0, 0, 0, 28, 2, 2014),
35 unsatisfiedBy(0, 0, 0, 28, 2, 2016),
36 satisfiedBy(0, 0, 0, 29, 2, 2016));
37 }
38
39 @Test
40 public void testLastWeekdayOfMonth() {
41 assertCron("LW (normal)", "0 0 0 LW * ?",
42 unsatisfiedBy(0, 0, 0, 30, 1, 2014),
43 satisfiedBy(0, 0, 0, 31, 1, 2014),
44 unsatisfiedBy(0, 0, 0, 30, 3, 2014),
45 satisfiedBy(0, 0, 0, 31, 3, 2014),
46 unsatisfiedBy(0, 0, 0, 1, 2, 2014),
47 unsatisfiedBy(0, 0, 0, 30, 3, 2014),
48 satisfiedBy(0, 0, 0, 31, 3, 2014),
49 unsatisfiedBy(0, 0, 0, 28, 8, 2014),
50 satisfiedBy(0, 0, 0, 29, 8, 2014),
51 unsatisfiedBy(0, 0, 0, 30, 8, 2014),
52 unsatisfiedBy(0, 0, 0, 31, 8, 2014),
53 satisfiedBy(0, 0, 0, 28, 11, 2014));
54
55 assertCron("LW (February)", "0 0 0 LW * ?",
56 unsatisfiedBy(0, 0, 0, 28, 2, 2000),
57 satisfiedBy(0, 0, 0, 29, 2, 2000),
58 satisfiedBy(0, 0, 0, 27, 2, 2004),
59 unsatisfiedBy(0, 0, 0, 28, 2, 2004),
60 unsatisfiedBy(0, 0, 0, 26, 2, 2016),
61 unsatisfiedBy(0, 0, 0, 27, 2, 2016),
62 unsatisfiedBy(0, 0, 0, 28, 2, 2016),
63 satisfiedBy(0, 0, 0, 29, 2, 2016));
64 }
65
66 @Test
67 public void testClosestWeekdayToDayOfMonth() {
68 assertCron("7W", "0 0 0 7W * ?",
69 unsatisfiedBy(0, 0, 0, 6, 1, 2014),
70 satisfiedBy(0, 0, 0, 7, 1, 2014),
71 unsatisfiedBy(0, 0, 0, 8, 1, 2014),
72 unsatisfiedBy(0, 0, 0, 6, 2, 2014),
73 satisfiedBy(0, 0, 0, 7, 2, 2014),
74 unsatisfiedBy(0, 0, 0, 8, 2, 2014),
75 unsatisfiedBy(0, 0, 0, 5, 6, 2014),
76 satisfiedBy(0, 0, 0, 6, 6, 2014),
77 unsatisfiedBy(0, 0, 0, 7, 6, 2014),
78 unsatisfiedBy(0, 0, 0, 8, 6, 2014),
79 unsatisfiedBy(0, 0, 0, 9, 6, 2014),
80 unsatisfiedBy(0, 0, 0, 5, 9, 2014),
81 unsatisfiedBy(0, 0, 0, 6, 9, 2014),
82 unsatisfiedBy(0, 0, 0, 7, 9, 2014),
83 satisfiedBy(0, 0, 0, 8, 9, 2014),
84 unsatisfiedBy(0, 0, 0, 9, 9, 2014));
85
86 assertCron("28W", "0 0 0 28W * ?",
87 satisfiedBy(0, 0, 0, 27, 2, 2004),
88 unsatisfiedBy(0, 0, 0, 28, 2, 2004),
89 unsatisfiedBy(0, 0, 0, 29, 2, 2004),
90 unsatisfiedBy(0, 0, 0, 26, 2, 2015),
91 satisfiedBy(0, 0, 0, 27, 2, 2015),
92 unsatisfiedBy(0, 0, 0, 28, 2, 2015),
93 unsatisfiedBy(0, 0, 0, 26, 2, 2016),
94 unsatisfiedBy(0, 0, 0, 27, 2, 2016),
95 unsatisfiedBy(0, 0, 0, 28, 2, 2016),
96 satisfiedBy(0, 0, 0, 29, 2, 2016));
97
98 assertCron("29W", "0 0 0 29W * ?",
99 satisfiedBy(0, 0, 0, 27, 2, 2004),
100 unsatisfiedBy(0, 0, 0, 28, 2, 2004),
101 unsatisfiedBy(0, 0, 0, 29, 2, 2004),
102 unsatisfiedBy(0, 0, 0, 27, 2, 2014),
103
104 unsatisfiedBy(0, 0, 0, 1, 3, 2014),
105 unsatisfiedBy(0, 0, 0, 26, 2, 2015),
106 unsatisfiedBy(0, 0, 0, 27, 2, 2015),
107 unsatisfiedBy(0, 0, 0, 28, 2, 2015),
108 unsatisfiedBy(0, 0, 0, 26, 2, 2016),
109 unsatisfiedBy(0, 0, 0, 27, 2, 2016),
110 unsatisfiedBy(0, 0, 0, 28, 2, 2016),
111 satisfiedBy(0, 0, 0, 29, 2, 2016));
112 }
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129 @Test
130 public void testNearestWeekdayToLastDayOfMonthEdgeCase() {
131 assertCron("Edge case - 2014/28/02 and 29W", "0 0 0 29W * ?", unsatisfiedBy(0, 0, 0, 28, 2, 2014));
132 assertCron("Edge case - 2010/04/30 and 31W", "0 0 0 31W * ?", unsatisfiedBy(0, 0, 0, 30, 4, 2010));
133 }
134
135 @Test
136 public void testClosestWeekdayToOffsetFromLastDayOfMonth() {
137 assertCron("L-3W (normal)", "0 0 0 L-3W * ?",
138 unsatisfiedBy(0, 0, 0, 27, 1, 2014),
139 satisfiedBy(0, 0, 0, 28, 1, 2014),
140 unsatisfiedBy(0, 0, 0, 29, 1, 2014),
141 unsatisfiedBy(0, 0, 0, 30, 1, 2014),
142 unsatisfiedBy(0, 0, 0, 31, 1, 2014),
143 unsatisfiedBy(0, 0, 0, 1, 2, 2014),
144 satisfiedBy(0, 0, 0, 28, 3, 2014),
145 unsatisfiedBy(0, 0, 0, 27, 4, 2014),
146 satisfiedBy(0, 0, 0, 28, 4, 2014),
147 satisfiedBy(0, 0, 0, 26, 9, 2014),
148 unsatisfiedBy(0, 0, 0, 27, 9, 2014),
149 unsatisfiedBy(0, 0, 0, 28, 12, 2014),
150 satisfiedBy(0, 0, 0, 29, 12, 2014));
151
152 assertCron("L-3W (February)", "0 0 0 L-3W * ?",
153 unsatisfiedBy(0, 0, 0, 24, 2, 2000),
154 satisfiedBy(0, 0, 0, 25, 2, 2000),
155 unsatisfiedBy(0, 0, 0, 26, 2, 2000),
156 unsatisfiedBy(0, 0, 0, 26, 2, 2012),
157 satisfiedBy(0, 0, 0, 27, 2, 2012),
158 unsatisfiedBy(0, 0, 0, 28, 2, 2012),
159 unsatisfiedBy(0, 0, 0, 24, 2, 2014),
160 satisfiedBy(0, 0, 0, 25, 2, 2014),
161 unsatisfiedBy(0, 0, 0, 26, 2, 2014),
162 unsatisfiedBy(0, 0, 0, 27, 2, 2014),
163 unsatisfiedBy(0, 0, 0, 25, 2, 2016),
164 satisfiedBy(0, 0, 0, 26, 2, 2016),
165 unsatisfiedBy(0, 0, 0, 27, 2, 2016));
166 }
167
168 @Test
169 public void testOffsetFromLastDayOfMonth() {
170 assertCron("L-3 (normal)", "0 0 0 L-3 * ?",
171 unsatisfiedBy(0, 0, 0, 27, 1, 2014),
172 satisfiedBy(0, 0, 0, 28, 1, 2014),
173 unsatisfiedBy(0, 0, 0, 29, 1, 2014),
174 unsatisfiedBy(0, 0, 0, 30, 1, 2014),
175 unsatisfiedBy(0, 0, 0, 31, 1, 2014),
176 unsatisfiedBy(0, 0, 0, 1, 2, 2014),
177 satisfiedBy(0, 0, 0, 28, 3, 2014),
178 satisfiedBy(0, 0, 0, 27, 4, 2014),
179 satisfiedBy(0, 0, 0, 27, 9, 2014),
180 satisfiedBy(0, 0, 0, 28, 12, 2014));
181
182 assertCron("L-3 (February)", "0 0 0 L-3 * ?",
183 unsatisfiedBy(0, 0, 0, 25, 2, 2000),
184 satisfiedBy(0, 0, 0, 26, 2, 2000),
185 unsatisfiedBy(0, 0, 0, 27, 2, 2000),
186 unsatisfiedBy(0, 0, 0, 28, 2, 2000),
187 unsatisfiedBy(0, 0, 0, 29, 2, 2000),
188 unsatisfiedBy(0, 0, 0, 24, 2, 2014),
189 satisfiedBy(0, 0, 0, 25, 2, 2014),
190 unsatisfiedBy(0, 0, 0, 26, 2, 2014),
191 unsatisfiedBy(0, 0, 0, 25, 2, 2016),
192 satisfiedBy(0, 0, 0, 26, 2, 2016),
193 unsatisfiedBy(0, 0, 0, 27, 2, 2016));
194 }
195 }