isComponentOnAjaxResponse now checks whether a component's enclosure is on ajax response
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/73d094b6 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/73d094b6 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/73d094b6 Branch: refs/heads/master Commit: 73d094b60a691b2f07d7900e78bcf76ac45ea28a Parents: 5f2809c Author: Domas Poliakas <dpoliakas@Domas-MBP.local> Authored: Thu Jul 27 12:19:42 2017 +0100 Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org> Committed: Sun Aug 6 15:27:21 2017 +0300 ---------------------------------------------------------------------- .../protocol/http/AjaxEnclosureListener.java | 5 +++-- .../wicket/util/tester/BaseWicketTester.java | 20 +++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/73d094b6/wicket-core/src/main/java/org/apache/wicket/protocol/http/AjaxEnclosureListener.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/AjaxEnclosureListener.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/AjaxEnclosureListener.java index 63e493f..b966580 100644 --- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/AjaxEnclosureListener.java +++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/AjaxEnclosureListener.java @@ -23,6 +23,7 @@ import java.util.Map; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.markup.html.internal.Enclosure; import org.apache.wicket.markup.html.internal.InlineEnclosure; import org.apache.wicket.markup.parser.filter.InlineEnclosureHandler; import org.apache.wicket.util.visit.IVisit; @@ -107,8 +108,8 @@ public class AjaxEnclosureListener implements AjaxRequestTarget.IListener * @param enclosure * @return true if the given component is the controlling child of the given InlineEnclosure */ - private boolean isControllerOfEnclosure(final Component component, - final InlineEnclosure enclosure) + public static boolean isControllerOfEnclosure(final Component component, + final Enclosure enclosure) { return (enclosure.get(enclosure.getChildId()) == component || // #queue() enclosure.getParent().get(enclosure.getChildId()) == component); // #add() http://git-wip-us.apache.org/repos/asf/wicket/blob/73d094b6/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 ddcffb6..13c16fb 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 @@ -82,6 +82,7 @@ import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.FormComponent; import org.apache.wicket.markup.html.form.SubmitLink; +import org.apache.wicket.markup.html.internal.Enclosure; import org.apache.wicket.markup.html.link.AbstractLink; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.ExternalLink; @@ -96,6 +97,7 @@ import org.apache.wicket.mock.MockRequestParameters; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.page.IPageManager; import org.apache.wicket.page.IPageManagerContext; +import org.apache.wicket.protocol.http.AjaxEnclosureListener; import org.apache.wicket.protocol.http.IMetaDataBufferingWebResponse; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.protocol.http.WicketFilter; @@ -2324,7 +2326,23 @@ public class BaseWicketTester boolean isComponentInAjaxResponse = ajaxResponse.matches("(?s).*<component id=\"" + markupId + "\"[^>]*?>.*"); failMessage = "Component wasn't found in the AJAX response. " + componentInfo; - return isTrue(failMessage, isComponentInAjaxResponse); + result = isTrue(failMessage, isComponentInAjaxResponse); + + // Check if the component has been included as part of an enclosure render + Enclosure enclosure = getLastRenderedPage().visitChildren(Enclosure.class, (Enclosure enc, IVisit<Enclosure> visit) -> { + if (AjaxEnclosureListener.isControllerOfEnclosure(component, enc)){ + visit.stop(enc); + } + }); + + if (enclosure != null){ + failMessage = "Component's enclosure was not found in the AJAX response. " + enclosure.toString(); + boolean isEnclosureInAjaxResponse = !isComponentOnAjaxResponse(enclosure).wasFailed(); + return isTrue(failMessage, isEnclosureInAjaxResponse); + } else { + return result; + } + } /**