1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.validator.routines;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertNull;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23 import static org.junit.jupiter.api.Assertions.fail;
24
25 import java.text.DateFormat;
26 import java.text.Format;
27 import java.util.Calendar;
28 import java.util.Date;
29 import java.util.Locale;
30 import java.util.TimeZone;
31
32 import org.junit.jupiter.api.BeforeEach;
33 import org.junit.jupiter.api.Test;
34
35
36
37
38 public class CalendarValidatorTest extends AbstractCalendarValidatorTest {
39
40 private static final int DATE_2005_11_23 = 20051123;
41 private static final int TIME_12_03_45 = 120345;
42
43 private CalendarValidator calValidator;
44
45 @BeforeEach
46 protected void setUp() {
47 calValidator = new CalendarValidator();
48 validator = calValidator;
49 }
50
51
52
53
54 @Test
55 public void testAdjustToTimeZone() {
56
57 final Calendar calEST = createCalendar(EST, DATE_2005_11_23, TIME_12_03_45);
58 final Date dateEST = calEST.getTime();
59
60 final Calendar calGMT = createCalendar(GMT, DATE_2005_11_23, TIME_12_03_45);
61 final Date dateGMT = calGMT.getTime();
62
63 final Calendar calCET = createCalendar(EET, DATE_2005_11_23, TIME_12_03_45);
64 final Date dateCET = calCET.getTime();
65
66
67 assertFalse(dateGMT.getTime() == dateCET.getTime(), "Check GMT != CET");
68 assertFalse(dateGMT.getTime() == dateEST.getTime(), "Check GMT != EST");
69 assertFalse(dateCET.getTime() == dateEST.getTime(), "Check CET != EST");
70
71
72 CalendarValidator.adjustToTimeZone(calEST, GMT);
73 assertEquals(dateGMT, calEST.getTime(), "EST to GMT");
74 assertFalse(dateEST == calEST.getTime(), "Check EST = GMT");
75 CalendarValidator.adjustToTimeZone(calEST, EST);
76 assertEquals(dateEST, calEST.getTime(), "back to EST");
77 assertFalse(dateGMT == calEST.getTime(), "Check EST != GMT");
78
79
80 CalendarValidator.adjustToTimeZone(calCET, GMT);
81 assertEquals(dateGMT, calCET.getTime(), "CET to GMT");
82 assertFalse(dateCET == calCET.getTime(), "Check CET = GMT");
83 CalendarValidator.adjustToTimeZone(calCET, EET);
84 assertEquals(dateCET, calCET.getTime(), "back to CET");
85 assertFalse(dateGMT == calCET.getTime(), "Check CET != GMT");
86
87
88 final Calendar calUTC = createCalendar(UTC, DATE_2005_11_23, TIME_12_03_45);
89 assertTrue(UTC.hasSameRules(GMT), "SAME: UTC = GMT");
90 assertEquals(calUTC.getTime(), calGMT.getTime(), "SAME: Check time (A)");
91 assertFalse(GMT.equals(calUTC.getTimeZone()), "SAME: Check GMT(A)");
92 assertTrue(UTC.equals(calUTC.getTimeZone()), "SAME: Check UTC(A)");
93 CalendarValidator.adjustToTimeZone(calUTC, GMT);
94 assertEquals(calUTC.getTime(), calGMT.getTime(), "SAME: Check time (B)");
95 assertTrue(GMT.equals(calUTC.getTimeZone()), "SAME: Check GMT(B)");
96 assertFalse(UTC.equals(calUTC.getTimeZone()), "SAME: Check UTC(B)");
97 }
98
99
100
101
102 @Test
103 public void testCalendarValidatorMethods() {
104 Locale.setDefault(Locale.US);
105 final Locale locale = Locale.GERMAN;
106 final String pattern = "yyyy-MM-dd";
107 final String patternVal = "2005-12-31";
108 final String germanVal = "31 Dez 2005";
109 final String germanPattern = "dd MMM yyyy";
110 final String localeVal = "31.12.2005";
111 final String defaultVal = "12/31/05";
112 final String XXXX = "XXXX";
113 final Date expected = createCalendar(null, 20051231, 0).getTime();
114 assertEquals(expected, CalendarValidator.getInstance().validate(defaultVal).getTime(), "validate(A) default");
115 assertEquals(expected, CalendarValidator.getInstance().validate(localeVal, locale).getTime(), "validate(A) locale ");
116 assertEquals(expected, CalendarValidator.getInstance().validate(patternVal, pattern).getTime(), "validate(A) pattern");
117 assertEquals(expected, CalendarValidator.getInstance().validate(germanVal, germanPattern, Locale.GERMAN).getTime(), "validate(A) both");
118
119 assertTrue(CalendarValidator.getInstance().isValid(defaultVal), "isValid(A) default");
120 assertTrue(CalendarValidator.getInstance().isValid(localeVal, locale), "isValid(A) locale ");
121 assertTrue(CalendarValidator.getInstance().isValid(patternVal, pattern), "isValid(A) pattern");
122 assertTrue(CalendarValidator.getInstance().isValid(germanVal, germanPattern, Locale.GERMAN), "isValid(A) both");
123
124 assertNull(CalendarValidator.getInstance().validate(XXXX), "validate(B) default");
125 assertNull(CalendarValidator.getInstance().validate(XXXX, locale), "validate(B) locale ");
126 assertNull(CalendarValidator.getInstance().validate(XXXX, pattern), "validate(B) pattern");
127 assertNull(CalendarValidator.getInstance().validate("31 Dec 2005", germanPattern, Locale.GERMAN), "validate(B) both");
128
129 assertFalse(CalendarValidator.getInstance().isValid(XXXX), "isValid(B) default");
130 assertFalse(CalendarValidator.getInstance().isValid(XXXX, locale), "isValid(B) locale ");
131 assertFalse(CalendarValidator.getInstance().isValid(XXXX, pattern), "isValid(B) pattern");
132 assertFalse(CalendarValidator.getInstance().isValid("31 Dec 2005", germanPattern, Locale.GERMAN), "isValid(B) both");
133
134
135 final TimeZone zone = TimeZone.getDefault().getRawOffset() == EET.getRawOffset() ? EST : EET;
136 final Date expectedZone = createCalendar(zone, 20051231, 0).getTime();
137 assertFalse(expected.getTime() == expectedZone.getTime(), "default/EET same ");
138
139 assertEquals(expectedZone, CalendarValidator.getInstance().validate(defaultVal, zone).getTime(), "validate(C) default");
140 assertEquals(expectedZone, CalendarValidator.getInstance().validate(localeVal, locale, zone).getTime(), "validate(C) locale ");
141 assertEquals(expectedZone, CalendarValidator.getInstance().validate(patternVal, pattern, zone).getTime(), "validate(C) pattern");
142 assertEquals(expectedZone, CalendarValidator.getInstance().validate(germanVal, germanPattern, Locale.GERMAN, zone).getTime(), "validate(C) both");
143 }
144
145
146
147
148 @Test
149 public void testCompare() {
150 final int sameTime = 124522;
151 final int testDate = 20050823;
152 final Calendar diffHour = createCalendar(GMT, testDate, 115922);
153 final Calendar diffMin = createCalendar(GMT, testDate, 124422);
154 final Calendar diffSec = createCalendar(GMT, testDate, 124521);
155
156 final Calendar value = createCalendar(GMT, testDate, sameTime);
157 final Calendar cal20050824 = createCalendar(GMT, 20050824, sameTime);
158 final Calendar cal20050822 = createCalendar(GMT, 20050822, sameTime);
159
160 final Calendar cal20050830 = createCalendar(GMT, 20050830, sameTime);
161 final Calendar cal20050816 = createCalendar(GMT, 20050816, sameTime);
162
163 final Calendar cal20050901 = createCalendar(GMT, 20050901, sameTime);
164 final Calendar cal20050801 = createCalendar(GMT, 20050801, sameTime);
165 final Calendar cal20050731 = createCalendar(GMT, 20050731, sameTime);
166
167 final Calendar cal20051101 = createCalendar(GMT, 20051101, sameTime);
168 final Calendar cal20051001 = createCalendar(GMT, 20051001, sameTime);
169 final Calendar cal20050701 = createCalendar(GMT, 20050701, sameTime);
170 final Calendar cal20050630 = createCalendar(GMT, 20050630, sameTime);
171
172 final Calendar cal20060101 = createCalendar(GMT, 20060101, sameTime);
173 final Calendar cal20050101 = createCalendar(GMT, 20050101, sameTime);
174 final Calendar cal20041231 = createCalendar(GMT, 20041231, sameTime);
175
176 assertEquals(1, calValidator.compare(value, diffHour, Calendar.HOUR_OF_DAY), "hour GT");
177 assertEquals(0, calValidator.compare(value, diffMin, Calendar.HOUR_OF_DAY), "hour EQ");
178 assertEquals(1, calValidator.compare(value, diffMin, Calendar.MINUTE), "mins GT");
179 assertEquals(0, calValidator.compare(value, diffSec, Calendar.MINUTE), "mins EQ");
180 assertEquals(1, calValidator.compare(value, diffSec, Calendar.SECOND), "secs GT");
181
182 assertEquals(-1, calValidator.compareDates(value, cal20050824), "date LT");
183 assertEquals(0, calValidator.compareDates(value, diffHour), "date EQ");
184 assertEquals(0, calValidator.compare(value, diffHour, Calendar.DAY_OF_YEAR), "date(B)");
185 assertEquals(1, calValidator.compareDates(value, cal20050822), "date GT");
186
187 assertEquals(-1, calValidator.compareWeeks(value, cal20050830), "week LT");
188 assertEquals(0, calValidator.compareWeeks(value, cal20050824), "week =1");
189 assertEquals(0, calValidator.compareWeeks(value, cal20050822), "week =2");
190 assertEquals(0, calValidator.compare(value, cal20050822, Calendar.WEEK_OF_MONTH), "week =3");
191 assertEquals(0, calValidator.compareWeeks(value, cal20050822), "week =4");
192 assertEquals(1, calValidator.compareWeeks(value, cal20050816), "week GT");
193
194 assertEquals(-1, calValidator.compareMonths(value, cal20050901), "mnth LT");
195 assertEquals(0, calValidator.compareMonths(value, cal20050830), "mnth =1");
196 assertEquals(0, calValidator.compareMonths(value, cal20050801), "mnth =2");
197 assertEquals(0, calValidator.compareMonths(value, cal20050816), "mnth =3");
198 assertEquals(1, calValidator.compareMonths(value, cal20050731), "mnth GT");
199
200 assertEquals(-1, calValidator.compareQuarters(value, cal20051101), "qtrA <1");
201 assertEquals(-1, calValidator.compareQuarters(value, cal20051001), "qtrA <2");
202 assertEquals(0, calValidator.compareQuarters(value, cal20050901), "qtrA =1");
203 assertEquals(0, calValidator.compareQuarters(value, cal20050701), "qtrA =2");
204 assertEquals(0, calValidator.compareQuarters(value, cal20050731), "qtrA =3");
205 assertEquals(1, calValidator.compareQuarters(value, cal20050630), "qtrA GT");
206
207
208 assertEquals(-1, calValidator.compareQuarters(value, cal20051101, 2), "qtrB LT");
209 assertEquals(0, calValidator.compareQuarters(value, cal20051001, 2), "qtrB =1");
210 assertEquals(0, calValidator.compareQuarters(value, cal20050901, 2), "qtrB =2");
211 assertEquals(1, calValidator.compareQuarters(value, cal20050701, 2), "qtrB =3");
212 assertEquals(1, calValidator.compareQuarters(value, cal20050731, 2), "qtrB =4");
213 assertEquals(1, calValidator.compareQuarters(value, cal20050630, 2), "qtrB GT");
214
215 assertEquals(-1, calValidator.compareYears(value, cal20060101), "year LT");
216 assertEquals(0, calValidator.compareYears(value, cal20050101), "year EQ");
217 assertEquals(1, calValidator.compareYears(value, cal20041231), "year GT");
218
219
220 try {
221 calValidator.compare(value, value, -1);
222 fail("Invalid Compare field - expected IllegalArgumentException to be thrown");
223 } catch (final IllegalArgumentException e) {
224 assertEquals(e.getMessage(), "Invalid field: -1", "check message");
225 }
226 }
227
228
229
230
231 @Test
232 public void testDateTimeStyle() {
233
234 final Locale origDefault = Locale.getDefault();
235 Locale.setDefault(Locale.UK);
236
237 final AbstractCalendarValidator dateTimeValidator = new AbstractCalendarValidator(true, DateFormat.SHORT, DateFormat.SHORT) {
238 private static final long serialVersionUID = 1L;
239
240 @Override
241 protected Object processParsedValue(final Object value, final Format formatter) {
242 return value;
243 }
244 };
245 assertTrue(dateTimeValidator.isValid("31/12/05 14:23"), "validate(A) default");
246 assertTrue(dateTimeValidator.isValid("12/31/05 2:23 PM", Locale.US), "validate(A) locale ");
247
248
249 Locale.setDefault(origDefault);
250 }
251
252
253
254
255 @Override
256 @Test
257 public void testFormat() {
258
259 final Locale origDefault = Locale.getDefault();
260 Locale.setDefault(Locale.UK);
261
262 final Calendar cal20050101 = createCalendar(GMT, 20051231, 11500);
263 assertNull(calValidator.format(null), "null");
264 assertEquals("31/12/05", calValidator.format(cal20050101), "default");
265 assertEquals("12/31/05", calValidator.format(cal20050101, Locale.US), "locale");
266 assertEquals(calValidator.format(cal20050101, "yyyy-MM-dd HH:mm"), "2005-12-31 01:15", "patternA");
267 assertEquals(calValidator.format(cal20050101, "yyyy-MM-dd z"), "2005-12-31 GMT", "patternB");
268 assertEquals("31 Dez 2005", calValidator.format(cal20050101, "dd MMM yyyy", Locale.GERMAN), "both");
269
270
271 assertEquals("30/12/05", calValidator.format(cal20050101, EST), "EST default");
272 assertEquals("12/30/05", calValidator.format(cal20050101, Locale.US, EST), "EST locale");
273 assertEquals(calValidator.format(cal20050101, "yyyy-MM-dd HH:mm", EST), "2005-12-30 20:15", "EST patternA");
274 assertEquals(calValidator.format(cal20050101, "yyyy-MM-dd z", EST), "2005-12-30 EST", "EST patternB");
275 assertEquals("30 Dez 2005", calValidator.format(cal20050101, "dd MMM yyyy", Locale.GERMAN, EST), "EST both");
276
277
278 Locale.setDefault(origDefault);
279 }
280
281 }