Author: ivaynberg Date: Fri Feb 5 03:27:08 2010 New Revision: 906795 URL: http://svn.apache.org/viewvc?rev=906795&view=rev Log: WICKET-2660 Wickettester executeAllTimerBehaviors executes stopped behaviors too Issue: WICKET-2660
Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java?rev=906795&r1=906794&r2=906795&view=diff ============================================================================== --- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java (original) +++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java Fri Feb 5 03:27:08 2010 @@ -68,8 +68,8 @@ } /** - * Sets the update interval duration. This method should only be called within the - * {...@link #onTimer(AjaxRequestTarget)} method. + * Sets the update interval duration. This method should only be called + * within the {...@link #onTimer(AjaxRequestTarget)} method. * * @param updateInterval */ @@ -117,15 +117,15 @@ protected final String getJsTimeoutCall(final Duration updateInterval) { // this might look strange, but it is necessary for IE not to leak :( - return "setTimeout(\"" + getCallbackScript() + "\", " + updateInterval.getMilliseconds() + - ");"; + return "setTimeout(\"" + getCallbackScript() + "\", " + updateInterval.getMilliseconds() + + ");"; } @Override protected CharSequence getCallbackScript() { - return generateCallbackScript("wicketAjaxGet('" + getCallbackUrl(onlyTargetActivePage()) + - "'"); + return generateCallbackScript("wicketAjaxGet('" + getCallbackUrl(onlyTargetActivePage()) + + "'"); } /** @@ -138,8 +138,8 @@ if (!(getComponent() instanceof Page)) { String componentId = getComponent().getMarkupId(); - precondition = "var c = Wicket.$('" + componentId + - "'); return typeof(c) != 'undefined' && c != null"; + precondition = "var c = Wicket.$('" + componentId + + "'); return typeof(c) != 'undefined' && c != null"; } return precondition; } @@ -171,4 +171,14 @@ * The request target */ protected abstract void onTimer(final AjaxRequestTarget target); + + /** + * @return {...@code true} if the behavior has been stopped via {...@link #stop()} + */ + public final boolean isStopped() + { + return stopped; + } + + } Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=906795&r1=906794&r2=906795&view=diff ============================================================================== --- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java (original) +++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java Fri Feb 5 03:27:08 2010 @@ -75,9 +75,10 @@ import org.slf4j.LoggerFactory; /** - * A helper class to ease unit testing of Wicket applications without the need for a servlet - * container. See javadoc of <code>WicketTester</code> for example usage. This class can be used as - * is, but JUnit users should use derived class <code>WicketTester</code>. + * A helper class to ease unit testing of Wicket applications without the need + * for a servlet container. See javadoc of <code>WicketTester</code> for example + * usage. This class can be used as is, but JUnit users should use derived class + * <code>WicketTester</code>. * * @see WicketTester * @@ -143,8 +144,8 @@ } /** - * Creates <code>WicketTester</code> and automatically create a <code>WebApplication</code>, but - * the tester will have no home page. + * Creates <code>WicketTester</code> and automatically create a + * <code>WebApplication</code>, but the tester will have no home page. */ public BaseWicketTester() { @@ -152,7 +153,8 @@ } /** - * Creates <code>WicketTester</code> and automatically creates a <code>WebApplication</code>. + * Creates <code>WicketTester</code> and automatically creates a + * <code>WebApplication</code>. * * @param <C> * @@ -206,8 +208,8 @@ * @param application * a <code>WicketTester</code> <code>WebApplication</code> object * @param path - * the absolute path on disk to the <code>WebApplication</code>'s contents (e.g. war - * root) - may be <code>null</code> + * the absolute path on disk to the <code>WebApplication</code>'s + * contents (e.g. war root) - may be <code>null</code> * * @see org.apache.wicket.protocol.http.MockWebApplication#MockWebApplication(org.apache.wicket.protocol.http.WebApplication, * String) @@ -218,9 +220,10 @@ } /** - * Renders a <code>Page</code> defined in <code>TestPageSource</code>. This is usually used when - * a page does not have default constructor. For example, a <code>ViewBook</code> page requires - * a <code>Book</code> instance: + * Renders a <code>Page</code> defined in <code>TestPageSource</code>. This + * is usually used when a page does not have default constructor. For + * example, a <code>ViewBook</code> page requires a <code>Book</code> + * instance: * * <pre> * tester.startPage(new TestPageSource() @@ -248,8 +251,9 @@ } /** - * Builds and processes a request suitable for invoking a listener. The <code>Component</code> - * must implement any of the known <code>IListener</code> interfaces. + * Builds and processes a request suitable for invoking a listener. The + * <code>Component</code> must implement any of the known + * <code>IListener</code> interfaces. * * @param component * the listener to invoke @@ -262,7 +266,8 @@ } /** - * Builds and processes a request suitable for executing an <code>AbstractAjaxBehavior</code>. + * Builds and processes a request suitable for executing an + * <code>AbstractAjaxBehavior</code>. * * @param behavior * an <code>AbstractAjaxBehavior</code> to execute @@ -320,12 +325,15 @@ } /** - * Creates a {...@link FormTester} for the <code>Form</code> at a given path, and fills all child - * {...@link org.apache.wicket.markup.html.form.FormComponent}s with blank <code>String</code>s. + * Creates a {...@link FormTester} for the <code>Form</code> at a given path, + * and fills all child + * {...@link org.apache.wicket.markup.html.form.FormComponent}s with blank + * <code>String</code>s. * * @param path * path to <code>FormComponent</code> - * @return a <code>FormTester</code> instance for testing the <code>Form</code> + * @return a <code>FormTester</code> instance for testing the + * <code>Form</code> * @see #newFormTester(String, boolean) */ public FormTester newFormTester(String path) @@ -339,21 +347,23 @@ * @param path * path to <code>FormComponent</code> * @param fillBlankString - * specifies whether to fill all child <code>FormComponent</code>s with blank - * <code>String</code>s - * @return a <code>FormTester</code> instance for testing the <code>Form</code> + * specifies whether to fill all child <code>FormComponent</code> + * s with blank <code>String</code>s + * @return a <code>FormTester</code> instance for testing the + * <code>Form</code> * @see FormTester */ public FormTester newFormTester(String path, boolean fillBlankString) { return new FormTester(path, (Form<?>)getComponentFromLastRenderedPage(path), this, - fillBlankString); + fillBlankString); } /** - * Renders a <code>Panel</code> defined in <code>TestPanelSource</code>. The usage is similar to - * {...@link #startPage(ITestPageSource)}. Please note that testing <code>Panel</code> must use the - * supplied <code>panelId<code> as a <code>Component</code> id. + * Renders a <code>Panel</code> defined in <code>TestPanelSource</code>. The + * usage is similar to {...@link #startPage(ITestPageSource)}. Please note that + * testing <code>Panel</code> must use the supplied + * <code>panelId<code> as a <code>Component</code> id. * * <pre> * tester.startPanel(new TestPanelSource() @@ -367,7 +377,8 @@ * </pre> * * @param testPanelSource - * a <code>Panel</code> factory that creates test <code>Panel</code> instances + * a <code>Panel</code> factory that creates test + * <code>Panel</code> instances * @return a rendered <code>Panel</code> */ public final Panel startPanel(final TestPanelSource testPanelSource) @@ -384,12 +395,14 @@ } /** - * Renders a <code>Panel</code> from a <code>Panel(String id)</code> constructor. + * Renders a <code>Panel</code> from a <code>Panel(String id)</code> + * constructor. * * @param <C> * * @param panelClass - * a test <code>Panel</code> class with <code>Panel(String id)</code> constructor + * a test <code>Panel</code> class with + * <code>Panel(String id)</code> constructor * @return a rendered <code>Panel</code> */ public final <C extends Panel> Panel startPanel(final Class<C> panelClass) @@ -408,7 +421,8 @@ { try { - Constructor<? extends Panel> c = panelClass.getConstructor(String.class); + Constructor<? extends Panel> c = panelClass + .getConstructor(String.class); return c.newInstance(panelId); } catch (SecurityException e) @@ -438,15 +452,17 @@ } /** - * A helper method for starting a component for a test without attaching it to a Page. + * 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. + * 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()); + * UserDataView view = new UserDataView("view", new + * ListDataProvider(userList)); tester.startComponent(view); assertEquals(4, + * view.size()); * * @param component */ @@ -471,9 +487,9 @@ } /** - * 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. + * 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. * * @param path * Path to component @@ -485,8 +501,8 @@ final Component component = getLastRenderedPage().get(path); if (component == null) { - fail("path: '" + path + "' does not exist for page: " + - Classes.simpleName(getLastRenderedPage().getClass())); + fail("path: '" + path + "' does not exist for page: " + + Classes.simpleName(getLastRenderedPage().getClass())); return component; } if (component.isVisibleInHierarchy()) @@ -527,7 +543,8 @@ PageLink<?> pageLink = (PageLink<?>)getComponentFromLastRenderedPage(path); try { - for (Class<?> type = pageLink.getClass(); type != PageLink.class.getSuperclass(); type = type.getSuperclass()) + for (Class<?> type = pageLink.getClass(); type != PageLink.class.getSuperclass(); type = type + .getSuperclass()) { try { @@ -543,7 +560,7 @@ } } throw new WicketRuntimeException( - "Is this realy a PageLink? Cannot find 'pageLink' field"); + "Is this realy a PageLink? Cannot find 'pageLink' field"); } catch (SecurityException e) { @@ -573,9 +590,9 @@ { return Result.fail("Component not found: " + path); } - return isTrue("component '" + Classes.simpleName(component.getClass()) + "' is not type:" + - Classes.simpleName(expectedComponentClass), - expectedComponentClass.isAssignableFrom(component.getClass())); + return isTrue("component '" + Classes.simpleName(component.getClass()) + "' is not type:" + + Classes.simpleName(expectedComponentClass), expectedComponentClass + .isAssignableFrom(component.getClass())); } /** @@ -590,8 +607,8 @@ Component component = getLastRenderedPage().get(path); if (component == null) { - fail("path: '" + path + "' does no exist for page: " + - Classes.simpleName(getLastRenderedPage().getClass())); + fail("path: '" + path + "' does no exist for page: " + + Classes.simpleName(getLastRenderedPage().getClass())); } return isTrue("component '" + path + "' is not visible", component.isVisibleInHierarchy()); @@ -619,7 +636,7 @@ public Result ifContains(String pattern) { return isTrue("pattern '" + pattern + "' not found", getServletResponse().getDocument() - .matches("(?s).*" + pattern + ".*")); + .matches("(?s).*" + pattern + ".*")); } /** @@ -656,25 +673,30 @@ * This method also works for {...@link AjaxLink}, {...@link AjaxFallbackLink} and * {...@link AjaxSubmitLink}. * <p> - * 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. + * 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. * <p> - * 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 {...@link FormTester} to test your forms. It should be used to - * test that the code in your onSubmit method in AjaxSubmitLink actually works. + * 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 {...@link FormTester} to test your forms. It should + * be used to test that the code in your onSubmit method in AjaxSubmitLink + * actually works. * <p> - * 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. + * 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. * * @param path * path to <code>Link</code> component * @param 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. + * 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. */ public void clickLink(String path, boolean isAjax) { @@ -687,8 +709,8 @@ // If it's not ajax we fail if (isAjax == false) { - fail("Link " + path + "is an AjaxLink and will " + - "not be invoked when AJAX (javascript) is disabled."); + fail("Link " + path + "is an AjaxLink and will " + + "not be invoked when AJAX (javascript) is disabled."); } AjaxLink<?> link = (AjaxLink<?>)linkComponent; @@ -727,8 +749,8 @@ // If it's not ajax we fail if (isAjax == false) { - fail("Link " + path + "is an AjaxSubmitLink and " + - "will not be invoked when AJAX (javascript) is disabled."); + fail("Link " + path + "is an AjaxSubmitLink and " + + "will not be invoked when AJAX (javascript) is disabled."); } AjaxSubmitLink link = (AjaxSubmitLink)linkComponent; @@ -778,7 +800,7 @@ if (getParametersForNextRequest().containsKey(component.getInputName()) == false) { getParametersForNextRequest().put(component.getInputName(), - new String[] { component.getDefaultModelObjectAsString() }); + new String[] { component.getDefaultModelObjectAsString() }); } return IVisitor.CONTINUE_TRAVERSAL; @@ -793,8 +815,8 @@ AbstractLink link = (AbstractLink)linkComponent; /* - * If the link is a bookmarkable link, then we need to transfer the parameters to the - * next request. + * If the link is a bookmarkable link, then we need to transfer the + * parameters to the next request. */ if (link instanceof BookmarkablePageLink) { @@ -803,17 +825,17 @@ { BookmarkablePageLink.class.getDeclaredField("parameters"); Method getParametersMethod = BookmarkablePageLink.class.getDeclaredMethod( - "getPageParameters", (Class<?>[])null); + "getPageParameters", (Class<?>[])null); getParametersMethod.setAccessible(true); PageParameters parameters = (PageParameters)getParametersMethod.invoke( - bookmarkablePageLink, (Object[])null); + bookmarkablePageLink, (Object[])null); setParametersForNextRequest(parameters.toRequestParameters()); } catch (Exception e) { fail("Internal error in WicketTester. " - + "Please report this in Wickets Issue Tracker."); + + "Please report this in Wickets Issue Tracker."); } } @@ -839,8 +861,8 @@ } /** - * Sets a parameter for the <code>Component</code> with the given path to be used with the next - * request. + * Sets a parameter for the <code>Component</code> with the given path to be + * used with the next request. * <p> * NOTE: this method only works when a <code>Page</code> was rendered first. * @@ -866,7 +888,7 @@ if (c instanceof FormComponent) { getParametersForNextRequest().put(((FormComponent<?>)c).getInputName(), - new String[] { value.toString() }); + new String[] { value.toString() }); } else { @@ -878,7 +900,8 @@ /** * Asserts the last rendered <code>Page</code> class. * - * FIXME explain why the code is so complicated to compare two classes, or simplify + * FIXME explain why the code is so complicated to compare two classes, or + * simplify * * @param <C> * @@ -895,21 +918,23 @@ } if (!page.getClass().isAssignableFrom(expectedRenderedPageClass)) { - return isEqual(Classes.simpleName(expectedRenderedPageClass), - Classes.simpleName(page.getClass())); + return isEqual(Classes.simpleName(expectedRenderedPageClass), Classes.simpleName(page + .getClass())); } return Result.pass(); } /** - * Asserts last rendered <code>Page</code> against an expected HTML document. + * 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. + * Use <code>-Dwicket.replace.expected.results=true</code> to automatically + * replace the expected output file. * </p> * * @param pageClass - * used to load the <code>File</code> (relative to <code>clazz</code> package) + * used to load the <code>File</code> (relative to + * <code>clazz</code> package) * @param filename * expected output <code>File</code> name * @throws Exception @@ -922,8 +947,8 @@ } /** - * Asserts last rendered <code>Page</code> against an expected HTML document as a - * <code>String</code>. + * Asserts last rendered <code>Page</code> against an expected HTML document + * as a <code>String</code>. * * @param expectedDocument * expected output @@ -945,8 +970,8 @@ public Result hasNoErrorMessage() { List<Serializable> messages = getMessages(FeedbackMessage.ERROR); - return isTrue("expect no error message, but contains\n" + - WicketTesterHelper.asLined(messages), messages.isEmpty()); + return isTrue("expect no error message, but contains\n" + + WicketTesterHelper.asLined(messages), messages.isEmpty()); } /** @@ -957,8 +982,8 @@ public Result hasNoInfoMessage() { List<Serializable> messages = getMessages(FeedbackMessage.INFO); - return isTrue("expect no info message, but contains\n" + - WicketTesterHelper.asLined(messages), messages.isEmpty()); + return isTrue("expect no info message, but contains\n" + + WicketTesterHelper.asLined(messages), messages.isEmpty()); } /** @@ -1007,8 +1032,9 @@ } /** - * Dumps the <code>Component</code> trees to log. Show only the <code>Component</code>s whose - * paths contain the filter <code>String</code>. + * Dumps the <code>Component</code> trees to log. Show only the + * <code>Component</code>s whose paths contain the filter + * <code>String</code>. * * @param filter * a filter <code>String</code> @@ -1016,7 +1042,8 @@ public void debugComponentTrees(String filter) { log.info("debugging ----------------------------------------------"); - for (WicketTesterHelper.ComponentData obj : WicketTesterHelper.getComponentData(getLastRenderedPage())) + for (WicketTesterHelper.ComponentData obj : WicketTesterHelper + .getComponentData(getLastRenderedPage())) { if (obj.path.matches(".*" + filter + ".*")) { @@ -1026,13 +1053,16 @@ } /** - * Tests that a <code>Component</code> has been added to a <code>AjaxRequestTarget</code>, using - * {...@link AjaxRequestTarget#addComponent(Component)}. This method actually tests that a - * <code>Component</code> is on the Ajax response sent back to the client. + * Tests that a <code>Component</code> has been added to a + * <code>AjaxRequestTarget</code>, using + * {...@link AjaxRequestTarget#addComponent(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 have to trust that the Wicket - * Ajax Javascript just works. + * 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 have to trust that the Wicket Ajax + * Javascript just works. * * @param component * the <code>Component</code> to test @@ -1045,11 +1075,12 @@ Result result; - // test that the component renders the placeholder tag if it's not visible + // test that the component renders the placeholder tag if it's not + // visible if (!component.isVisible()) { failMessage = "A component which is invisible and doesn't render a placeholder tag" - + " will not be rendered at all and thus won't be accessible for subsequent AJAX interaction"; + + " will not be rendered at all and thus won't be accessible for subsequent AJAX interaction"; result = isTrue(failMessage, component.getOutputMarkupPlaceholderTag()); if (result.wasFailed()) { @@ -1062,11 +1093,10 @@ // Test that the previous response was actually a AJAX response failMessage = "The Previous response was not an AJAX response. " - + "You need to execute an AJAX event, using clickLink, before using this assert"; + + "You need to execute an AJAX event, using clickLink, before using this assert"; boolean isAjaxResponse = Pattern.compile( - "^<\\?xml version=\"1.0\" encoding=\".*?\"\\?><ajax-response>") - .matcher(ajaxResponse) - .find(); + "^<\\?xml version=\"1.0\" encoding=\".*?\"\\?><ajax-response>").matcher( + ajaxResponse).find(); result = isTrue(failMessage, isAjaxResponse); if (result.wasFailed()) { @@ -1077,7 +1107,7 @@ String markupId = component.getMarkupId(); failMessage = "The component doesn't have a markup id, " - + "which means that it can't have been added to the AJAX response"; + + "which means that it can't have been added to the AJAX response"; result = isTrue(failMessage, !Strings.isEmpty(markupId)); if (result.wasFailed()) { @@ -1085,8 +1115,8 @@ } // Look for that the component is on the response, using the markup id - boolean isComponentInAjaxResponse = ajaxResponse.matches("(?s).*<component id=\"" + - markupId + "\"[^>]*?>.*"); + boolean isComponentInAjaxResponse = ajaxResponse.matches("(?s).*<component id=\"" + + markupId + "\"[^>]*?>.*"); failMessage = "Component wasn't found in the AJAX response"; return isTrue(failMessage, isComponentInAjaxResponse); } @@ -1100,8 +1130,8 @@ * @param componentPath * the <code>Component</code> path * @param event - * the event which we simulate being fired. If <code>event</code> is - * <code>null</code>, the test will fail. + * the event which we simulate being fired. If <code>event</code> + * is <code>null</code>, the test will fail. */ public void executeAjaxEvent(String componentPath, String event) { @@ -1124,15 +1154,18 @@ // get the AbstractAjaxBehaviour which is responsible for // getting the contents of the lazy panel List<IBehavior> behaviors = BehaviorsUtil.getBehaviors(component, - AjaxSelfUpdatingTimerBehavior.class); + AjaxSelfUpdatingTimerBehavior.class); for (IBehavior b : behaviors) { if (b instanceof AjaxSelfUpdatingTimerBehavior) { - log.debug("Triggering AjaxSelfUpdatingTimerBehavior: " + - component.getClassRelativePath()); + log.debug("Triggering AjaxSelfUpdatingTimerBehavior: " + + component.getClassRelativePath()); AjaxSelfUpdatingTimerBehavior abstractAjaxBehaviour = (AjaxSelfUpdatingTimerBehavior)b; - executeBehavior(abstractAjaxBehaviour); + if (!abstractAjaxBehaviour.isStopped()) + { + executeBehavior(abstractAjaxBehaviour); + } } } return CONTINUE_TRAVERSAL; @@ -1142,8 +1175,8 @@ /** - * Simulates the firing of an Ajax event. You add an Ajax event to a <code>Component</code> by - * using: + * Simulates the firing of an Ajax event. You add an Ajax event to a + * <code>Component</code> by using: * * <pre> * ... @@ -1153,8 +1186,8 @@ * ... * </pre> * - * You can then test that the code inside <code>onEvent</code> actually does what it's supposed - * to, using the <code>WicketTester</code>: + * You can then test that the code inside <code>onEvent</code> actually does + * what it's supposed to, using the <code>WicketTester</code>: * * <pre> * ... @@ -1163,19 +1196,21 @@ * ... * </pre> * - * This also works with <code>AjaxFormSubmitBehavior</code>, where it will "submit" the - * <code>Form</code> before executing the command. + * This also works with <code>AjaxFormSubmitBehavior</code>, where it will + * "submit" the <code>Form</code> before executing the command. * <p> - * PLEASE NOTE! This method doesn't actually insert the <code>Component</code> in the client DOM - * tree, using Javascript. + * PLEASE NOTE! This method doesn't actually insert the + * <code>Component</code> in the client DOM tree, using Javascript. * * * @param component - * the <code>Component</code> that has the <code>AjaxEventBehavior</code> we want to - * test. If the <code>Component</code> is <code>null</code>, the test will fail. + * the <code>Component</code> that has the + * <code>AjaxEventBehavior</code> we want to test. If the + * <code>Component</code> is <code>null</code>, the test will + * fail. * @param event - * the event to simulate being fired. If <code>event</code> is <code>null</code>, the - * test will fail. + * the event to simulate being fired. If <code>event</code> is + * <code>null</code>, the test will fail. */ public void executeAjaxEvent(final Component component, final String event) { @@ -1189,8 +1224,8 @@ if (component.isVisibleInHierarchy() == false) { - fail("The component is currently not visible in the hierarchy and thus you can not fire events on it." + - " Component: " + component + "; Event: " + event); + fail("The component is currently not visible in the hierarchy and thus you can not fire events on it." + + " Component: " + component + "; Event: " + event); } // Run through all the behavior and select the LAST ADDED behavior which @@ -1212,17 +1247,18 @@ // If there haven't been found any event behaviors on the component // which matches the parameters we fail. - failMessage = "No AjaxEventBehavior found on component: " + component.getId() + - " which matches the event: " + event; + failMessage = "No AjaxEventBehavior found on component: " + component.getId() + + " which matches the event: " + event; notNull(failMessage, ajaxEventBehavior); - // when the requestcycle is not created via setupRequestAndResponse(true), than create a new + // when the requestcycle is not created via + // setupRequestAndResponse(true), than create a new // one WebRequestCycle requestCycle = resolveRequestCycle(); if (!requestCycle.getWebRequest().isAjax()) { throw new IllegalStateException( - "The ServletWebRequest was created without wicket-ajax header. Please use tester.setCreateAjaxRequest(true)"); + "The ServletWebRequest was created without wicket-ajax header. Please use tester.setCreateAjaxRequest(true)"); } // If the event is an FormSubmitBehavior then also "submit" the form @@ -1256,7 +1292,8 @@ { requestCycle = (WebRequestCycle)RequestCycle.get(); - // If a ajax request is requested but the existing is not, than we still need to create + // If a ajax request is requested but the existing is not, than we + // still need to create // a new one if ((requestCycle.getWebRequest().isAjax() == false) && (isCreateAjaxRequest() == true)) { @@ -1268,35 +1305,37 @@ } /** - * Retrieves a <code>TagTester</code> based on a <code>wicket:id</code>. If more - * <code>Component</code>s exist with the same <code>wicket:id</code> in the markup, only the - * first one is returned. + * Retrieves a <code>TagTester</code> based on a <code>wicket:id</code>. If + * more <code>Component</code>s exist with the same <code>wicket:id</code> + * in the markup, only the first one is returned. * * @param wicketId * the <code>wicket:id</code> to search for - * @return the <code>TagTester</code> for the tag which has the given <code>wicket:id</code> + * @return the <code>TagTester</code> for the tag which has the given + * <code>wicket:id</code> */ public TagTester getTagByWicketId(String wicketId) { return TagTester.createTagByAttribute(getServletResponse().getDocument(), "wicket:id", - wicketId); + wicketId); } /** - * Modified version of BaseWicketTester#getTagByWicketId(String) that returns all matching tags - * instead of just the first. + * Modified version of BaseWicketTester#getTagByWicketId(String) that + * returns all matching tags instead of just the first. * * @see BaseWicketTester#getTagByWicketId(String) */ public static List<TagTester> getTagsByWicketId(WicketTester tester, String wicketId) { return TagTester.createTagsByAttribute(tester.getServletResponse().getDocument(), - "wicket:id", wicketId, false); + "wicket:id", wicketId, false); } /** - * Retrieves a <code>TagTester</code> based on an DOM id. If more <code>Component</code>s exist - * with the same id in the markup, only the first one is returned. + * Retrieves a <code>TagTester</code> based on an DOM id. If more + * <code>Component</code>s exist with the same id in the markup, only the + * first one is returned. * * @param id * the DOM id to search for. @@ -1308,16 +1347,17 @@ } /** - * Helper method for all the places where an Ajax call should submit an associated - * <code>Form</code>. + * Helper method for all the places where an Ajax call should submit an + * associated <code>Form</code>. * * @param component * The component the behavior is attached to * @param behavior - * The <code>AjaxFormSubmitBehavior</code> with the <code>Form</code> to "submit" + * The <code>AjaxFormSubmitBehavior</code> with the + * <code>Form</code> to "submit" */ private void submitAjaxFormSubmitBehavior(final Component component, - AjaxFormSubmitBehavior behavior) + AjaxFormSubmitBehavior behavior) { // The form that needs to be "submitted". Form<?> form = behavior.getForm(); @@ -1330,18 +1370,19 @@ @Override public void onFormComponent(FormComponent<?> formComponent) { - if (!(formComponent instanceof RadioGroup) && - !(formComponent instanceof CheckGroup) && - !formComponent.getClass().isAssignableFrom(Button.class) && - formComponent.isVisible() && formComponent.isEnabledInHierarchy()) + if (!(formComponent instanceof RadioGroup) + && !(formComponent instanceof CheckGroup) + && !formComponent.getClass().isAssignableFrom(Button.class) + && formComponent.isVisible() && formComponent.isEnabledInHierarchy()) { - if (!((formComponent instanceof IFormSubmittingComponent) && (component instanceof IFormSubmittingComponent)) || - (component == formComponent)) + if (!((formComponent instanceof IFormSubmittingComponent) && (component instanceof IFormSubmittingComponent)) + || (component == formComponent)) { String name = formComponent.getInputName(); String value = formComponent.getValue(); - // Set request parameter with the field value, but do not modify an + // Set request parameter with the field value, but do + // not modify an // existing request parameter explicitly set using // FormTester.setValue() if (getServletRequest().getParameterMap().get(name) == null) @@ -1361,7 +1402,8 @@ */ public String getContentTypeFromResponseHeader() { - String contentType = ((MockHttpServletResponse)getWicketResponse().getHttpServletResponse()).getHeader("Content-Type"); + String contentType = ((MockHttpServletResponse)getWicketResponse().getHttpServletResponse()) + .getHeader("Content-Type"); if (contentType == null) { throw new WicketRuntimeException("No Content-Type header found"); @@ -1376,7 +1418,8 @@ */ public int getContentLengthFromResponseHeader() { - String contentLength = ((MockHttpServletResponse)getWicketResponse().getHttpServletResponse()).getHeader("Content-Length"); + String contentLength = ((MockHttpServletResponse)getWicketResponse() + .getHttpServletResponse()).getHeader("Content-Length"); if (contentLength == null) { throw new WicketRuntimeException("No Content-Length header found"); @@ -1391,7 +1434,8 @@ */ public String getLastModifiedFromResponseHeader() { - return ((MockHttpServletResponse)getWicketResponse().getHttpServletResponse()).getHeader("Last-Modified"); + return ((MockHttpServletResponse)getWicketResponse().getHttpServletResponse()) + .getHeader("Last-Modified"); } /** @@ -1401,7 +1445,8 @@ */ public String getContentDispositionFromResponseHeader() { - return ((MockHttpServletResponse)getWicketResponse().getHttpServletResponse()).getHeader("Content-Disposition"); + return ((MockHttpServletResponse)getWicketResponse().getHttpServletResponse()) + .getHeader("Content-Disposition"); } private Result isTrue(String message, boolean condition) @@ -1453,14 +1498,16 @@ * @param rc */ // FIXME 1.5: REMOVE THIS HACK. Currently there is no way to call - // requestcycle.onbeginrequest() from outside and since tester shortcircuits the normal + // requestcycle.onbeginrequest() from outside and since tester shortcircuits + // the normal // workflow it is necessary to call onbeginrequest manually @Deprecated public static void callOnBeginRequest(RequestCycle rc) { try { - Method method = RequestCycle.class.getDeclaredMethod("onBeginRequest", (Class<?>[])null); + Method method = RequestCycle.class + .getDeclaredMethod("onBeginRequest", (Class<?>[])null); method.setAccessible(true); method.invoke(rc, (Object[])null); }