org.apache.wicket.util.tester
Class BaseWicketTester

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

public class BaseWicketTester
extends MockWebApplication

A helper class to ease unit testing of Wicket applications without the need for a servlet container. See javadoc of WicketTester for example usage. This class can be used as is, but JUnit users should use derived class WicketTester.

Since:
1.2.6
Author:
Ingram Chen, Juergen Donnerstag, Frank Bille
See Also:
WicketTester

Nested Class Summary
static class BaseWicketTester.DummyWebApplication
           
 
Constructor Summary
BaseWicketTester()
          Creates WicketTester and automatically create a WebApplication, but the tester will have no home page.
BaseWicketTester(java.lang.Class homePage)
          Creates WicketTester and automatically creates a WebApplication.
BaseWicketTester(WebApplication application)
          Creates a WicketTester.
BaseWicketTester(WebApplication application, java.lang.String path)
          Creates a WicketTester for unit testing.
 
Method Summary
 void assertListView(java.lang.String path, java.util.List expectedList)
          assert the model of ListView use expectedList
 void assertResultPage(java.lang.Class pageClass, java.lang.String filename)
          Asserts last rendered Page against an expected HTML document.
static void callOnBeginRequest(RequestCycle rc)
           
 void clickLink(java.lang.String path)
          Click the Link in the last rendered Page.
 void clickLink(java.lang.String path, boolean isAjax)
          Click the Link in the last rendered Page.
 void debugComponentTrees()
          Dumps the Component trees.
 void debugComponentTrees(java.lang.String filter)
          Dumps the Component trees to log.
 void dumpPage()
          Dumps the source of last rendered Page.
 void executeAjaxEvent(Component component, java.lang.String event)
          Simulates the firing of an Ajax event.
 void executeAjaxEvent(java.lang.String componentPath, java.lang.String event)
          Simulates the firing of an Ajax event.
 void executeBehavior(AbstractAjaxBehavior behavior)
          Builds and processes a request suitable for executing an AbstractAjaxBehavior.
 void executeListener(Component component)
          Builds and processes a request suitable for invoking a listener.
 Component getComponentFromLastRenderedPage(java.lang.String path)
          Gets the component with the given path from last rendered page.
 java.lang.String getContentDispositionFromResponseHeader()
          Retrieves the content disposition from the response header.
 int getContentLengthFromResponseHeader()
          Retrieves the content length from the response header.
 java.lang.String getContentTypeFromResponseHeader()
          Retrieves the content type from the response header.
 java.lang.String getLastModifiedFromResponseHeader()
          Retrieves the last-modified value from the response header.
 java.util.List getMessages(int level)
          Retrieves FeedbackMessages.
 TagTester getTagById(java.lang.String id)
          Retrieves a TagTester based on an DOM id.
 TagTester getTagByWicketId(java.lang.String wicketId)
          Retrieves a TagTester based on a wicket:id.
 Result hasLabel(java.lang.String path, java.lang.String expectedLabelText)
          assert the text of Label component.
 Result hasNoErrorMessage()
          Asserts no error-level feedback messages.
 Result hasNoInfoMessage()
          Asserts no info-level feedback messages.
 Result ifContains(java.lang.String pattern)
          assert the content of last rendered page contains(matches) regex pattern.
 Result isComponent(java.lang.String path, java.lang.Class expectedComponentClass)
          assert component class
 Result isComponentOnAjaxResponse(Component component)
          Tests that a Component has been added to a AjaxRequestTarget, using AjaxRequestTarget.addComponent(Component).
 Result isInvisible(java.lang.String path)
          assert component invisible.
 Result isPageLink(java.lang.String path, java.lang.Class expectedPageClass)
          assert PageLink link to page class.
 Result isRenderedPage(java.lang.Class expectedRenderedPageClass)
          Asserts the last rendered Page class.
 Result isResultPage(java.lang.String expectedDocument)
          Asserts last rendered Page against an expected HTML document as a String.
 Result isVisible(java.lang.String path)
          assert component visible.
 FormTester newFormTester(java.lang.String path)
          Creates a FormTester for the Form at a given path, and fills all child FormComponents with blank Strings.
 FormTester newFormTester(java.lang.String path, boolean fillBlankString)
          Creates a FormTester for the Form at a given path.
protected  WebRequestCycle resolveRequestCycle()
           
 void setParameterForNextRequest(java.lang.String componentPath, java.lang.Object value)
          Sets a parameter for the Component with the given path to be used with the next request.
 void startComponent(Component component)
          A helper method for starting a component for a test without attaching it to a Page.
 Page startPage(java.lang.Class pageClass)
          Renders a Page from its default constructor.
 Page startPage(java.lang.Class pageClass, PageParameters parameters)
          Renders a Page from its default constructor.
 Page startPage(ITestPageSource testPageSource)
          Renders a Page defined in TestPageSource.
 Page startPage(Page page)
          Renders the Page.
 Panel startPanel(java.lang.Class panelClass)
          Renders a Panel from a Panel(String id) constructor.
 Panel startPanel(TestPanelSource testPanelSource)
          Renders a Panel defined in TestPanelSource.
 void submitForm(java.lang.String path)
          Submits the Form in the last rendered Page.
 
Methods inherited from class org.apache.wicket.protocol.http.MockWebApplication
createRequestCycle, destroy, getApplication, getLastRenderedPage, getParametersForNextRequest, getPreviousRenderedPage, getServletRequest, getServletResponse, getServletSession, getWicketRequest, getWicketResponse, getWicketSession, initializeHttpSessionAsTemporary, newServletContext, postProcessRequestCycle, processRequestCycle, processRequestCycle, processRequestCycle, processRequestCycle, processRequestCycle, setParametersForNextRequest, setupRequestAndResponse, setupRequestAndResponse
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BaseWicketTester

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


BaseWicketTester

public BaseWicketTester(java.lang.Class homePage)
Creates WicketTester and automatically creates a WebApplication.

Parameters:
homePage - a home page Class

BaseWicketTester

public BaseWicketTester(WebApplication application)
Creates a WicketTester.

Parameters:
application - a WicketTester WebApplication object

BaseWicketTester

public BaseWicketTester(WebApplication application,
                        java.lang.String path)
Creates a WicketTester for unit testing.

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

startPage

public final Page startPage(ITestPageSource testPageSource)
Renders a Page defined in TestPageSource. This is usually used when a page does not have default constructor. For example, a ViewBook page requires a Book instance:
 tester.startPage(new TestPageSource()
 {
        public Page getTestPage()
        {
                Book mockBook = new Book("myBookName");
                return new ViewBook(mockBook);
        }
 });
 

Parameters:
testPageSource - a Page factory that creates a test page instance
Returns:
the rendered Page

executeListener

public void executeListener(Component component)
Builds and processes a request suitable for invoking a listener. The Component must implement any of the known IListener interfaces.

Parameters:
component - the listener to invoke

executeBehavior

public void executeBehavior(AbstractAjaxBehavior behavior)
Builds and processes a request suitable for executing an AbstractAjaxBehavior.

Parameters:
behavior - an AbstractAjaxBehavior to execute

startPage

public final Page startPage(Page page)
Renders the Page.

Parameters:
page - a Page to render
Returns:
the rendered Page

startPage

public final Page startPage(java.lang.Class pageClass)
Renders a Page from its default constructor.

Parameters:
pageClass - a test Page class with default constructor
Returns:
the rendered Page

startPage

public final Page startPage(java.lang.Class pageClass,
                            PageParameters parameters)
Renders a Page from its default constructor.

Parameters:
pageClass - a test Page class with default constructor
parameters - the parameters to use for the class.
Returns:
the rendered Page

newFormTester

public FormTester newFormTester(java.lang.String path)
Creates a FormTester for the Form at a given path, and fills all child FormComponents with blank Strings.

Parameters:
path - path to FormComponent
Returns:
a FormTester instance for testing the Form
See Also:
newFormTester(String, boolean)

newFormTester

public FormTester newFormTester(java.lang.String path,
                                boolean fillBlankString)
Creates a FormTester for the Form at a given path.

Parameters:
path - path to FormComponent
fillBlankString - specifies whether to fill all child FormComponents with blank Strings
Returns:
a FormTester instance for testing the Form
See Also:
FormTester

startPanel

public final Panel startPanel(TestPanelSource testPanelSource)
Renders a Panel defined in TestPanelSource. The usage is similar to startPage(ITestPageSource). Please note that testing Panel must use the supplied panelId as a Component id.
 tester.startPanel(new TestPanelSource()
 {
        public Panel getTestPanel(String panelId)
        {
                MyData mockMyData = new MyData();
                return new MyPanel(panelId, mockMyData);
        }
 });
 

Parameters:
testPanelSource - a Panel factory that creates test Panel instances
Returns:
a rendered Panel

startPanel

public final Panel startPanel(java.lang.Class panelClass)
Renders a Panel from a Panel(String id) constructor.

Parameters:
panelClass - a test Panel class with Panel(String id) constructor
Returns:
a rendered Panel

startComponent

public void startComponent(Component component)
A helper method for starting a component for a test without attaching it to a Page. Components which are somehow dependent on the page structure can not be currently tested with this method. Example: UserDataView view = new UserDataView("view", new ListDataProvider(userList)); tester.startComponent(view); assertEquals(4, view.size());

Parameters:
component -

getComponentFromLastRenderedPage

public Component getComponentFromLastRenderedPage(java.lang.String path)
Gets the component with the given path from last rendered page. This method fails in case the component couldn't be found, and it will return null if the component was found, but is not visible.

Parameters:
path - Path to component
Returns:
The component at the path
See Also:
MarkupContainer.get(String)

hasLabel

public Result hasLabel(java.lang.String path,
                       java.lang.String expectedLabelText)
assert the text of Label component.

Parameters:
path - path to Label component
expectedLabelText - expected label text
Returns:
a Result

isPageLink

public Result isPageLink(java.lang.String path,
                         java.lang.Class expectedPageClass)
assert PageLink link to page class.

Parameters:
path - path to PageLink component
expectedPageClass - expected page class to link
Returns:
a Result

isComponent

public Result isComponent(java.lang.String path,
                          java.lang.Class expectedComponentClass)
assert component class

Parameters:
path - path to component
expectedComponentClass - expected component class
Returns:
a Result

isVisible

public Result isVisible(java.lang.String path)
assert component visible.

Parameters:
path - path to component
Returns:
a Result

isInvisible

public Result isInvisible(java.lang.String path)
assert component invisible.

Parameters:
path - path to component
Returns:
a Result

ifContains

public Result ifContains(java.lang.String pattern)
assert the content of last rendered page contains(matches) regex pattern.

Parameters:
pattern - reqex pattern to match
Returns:
a Result

assertListView

public void assertListView(java.lang.String path,
                           java.util.List expectedList)
assert the model of ListView use expectedList

Parameters:
path - path to ListView component
expectedList - expected list in the model of ListView

clickLink

public void clickLink(java.lang.String path)
Click the Link in the last rendered Page.

Simulate that AJAX is enabled.

Parameters:
path - Click the Link in the last rendered Page.
See Also:
clickLink(String, boolean)

clickLink

public void clickLink(java.lang.String path,
                      boolean isAjax)
Click the Link in the last rendered Page.

This method also works for AjaxLink, AjaxFallbackLink and AjaxSubmitLink.

On AjaxLinks and AjaxFallbackLinks the onClick method is invoked with a valid AjaxRequestTarget. In that way you can test the flow of your application when using AJAX.

When clicking an AjaxSubmitLink the form, which the AjaxSubmitLink is attached to is first submitted, and then the onSubmit method on AjaxSubmitLink is invoked. If you have changed some values in the form during your test, these will also be submitted. This should not be used as a replacement for the FormTester to test your forms. It should be used to test that the code in your onSubmit method in AjaxSubmitLink actually works.

This method is also able to simulate that AJAX (javascript) is disabled on the client. This is done by setting the isAjax parameter to false. If you have an AjaxFallbackLink you can then check that it doesn't fail when invoked as a normal link.

Parameters:
path - path to Link component
isAjax - Whether to simulate that AJAX (javascript) is enabled or not. If it's false then AjaxLink and AjaxSubmitLink will fail, since it wouldn't work in real life. AjaxFallbackLink will be invoked with null as the AjaxRequestTarget parameter.

submitForm

public void submitForm(java.lang.String path)
Submits the Form in the last rendered Page.

Parameters:
path - path to Form component

setParameterForNextRequest

public void setParameterForNextRequest(java.lang.String componentPath,
                                       java.lang.Object value)
Sets a parameter for the Component with the given path to be used with the next request.

NOTE: this method only works when a Page was rendered first.

Parameters:
componentPath - path to the Component
value - the parameter value to set

isRenderedPage

public Result isRenderedPage(java.lang.Class expectedRenderedPageClass)
Asserts the last rendered Page class. FIXME explain why the code is so complicated to compare two classes, or simplify

Parameters:
expectedRenderedPageClass - expected class of last rendered page
Returns:
a Result

assertResultPage

public void assertResultPage(java.lang.Class pageClass,
                             java.lang.String filename)
                      throws java.lang.Exception
Asserts last rendered Page against an expected HTML document.

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

Parameters:
pageClass - used to load the File (relative to clazz package)
filename - expected output File name
Throws:
java.lang.Exception

isResultPage

public Result isResultPage(java.lang.String expectedDocument)
                    throws java.lang.Exception
Asserts last rendered Page against an expected HTML document as a String.

Parameters:
expectedDocument - expected output
Returns:
a Result
Throws:
java.lang.Exception

hasNoErrorMessage

public Result hasNoErrorMessage()
Asserts no error-level feedback messages.

Returns:
a Result

hasNoInfoMessage

public Result hasNoInfoMessage()
Asserts no info-level feedback messages.

Returns:
a Result

getMessages

public java.util.List getMessages(int level)
Retrieves FeedbackMessages.

Parameters:
level - level of feedback message, for example: FeedbackMessage.DEBUG or FeedbackMessage.INFO.. etc
Returns:
List of messages (as Strings)
See Also:
FeedbackMessage

dumpPage

public void dumpPage()
Dumps the source of last rendered Page.


debugComponentTrees

public void debugComponentTrees()
Dumps the Component trees.


debugComponentTrees

public void debugComponentTrees(java.lang.String filter)
Dumps the Component trees to log. Show only the Components whose paths contain the filter String.

Parameters:
filter - a filter String

isComponentOnAjaxResponse

public Result isComponentOnAjaxResponse(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 have to trust that the Wicket Ajax Javascript just works.

Parameters:
component - the Component to test
Returns:
a Result

executeAjaxEvent

public void executeAjaxEvent(java.lang.String componentPath,
                             java.lang.String event)
Simulates the firing of an Ajax event.

Parameters:
componentPath - the Component path
event - the event which we simulate being fired. If event is null, the test will fail.
Since:
1.2.3
See Also:
executeAjaxEvent(Component, String)

executeAjaxEvent

public void executeAjaxEvent(Component component,
                             java.lang.String event)
Simulates the firing of an Ajax event. You add an Ajax event to a Component by using:
     ...
     component.add(new AjaxEventBehavior("ondblclick") {
         public void onEvent(AjaxRequestTarget) {}
     });
     ...
 
You can then test that the code inside onEvent actually does what it's supposed to, using the WicketTester:
     ...
     tester.executeAjaxEvent(component, "ondblclick");
     // Test that the code inside onEvent is correct.
     ...
 
This also works with AjaxFormSubmitBehavior, where it will "submit" the Form before executing the command.

PLEASE NOTE! This method doesn't actually insert the Component in the client DOM tree, using Javascript.

Parameters:
component - the Component that has the AjaxEventBehavior we want to test. If the Component is null, the test will fail.
event - the event to simulate being fired. If event is null, the test will fail.

resolveRequestCycle

protected WebRequestCycle resolveRequestCycle()

getTagByWicketId

public TagTester getTagByWicketId(java.lang.String wicketId)
Retrieves a TagTester based on a wicket:id. If more Components exist with the same wicket:id in the markup, only the first one is returned.

Parameters:
wicketId - the wicket:id to search for
Returns:
the TagTester for the tag which has the given wicket:id

getTagById

public TagTester getTagById(java.lang.String id)
Retrieves a TagTester based on an DOM id. If more Components exist with the same id in the markup, only the first one is returned.

Parameters:
id - the DOM id to search for.
Returns:
the TagTester for the tag which has the given DOM id

getContentTypeFromResponseHeader

public java.lang.String getContentTypeFromResponseHeader()
Retrieves the content type from the response header.

Returns:
the content type from the response header

getContentLengthFromResponseHeader

public int getContentLengthFromResponseHeader()
Retrieves the content length from the response header.

Returns:
the content length from the response header

getLastModifiedFromResponseHeader

public java.lang.String getLastModifiedFromResponseHeader()
Retrieves the last-modified value from the response header.

Returns:
the last-modified value from the response header

getContentDispositionFromResponseHeader

public java.lang.String getContentDispositionFromResponseHeader()
Retrieves the content disposition from the response header.

Returns:
the content disposition from the response header

callOnBeginRequest

public static void callOnBeginRequest(RequestCycle rc)


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