1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.client5.http.utils;
29
30 import java.util.Calendar;
31 import java.util.Date;
32
33 import org.apache.hc.core5.http.HttpHeaders;
34 import org.apache.hc.core5.http.message.BasicHeader;
35 import org.apache.hc.core5.http.message.HeaderGroup;
36 import org.hamcrest.CoreMatchers;
37 import org.junit.Assert;
38 import org.junit.Test;
39
40
41
42
43 public class TestDateUtils {
44
45 private static Date createDate(final int year, final int month, final int day) {
46 final Calendar calendar = Calendar.getInstance();
47 calendar.setTimeZone(DateUtils.GMT);
48 calendar.setTimeInMillis(0);
49 calendar.set(year, month, day);
50 return calendar.getTime();
51 }
52
53 @Test
54 public void testBasicDateParse() throws Exception {
55 final Date date = createDate(2005, Calendar.OCTOBER, 14);
56 final String[] formats = new String[] { DateUtils.PATTERN_RFC1123 };
57 Assert.assertEquals(date, DateUtils.parseDate("Fri, 14 Oct 2005 00:00:00 GMT", formats, null));
58 Assert.assertEquals(date, DateUtils.parseDate("Fri, 14 Oct 2005 00:00:00 GMT", formats));
59 Assert.assertEquals(date, DateUtils.parseDate("Fri, 14 Oct 2005 00:00:00 GMT"));
60 }
61
62 @Test
63 public void testDateParseMessage() throws Exception {
64 final HeaderGroup message1 = new HeaderGroup();
65 message1.setHeader(new BasicHeader(HttpHeaders.DATE, "Fri, 14 Oct 2005 00:00:00 GMT"));
66 Assert.assertEquals(createDate(2005, Calendar.OCTOBER, 14), DateUtils.parseDate(message1, HttpHeaders.DATE));
67
68 final HeaderGroup message2 = new HeaderGroup();
69 message2.addHeader(new BasicHeader(HttpHeaders.DATE, "Fri, 14 Oct 2005 00:00:00 GMT"));
70 message2.addHeader(new BasicHeader(HttpHeaders.DATE, "Fri, 21 Oct 2005 00:00:00 GMT"));
71 Assert.assertEquals(createDate(2005, Calendar.OCTOBER, 14), DateUtils.parseDate(message2, HttpHeaders.DATE));
72 }
73
74 @Test
75 public void testMalformedDate() {
76 Assert.assertNull(DateUtils.parseDate("Fri, 14 Oct 2005 00:00:00 GMT", new String[] {}, null));
77 }
78
79 @Test
80 public void testInvalidInput() throws Exception {
81 try {
82 DateUtils.parseDate(null, null, null);
83 Assert.fail("NullPointerException should habe been thrown");
84 } catch (final NullPointerException ex) {
85
86 }
87 try {
88 DateUtils.formatDate(null);
89 Assert.fail("NullPointerException should habe been thrown");
90 } catch (final NullPointerException ex) {
91
92 }
93 try {
94 DateUtils.formatDate(new Date(), null);
95 Assert.fail("NullPointerException should habe been thrown");
96 } catch (final NullPointerException ex) {
97
98 }
99 }
100
101 @Test
102 public void testTwoDigitYearDateParse() throws Exception {
103 final String[] formats = new String[] { DateUtils.PATTERN_RFC1036 };
104 Assert.assertEquals(createDate(2005, Calendar.OCTOBER, 14), DateUtils.parseDate("Friday, 14-Oct-05 00:00:00 GMT", formats, null));
105 Assert.assertEquals(createDate(1905, Calendar.OCTOBER, 14), DateUtils.parseDate("Friday, 14-Oct-05 00:00:00 GMT", formats,
106 createDate(1900, Calendar.JANUARY, 0)));
107 }
108
109 @Test
110 public void testParseQuotedDate() throws Exception {
111 final Date date1 = createDate(2005, Calendar.OCTOBER, 14);
112 final String[] formats = new String[] { DateUtils.PATTERN_RFC1123 };
113 final Date date2 = DateUtils.parseDate("'Fri, 14 Oct 2005 00:00:00 GMT'", formats);
114 Assert.assertEquals(date1, date2);
115 }
116
117 @Test
118 public void testBasicDateFormat() throws Exception {
119 final Date date = createDate(2005, Calendar.OCTOBER, 14);
120 Assert.assertEquals("Fri, 14 Oct 2005 00:00:00 GMT", DateUtils.formatDate(date));
121 Assert.assertEquals("Fri, 14 Oct 2005 00:00:00 GMT", DateUtils.formatDate(date, DateUtils.PATTERN_RFC1123));
122 }
123
124 @Test
125 public void testIsBefore() throws Exception {
126 final HeaderGroup message1 = new HeaderGroup();
127 final HeaderGroup message2 = new HeaderGroup();
128 Assert.assertThat(DateUtils.isBefore(null, null, HttpHeaders.DATE), CoreMatchers.equalTo(false));
129 Assert.assertThat(DateUtils.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
130 message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
131 message2.setHeader(new BasicHeader(HttpHeaders.DATE, "eh?"));
132 Assert.assertThat(DateUtils.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
133 message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
134 message2.setHeader(new BasicHeader(HttpHeaders.DATE, "Tuesday, 26-Dec-2017 00:00:00 GMT"));
135 Assert.assertThat(DateUtils.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
136 message1.setHeader(new BasicHeader(HttpHeaders.DATE, "Wednesday, 25-Dec-2017 00:00:00 GMT"));
137 Assert.assertThat(DateUtils.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(true));
138 message1.setHeader(new BasicHeader(HttpHeaders.DATE, "Thursday, 27-Dec-2017 00:00:00 GMT"));
139 Assert.assertThat(DateUtils.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
140 }
141
142 @Test
143 public void testIsAfter() throws Exception {
144 final HeaderGroup message1 = new HeaderGroup();
145 final HeaderGroup message2 = new HeaderGroup();
146 Assert.assertThat(DateUtils.isAfter(null, null, HttpHeaders.DATE), CoreMatchers.equalTo(false));
147 Assert.assertThat(DateUtils.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
148 message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
149 message2.setHeader(new BasicHeader(HttpHeaders.DATE, "eh?"));
150 Assert.assertThat(DateUtils.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
151 message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
152 message2.setHeader(new BasicHeader(HttpHeaders.DATE, "Tuesday, 26-Dec-2017 00:00:00 GMT"));
153 Assert.assertThat(DateUtils.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
154 message1.setHeader(new BasicHeader(HttpHeaders.DATE, "Thursday, 27-Dec-2017 00:00:00 GMT"));
155 Assert.assertThat(DateUtils.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(true));
156 message1.setHeader(new BasicHeader(HttpHeaders.DATE, "Wednesday, 25-Dec-2017 00:00:00 GMT"));
157 Assert.assertThat(DateUtils.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
158 }
159 }