// Copyright 2012 Google Inc. All Rights Reserved. package com.google.inject.servlet; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import javax.servlet.http.HttpServletRequest; import junit.framework.TestCase; /** * Unit test for the servlet utility class. * * @author ntang@google.com (Michael Tang) */ public class ServletUtilsTest extends TestCase { public void testGetContextRelativePath() { assertEquals( "/test.html", getContextRelativePath("/a_context_path", "/a_context_path/test.html")); assertEquals("/test.html", getContextRelativePath("", "/test.html")); assertEquals("/test.html", getContextRelativePath("", "/foo/../test.html")); assertEquals("/test.html", getContextRelativePath("", "/././foo/../test.html")); assertEquals("/test.html", getContextRelativePath("", "/foo/../../../../test.html")); assertEquals("/test.html", getContextRelativePath("", "/foo/%2E%2E/test.html")); // %2E == '.' assertEquals("/test.html", getContextRelativePath("", "/foo/%2E%2E/test.html")); // %2F == '/' assertEquals("/foo/%2F/test.html", getContextRelativePath("", "/foo/%2F/test.html")); // %66 == 'f' assertEquals("/foo.html", getContextRelativePath("", "/%66oo.html")); } public void testGetContextRelativePath_preserveQuery() { assertEquals("/foo?q=f", getContextRelativePath("", "/foo?q=f")); assertEquals("/foo?q=%20+%20", getContextRelativePath("", "/foo?q=%20+%20")); } public void testGetContextRelativePathWithWrongPath() { assertNull(getContextRelativePath("/a_context_path", "/test.html")); } public void testGetContextRelativePathWithRootPath() { assertEquals("/", getContextRelativePath("/a_context_path", "/a_context_path")); } public void testGetContextRelativePathWithEmptyPath() { assertNull(getContextRelativePath("", "")); } private String getContextRelativePath(String contextPath, String requestPath) { HttpServletRequest mock = createMock(HttpServletRequest.class); expect(mock.getContextPath()).andReturn(contextPath); expect(mock.getRequestURI()).andReturn(requestPath); replay(mock); String contextRelativePath = ServletUtils.getContextRelativePath(mock); verify(mock); return contextRelativePath; } }