org.apache.wicket.util.tester
Class WicketTester

java.lang.Object
  extended by org.apache.wicket.protocol.http.MockWebApplication
      extended by org.apache.wicket.util.tester.BaseWicketTester
          extended by org.apache.wicket.util.tester.WicketTester

public class WicketTester
extends BaseWicketTester

A helper class to ease unit testing of Wicket applications without the need for a servlet container. To start a test, either use startPage or startPanel:

 // production page
 public class MyPage extends WebPage
 {
        public MyPage()
        {
                add(new Label("myMessage", "Hello!"));
                add(new Link("toYourPage")
                {
                        public void onClick()
                        {
                                setResponsePage(new YourPage("Hi!"));
                        }
                });
        }
 }
 
 // test code
 private WicketTester tester;
 
 public void setUp()
 {
        tester = new WicketTester();
 }
 
 public void testRenderMyPage()
 {
        // start and render the test page
        tester.startPage(MyPage.class);
        // assert rendered page class
        tester.assertRenderedPage(MyPage.class);
        // assert rendered label component
        tester.assertLabel("myMessage", "Hello!");
 }
 
The above example is straight forward: start MyPage.class and assert Label it rendered. Next, we try to navigate through a Link:
 // production page
 public class YourPage extends WebPage
 {
        public YourPage(String message)
        {
                add(new Label("yourMessage", message));
                info("Wicket Rocks ;-)");
        }
 }
 
 // test code
 public void testLinkToYourPage()
 {
        tester.startPage(MyPage.class);
        // click link and render
        tester.clickLink("toYourPage");
        tester.assertRenderedPage(YourPage.class);
        tester.assertLabel("yourMessage", "Hi!");
 }
 
tester.clickLink(path); will simulate user click on the component (in this case, it's a Link) and render the response page YourPage. Ok, unit test of MyPage is completed. Now we test YourPage standalone:
 // test code
 public void testRenderYourPage()
 {
        // provide page instance source for WicketTester
        tester.startPage(new TestPageSource()
        {
                public Page getTestPage()
                {
                        return new YourPage("mock message");
                }
        });
        tester.assertRenderedPage(YourPage.class);
        tester.assertLabel("yourMessage", "mock message");
        // assert feedback messages in INFO Level
        tester.assertInfoMessages(new String[] { "Wicket Rocks ;-)" });
 }
 
Instead of tester.startPage(pageClass), we define a ITestPageSource to provide testing page instance for WicketTester. This is necessary because YourPage uses a custom constructor, which is very common for transferring model data, but cannot be instantiated by reflection. Finally, we use assertInfoMessages to assert there is a feedback message "Wicket Rocks ;-)" at the INFO level. Many methods require a 'path' parameter. E.g. the page relative path can be obtained via Component.getPageRelativePath(). Since each Component has an ID/name, any Component can also be referenced by its ID MarkupContainer.get(String). And since MarkupContainer's and its subclasses are containers which allow to add Components (in sync with the markup hierarchy), you may not only access direct childs but also subchilds like get("myPanel:myForm:myNameField") separating each ID with a ':'. TODO General: Example usage of FormTester

Since:
1.2.6
Author:
Ingram Chen, Juergen Donnerstag, Frank Bille

Nested Class Summary
static class WicketTester.DummyWebApplication
          Default dummy web application for testing.
static class WicketTester.NonPageCachingDummyWebApplication
          Dummy web application that does not support back button support but is cheaper to use for unit tests.
 
Constructor Summary
WicketTester()
          Creates a WicketTester and automatically creates a WebApplication, but the tester will have no home page.
WicketTester(Class<? extends Page> homePage)
          Creates a WicketTester and automatically creates a WebApplication.
WicketTester(WebApplication application)
          Creates a WicketTester.
WicketTester(WebApplication application, String path)
          Creates a WicketTester to help unit testing.
 
Method Summary
 void assertAjaxLocation()
          Asserts that the Ajax location header is present.
 void assertBookmarkablePageLink(String id, Class<? extends WebPage> pageClass, String parameters)
          Asserts that that the BookmarkablePageLink identified by "id" points to the page as expected - including parameters.
 void assertComponent(String path, Class<? extends Component> expectedComponentClass)
          Asserts a Component class.
 void assertComponentOnAjaxResponse(Component component)
          Tests that a Component has been added to a AjaxRequestTarget, using AjaxRequestTarget.addComponent(Component).
 void assertComponentOnAjaxResponse(String componentPath)
          Tests that a Component has been added to a AjaxRequestTarget, using AjaxRequestTarget.addComponent(Component).
 void assertContains(String pattern)
          Asserts the content of last rendered page contains (matches) a given regex pattern.
 void assertContainsNot(String pattern)
          The opposite of assertContains(String).
 void assertDisabled(String path)
          assert component is enabled.
 void assertEnabled(String path)
          assert component is enabled.
 void assertErrorMessages(String[] expectedErrorMessages)
          Asserts error-level feedback messages.
 void assertFeedback(String path, String[] messages)
          Assert that a particular feedback panel is rendering certain messages.
 void assertInfoMessages(String[] expectedInfoMessages)
          Assert info-level feedback messages.
 void assertInvisible(String path)
          Asserts that a Component is invisible.
 void assertLabel(String path, String expectedLabelText)
          Asserts the text of a Label Component.
 void assertListView(String path, List<?> expectedList)
          Asserts the model of a ListView.
 void assertModelValue(String path, Object expectedValue)
          Asserts the model value of a component.
 void assertNoErrorMessage()
          Asserts no error-level feedback messages.
 void assertNoInfoMessage()
          Asserts no info-level feedback messages.
 void assertPageLink(String path, Class<? extends Page> expectedPageClass)
          Asserts a PageLink link to a Page class.
 void assertRenderedPage(Class<? extends Page> expectedRenderedPageClass)
          Asserts a last-rendered Page class.
 void assertRequired(String path)
          assert form component is required.
 void assertResultPage(Class<?> clazz, String filename)
          Asserts last-rendered Page against an expected HTML document.
 void assertResultPage(String expectedDocument)
          Asserts last-rendered Page against an expected HTML document as a String
 void assertVisible(String path)
          Asserts that a Component is visible.
 
Methods inherited from class org.apache.wicket.util.tester.BaseWicketTester
callOnBeginRequest, checkUsability, clickLink, clickLink, debugComponentTrees, debugComponentTrees, dumpPage, executeAjaxEvent, executeAjaxEvent, executeAllTimerBehaviors, executeBehavior, executeListener, fail, getComponentFromLastRenderedPage, getContentDispositionFromResponseHeader, getContentLengthFromResponseHeader, getContentTypeFromResponseHeader, getLastModifiedFromResponseHeader, getMessages, getTagById, getTagByWicketId, getTagsByWicketId, hasLabel, hasNoErrorMessage, hasNoInfoMessage, ifContains, ifContainsNot, isComponent, isComponentOnAjaxResponse, isDisabled, isEnabled, isEqual, isInvisible, isPageLink, isRenderedPage, isRequired, isRequired, isResultPage, isVisible, newFormTester, newFormTester, resolveRequestCycle, setParameterForNextRequest, startComponent, startPage, startPage, startPage, startPage, startPanel, startPanel, submitForm
 
Methods inherited from class org.apache.wicket.protocol.http.MockWebApplication
createRequestCycle, destroy, getApplication, getLastRenderedPage, getParametersForNextRequest, getPreviousRenderedPage, getServletRequest, getServletResponse, getServletSession, getWicketRequest, getWicketResponse, getWicketSession, initializeHttpSessionAsTemporary, isCreateAjaxRequest, newServletContext, postProcessRequestCycle, processRequestCycle, processRequestCycle, processRequestCycle, processRequestCycle, processRequestCycle, setCreateAjaxRequest, setParametersForNextRequest, setupRequestAndResponse, setupRequestAndResponse
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

WicketTester

public WicketTester()
Creates a WicketTester and automatically creates a WebApplication, but the tester will have no home page.


WicketTester

public WicketTester(Class<? extends Page> homePage)
Creates a WicketTester and automatically creates a WebApplication.

Parameters:
homePage - a home page Class

WicketTester

public WicketTester(WebApplication application)
Creates a WicketTester.

Parameters:
application - a WicketTester WebApplication object

WicketTester

public WicketTester(WebApplication application,
                    String path)
Creates a WicketTester to help unit testing.

Parameters:
application - a WicketTester WebApplication object
path - the absolute path on disk to the web application's contents (e.g. war root) - may be null
See Also:
MockWebApplication.MockWebApplication(org.apache.wicket.protocol.http.WebApplication, String)
Method Detail

assertAjaxLocation

public void assertAjaxLocation()
Asserts that the Ajax location header is present.


assertComponent

public void assertComponent(String path,
                            Class<? extends Component> expectedComponentClass)
Asserts a Component class.

Parameters:
path - path to Component
expectedComponentClass - expected Component class

assertComponentOnAjaxResponse

public void assertComponentOnAjaxResponse(Component component)
Tests that a Component has been added to a AjaxRequestTarget, using AjaxRequestTarget.addComponent(Component). This method actually tests that a Component is on the Ajax response sent back to the client.

PLEASE NOTE! This method doesn't actually insert the Component in the client DOM tree, using Javascript. But it shouldn't be needed because you just have to trust that Wicket Ajax Javascript works.

Parameters:
component - a Component to be tested

assertComponentOnAjaxResponse

public void assertComponentOnAjaxResponse(String componentPath)
Tests that a Component has been added to a AjaxRequestTarget, using AjaxRequestTarget.addComponent(Component). This method actually tests that a Component is on the Ajax response sent back to the client.

PLEASE NOTE! This method doesn't actually insert the Component in the client DOM tree, using Javascript. But it shouldn't be needed because you just have to trust that Wicket Ajax Javascript works.

Parameters:
componentPath - a Component path to test

assertContains

public void assertContains(String pattern)
Asserts the content of last rendered page contains (matches) a given regex pattern.

Parameters:
pattern - a reqex pattern to match

assertContainsNot

public void assertContainsNot(String pattern)
The opposite of assertContains(String).

Parameters:
pattern - pattern

assertErrorMessages

public void assertErrorMessages(String[] expectedErrorMessages)
Asserts error-level feedback messages.

Parameters:
expectedErrorMessages - expected error messages

assertInfoMessages

public void assertInfoMessages(String[] expectedInfoMessages)
Assert info-level feedback messages.

Parameters:
expectedInfoMessages - expected info messages

assertFeedback

public void assertFeedback(String path,
                           String[] messages)
Assert that a particular feedback panel is rendering certain messages. NOTE: this casts the component at the specified path to a FeedbackPanel, so it will not work with custom IFeedback implementations unless you are subclassing FeedbackPanel

Parameters:
path - path to the feedback panel
messages - messages expected to be rendered

assertInvisible

public void assertInvisible(String path)
Asserts that a Component is invisible.

Parameters:
path - path to Component

assertLabel

public void assertLabel(String path,
                        String expectedLabelText)
Asserts the text of a Label Component.

Parameters:
path - path to Label Component
expectedLabelText - expected text of the Label

assertModelValue

public void assertModelValue(String path,
                             Object expectedValue)
Asserts the model value of a component.

Parameters:
path - path to the component on the page
expectedValue - expected value of the component's model

assertListView

public void assertListView(String path,
                           List<?> expectedList)
Asserts the model of a ListView.

Overrides:
assertListView in class BaseWicketTester
Parameters:
path - path to a ListView Component
expectedList - expected List in the model of the given ListView

assertNoErrorMessage

public void assertNoErrorMessage()
Asserts no error-level feedback messages.


assertNoInfoMessage

public void assertNoInfoMessage()
Asserts no info-level feedback messages.


assertPageLink

public void assertPageLink(String path,
                           Class<? extends Page> expectedPageClass)
Asserts a PageLink link to a Page class.

Parameters:
path - path to PageLink Component
expectedPageClass - expected Page class to link

assertBookmarkablePageLink

public void assertBookmarkablePageLink(String id,
                                       Class<? extends WebPage> pageClass,
                                       String parameters)
Asserts that that the BookmarkablePageLink identified by "id" points to the page as expected - including parameters.

Parameters:
id -
pageClass -
parameters -

assertRenderedPage

public void assertRenderedPage(Class<? extends Page> expectedRenderedPageClass)
Asserts a last-rendered Page class.

Parameters:
expectedRenderedPageClass - expected class of last rendered Page

assertResultPage

public void assertResultPage(Class<?> clazz,
                             String filename)
                      throws Exception
Asserts last-rendered Page against an expected HTML document.

Use -Dwicket.replace.expected.results=true to automatically replace the expected output file.

Overrides:
assertResultPage in class BaseWicketTester
Parameters:
clazz - Class used to load the file (relative to clazz package)
filename - expected output filename String
Throws:
Exception

assertResultPage

public void assertResultPage(String expectedDocument)
                      throws Exception
Asserts last-rendered Page against an expected HTML document as a String

Parameters:
expectedDocument - expected output String
Throws:
Exception

assertVisible

public void assertVisible(String path)
Asserts that a Component is visible.

Parameters:
path - path to a Component

assertEnabled

public void assertEnabled(String path)
assert component is enabled.

Parameters:
path - path to component

assertDisabled

public void assertDisabled(String path)
assert component is enabled.

Parameters:
path - path to component

assertRequired

public void assertRequired(String path)
assert form component is required.

Parameters:
path - path to form component


Copyright © 2004-2011 Apache Software Foundation. All Rights Reserved.