You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2017/08/06 12:44:05 UTC

[4/7] wicket git commit: isComponentOnAjaxResponse now checks whether a component's enclosure is on ajax response

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 <dp...@Domas-MBP.local>
Authored: Thu Jul 27 12:19:42 2017 +0100
Committer: Martin Tzvetanov Grigorov <mg...@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;
+		}
+
 	}
 
 	/**