1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.http;
18
19 import java.net.URI;
20 import java.net.URISyntaxException;
21 import java.nio.charset.Charset;
22 import java.util.ArrayList;
23 import java.util.Arrays;
24 import java.util.Calendar;
25 import java.util.Collections;
26 import java.util.EnumSet;
27 import java.util.GregorianCalendar;
28 import java.util.List;
29 import java.util.Locale;
30 import java.util.TimeZone;
31
32 import org.hamcrest.Matchers;
33 import org.junit.Before;
34 import org.junit.Test;
35
36 import static org.junit.Assert.*;
37
38
39
40
41 public class HttpHeadersTests {
42
43 private HttpHeaders headers;
44
45
46 @Before
47 public void setUp() {
48 headers = new HttpHeaders();
49 }
50
51
52 @Test
53 public void accept() {
54 MediaType mediaType1 = new MediaType("text", "html");
55 MediaType mediaType2 = new MediaType("text", "plain");
56 List<MediaType> mediaTypes = new ArrayList<MediaType>(2);
57 mediaTypes.add(mediaType1);
58 mediaTypes.add(mediaType2);
59 headers.setAccept(mediaTypes);
60 assertEquals("Invalid Accept header", mediaTypes, headers.getAccept());
61 assertEquals("Invalid Accept header", "text/html, text/plain", headers.getFirst("Accept"));
62 }
63
64 @Test
65 public void acceptiPlanet() {
66 headers.add("Accept", "text/html");
67 headers.add("Accept", "text/plain");
68 List<MediaType> expected = Arrays.asList(new MediaType("text", "html"), new MediaType("text", "plain"));
69 assertEquals("Invalid Accept header", expected, headers.getAccept());
70 }
71
72 @Test
73 public void acceptCharsets() {
74 Charset charset1 = Charset.forName("UTF-8");
75 Charset charset2 = Charset.forName("ISO-8859-1");
76 List<Charset> charsets = new ArrayList<Charset>(2);
77 charsets.add(charset1);
78 charsets.add(charset2);
79 headers.setAcceptCharset(charsets);
80 assertEquals("Invalid Accept header", charsets, headers.getAcceptCharset());
81 assertEquals("Invalid Accept header", "utf-8, iso-8859-1", headers.getFirst("Accept-Charset"));
82 }
83
84 @Test
85 public void acceptCharsetWildcard() {
86 headers.set("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
87 assertEquals("Invalid Accept header", Arrays.asList(Charset.forName("ISO-8859-1"), Charset.forName("UTF-8")),
88 headers.getAcceptCharset());
89 }
90
91 @Test
92 public void allow() {
93 EnumSet<HttpMethod> methods = EnumSet.of(HttpMethod.GET, HttpMethod.POST);
94 headers.setAllow(methods);
95 assertEquals("Invalid Allow header", methods, headers.getAllow());
96 assertEquals("Invalid Allow header", "GET,POST", headers.getFirst("Allow"));
97 }
98
99 @Test
100 public void contentLength() {
101 long length = 42L;
102 headers.setContentLength(length);
103 assertEquals("Invalid Content-Length header", length, headers.getContentLength());
104 assertEquals("Invalid Content-Length header", "42", headers.getFirst("Content-Length"));
105 }
106
107 @Test
108 public void contentType() {
109 MediaType contentType = new MediaType("text", "html", Charset.forName("UTF-8"));
110 headers.setContentType(contentType);
111 assertEquals("Invalid Content-Type header", contentType, headers.getContentType());
112 assertEquals("Invalid Content-Type header", "text/html;charset=UTF-8", headers.getFirst("Content-Type"));
113 }
114
115 @Test
116 public void location() throws URISyntaxException {
117 URI location = new URI("http://www.example.com/hotels");
118 headers.setLocation(location);
119 assertEquals("Invalid Location header", location, headers.getLocation());
120 assertEquals("Invalid Location header", "http://www.example.com/hotels", headers.getFirst("Location"));
121 }
122
123 @Test
124 public void eTag() {
125 String eTag = "\"v2.6\"";
126 headers.setETag(eTag);
127 assertEquals("Invalid ETag header", eTag, headers.getETag());
128 assertEquals("Invalid ETag header", "\"v2.6\"", headers.getFirst("ETag"));
129 }
130
131 @Test(expected = IllegalArgumentException.class)
132 public void illegalETag() {
133 String eTag = "v2.6";
134 headers.setETag(eTag);
135 assertEquals("Invalid ETag header", eTag, headers.getETag());
136 assertEquals("Invalid ETag header", "\"v2.6\"", headers.getFirst("ETag"));
137 }
138
139 @Test
140 public void ifNoneMatch() {
141 String ifNoneMatch = "\"v2.6\"";
142 headers.setIfNoneMatch(ifNoneMatch);
143 assertEquals("Invalid If-None-Match header", ifNoneMatch, headers.getIfNoneMatch().get(0));
144 assertEquals("Invalid If-None-Match header", "\"v2.6\"", headers.getFirst("If-None-Match"));
145 }
146
147 @Test
148 public void ifNoneMatchList() {
149 String ifNoneMatch1 = "\"v2.6\"";
150 String ifNoneMatch2 = "\"v2.7\"";
151 List<String> ifNoneMatchList = new ArrayList<String>(2);
152 ifNoneMatchList.add(ifNoneMatch1);
153 ifNoneMatchList.add(ifNoneMatch2);
154 headers.setIfNoneMatch(ifNoneMatchList);
155 assertEquals("Invalid If-None-Match header", ifNoneMatchList, headers.getIfNoneMatch());
156 assertEquals("Invalid If-None-Match header", "\"v2.6\", \"v2.7\"", headers.getFirst("If-None-Match"));
157 }
158
159 @Test
160 public void date() {
161 Calendar calendar = new GregorianCalendar(2008, 11, 18, 11, 20);
162 calendar.setTimeZone(TimeZone.getTimeZone("CET"));
163 long date = calendar.getTimeInMillis();
164 headers.setDate(date);
165 assertEquals("Invalid Date header", date, headers.getDate());
166 assertEquals("Invalid Date header", "Thu, 18 Dec 2008 10:20:00 GMT", headers.getFirst("date"));
167
168
169 headers.set("Date", "Thursday, 18-Dec-08 11:20:00 CET");
170 assertEquals("Invalid Date header", date, headers.getDate());
171 }
172
173 @Test(expected = IllegalArgumentException.class)
174 public void dateInvalid() {
175 headers.set("Date", "Foo Bar Baz");
176 headers.getDate();
177 }
178
179 @Test
180 public void dateOtherLocale() {
181 Locale defaultLocale = Locale.getDefault();
182 try {
183 Locale.setDefault(new Locale("nl", "nl"));
184 Calendar calendar = new GregorianCalendar(2008, 11, 18, 11, 20);
185 calendar.setTimeZone(TimeZone.getTimeZone("CET"));
186 long date = calendar.getTimeInMillis();
187 headers.setDate(date);
188 assertEquals("Invalid Date header", "Thu, 18 Dec 2008 10:20:00 GMT", headers.getFirst("date"));
189 assertEquals("Invalid Date header", date, headers.getDate());
190 }
191 finally {
192 Locale.setDefault(defaultLocale);
193 }
194 }
195
196 @Test
197 public void lastModified() {
198 Calendar calendar = new GregorianCalendar(2008, 11, 18, 11, 20);
199 calendar.setTimeZone(TimeZone.getTimeZone("CET"));
200 long date = calendar.getTimeInMillis();
201 headers.setLastModified(date);
202 assertEquals("Invalid Last-Modified header", date, headers.getLastModified());
203 assertEquals("Invalid Last-Modified header", "Thu, 18 Dec 2008 10:20:00 GMT",
204 headers.getFirst("last-modified"));
205 }
206
207 @Test
208 public void expires() {
209 Calendar calendar = new GregorianCalendar(2008, 11, 18, 11, 20);
210 calendar.setTimeZone(TimeZone.getTimeZone("CET"));
211 long date = calendar.getTimeInMillis();
212 headers.setExpires(date);
213 assertEquals("Invalid Expires header", date, headers.getExpires());
214 assertEquals("Invalid Expires header", "Thu, 18 Dec 2008 10:20:00 GMT", headers.getFirst("expires"));
215 }
216
217
218
219 @Test
220 public void expiresInvalidDate() {
221 headers.set("Expires", "-1");
222 assertEquals(-1, headers.getExpires());
223 }
224
225 @Test
226 public void ifModifiedSince() {
227 Calendar calendar = new GregorianCalendar(2008, 11, 18, 11, 20);
228 calendar.setTimeZone(TimeZone.getTimeZone("CET"));
229 long date = calendar.getTimeInMillis();
230 headers.setIfModifiedSince(date);
231 assertEquals("Invalid If-Modified-Since header", date, headers.getIfModifiedSince());
232 assertEquals("Invalid If-Modified-Since header", "Thu, 18 Dec 2008 10:20:00 GMT",
233 headers.getFirst("if-modified-since"));
234 }
235
236 @Test
237 public void pragma() {
238 String pragma = "no-cache";
239 headers.setPragma(pragma);
240 assertEquals("Invalid Pragma header", pragma, headers.getPragma());
241 assertEquals("Invalid Pragma header", "no-cache", headers.getFirst("pragma"));
242 }
243
244 @Test
245 public void cacheControl() {
246 String cacheControl = "no-cache";
247 headers.setCacheControl(cacheControl);
248 assertEquals("Invalid Cache-Control header", cacheControl, headers.getCacheControl());
249 assertEquals("Invalid Cache-Control header", "no-cache", headers.getFirst("cache-control"));
250 }
251
252 @Test
253 public void contentDisposition() {
254 headers.setContentDispositionFormData("name", null);
255 assertEquals("Invalid Content-Disposition header", "form-data; name=\"name\"",
256 headers.getFirst("Content-Disposition"));
257
258 headers.setContentDispositionFormData("name", "filename");
259 assertEquals("Invalid Content-Disposition header", "form-data; name=\"name\"; filename=\"filename\"",
260 headers.getFirst("Content-Disposition"));
261 }
262
263 @Test
264 public void getAllowEmptySet() {
265 headers.setAllow(Collections.<HttpMethod> emptySet());
266 assertThat(headers.getAllow(), Matchers.emptyCollectionOf(HttpMethod.class));
267 }
268
269 }