proper formatting of WicketTester.java
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/dcd29c0b Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/dcd29c0b Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/dcd29c0b Branch: refs/heads/master Commit: dcd29c0bee0c07731569267964089c7e46fdbd16 Parents: f5f1c26 Author: renoth <[email protected]> Authored: Tue Jul 31 13:54:07 2018 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Wed Sep 26 15:36:17 2018 +0300 ---------------------------------------------------------------------- .../wicket/util/tester/BaseWicketTester.java | 3 - .../apache/wicket/util/tester/FormTester.java | 69 ++-- .../apache/wicket/util/tester/WicketTester.java | 362 +++++++++---------- 3 files changed, 212 insertions(+), 222 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/dcd29c0b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java index 54e7808..a835c6c 100644 --- a/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java +++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java @@ -16,9 +16,6 @@ */ package org.apache.wicket.util.tester; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - import java.io.IOException; import java.io.Serializable; import java.lang.reflect.Constructor; http://git-wip-us.apache.org/repos/asf/wicket/blob/dcd29c0b/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java b/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java index 031aac4..d1780ea 100644 --- a/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java +++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java @@ -48,7 +48,8 @@ import org.apache.wicket.util.string.StringValue; import org.apache.wicket.util.string.Strings; import org.apache.wicket.util.visit.IVisit; import org.apache.wicket.util.visit.IVisitor; -import org.junit.Assert; + +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * A helper class for testing validation and submission of <code>FormComponent</code>s. @@ -108,7 +109,7 @@ public class FormTester /** * Constructor. - * + * * @param formComponent * a <code>FormComponent</code> */ @@ -119,7 +120,7 @@ public class FormTester /** * Implements whether toggle or accumulate the selection. - * + * * @param formComponent * a <code>FormComponent</code> * @param value @@ -171,7 +172,7 @@ public class FormTester /** * Selects a given index in a selectable <code>FormComponent</code>. - * + * * @param index */ protected final void doSelect(final int index) @@ -182,7 +183,7 @@ public class FormTester /** * Selects a given index in a selectable <code>FormComponent</code>. - * + * * @param formComponent * a <code>FormComponent</code> * @param index @@ -242,7 +243,7 @@ public class FormTester { /** * Constructor. - * + * * @param formComponent * a <code>FormComponent</code> */ @@ -271,7 +272,7 @@ public class FormTester { /** * Constructor. - * + * * @param formComponent * a <code>FormComponent</code> */ @@ -290,7 +291,7 @@ public class FormTester /** * Creates a <code>ChoiceSelector</code>. - * + * * @param formComponent * a <code>FormComponent</code> * @return ChoiceSelector a <code>ChoiceSelector</code> @@ -321,7 +322,7 @@ public class FormTester /** * Creates a <code>MultipleChoiceSelector</code>. - * + * * @param formComponent * a <code>FormComponent</code> * @return ChoiceSelector a <code>ChoiceSelector</code> @@ -333,7 +334,7 @@ public class FormTester /** * Tests if a given <code>FormComponent</code> allows multiple choice. - * + * * @param formComponent * a <code>FormComponent</code> * @return <code>true</code> if the given FormComponent allows multiple choice @@ -366,7 +367,7 @@ public class FormTester /** * @see WicketTester#newFormTester(String) - * + * * @param path * path to <code>FormComponent</code> * @param workingForm @@ -416,7 +417,7 @@ public class FormTester /** * Gets request parameter values for the form component that represents its current model value - * + * * @param formComponent * @return array containing parameter values */ @@ -458,7 +459,7 @@ public class FormTester /** * Retrieves the current <code>Form</code> object. - * + * * @return the working <code>Form</code> */ public Form<?> getForm() @@ -468,7 +469,7 @@ public class FormTester /** * Gets the value for an <code>AbstractTextComponent</code> with the provided id. - * + * * @param id * <code>Component</code> id * @return the value of the text component @@ -490,7 +491,7 @@ public class FormTester * as <code>Radio</code> or <code>DropDownList</code>, the selection will toggle each other. For * multiple choice, such as <code>Checkbox</code> or <code>ListMultipleChoice</code>, the * selection will accumulate. - * + * * @param formComponentId * relative path (from <code>Form</code>) to the selectable * <code>FormComponent</code> @@ -516,9 +517,9 @@ public class FormTester /** * A convenience method to select multiple options for the <code>FormComponent</code>. The * method only support multiple selectable <code>FormComponent</code>s. - * + * * @see #select(String, int) - * + * * @param formComponentId * relative path (from <code>Form</code>) to the selectable * <code>FormComponent</code> @@ -534,9 +535,9 @@ public class FormTester /** * A convenience method to select multiple options for the <code>FormComponent</code>. The * method only support multiple selectable <code>FormComponent</code>s. - * + * * @see #select(String, int) - * + * * @param formComponentId * relative path (from <code>Form</code>) to the selectable * <code>FormComponent</code> @@ -569,7 +570,7 @@ public class FormTester /** * Simulates filling in a field on a <code>Form</code>. - * + * * @param formComponentId * relative path (from <code>Form</code>) to the selectable * <code>FormComponent</code> or <code>IFormSubmittingComponent</code> @@ -580,14 +581,14 @@ public class FormTester public FormTester setValue(final String formComponentId, final String value) { Component component = workingForm.get(formComponentId); - Assert.assertNotNull("Unable to set value. Couldn't find component with name: " + + assertNotNull("Unable to set value. Couldn't find component with name: " + formComponentId, component); return setValue(component, value); } /** * Simulates filling in a field on a <code>Form</code>. - * + * * @param formComponent * relative path (from <code>Form</code>) to the selectable * <code>FormComponent</code> or <code>IFormSubmittingComponent</code> @@ -629,7 +630,7 @@ public class FormTester /** * Sets the <code>File</code> on a {@link FileUploadField}. - * + * * @param formComponentId * relative path (from <code>Form</code>) to the selectable * <code>FormComponent</code>. The <code>FormComponent</code> must be of a type @@ -670,7 +671,7 @@ public class FormTester /** * Submits the <code>Form</code>. Note that <code>submit</code> can be executed only once. - * + * * @return This */ public FormTester submit() @@ -709,12 +710,12 @@ public class FormTester * <p> * Note that if the button is associated with a model, it's better to use the * <code>setValue</code> method instead: - * + * * <pre> * formTester.setValue("to:my:button", "value on the button"); * formTester.submit(); * </pre> - * + * * @param buttonComponentId * relative path (from <code>Form</code>) to the button * @return This @@ -735,12 +736,12 @@ public class FormTester * <p> * Note that if the button is associated with a model, it's better to use the * <code>setValue</code> method instead: - * + * * <pre> * formTester.setValue(myButton, "value on the button"); * formTester.submit(); * </pre> - * + * * @param buttonComponent * relative path (from <code>Form</code>) to the button * @return This @@ -770,7 +771,7 @@ public class FormTester /** * A convenience method to submit the Form via a SubmitLink which may inside or outside of the * Form. - * + * * @param path * The path to the SubmitLink * @param pageRelative @@ -796,7 +797,7 @@ public class FormTester /** * Adds an additional <code>FormComponent</code>'s value into request parameter -- this method * retains existing parameters but removes any duplicate parameters. - * + * * @param formComponent * a <code>FormComponent</code> * @param value @@ -851,7 +852,7 @@ public class FormTester /** * Returns <code>true</code> if the parameter exists in the <code>FormComponent</code>. - * + * * @param formComponent * a <code>FormComponent</code> * @return <code>true</code> if the parameter exists in the <code>FormComponent</code> @@ -868,7 +869,7 @@ public class FormTester /** * Set formComponent's value into request parameter, this method overwrites existing parameters. - * + * * @param formComponent * a <code>FormComponent</code> * @param value @@ -883,7 +884,7 @@ public class FormTester /** * Set component's value into request parameter, this method overwrites existing parameters. - * + * * @param component * an {@link IFormSubmittingComponent} * @param value @@ -895,7 +896,7 @@ public class FormTester } /** - * + * * @param message */ private void fail(String message) http://git-wip-us.apache.org/repos/asf/wicket/blob/dcd29c0b/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTester.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTester.java b/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTester.java index a35aa0d..f94304f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTester.java +++ b/wicket-core/src/main/java/org/apache/wicket/util/tester/WicketTester.java @@ -49,8 +49,10 @@ import java.util.Arrays; import java.util.List; import java.util.Locale; -import static org.junit.jupiter.api.Assertions.*; - +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * A helper class to ease unit testing of Wicket applications without the need for a servlet @@ -145,14 +147,16 @@ import static org.junit.jupiter.api.Assertions.*; * * 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()) + * 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 @@ -255,41 +259,19 @@ public class WicketTester extends BaseWicketTester } /** - * Returns the current Maven build directory taken from the <tt>basedir</tt> system property, or - * null if not set - * - * @return path with a trailing slash - */ - public static String getBasedir() - { - String basedir = System.getProperty("basedir"); - if (basedir != null) - { - basedir = basedir + "/"; - } - else - { - basedir = ""; - } - return basedir; - } - - /** * Asserts that the Ajax location header is present. */ public void assertAjaxLocation() { if (null != getLastResponse().getHeader("Location")) { - throw new AssertionFailedError( - "Location header should *not* be present when using Ajax"); + throw new AssertionFailedError("Location header should *not* be present when using Ajax"); } String ajaxLocation = getLastResponse().getHeader("Ajax-Location"); if (null == ajaxLocation) { - throw new AssertionFailedError( - "Ajax-Location header should be present when using Ajax"); + throw new AssertionFailedError("Ajax-Location header should be present when using Ajax"); } int statusCode = getLastResponse().getStatus(); @@ -313,19 +295,8 @@ public class WicketTester extends BaseWicketTester } /** - * - * @param result - */ - private void assertResult(Result result) - { - if (result.wasFailed()) - { - throw new AssertionFailedError(result.getMessage()); - } - } - - /** - * Asserts that the <code>Component</code> a the given path has a behavior of the given type. + * Asserts that the <code>Component</code> a the given path has a behavior + * of the given type. * * @param path * path to <code>Component</code> @@ -339,44 +310,44 @@ public class WicketTester extends BaseWicketTester Component component = assertExists(path); List<? extends Behavior> behaviors = component.getBehaviors(expectedBehaviorClass); final String message = String.format("Component '%s' has no behaviors of type '%s'", - component.getPageRelativePath(), expectedBehaviorClass); + component.getPageRelativePath(), expectedBehaviorClass); assertResult(new Result(CollectionUtils.isEmpty(behaviors), message)); } /** * Tests that a <code>Component</code> has been added to a <code>AjaxRequestTarget</code>, using - * {@link org.apache.wicket.ajax.AjaxRequestTarget#add(Component...)}. This method actually - * tests that a <code>Component</code> is on the Ajax response sent back to the client. + * {@link org.apache.wicket.ajax.AjaxRequestTarget#add(Component...)}. This method actually tests that a + * <code>Component</code> is on the Ajax response sent back to the client. * <p> * PLEASE NOTE! This method doesn't actually insert the <code>Component</code> in the client DOM * tree, using JavaScript. But it shouldn't be needed because you just have to trust that Wicket * Ajax JavaScript works. * - * @param componentPath - * a <code>Component</code> path to test + * @param component + * a <code>Component</code> to be tested */ - public void assertComponentOnAjaxResponse(String componentPath) + public void assertComponentOnAjaxResponse(Component component) { - Component component = getComponentFromLastRenderedPage(componentPath, false); - assertComponentOnAjaxResponse(component); + Result result = isComponentOnAjaxResponse(component); + assertResult(result); } /** * Tests that a <code>Component</code> has been added to a <code>AjaxRequestTarget</code>, using - * {@link org.apache.wicket.ajax.AjaxRequestTarget#add(Component...)}. This method actually - * tests that a <code>Component</code> is on the Ajax response sent back to the client. + * {@link org.apache.wicket.ajax.AjaxRequestTarget#add(Component...)}. This method actually tests that a + * <code>Component</code> is on the Ajax response sent back to the client. * <p> * PLEASE NOTE! This method doesn't actually insert the <code>Component</code> in the client DOM * tree, using JavaScript. But it shouldn't be needed because you just have to trust that Wicket * Ajax JavaScript works. * - * @param component - * a <code>Component</code> to be tested + * @param componentPath + * a <code>Component</code> path to test */ - public void assertComponentOnAjaxResponse(Component component) + public void assertComponentOnAjaxResponse(String componentPath) { - Result result = isComponentOnAjaxResponse(component); - assertResult(result); + Component component = getComponentFromLastRenderedPage(componentPath, false); + assertComponentOnAjaxResponse(component); } /** @@ -405,9 +376,9 @@ public class WicketTester extends BaseWicketTester * Asserts that a component's markup has loaded with the given variation * * @param component - * The component which markup to check + * The component which markup to check * @param expectedVariation - * The expected variation of the component's markup + * The expected variation of the component's markup */ public void assertMarkupVariation(Component component, String expectedVariation) { @@ -417,44 +388,21 @@ public class WicketTester extends BaseWicketTester String actualVariation = markup.getMarkupResourceStream().getVariation(); if (Objects.equal(expectedVariation, actualVariation) == false) { - result = Result.fail( - String.format("Wrong variation for component '%s'. Actual: '%s', expected: '%s'", + result = Result.fail(String.format("Wrong variation for component '%s'. Actual: '%s', expected: '%s'", component.getPageRelativePath(), actualVariation, expectedVariation)); } assertResult(result); } - private IMarkupFragment getMarkupFragment(Component component) - { - IMarkupFragment markup = null; - if (component instanceof MarkupContainer) - { - markup = ((MarkupContainer)component).getAssociatedMarkup(); - } - - if (markup == null) - { - markup = component.getMarkup(); - } - - if (markup == null) - { - throw new AssertionFailedError(String.format("Cannot find the markup of component: %s", - component.getPageRelativePath())); - } - - return markup; - } - /** * Asserts that a component's markup has loaded with the given style. * * @param component - * The component which markup to check + * The component which markup to check * @param expectedStyle - * The expected style of the component's markup. For example: <em>green</em> in - * <code>MyPanel_green.html</code> + * The expected style of the component's markup. + * For example: <em>green</em> in <code>MyPanel_green.html</code> */ public void assertMarkupStyle(Component component, String expectedStyle) { @@ -464,8 +412,7 @@ public class WicketTester extends BaseWicketTester String actualStyle = markup.getMarkupResourceStream().getStyle(); if (Objects.equal(expectedStyle, actualStyle) == false) { - result = Result - .fail(String.format("Wrong style for component '%s'. Actual: '%s', expected: '%s'", + result = Result.fail(String.format("Wrong style for component '%s'. Actual: '%s', expected: '%s'", component.getPageRelativePath(), actualStyle, expectedStyle)); } @@ -476,9 +423,9 @@ public class WicketTester extends BaseWicketTester * Asserts that a component's markup has loaded with the given locale * * @param component - * The component which markup to check + * The component which markup to check * @param expectedLocale - * The expected locale of the component's markup + * The expected locale of the component's markup */ public void assertMarkupLocale(Component component, Locale expectedLocale) { @@ -488,14 +435,34 @@ public class WicketTester extends BaseWicketTester Locale actualLocale = markup.getMarkupResourceStream().getLocale(); if (Objects.equal(expectedLocale, actualLocale) == false) { - result = Result - .fail(String.format("Wrong locale for component '%s'. Actual: '%s', expected: '%s'", + result = Result.fail(String.format("Wrong locale for component '%s'. Actual: '%s', expected: '%s'", component.getPageRelativePath(), actualLocale, expectedLocale)); } assertResult(result); } + private IMarkupFragment getMarkupFragment(Component component) + { + IMarkupFragment markup = null; + if (component instanceof MarkupContainer) + { + markup = ((MarkupContainer) component).getAssociatedMarkup(); + } + + if (markup == null) + { + markup = component.getMarkup(); + } + + if (markup == null) + { + throw new AssertionFailedError(String.format("Cannot find the markup of component: %s", component.getPageRelativePath())); + } + + return markup; + } + /** * Asserts error-level feedback messages. * @@ -504,8 +471,18 @@ public class WicketTester extends BaseWicketTester */ public void assertErrorMessages(Serializable... expectedErrorMessages) { - assertFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR), - expectedErrorMessages); + assertFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.ERROR), expectedErrorMessages); + } + + /** + * Assert info-level feedback messages. + * + * @param expectedInfoMessages + * expected info messages + */ + public void assertInfoMessages(Serializable... expectedInfoMessages) + { + assertFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.INFO), expectedInfoMessages); } /** @@ -516,8 +493,7 @@ public class WicketTester extends BaseWicketTester * @param expectedMessages * expected feedback messages */ - public void assertFeedbackMessages(IFeedbackMessageFilter filter, - Serializable... expectedMessages) + public void assertFeedbackMessages(IFeedbackMessageFilter filter, Serializable... expectedMessages) { List<FeedbackMessage> feedbackMessages = getFeedbackMessages(filter); List<Serializable> actualMessages = getActualFeedbackMessages(feedbackMessages); @@ -525,8 +501,34 @@ public class WicketTester extends BaseWicketTester } /** - * Extracts the actual messages from the passed feedback messages. Specially handles - * ValidationErrorFeedback messages by extracting their String message + * Asserts that there is a feedback message provided by a given component + * + * @param component + * the component that provided the expected feedback message. Optional. + * @param key + * the resource key for the feedback message. Mandatory. + * @param model + * the model used for interpolating the feedback message. Optional. + * @param filter + * the filter that decides in which messages to look in. E.g. with a specific + * level, rendered or not, etc. + */ + public void assertComponentFeedbackMessage(Component component, String key, IModel<?> model, IFeedbackMessageFilter filter) + { + Args.notNull(key, "key"); + + String expectedMessage = getApplication().getResourceSettings().getLocalizer().getString(key, component, model); + + List<FeedbackMessage> feedbackMessages = getFeedbackMessages(filter); + List<Serializable> actualMessages = getActualFeedbackMessages(feedbackMessages); + + assertTrue(actualMessages.contains(expectedMessage), + String.format("Feedback message with key '%s' cannot be found in %s", key, actualMessages)); + } + + /** + * Extracts the actual messages from the passed feedback messages. + * Specially handles ValidationErrorFeedback messages by extracting their String message * * @param feedbackMessages * the feedback messages @@ -551,46 +553,6 @@ public class WicketTester extends BaseWicketTester } /** - * Assert info-level feedback messages. - * - * @param expectedInfoMessages - * expected info messages - */ - public void assertInfoMessages(Serializable... expectedInfoMessages) - { - assertFeedbackMessages(new ExactLevelFeedbackMessageFilter(FeedbackMessage.INFO), - expectedInfoMessages); - } - - /** - * Asserts that there is a feedback message provided by a given component - * - * @param component - * the component that provided the expected feedback message. Optional. - * @param key - * the resource key for the feedback message. Mandatory. - * @param model - * the model used for interpolating the feedback message. Optional. - * @param filter - * the filter that decides in which messages to look in. E.g. with a specific level, - * rendered or not, etc. - */ - public void assertComponentFeedbackMessage(Component component, String key, IModel<?> model, - IFeedbackMessageFilter filter) - { - Args.notNull(key, "key"); - - String expectedMessage = getApplication().getResourceSettings().getLocalizer().getString( - key, component, model); - - List<FeedbackMessage> feedbackMessages = getFeedbackMessages(filter); - List<Serializable> actualMessages = getActualFeedbackMessages(feedbackMessages); - - assertTrue(actualMessages.contains(expectedMessage), String - .format("Feedback message with key '%s' cannot be found in %s", key, actualMessages)); - } - - /** * Assert that a particular feedback panel is rendering certain messages. * * NOTE: this casts the component at the specified path to a {@link FeedbackPanel}, so it will @@ -609,13 +571,12 @@ public class WicketTester extends BaseWicketTester final List<FeedbackMessage> renderedMessages = model.getObject(); if (renderedMessages == null) { - fail(String.format("feedback panel at path [%s] returned null messages", path)); + throw new AssertionFailedError(String.format("feedback panel at path [%s] returned null messages", path)); } if (messages.length != renderedMessages.size()) { - fail(String.format( - "you expected '%d' messages for the feedback panel [%s], but there were actually '%d'", - messages.length, path, renderedMessages.size())); + throw new AssertionFailedError(String.format("you expected '%d' messages for the feedback panel [%s], but there were actually '%d'", + messages.length, path, renderedMessages.size())); } for (int i = 0; i < messages.length && i < renderedMessages.size(); i++) { @@ -694,30 +655,19 @@ public class WicketTester extends BaseWicketTester } /** - * Asserts last-rendered <code>Page</code> against an expected HTML document. - * <p> - * Use <code>-Dwicket.replace.expected.results=true</code> to automatically replace the expected - * output file. - * - * @param clazz - * <code>Class</code> used to load the file (relative to <code>clazz</code> package) - * @param filename - * expected output filename <code>String</code> - * @throws Exception + * Asserts no error-level feedback messages. */ - @Override - public void assertResultPage(final Class<?> clazz, final String filename) throws Exception + public void assertNoErrorMessage() { - String document = getLastResponseAsString(); - DiffUtil.validatePage(document, clazz, filename, true); + assertNoFeedbackMessage(FeedbackMessage.ERROR); } /** - * Asserts no error-level feedback messages. + * Asserts no info-level feedback messages. */ - public void assertNoErrorMessage() + public void assertNoInfoMessage() { - assertNoFeedbackMessage(FeedbackMessage.ERROR); + assertNoFeedbackMessage(FeedbackMessage.INFO); } /** @@ -733,11 +683,33 @@ public class WicketTester extends BaseWicketTester } /** - * Asserts no info-level feedback messages. + * Asserts a last-rendered <code>Page</code> class. + * + * @param expectedRenderedPageClass + * expected class of last rendered <code>Page</code> */ - public void assertNoInfoMessage() + public void assertRenderedPage(Class<? extends Page> expectedRenderedPageClass) { - assertNoFeedbackMessage(FeedbackMessage.INFO); + assertResult(isRenderedPage(expectedRenderedPageClass)); + } + + /** + * Asserts last-rendered <code>Page</code> against an expected HTML document. + * <p> + * Use <code>-Dwicket.replace.expected.results=true</code> to automatically replace the expected + * output file. + * + * @param clazz + * <code>Class</code> used to load the file (relative to <code>clazz</code> package) + * @param filename + * expected output filename <code>String</code> + * @throws Exception + */ + @Override + public void assertResultPage(final Class<?> clazz, final String filename) throws Exception + { + String document = getLastResponseAsString(); + DiffUtil.validatePage(document, clazz, filename, true); } /** @@ -812,6 +784,18 @@ public class WicketTester extends BaseWicketTester } /** + * + * @param result + */ + private void assertResult(Result result) + { + if (result.wasFailed()) + { + throw new AssertionFailedError(result.getMessage()); + } + } + + /** * Checks whether a component is visible and/or enabled before usage * * @param component @@ -848,16 +832,15 @@ public class WicketTester extends BaseWicketTester } catch (ClassCastException e) { - throw new IllegalArgumentException( - "Component with id:" + id + " is not a BookmarkablePageLink"); + throw new IllegalArgumentException("Component with id:" + id + + " is not a BookmarkablePageLink"); } - assertEquals(pageClass, pageLink.getPageClass(), - "BookmarkablePageLink: " + id + " is pointing to the wrong page"); + assertEquals(pageClass, + pageLink.getPageClass(), "BookmarkablePageLink: " + id + " is pointing to the wrong page"); - assertEquals(parameters, pageLink.getPageParameters(), - "One or more of the parameters associated with the BookmarkablePageLink: " + id + - " do not match"); + assertEquals(parameters, pageLink.getPageParameters(), "One or more of the parameters associated with the BookmarkablePageLink: " + + id + " do not match"); } /** @@ -881,17 +864,6 @@ public class WicketTester extends BaseWicketTester } /** - * Asserts a last-rendered <code>Page</code> class. - * - * @param expectedRenderedPageClass - * expected class of last rendered <code>Page</code> - */ - public void assertRenderedPage(Class<? extends Page> expectedRenderedPageClass) - { - assertResult(isRenderedPage(expectedRenderedPageClass)); - } - - /** * Use <code>-Dwicket.replace.expected.results=true</code> to automatically replace the expected * output file. * @@ -996,4 +968,24 @@ public class WicketTester extends BaseWicketTester String actualRedirectUrl = getLastResponse().getRedirectLocation(); assertEquals(expectedRedirectUrl, actualRedirectUrl); } + + /** + * Returns the current Maven build directory taken from the <tt>basedir</tt> system property, or + * null if not set + * + * @return path with a trailing slash + */ + public static String getBasedir() + { + String basedir = System.getProperty("basedir"); + if (basedir != null) + { + basedir = basedir + "/"; + } + else + { + basedir = ""; + } + return basedir; + } }
