WicketTester(WebApplication, String) No Longer Works with WicketFilter
----------------------------------------------------------------------

                 Key: WICKET-760
                 URL: https://issues.apache.org/jira/browse/WICKET-760
             Project: Wicket
          Issue Type: Bug
    Affects Versions: 1.3.0-beta2
            Reporter: Gerry Lowe


I've just upgraded from beta1 to beta2 and have encountered a problem getting 
any tests to run.  My configuration in web.xml is pretty standard:

--------------------------------------------------------------------------------------------
<filter>
        <filter-name>WicketEntryPoint</filter-name>
        
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
        <init-param>
            <param-name>applicationClassName</param-name>
            <param-value>MyApplication</param-value>
        </init-param>
        <init-param>
            <param-name>configuration</param-name>
            <param-value>development</param-value>
        </init-param>
    </filter>
   
    <filter-mapping>
        <filter-name>WicketEntryPoint</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
---------------------------------------------------------------------------------------------

And I set up a WicketTester instance in a fairly standard manner, which 
correctly picks up web.xml:
---------------------------------------------------------------------------------------------
tester = new WicketTester(myAppInstance, System.getProperty("user.dir") + 
"/src/main/webapp");
---------------------------------------------------------------------------------------------

But, with beta 2, I get the following exception:
---------------------------------------------------------------------------------------------
java.lang.IllegalArgumentException: Error initialising WicketServlet - you have 
no <servlet-mapping> element with a url-pattern that uses servlet: 
WicketMockServlet
    at 
org.apache.wicket.protocol.http.WicketFilter.getFilterPath(WicketFilter.java:497)
    at org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:370)
    at 
org.apache.wicket.protocol.http.MockWebApplication.<init>(MockWebApplication.java:158)
    at 
org.apache.wicket.util.tester.BaseWicketTester.<init>(BaseWicketTester.java:180)
    at org.apache.wicket.util.tester.WicketTester.<init>(WicketTester.java:241)
    at 
com.MyStuff.AbstractControllerTest.initWicketTester(AbstractControllerTest.java:67)
    at com.MyStuff.MyTest.setUp(BananaActionCreateTest.java:57)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at 
org.junit.internal.runners.BeforeAndAfterRunner.invokeMethod(BeforeAndAfterRunner.java:74)
    at 
org.junit.internal.runners.BeforeAndAfterRunner.runBefores(BeforeAndAfterRunner.java:50)
    at 
org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:33)
    at 
org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
    at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
    at 
org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:71)
    at 
org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
    at 
org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
    at 
org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
    at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
    at 
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
    at 
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
---------------------------------------------------------------------------------------------

As I'm using a filter and not a servlet, I was surprised by this error message. 
 Stepping through the code reveals the difference between beta1 and beta2 is in 
WicketFilter.init().
The beta1 code looks something like:
---------------------------------------------------------------------------------------------
...
String filterMapping =
if (filterConfig.getInitParameter(WicketFilter.FILTER_MAPPING_PARAM) == null)
{
...
---------------------------------------------------------------------------------------------

The beta2 code looks something like:
---------------------------------------------------------------------------------------------
...
String filterMapping = 
filterConfig.getInitParameter(WicketFilter.FILTER_MAPPING_PARAM);
if (filterMapping == null || 
filterMapping.equals(WicketFilter.SERVLET_PATH_HOLDER))
{
...
---------------------------------------------------------------------------------------------

The new 2nd clause in the "if" statement causes the problem.  This clause is 
triggered and quickly results in the exception. 

Running my wicket app works fine, only my tests are broken.  To get the
tests to work, I have to:
(a) use WicketServlet instead of WicketFilter (in web.xml);
(b) set <servlet-name> to WicketMockServlet (in web.xml), instead of
anything I want.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to