/** * */ package ro.isdc.wro.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Collections; import java.util.Enumeration; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.Mockito; import ro.isdc.wro.config.Context; /** * Test {@link WroUtil} class. * * @author Alex Objelean */ public class TestWroUtil { private Locale defaultLocale; @BeforeClass public static void onBeforeClass() { assertEquals(0, Context.countActive()); } @AfterClass public static void onAfterClass() { assertEquals(0, Context.countActive()); } @Before public void setUp() { defaultLocale = Locale.getDefault(); } @After public void tearDown() { Locale.setDefault(defaultLocale); } @Test(expected = IllegalArgumentException.class) public void cannotComputeEmptyLocation() { WroUtil.getPathInfoFromLocation(mockContextPathRequest(null), ""); } @Test public void computePathFromSomeLocation() { final String result = WroUtil.getPathInfoFromLocation(mockContextPathRequest(null), "location"); assertEquals("", result); } @Test public void computePathFromNestedLocation() { final String result = WroUtil.getPathInfoFromLocation(mockContextPathRequest(null), "/a/b/c/d"); assertEquals("/b/c/d", result); } @Test public void computePathFromLocationWithContextRoot() { final String result = WroUtil.getPathInfoFromLocation(mockContextPathRequest("/a"), "/a/b/c/d"); assertEquals("/b/c/d", result); } @Test public void computePathFromLocationWithDifferentContextRoot() { final String result = WroUtil.getPathInfoFromLocation(mockContextPathRequest("/z"), "/a/b/c/d"); assertEquals("/a/b/c/d", result); } @Test public void computeServletPathFromLocation() { final String result = WroUtil.getServletPathFromLocation(mockContextPathRequest(null), "/a/b/c/d"); assertEquals("/a", result); } /** * Test for several mangled header examples based on {@link http * ://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/} blog post. */ @Test public void testGzipSupport() throws Exception { HttpServletRequest request = mockRequestHeader("", ""); assertFalse(WroUtil.isGzipSupported(request)); request = mockRequestHeader("Accept-Encoding", ""); assertFalse(WroUtil.isGzipSupported(request)); request = mockRequestHeader("Accept-Encoding", "gzip, deflate"); assertTrue(WroUtil.isGzipSupported(request)); request = mockRequestHeader("Accept-Encoding", "XYZ"); assertFalse(WroUtil.isGzipSupported(request)); request = mockRequestHeader("Accept-EncodXng", "XXXXXXXXXXXXX"); assertTrue(WroUtil.isGzipSupported(request)); request = mockRequestHeader("X-cept-Encoding", "gzip,deflate"); assertTrue(WroUtil.isGzipSupported(request)); request = mockRequestHeader("XXXXXXXXXXXXXXX", "XXXXXXXXXXXXX"); assertTrue(WroUtil.isGzipSupported(request)); request = mockRequestHeader("XXXXXXXXXXXXXXXX", "gzip, deflate"); assertFalse(WroUtil.isGzipSupported(request)); request = mockRequestHeader("---------------", "-------------"); assertTrue(WroUtil.isGzipSupported(request)); request = mockRequestHeader("~~~~~~~~~~~~~~~", "~~~~~~~~~~~~~"); assertTrue(WroUtil.isGzipSupported(request)); request = mockRequestHeader("Accept-Encoding", "gzip,deflate,sdch"); assertTrue(WroUtil.isGzipSupported(request)); } private HttpServletRequest mockRequestHeader(final String headerName, final String headerValue) { final HttpServletRequest request = Mockito.mock(HttpServletRequest.class); final Enumeration<String> enumeration = Collections.enumeration(Arrays.asList(headerName)); Mockito.when(request.getHeaderNames()).thenReturn(enumeration); Mockito.when(request.getHeader(headerName)).thenReturn(headerValue); return request; } private HttpServletRequest mockContextPathRequest(final String contextPath) { final HttpServletRequest request = Mockito.mock(HttpServletRequest.class); Mockito.when(request.getContextPath()).thenReturn(contextPath); return request; } @Test public void testToJsMultilineString() { assertEquals("[\"\\n\"].join(\"\\n\")", WroUtil.toJSMultiLineString("")); assertEquals("[\"alert1\\n\"].join(\"\\n\")", WroUtil.toJSMultiLineString("alert1")); assertEquals("[\"\",\"alert1\",\"alert2\"].join(\"\\n\")", WroUtil.toJSMultiLineString("\nalert1\nalert2")); } @Test public void shouldMatchUrl() { final HttpServletRequest request = Mockito.mock(HttpServletRequest.class); Mockito.when(request.getRequestURI()).thenReturn("wroApi/test"); assertTrue(WroUtil.matchesUrl(request, "wroApi/test")); } @Test public void shouldNotMatchUrl() { final HttpServletRequest request = Mockito.mock(HttpServletRequest.class); Mockito.when(request.getRequestURI()).thenReturn("someresource.css"); assertFalse(WroUtil.matchesUrl(request, "wroApi/test")); } @Test public void shouldCreateMultiLineFromNullString() { assertEquals("[].join(\"\\n\")", WroUtil.toJSMultiLineString(null)); } @Test public void shouldGenerateDateAsStringWithUSLocale() { Locale.setDefault(Locale.ITALY); final long milliseconds = 1360278459808l; assertEquals("Thu, 07 Feb 2013 23:07:39 GMT", WroUtil.toDateAsString(milliseconds)); } @Test public void shouldComputeFullPathForServletContextResource() { assertEquals("/a/b/", WroUtil.getFullPath("/a/b/c")); } @Test public void shouldComputeFullPathForServletContextResourceWithWindowsSeparator() { assertEquals("/a/b/", WroUtil.getFullPath("\\a\\b\\c")); } @Test public void shouldNormalizeForServletContextResource() { assertEquals("/a/b/d/e", WroUtil.normalize("/a/b/c/../d/e")); } @Test public void shouldRemoveQueryString() { assertEquals("/a/b", WroUtil.removeQueryString("/a/b?p1=v1")); assertEquals("http://www.site.com/b/c", WroUtil.removeQueryString("http://www.site.com/b/c?a=b")); } }