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.assertNotNull;
22 import static org.junit.jupiter.api.Assertions.assertNull;
23 import static org.junit.jupiter.api.Assertions.assertTrue;
24
25 import java.util.Calendar;
26 import java.util.Date;
27 import java.util.Locale;
28 import java.util.TimeZone;
29
30 import org.junit.jupiter.api.AfterEach;
31 import org.junit.jupiter.api.BeforeEach;
32 import org.junit.jupiter.api.Test;
33
34
35
36
37 public class TimeValidatorTest {
38
39 protected static final TimeZone GMT = TimeZone.getTimeZone("GMT");
40 protected static final TimeZone EST = TimeZone.getTimeZone("EST");
41
42
43
44
45
46
47
48
49
50 protected static Date createDate(final TimeZone zone, final int time, final int millisecond) {
51 final Calendar calendar = createTime(zone, time, millisecond);
52 return calendar.getTime();
53 }
54
55
56
57
58
59
60
61
62
63 protected static Calendar createTime(final TimeZone zone, final int time, final int millisecond) {
64 final Calendar calendar = zone == null ? Calendar.getInstance() : Calendar.getInstance(zone);
65 final int hour = time / 10000 * 10000;
66 final int min = time / 100 * 100 - hour;
67 final int sec = time - (hour + min);
68 calendar.set(Calendar.YEAR, 1970);
69 calendar.set(Calendar.MONTH, 0);
70 calendar.set(Calendar.DATE, 1);
71 calendar.set(Calendar.HOUR_OF_DAY, hour / 10000);
72 calendar.set(Calendar.MINUTE, min / 100);
73 calendar.set(Calendar.SECOND, sec);
74 calendar.set(Calendar.MILLISECOND, millisecond);
75 return calendar;
76 }
77
78 protected TimeValidator validator;
79 protected String[] patternValid = { "23-59-59", "00-00-00", "00-00-01", "0-0-0", "1-12-1", "10-49-18", "16-23-46" };
80 protected Date[] patternExpect = { createDate(null, 235959, 0), createDate(null, 0, 0), createDate(null, 1, 0), createDate(null, 0, 0),
81 createDate(null, 11201, 0), createDate(null, 104918, 0), createDate(null, 162346, 0) };
82 protected String[] localeValid = { "23:59", "00:00", "00:01", "0:0", "1:12", "10:49", "16:23" };
83 protected Date[] localeExpect = { createDate(null, 235900, 0), createDate(null, 0, 0), createDate(null, 100, 0), createDate(null, 0, 0),
84 createDate(null, 11200, 0), createDate(null, 104900, 0), createDate(null, 162300, 0) };
85
86 protected String[] patternInvalid = { "24-00-00"
87 , "24-00-01"
88 , "25-02-03"
89 , "10-61-31"
90 , "10-01-61"
91 , "05:02-29"
92 , "0X-01:01"
93 , "05-0X-01"
94 , "10-01-0X"
95 , "01:01:05"
96 , "10-10"
97 , "10--10"
98 , "10-10-" };
99 protected String[] localeInvalid = { "24:00"
100 , "24:00"
101 , "25:02"
102 , "10:61"
103 , "05-02"
104 , "0X:01"
105 , "05:0X"
106 , "01-01"
107 , "10:"
108 , "10::1"
109 , "10:1:" };
110
111 private Locale origDefault;
112
113 private TimeZone defaultZone;
114
115 @BeforeEach
116 protected void setUp() {
117 validator = new TimeValidator();
118 defaultZone = TimeZone.getDefault();
119 origDefault = Locale.getDefault();
120 }
121
122
123
124
125 @AfterEach
126 protected void tearDown() {
127 validator = null;
128 Locale.setDefault(origDefault);
129 TimeZone.setDefault(defaultZone);
130 }
131
132
133
134
135 @Test
136 public void testCompare() {
137 final int testTime = 154523;
138 final int min = 100;
139 final int hour = 10000;
140
141 final Calendar milliGreater = createTime(GMT, testTime, 500);
142 final Calendar value = createTime(GMT, testTime, 400);
143 final Calendar milliLess = createTime(GMT, testTime, 300);
144
145 final Calendar secGreater = createTime(GMT, testTime + 1, 100);
146 final Calendar secLess = createTime(GMT, testTime - 1, 100);
147
148 final Calendar minGreater = createTime(GMT, testTime + min, 100);
149 final Calendar minLess = createTime(GMT, testTime - min, 100);
150
151 final Calendar hourGreater = createTime(GMT, testTime + hour, 100);
152 final Calendar hourLess = createTime(GMT, testTime - hour, 100);
153
154 assertEquals(-1, validator.compareTime(value, milliGreater), "mili LT");
155 assertEquals(0, validator.compareTime(value, value), "mili EQ");
156 assertEquals(1, validator.compareTime(value, milliLess), "mili GT");
157
158 assertEquals(-1, validator.compareSeconds(value, secGreater), "secs LT");
159 assertEquals(0, validator.compareSeconds(value, milliGreater), "secs =1");
160 assertEquals(0, validator.compareSeconds(value, value), "secs =2");
161 assertEquals(0, validator.compareSeconds(value, milliLess), "secs =3");
162 assertEquals(1, validator.compareSeconds(value, secLess), "secs GT");
163
164 assertEquals(-1, validator.compareMinutes(value, minGreater), "mins LT");
165 assertEquals(0, validator.compareMinutes(value, secGreater), "mins =1");
166 assertEquals(0, validator.compareMinutes(value, value), "mins =2");
167 assertEquals(0, validator.compareMinutes(value, secLess), "mins =3");
168 assertEquals(1, validator.compareMinutes(value, minLess), "mins GT");
169
170 assertEquals(-1, validator.compareHours(value, hourGreater), "hour LT");
171 assertEquals(0, validator.compareHours(value, minGreater), "hour =1");
172 assertEquals(0, validator.compareHours(value, value), "hour =2");
173 assertEquals(0, validator.compareHours(value, minLess), "hour =3");
174 assertEquals(1, validator.compareHours(value, hourLess), "hour GT");
175
176 }
177
178
179
180
181 @Test
182 public void testFormat() {
183
184 Locale.setDefault(Locale.UK);
185
186 final Object test = TimeValidator.getInstance().validate("16:49:23", "HH:mm:ss");
187 assertNotNull(test, "Test Date ");
188 assertEquals(validator.format(test, "HH-mm-ss"), "16-49-23", "Format pattern");
189 assertEquals(validator.format(test, Locale.US), "4:49 PM", "Format locale");
190 assertEquals(validator.format(test), "16:49", "Format default");
191
192 }
193
194
195
196
197 @Test
198 public void testLocaleInvalid() {
199 for (int i = 0; i < localeInvalid.length; i++) {
200 final String text = i + " value=[" + localeInvalid[i] + "] passed ";
201 final Object date = validator.validate(localeInvalid[i], Locale.US);
202 assertNull(date, () -> "validate() " + text + date);
203 assertFalse(validator.isValid(localeInvalid[i], Locale.UK), () -> "isValid() " + text);
204 }
205 }
206
207
208
209
210 @Test
211 public void testLocaleValid() {
212 for (int i = 0; i < localeValid.length; i++) {
213 final String text = i + " value=[" + localeValid[i] + "] failed ";
214 final Calendar calendar = validator.validate(localeValid[i], Locale.UK);
215 assertNotNull(calendar, () -> "validate() " + text);
216 final Date date = calendar.getTime();
217 assertTrue(validator.isValid(localeValid[i], Locale.UK), () -> "isValid() " + text);
218 assertEquals(localeExpect[i], date, () -> "compare " + text);
219 }
220 }
221
222
223
224
225 @Test
226 public void testPatternInvalid() {
227 for (int i = 0; i < patternInvalid.length; i++) {
228 final String text = i + " value=[" + patternInvalid[i] + "] passed ";
229 final Object date = validator.validate(patternInvalid[i], "HH-mm-ss");
230 assertNull(date, () -> "validate() " + text + date);
231 assertFalse(validator.isValid(patternInvalid[i], "HH-mm-ss"), () -> "isValid() " + text);
232 }
233 }
234
235
236
237
238 @Test
239 public void testPatternValid() {
240 for (int i = 0; i < patternValid.length; i++) {
241 final String text = i + " value=[" + patternValid[i] + "] failed ";
242 final Calendar calendar = validator.validate(patternValid[i], "HH-mm-ss");
243 assertNotNull(calendar, () -> "validateObj() " + text);
244 final Date date = calendar.getTime();
245 assertTrue(validator.isValid(patternValid[i], "HH-mm-ss"), () -> "isValid() " + text);
246 assertEquals(patternExpect[i], date, () -> "compare " + text);
247 }
248 }
249
250
251
252
253 @Test
254 public void testTimeZone() {
255
256 Locale.setDefault(Locale.UK);
257 TimeZone.setDefault(GMT);
258
259 Calendar result;
260
261
262 result = validator.validate("18:01");
263 assertNotNull(result, "default result");
264 assertEquals(GMT, result.getTimeZone(), "default zone");
265 assertEquals(18, result.get(Calendar.HOUR_OF_DAY), "default hour");
266 assertEquals(01, result.get(Calendar.MINUTE), "default minute");
267 result = null;
268
269
270 result = validator.validate("16:49", EST);
271 assertNotNull(result, "zone result");
272 assertEquals(EST, result.getTimeZone(), "zone zone");
273 assertEquals(16, result.get(Calendar.HOUR_OF_DAY), "zone hour");
274 assertEquals(49, result.get(Calendar.MINUTE), "zone minute");
275 result = null;
276
277
278 result = validator.validate("14-34", "HH-mm", EST);
279 assertNotNull(result, "pattern result");
280 assertEquals(EST, result.getTimeZone(), "pattern zone");
281 assertEquals(14, result.get(Calendar.HOUR_OF_DAY), "pattern hour");
282 assertEquals(34, result.get(Calendar.MINUTE), "pattern minute");
283 result = null;
284
285
286 result = validator.validate("7:18 PM", Locale.US, EST);
287 assertNotNull(result, "locale result");
288 assertEquals(EST, result.getTimeZone(), "locale zone");
289 assertEquals(19, result.get(Calendar.HOUR_OF_DAY), "locale hour");
290 assertEquals(18, result.get(Calendar.MINUTE), "locale minute");
291 result = null;
292
293
294 result = validator.validate("31/Dez/05 21-05", "dd/MMM/yy HH-mm", Locale.GERMAN, EST);
295 assertNotNull(result, "pattern result");
296 assertEquals(EST, result.getTimeZone(), "pattern zone");
297 assertEquals(2005, result.get(Calendar.YEAR), "pattern day");
298 assertEquals(11, result.get(Calendar.MONTH), "pattern day");
299 assertEquals(31, result.get(Calendar.DATE), "pattern day");
300 assertEquals(21, result.get(Calendar.HOUR_OF_DAY), "pattern hour");
301 assertEquals(05, result.get(Calendar.MINUTE), "pattern minute");
302 result = null;
303
304
305 result = validator.validate("31/Dez/05 21-05", "dd/MMM/yy HH-mm", Locale.GERMAN);
306 assertNotNull(result, "pattern result");
307 assertEquals(GMT, result.getTimeZone(), "pattern zone");
308 assertEquals(2005, result.get(Calendar.YEAR), "pattern day");
309 assertEquals(11, result.get(Calendar.MONTH), "pattern day");
310 assertEquals(31, result.get(Calendar.DATE), "pattern day");
311 assertEquals(21, result.get(Calendar.HOUR_OF_DAY), "pattern hour");
312 assertEquals(05, result.get(Calendar.MINUTE), "pattern minute");
313 result = null;
314
315 }
316 }