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.