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;
+               }
+
        }
 
        /**

Reply via email to