|
|
|
|
@@ -3,18 +3,19 @@ package org.springframework.web.servlet.resources;
|
|
|
|
|
import static org.junit.Assert.assertEquals;
|
|
|
|
|
import static org.junit.Assert.assertTrue;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
|
|
|
import org.junit.Before;
|
|
|
|
|
import org.junit.Test;
|
|
|
|
|
import org.springframework.core.io.ClassPathResource;
|
|
|
|
|
import org.springframework.core.io.Resource;
|
|
|
|
|
import org.springframework.mock.web.MockHttpServletRequest;
|
|
|
|
|
import org.springframework.mock.web.MockHttpServletResponse;
|
|
|
|
|
import org.springframework.web.HttpRequestMethodNotSupportedException;
|
|
|
|
|
import org.springframework.web.servlet.HandlerMapping;
|
|
|
|
|
import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException;
|
|
|
|
|
import org.springframework.web.servlet.resources.ResourceHttpRequestHandler;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class ResourceHttpRequestHandlerTests {
|
|
|
|
|
|
|
|
|
|
@@ -22,7 +23,10 @@ public class ResourceHttpRequestHandlerTests {
|
|
|
|
|
|
|
|
|
|
@Before
|
|
|
|
|
public void setUp() {
|
|
|
|
|
handler = new ResourceHttpRequestHandler(new ClassPathResource("test/", getClass()));
|
|
|
|
|
List<Resource> resourcePaths = new ArrayList<Resource>();
|
|
|
|
|
resourcePaths.add(new ClassPathResource("test/", getClass()));
|
|
|
|
|
resourcePaths.add(new ClassPathResource("testalternatepath/", getClass()));
|
|
|
|
|
handler = new ResourceHttpRequestHandler(resourcePaths);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@@ -40,32 +44,21 @@ public class ResourceHttpRequestHandlerTests {
|
|
|
|
|
assertEquals(response.getHeader("Last-Modified"), new ClassPathResource("test/foo.css", getClass()).getFile().lastModified());
|
|
|
|
|
assertEquals("h1 { color:red; }", response.getContentAsString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void getResourceBundle() throws Exception {
|
|
|
|
|
public void getResourceFromAlternatePath() throws Exception {
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
|
|
|
|
request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "/foo.css,bar.css");
|
|
|
|
|
request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "/baz.css");
|
|
|
|
|
request.setMethod("GET");
|
|
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
|
|
|
|
handler.handleRequest(request, response);
|
|
|
|
|
assertEquals("text/css", response.getContentType());
|
|
|
|
|
assertEquals(36, response.getContentLength());
|
|
|
|
|
assertEquals(17, response.getContentLength());
|
|
|
|
|
assertTrue(((Long)response.getHeader("Expires")) > System.currentTimeMillis() + (31556926 * 1000) - 10000);
|
|
|
|
|
assertEquals("max-age=31556926", response.getHeader("Cache-Control"));
|
|
|
|
|
assertTrue(response.containsHeader("Last-Modified"));
|
|
|
|
|
assertEquals(response.getHeader("Last-Modified"), new ClassPathResource("test/bar.css", getClass()).getFile().lastModified());
|
|
|
|
|
assertEquals("h1 { color:red; }h2 { color:white; }", response.getContentAsString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void getResourceBundleDifferentTypes() throws Exception {
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
|
|
|
|
request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "/foo.css,/js/bar.js");
|
|
|
|
|
request.setMethod("GET");
|
|
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
|
|
|
|
handler.handleRequest(request, response);
|
|
|
|
|
assertEquals("text/css", response.getContentType());
|
|
|
|
|
assertEquals("h1 { color:red; }function foo() { console.log(\"hello bar\"); }", response.getContentAsString());
|
|
|
|
|
assertEquals(response.getHeader("Last-Modified"), new ClassPathResource("testalternatepath/baz.css", getClass()).getFile().lastModified());
|
|
|
|
|
assertEquals("h1 { color:red; }", response.getContentAsString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@@ -75,31 +68,28 @@ public class ResourceHttpRequestHandlerTests {
|
|
|
|
|
request.setMethod("GET");
|
|
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
|
|
|
|
handler.handleRequest(request, response);
|
|
|
|
|
System.out.println(response.getContentAsString());
|
|
|
|
|
assertEquals("text/javascript", response.getContentType());
|
|
|
|
|
assertEquals("function foo() { console.log(\"hello world\"); }", response.getContentAsString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void getResourceBundleDifferentTypesIncludingDirectory() throws Exception {
|
|
|
|
|
public void getResourceFromSubDirectoryOfAlternatePath() throws Exception {
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
|
|
|
|
request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "/foo.css,/js,/js/foo.js");
|
|
|
|
|
request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "/js/baz.js");
|
|
|
|
|
request.setMethod("GET");
|
|
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
|
|
|
|
handler.handleRequest(request, response);
|
|
|
|
|
assertEquals("text/css", response.getContentType());
|
|
|
|
|
assertEquals("h1 { color:red; }function foo() { console.log(\"hello world\"); }", response.getContentAsString());
|
|
|
|
|
assertEquals("text/javascript", response.getContentType());
|
|
|
|
|
assertEquals("function foo() { console.log(\"hello world\"); }", response.getContentAsString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void notModified() throws Exception {
|
|
|
|
|
public void lastModified() throws Exception {
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
|
|
|
|
request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "/foo.css");
|
|
|
|
|
request.addHeader("If-Modified-Since", new ClassPathResource("test/foo.css", getClass()).getFile().lastModified());
|
|
|
|
|
request.setMethod("GET");
|
|
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
|
|
|
|
handler.handleRequest(request, response);
|
|
|
|
|
assertEquals(HttpServletResponse.SC_NOT_MODIFIED, response.getStatus());
|
|
|
|
|
long expected = new ClassPathResource("test/foo.css", getClass()).lastModified();
|
|
|
|
|
long lastModified = handler.getLastModified(request);
|
|
|
|
|
assertEquals(expected, lastModified);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
@@ -124,13 +114,14 @@ public class ResourceHttpRequestHandlerTests {
|
|
|
|
|
assertEquals(404, response.getStatus());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test(expected=NoSuchRequestHandlingMethodException.class)
|
|
|
|
|
@Test
|
|
|
|
|
public void missingResourcePath() throws Exception {
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
|
|
|
|
request.setAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, "");
|
|
|
|
|
request.setMethod("GET");
|
|
|
|
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
|
|
|
|
handler.handleRequest(request, response);
|
|
|
|
|
assertEquals(404, response.getStatus());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test(expected=IllegalStateException.class)
|
|
|
|
|
@@ -159,5 +150,4 @@ public class ResourceHttpRequestHandlerTests {
|
|
|
|
|
handler.handleRequest(request, response);
|
|
|
|
|
assertEquals(404, response.getStatus());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|