Author: ivaynberg
Date: Fri Jan 28 14:47:22 2011
New Revision: 1064706

URL: http://svn.apache.org/viewvc?rev=1064706&view=rev
Log:

Issue: WICKET-3401

Added:
    wicket/trunk/wicket-core/src/test/java/META-INF/
    wicket/trunk/wicket-core/src/test/java/META-INF/resources/
    wicket/trunk/wicket-core/src/test/java/META-INF/resources/org/
    wicket/trunk/wicket-core/src/test/java/META-INF/resources/org/apache/
    wicket/trunk/wicket-core/src/test/java/META-INF/resources/org/apache/wicket/
    
wicket/trunk/wicket-core/src/test/java/META-INF/resources/org/apache/wicket/request/
    
wicket/trunk/wicket-core/src/test/java/META-INF/resources/org/apache/wicket/request/resource/
    
wicket/trunk/wicket-core/src/test/java/META-INF/resources/org/apache/wicket/request/resource/sample.js
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/MetaInfStaticResourceReferenceTest.java
   (with props)
Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=1064706&r1=1064705&r2=1064706&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
 Fri Jan 28 14:47:22 2011
@@ -86,6 +86,7 @@ import org.apache.wicket.protocol.http.W
 import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
 import org.apache.wicket.protocol.http.mock.MockHttpServletResponse;
 import org.apache.wicket.protocol.http.mock.MockHttpSession;
+import org.apache.wicket.protocol.http.mock.MockServletContext;
 import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
 import org.apache.wicket.protocol.http.servlet.ServletWebResponse;
 import org.apache.wicket.request.IExceptionMapper;
@@ -159,7 +160,7 @@ public class BaseWicketTester
                }
        }
 
-       private org.apache.wicket.protocol.http.mock.MockServletContext 
servletContext;
+       private final MockServletContext servletContext;
        private MockHttpSession hsession;
 
        private final WebApplication application;
@@ -239,7 +240,7 @@ public class BaseWicketTester
         */
        public BaseWicketTester(final WebApplication application)
        {
-               this(application, null);
+               this(application, (MockServletContext)null);
        }
 
        /**
@@ -254,8 +255,22 @@ public class BaseWicketTester
         */
        public BaseWicketTester(final WebApplication application, String 
servletContextBasePath)
        {
-               servletContext = new 
org.apache.wicket.protocol.http.mock.MockServletContext(application,
-                       servletContextBasePath);
+               this(application, new MockServletContext(application, 
servletContextBasePath));
+       }
+
+       /**
+        * Creates a <code>WicketTester</code>.
+        * 
+        * @param application
+        *            a <code>WicketTester</code> <code>WebApplication</code> 
object
+        * 
+        * @param servletCtx
+        *            the mock servlet context used as backend
+        */
+       public BaseWicketTester(final WebApplication application, 
MockServletContext servletCtx)
+       {
+               servletContext = servletCtx != null ? servletCtx
+                       : new MockServletContext(application, null);
 
                final FilterConfig filterConfig = new TestFilterConfig();
                WicketFilter filter = new WicketFilter()
@@ -415,7 +430,7 @@ public class BaseWicketTester
         * 
         * @return servlet context
         */
-       public org.apache.wicket.protocol.http.mock.MockServletContext 
getServletContext()
+       public MockServletContext getServletContext()
        {
                return servletContext;
        }

Added: 
wicket/trunk/wicket-core/src/test/java/META-INF/resources/org/apache/wicket/request/resource/sample.js
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/META-INF/resources/org/apache/wicket/request/resource/sample.js?rev=1064706&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/META-INF/resources/org/apache/wicket/request/resource/sample.js
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/META-INF/resources/org/apache/wicket/request/resource/sample.js
 Fri Jan 28 14:47:22 2011
@@ -0,0 +1 @@
+// static test resource
\ No newline at end of file

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/MetaInfStaticResourceReferenceTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/MetaInfStaticResourceReferenceTest.java?rev=1064706&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/MetaInfStaticResourceReferenceTest.java
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/MetaInfStaticResourceReferenceTest.java
 Fri Jan 28 14:47:22 2011
@@ -0,0 +1,193 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.resource;
+
+import java.lang.reflect.Field;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.wicket.Application;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.mock.MockWebRequest;
+import org.apache.wicket.protocol.http.mock.MockServletContext;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.util.tester.BaseWicketTester;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests for {@link MetaInfStaticResourceReference}.
+ * 
+ * @author akiraly
+ */
+public class MetaInfStaticResourceReferenceTest
+{
+       private static final String STATIC_RESOURCE_NAME = "sample.js";
+
+       /**
+        * Test with Servlet 2.5 container
+        */
+       @Test
+       public void testWithServlet25()
+       {
+               BaseWicketTester tester = new BaseWicketTester();
+
+               MetaInfStaticResourceReference metaRes = new 
MetaInfStaticResourceReference(getClass(),
+                       STATIC_RESOURCE_NAME);
+               PackageResourceReference packRes = new 
PackageResourceReference(getClass(),
+                       STATIC_RESOURCE_NAME);
+
+               Url packUrl = tester.getRequestCycle().mapUrlFor(packRes, null);
+               Url metaUrl = tester.getRequestCycle().mapUrlFor(metaRes, null);
+
+               Assert.assertNotNull(metaUrl);
+
+               // under 2.5 there should not be any difference between meta 
and pack resource urls
+               Assert.assertEquals(metaUrl, packUrl);
+
+               MockWebRequest request = new MockWebRequest(metaUrl);
+
+               IRequestHandler requestHandler = tester.getApplication()
+                       .getRootRequestMapper()
+                       .mapRequest(request);
+
+               // meta resource is served by wicket under 2.5
+               Assert.assertNotNull(requestHandler);
+       }
+
+       /**
+        * Test with Servlet 3.0 container
+        * 
+        * @throws MalformedURLException
+        *             should not happen
+        */
+       @Test
+       public void testWithServlet30() throws MalformedURLException
+       {
+               MockApplication application = new MockApplication();
+               MockServletContext servletContext = new 
MockServletContext30(application, null);
+               BaseWicketTester tester = new BaseWicketTester(application, 
servletContext);
+
+               MetaInfStaticResourceReference metaRes = new 
MetaInfStaticResourceReference(getClass(),
+                       STATIC_RESOURCE_NAME);
+               PackageResourceReference packRes = new 
PackageResourceReference(getClass(),
+                       STATIC_RESOURCE_NAME);
+
+               Url packUrl = tester.getRequestCycle().mapUrlFor(packRes, null);
+               Url metaUrl = tester.getRequestCycle().mapUrlFor(metaRes, null);
+
+               Assert.assertNotNull(metaUrl);
+               Assert.assertNotNull(packUrl);
+               Assert.assertFalse(
+                       "Meta and pack resource should not map to the same url 
under servlet 3.0.",
+                       metaUrl.equals(packUrl));
+
+               String metaUrlStr = metaUrl.toString();
+               if (!metaUrlStr.startsWith("/"))
+               {
+                       metaUrlStr = "/" + metaUrlStr;
+               }
+
+               // meta resource is served by the servlet container under 3.0
+               URL metaNetUrl = servletContext.getResource(metaUrlStr);
+
+               Assert.assertNotNull("Meta resource is not found by the 3.0 
servlet container.", metaNetUrl);
+
+               MockWebRequest request = new MockWebRequest(packUrl);
+
+               IRequestHandler requestHandler = tester.getApplication()
+                       .getRootRequestMapper()
+                       .mapRequest(request);
+
+               // the pack resource is still served by wicket
+               Assert.assertNotNull(requestHandler);
+       }
+
+       /**
+        * Needs to clear META_INF_RESOURCES_SUPPORTED field in {@link 
MetaInfStaticResourceReference}
+        * class between tests because classes do not get reloaded between 
junit tests. This is not a
+        * problem in production where the servlet container is not changing 
versions.
+        * 
+        * @throws Exception
+        *             if the reflection magic failed
+        */
+       @Before
+       public void before() throws Exception
+       {
+               Field field = 
MetaInfStaticResourceReference.class.getDeclaredField("META_INF_RESOURCES_SUPPORTED");
+               field.setAccessible(true);
+               field.set(null, null);
+       }
+
+       /**
+        * {@link #before()}
+        * 
+        * @throws Exception
+        *             if before fails
+        */
+       @After
+       public void after() throws Exception
+       {
+               before();
+       }
+
+       /**
+        * Partial mock implementation for Servlet 3.0 ServletContext.
+        */
+       private static class MockServletContext30 extends MockServletContext
+       {
+               public MockServletContext30(Application application, String 
path)
+               {
+                       super(application, path);
+               }
+
+               @Override
+               public URL getResource(String name) throws MalformedURLException
+               {
+                       URL url = super.getResource(name);
+
+                       if (url != null)
+                       {
+                               return url;
+                       }
+
+                       return 
getClass().getClassLoader().getResource("META-INF/resources" + name);
+               }
+
+               /**
+                * @return 3
+                */
+               @Override
+               public int getMajorVersion()
+               {
+                       return 3;
+               }
+
+               /**
+                * @return 0
+                */
+               @Override
+               public int getMinorVersion()
+               {
+                       return 0;
+               }
+
+       }
+}
\ No newline at end of file

Propchange: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/request/resource/MetaInfStaticResourceReferenceTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to