org.apache.wicket.util.tester
Class WicketTester

java.lang.Object
  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 YourPage("mock message"));
        tester.assertRenderedPage(YourPage.class);
        tester.assertLabel("yourMessage", "mock message");
        // assert feedback messages in INFO Level
        tester.assertInfoMessages(new String[] { "Wicket Rocks ;-)" });
 }
 
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 ':'. Cookie handling: There are some expectations about wicket tester cookie handling which should match as best as it can be with a real client server request response cycle: - all valid cookies set before a request is made (tester.getRequest().addCookie()) should appear in the page request - all cookies set in the response should appear in the last response (tester.getLastResponse()) after the request is made (expired cookies and others) - all cookies set in the response should appear even after a redirect response is made until the final response (tester.getLastResponse()) is written to the client (wicket tester) - all valid cookies (maxAge!=0) from the last response should be added to the next request cookies (tester.getRequest().getCookies()) TODO General: Example usage of FormTester

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

Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.wicket.util.tester.BaseWicketTester
BaseWicketTester.StartComponentInPage
 
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, boolean init)
          Creates a WicketTester to help unit testing.
WicketTester(WebApplication application, javax.servlet.ServletContext servletCtx)
          Creates a WicketTester to help unit testing.
WicketTester(WebApplication application, javax.servlet.ServletContext servletCtx, boolean init)
          Creates a WicketTester to help unit testing.
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, PageParameters 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.add(Component...).
 void assertComponentOnAjaxResponse(String componentPath)
          Tests that a Component has been added to a AjaxRequestTarget, using AjaxRequestTarget.add(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 assertMarkupLocale(Component component, Locale expectedLocale)
          Asserts that a component's markup has loaded with the given locale
 void assertMarkupStyle(Component component, String expectedStyle)
          Asserts that a component's markup has loaded with the given style
 void assertMarkupVariation(Component component, String expectedVariation)
          Asserts that a component's markup has loaded with the given variation
 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 assertNotRequired(String path)
          assert form component is required.
 void assertRedirectUrl(String expectedRedirectUrl)
          Assert that the last request redirected to the given Url.
 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 assertUsability(Component component)
          Checks whether a component is visible and/or enabled before usage
 void assertVisible(String path)
          Asserts that a Component is visible.
 void clickLink(Component link)
           
 void executeBehavior(Class<?> testClass, AbstractAjaxBehavior behavior, String filename)
           
 void executeListener(Class<?> testClass, Component component, String filename)
           
<T extends Page>
void
executeTest(Class<?> testClass, Class<T> pageClass, PageParameters parameters, String filename)
          Use -Dwicket.replace.expected.results=true to automatically replace the expected output file.
<T extends Page>
void
executeTest(Class<?> testClass, Class<T> pageClass, String filename)
          Use -Dwicket.replace.expected.results=true to automatically replace the expected output file.
 void executeTest(Class<?> testClass, Component component, String filename)
          Use -Dwicket.replace.expected.results=true to automatically replace the expected output file.
 void executeTest(Class<?> testClass, Page page, String filename)
          Use -Dwicket.replace.expected.results=true to automatically replace the expected output file.
static String getBasedir()
          Returns the current Maven build directory taken from the basedir system property, or null if not set
 
Methods inherited from class org.apache.wicket.util.tester.BaseWicketTester
addRequestHeader, applyRequest, checkUsability, cleanupFeedbackMessages, cleanupFeedbackMessages, clearFeedbackMessages, clickLink, clickLink, createOriginHeader, createPage, createPageMarkup, debugComponentTrees, debugComponentTrees, destroy, dumpPage, executeAjaxEvent, executeAjaxEvent, executeAjaxUrl, executeAllTimerBehaviors, executeBehavior, executeListener, executeListener, executeUrl, getApplication, getComponentFromLastRenderedPage, getComponentFromLastRenderedPage, getContentDispositionFromResponseHeader, getContentLengthFromResponseHeader, getContentTypeFromResponseHeader, getHttpSession, getLastModifiedFromResponseHeader, getLastRenderedPage, getLastRequest, getLastResponse, getLastResponseAsString, getMessages, getPreviousRequests, getPreviousResponses, getRequest, getRequestCycle, getResourcePollFrequency, getResponse, getServletContext, getSession, getTagById, getTagByWicketId, getTagsByWicketId, getWicketAjaxBaseUrlEncodedInLastResponse, hasLabel, hasNoErrorMessage, hasNoInfoMessage, ifContains, ifContainsNot, invokeListener, isComponent, isComponentOnAjaxResponse, isDisabled, isEnabled, isEqual, isExposeExceptions, isFollowRedirects, isInvisible, isNotRequired, isNotRequired, isRenderedPage, isRequired, isRequired, isResultPage, isUseRequestUrlAsBase, isVisible, newFormTester, newFormTester, newServletWebResponse, newTestPageManagerProvider, processRequest, processRequest, processRequest, processRequest, processRequest, setExposeExceptions, setFollowRedirects, setLastResponse, setRequest, setUseRequestUrlAsBase, startComponent, startComponentInPage, startComponentInPage, startComponentInPage, startComponentInPage, startPage, startPage, startPage, startPage, startResource, startResourceReference, startResourceReference, submitForm, submitForm, urlFor, urlFor, urlFor
 
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:
MockApplication.MockApplication()

WicketTester

public WicketTester(WebApplication application,
                    javax.servlet.ServletContext servletCtx)
Creates a WicketTester to help unit testing.

Parameters:
application - a WicketTester WebApplication object
servletCtx - the servlet context used as backend

WicketTester

public WicketTester(WebApplication application,
                    boolean init)
Creates a WicketTester to help unit testing.

Parameters:
application - a WicketTester WebApplication object
init - force the application to be initialized (default = true)

WicketTester

public WicketTester(WebApplication application,
                    javax.servlet.ServletContext servletCtx,
                    boolean init)
Creates a WicketTester to help unit testing.

Parameters:
application - a WicketTester WebApplication object
servletCtx - the servlet context used as backend
init - force the application to be initialized (default = true)
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.add(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.add(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 regex pattern to match

assertContainsNot

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

Parameters:
pattern - pattern

assertMarkupVariation

public void assertMarkupVariation(Component component,
                                  String expectedVariation)
Asserts that a component's markup has loaded with the given variation

Parameters:
component - The component which markup to check
expectedVariation - The expected variation of the component's markup

assertMarkupStyle

public void assertMarkupStyle(Component component,
                              String expectedStyle)
Asserts that a component's markup has loaded with the given style

Parameters:
component - The component which markup to check
expectedStyle - The expected style of the component's markup

assertMarkupLocale

public void assertMarkupLocale(Component component,
                               Locale expectedLocale)
Asserts that a component's markup has loaded with the given locale

Parameters:
component - The component which markup to check
expectedLocale - The expected locale of the component's markup

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.


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

assertNotRequired

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

Parameters:
path - path to form component

assertUsability

public void assertUsability(Component component)
Checks whether a component is visible and/or enabled before usage

Parameters:
component -

clickLink

public void clickLink(Component link)
Parameters:
link -

assertBookmarkablePageLink

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

Parameters:
id -
pageClass -
parameters -

executeTest

public <T extends Page> void executeTest(Class<?> testClass,
                                         Class<T> pageClass,
                                         String filename)
                 throws Exception
Use -Dwicket.replace.expected.results=true to automatically replace the expected output file.

Type Parameters:
T -
Parameters:
testClass -
pageClass -
filename -
Throws:
Exception

executeTest

public void executeTest(Class<?> testClass,
                        Page page,
                        String filename)
                 throws Exception
Use -Dwicket.replace.expected.results=true to automatically replace the expected output file.

Parameters:
testClass -
page -
filename -
Throws:
Exception

executeTest

public void executeTest(Class<?> testClass,
                        Component component,
                        String filename)
                 throws Exception
Use -Dwicket.replace.expected.results=true to automatically replace the expected output file.

Parameters:
testClass -
component -
filename -
Throws:
Exception

executeTest

public <T extends Page> void executeTest(Class<?> testClass,
                                         Class<T> pageClass,
                                         PageParameters parameters,
                                         String filename)
                 throws Exception
Use -Dwicket.replace.expected.results=true to automatically replace the expected output file.

Type Parameters:
T -
Parameters:
testClass -
pageClass -
parameters -
filename -
Throws:
Exception

executeListener

public void executeListener(Class<?> testClass,
                            Component component,
                            String filename)
                     throws Exception
Parameters:
testClass -
component -
filename -
Throws:
Exception

executeBehavior

public void executeBehavior(Class<?> testClass,
                            AbstractAjaxBehavior behavior,
                            String filename)
                     throws Exception
Parameters:
testClass -
behavior -
filename -
Throws:
Exception

assertRedirectUrl

public void assertRedirectUrl(String expectedRedirectUrl)
Assert that the last request redirected to the given Url.

Parameters:
expectedRedirectUrl - expected

getBasedir

public static String getBasedir()
Returns the current Maven build directory taken from the basedir system property, or null if not set

Returns:
path with a trailing slash


Copyright © 2006–2017 Apache Software Foundation. All rights reserved.