Author: jdonnerstag
Date: Sun Jul  3 10:42:04 2011
New Revision: 1142411

URL: http://svn.apache.org/viewvc?rev=1142411&view=rev
Log:
fixed: Components inside an invisible <wicket:enclosure> are still rendered
Issue: WICKET-3833

Added:
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_12.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_13.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SecuredContainer_13.java
Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_1.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_2.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_4.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_5.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosurePageExpectedResult_1.html

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java 
(original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java 
Sun Jul  3 10:42:04 2011
@@ -40,6 +40,7 @@ import org.apache.wicket.model.IComponen
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.IWrapModel;
 import org.apache.wicket.settings.IDebugSettings;
+import org.apache.wicket.util.iterator.ComponentHierarchyIterator;
 import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.lang.Generics;
 import org.apache.wicket.util.string.ComponentStrings;
@@ -904,6 +905,25 @@ public abstract class MarkupContainer ex
        }
 
        /**
+        * @return A iterator which iterators over all children and 
grand-children the Component
+        */
+       public final ComponentHierarchyIterator visitChildren()
+       {
+               return new ComponentHierarchyIterator(this);
+       }
+
+       /**
+        * @param clazz
+        *            Filter condition
+        * @return A iterator which iterators over all children and 
grand-children the Component,
+        *         returning only components which implement (instanceof) the 
provided clazz.
+        */
+       public final ComponentHierarchyIterator visitChildren(final Class<?> 
clazz)
+       {
+               return new 
ComponentHierarchyIterator(this).filterByClass(clazz);
+       }
+
+       /**
         * @param child
         *            Component being added
         */

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java 
(original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java Sun Jul  
3 10:42:04 2011
@@ -40,6 +40,7 @@ import org.apache.wicket.session.ISessio
 import org.apache.wicket.settings.IDebugSettings;
 import org.apache.wicket.settings.IRequestCycleSettings.RenderStrategy;
 import org.apache.wicket.util.lang.Classes;
+import org.apache.wicket.util.lang.Generics;
 import org.apache.wicket.util.lang.WicketObjects;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.visit.IVisit;
@@ -687,10 +688,9 @@ public abstract class Page extends Marku
                        // Throw exception if any errors were found
                        if (unrenderedComponents.size() > 0)
                        {
-                               // Get rid of set
                                renderedComponents = null;
 
-                               List<Component> transparentContainerChildren = 
new ArrayList<Component>();
+                               List<Component> transparentContainerChildren = 
Generics.newArrayList();
 
                                Iterator<Component> iterator = 
unrenderedComponents.iterator();
                                outerWhile : while (iterator.hasNext())
@@ -713,29 +713,23 @@ public abstract class Page extends Marku
                                                }
                                        }
 
-                                       // Now first test if the component has 
a sibling that is a transparent resolver.
-                                       for (Object o : component.getParent())
+                                       if 
(hasInvisibleTransparentChild(component.getParent(), component))
                                        {
-                                               Component sibling = 
(Component)o;
-                                               if (!sibling.isVisible())
+                                               // If we found a transparent 
container that isn't visible then ignore this
+                                               // component and only do a 
debug statement here.
+                                               if (log.isDebugEnabled())
                                                {
-                                                       if (sibling instanceof 
IComponentResolver)
-                                                       {
-                                                               // we found a 
transparent container that isn't visible
-                                                               // then ignore 
this component and only do a debug statement here.
-                                                               if 
(log.isDebugEnabled())
-                                                               {
-                                                                       
log.debug(
-                                                                               
"Component {} wasn't rendered but most likely it has a transparent parent: {}",
-                                                                               
component, sibling);
-                                                               }
-                                                               
transparentContainerChildren.add(component);
-                                                               
iterator.remove();
-                                                               continue 
outerWhile;
-                                                       }
+                                                       log.debug(
+                                                               "Component {} 
wasn't rendered but might have a transparent parent.",
+                                                               component);
                                                }
+
+                                               
transparentContainerChildren.add(component);
+                                               iterator.remove();
+                                               continue outerWhile;
                                        }
                                }
+
                                // if still > 0
                                if (unrenderedComponents.size() > 0)
                                {
@@ -751,6 +745,31 @@ public abstract class Page extends Marku
                renderedComponents = null;
        }
 
+       private boolean hasInvisibleTransparentChild(final MarkupContainer 
root, final Component self)
+       {
+               for (Component sibling : root)
+               {
+                       if ((sibling != self) && (sibling instanceof 
IComponentResolver) &&
+                               (sibling instanceof MarkupContainer))
+                       {
+                               if (!sibling.isVisible())
+                               {
+                                       return true;
+                               }
+                               else
+                               {
+                                       boolean rtn = 
hasInvisibleTransparentChild((MarkupContainer)sibling, self);
+                                       if (rtn == true)
+                                       {
+                                               return true;
+                                       }
+                               }
+                       }
+               }
+
+               return false;
+       }
+
        /**
         * Initializes Page by adding it to the Session and initializing it.
         */

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/Enclosure.java
 Sun Jul  3 10:42:04 2011
@@ -19,22 +19,15 @@ package org.apache.wicket.markup.html.in
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.WicketRuntimeException;
-import org.apache.wicket.application.IComponentOnAfterRenderListener;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupException;
 import org.apache.wicket.markup.MarkupStream;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.EnclosureContainer;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.FormComponent;
-import org.apache.wicket.markup.html.form.IFormSubmittingComponent;
 import org.apache.wicket.markup.parser.filter.EnclosureHandler;
 import org.apache.wicket.markup.resolver.ComponentResolvers;
 import org.apache.wicket.markup.resolver.ComponentResolvers.ResolverFilter;
 import org.apache.wicket.markup.resolver.IComponentResolver;
-import org.apache.wicket.request.Response;
-import org.apache.wicket.request.cycle.RequestCycle;
-import org.apache.wicket.response.NullResponse;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -139,6 +132,12 @@ public class Enclosure extends WebMarkup
                return childComponent;
        }
 
+       @Override
+       public boolean isVisible()
+       {
+               return childComponent.determineVisibility() && 
super.isVisible();
+       }
+
        /**
         * Get the real parent container
         * 
@@ -160,48 +159,6 @@ public class Enclosure extends WebMarkup
                return parent;
        }
 
-       @Override
-       public void onComponentTagBody(final MarkupStream markupStream, final 
ComponentTag openTag)
-       {
-               // TODO this is where I wish we had something like "enum(TAG, 
BODY, NONE, ALL) isVisible()"
-               // set the enclosure visibility
-               boolean visible = childComponent.determineVisibility();
-
-               // We want to know which components are rendered inside the 
enclosure
-               final IComponentOnAfterRenderListener listener = new 
EnclosureListener(this);
-
-               try
-               {
-                       // register the listener
-                       
getApplication().getComponentOnAfterRenderListeners().add(listener);
-
-                       if (visible)
-                       {
-                               super.onComponentTagBody(markupStream, openTag);
-                       }
-                       else
-                       {
-                               RequestCycle cycle = getRequestCycle();
-                               Response response = cycle.getResponse();
-                               try
-                               {
-                                       
cycle.setResponse(NullResponse.getInstance());
-
-                                       super.onComponentTagBody(markupStream, 
openTag);
-                               }
-                               finally
-                               {
-                                       cycle.setResponse(response);
-                               }
-                       }
-               }
-               finally
-               {
-                       // make sure we remove the listener
-                       
getApplication().getComponentOnAfterRenderListeners().remove(listener);
-               }
-       }
-
        /**
         * @param markupStream
         * @param container
@@ -276,31 +233,4 @@ public class Enclosure extends WebMarkup
                                "Programming error: childComponent == enclose 
component; endless loop");
                }
        }
-
-       /**
-        * Enclosure will register this listener during the body render phase 
of the Enclosure
-        */
-       private static class EnclosureListener implements 
IComponentOnAfterRenderListener
-       {
-               private final Enclosure enclosure;
-
-               private EnclosureListener(final Enclosure enclosure)
-               {
-                       this.enclosure = enclosure;
-               }
-
-               public void onAfterRender(final Component component)
-               {
-                       if (log.isWarnEnabled())
-                       {
-                               if ((component instanceof FormComponent) ||
-                                       (component instanceof 
IFormSubmittingComponent) || (component instanceof Form))
-                               {
-                                       log.warn("Please note that 
onBeforeRender() and validate() might be called on invisible components inside 
an Enclosure. " +
-                                               "Please see EnclosureContainer 
for an alternative. Enclosure: " +
-                                               enclosure.toString());
-                               }
-                       }
-               }
-       }
 }

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_1.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_1.html?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_1.html
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_1.html
 Sun Jul  3 10:42:04 2011
@@ -8,7 +8,7 @@
     <table><tr><span wicket:id="label2">Test Label 2</span></tr></table>
   </wicket:enclosure>
   
-  <wicket:enclosure child="label3"></wicket:enclosure>
+  
   
   <wicket:enclosure child="label6">
     <table><tr><span wicket:id="label4">Test Label 2</span></tr></table>

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_12.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_12.html?rev=1142411&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_12.html
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_12.html
 Sun Jul  3 10:42:04 2011
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org";>
+<body>
+  
+</body>
+</html>

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_13.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_13.html?rev=1142411&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_13.html
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_13.html
 Sun Jul  3 10:42:04 2011
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org";>
+<body>
+  
+</body>
+</html>

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_2.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_2.html?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_2.html
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_2.html
 Sun Jul  3 10:42:04 2011
@@ -4,7 +4,7 @@
     <h3>Example 3 using wicket:enclosure</h3>
     <span wicket:id="label1">label 1</span><br />
     <span wicket:id="label2">label 2</span><br />
-    <wicket:enclosure child="label3"></wicket:enclosure>
+    
 </div>
 </body>
 </html>

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_4.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_4.html?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_4.html
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_4.html
 Sun Jul  3 10:42:04 2011
@@ -1,5 +1,5 @@
 <html xmlns:wicket>
 <body>
-  <wicket:enclosure child="foo:bar"></wicket:enclosure>
+  
 </body>
 </html>

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_5.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_5.html?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_5.html
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_5.html
 Sun Jul  3 10:42:04 2011
@@ -2,7 +2,7 @@
 <body>
 This is in the super markup.<br>
 <wicket:child><wicket:extend>  
-  <wicket:enclosure child="foo:bar"></wicket:enclosure>
+  
 </wicket:extend></wicket:child>
 This is in the super markup.<br>
 </body>

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-1.html
 Sun Jul  3 10:42:04 2011
@@ -2,7 +2,7 @@
 <body>
   <form wicket:id="form" id="form1" method="post" 
action="page?1-1.IFormSubmitListener-form"><div 
style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input
 type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
     <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
-    <wicket:enclosure child="label"></wicket:enclosure>
+    
   </form>
 </body>
 </html>

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2-1.html
 Sun Jul  3 10:42:04 2011
@@ -2,7 +2,7 @@
 <body>
   <form wicket:id="form" id="form1" method="post" 
action="page?2-1.IFormSubmitListener-form"><div 
style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input
 type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
     <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
-    <wicket:enclosure child="label"></wicket:enclosure>
+    
   </form>
 </body>
 </html>

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePageExpectedResult_9-2.html
 Sun Jul  3 10:42:04 2011
@@ -1,8 +1,8 @@
-<html xmlns:wicket>
-<body>
-  <form wicket:id="form" id="form1" method="post" 
action="page?4-1.IFormSubmitListener-form"><div 
style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input
 type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
-    <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
-    <wicket:enclosure child="label"></wicket:enclosure>
-  </form>
-</body>
-</html>
+<html xmlns:wicket>
+<body>
+  <form wicket:id="form" id="form1" method="post" 
action="page?4-1.IFormSubmitListener-form"><div 
style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input
 type="hidden" name="form1_hf_0" id="form1_hf_0" /></div>
+    <!-- does Wicket behave different if the enclosure child is a 
FormComponent?? Needs testing -->
+    
+  </form>
+</body>
+</html>

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.html?rev=1142411&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.html
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.html
 Sun Jul  3 10:42:04 2011
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org";>
+<body>
+  <wicket:enclosure child="invisible">
+    This entire enclosure should be hidden.
+    <p wicket:id="invisible"></p>
+    <p wicket:id="shouldntrendereither">
+      <span wicket:id="label"></span>
+    </p>
+  </wicket:enclosure>
+</body>
+</html>

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.java?rev=1142411&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.java
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_12.java
 Sun Jul  3 10:42:04 2011
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html.internal;
+
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+/** */
+public class EnclosurePage_12 extends WebPage
+{
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * Construct.
+        * 
+        * @param parameters
+        */
+       public EnclosurePage_12(final PageParameters parameters)
+       {
+               add(new Label("version", 
getApplication().getFrameworkSettings().getVersion()));
+               // TODO Add your page's components here
+
+               // Here are two components.
+
+               // Both are contained within <wicket:enclosure 
child="invisible">.
+               // Since the "invisible" component is explicitly hidden, the 
expecation is
+               // that the whole enclosure will be hidden as well. Furthermore 
this implies
+               // that none of the components within the enclosure will be 
rendered.
+
+               // However this is not the case. Even though the 
"shouldntrendereither"
+               // component is in the same enclosure and therefore should not 
be rendered,
+               // Wicket attempts to render it. This is evidenced by the fact 
that we've
+               // purposely included a Label that will blow up when its model 
is loaded.
+
+               // When this page is loaded we get the exception:
+               // WicketRuntimeException: ... nonexistentprop
+
+               // Wicket 1.4.x does not have this problem.
+
+               add(new WebMarkupContainer("invisible").setVisible(false));
+               add(new WebMarkupContainer("shouldntrendereither").add(new 
Label("label",
+                       new PropertyModel<String>(this, "nonexistentprop"))));
+       }
+}

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.html?rev=1142411&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.html
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.html
 Sun Jul  3 10:42:04 2011
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org";>
+<body>
+  <wicket:enclosure child="invisible">
+    This entire enclosure should be hidden.
+    <p wicket:id="invisible"></p>
+    <p wicket:id="shouldntrendereither">
+      <span wicket:id="label"></span>
+    </p>
+  </wicket:enclosure>
+</body>
+</html>

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.java?rev=1142411&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.java
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosurePage_13.java
 Sun Jul  3 10:42:04 2011
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html.internal;
+
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+
+/** */
+public class EnclosurePage_13 extends WebPage
+{
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * Construct.
+        * 
+        * @param parameters
+        */
+       public EnclosurePage_13(final PageParameters parameters)
+       {
+               add(new Label("version", 
getApplication().getFrameworkSettings().getVersion()));
+               // TODO Add your page's components here
+
+               // Here are two components.
+
+               // Both are contained within <wicket:enclosure 
child="invisible">.
+               // Since the "invisible" component is hidden (in this case due 
to
+               // isRenderAllowed() == false), the expecation is
+               // that the whole enclosure will be hidden as well. Furthermore 
this implies
+               // that none of the components within the enclosure will be 
rendered.
+
+               // However this is not the case. Even though the 
"shouldntrendereither"
+               // component is in the same enclosure and therefore should not 
be rendered,
+               // Wicket attempts to render it. This is evidenced by the fact 
that we've
+               // purposely included a Label that will blow up when its model 
is loaded.
+
+               // When this page is loaded we get the exception:
+               // WicketRuntimeException: ... nonexistentprop
+
+               // Wicket 1.4.x does not have this problem.
+
+               add(new SecuredContainer_13("invisible"));
+               add(new WebMarkupContainer("shouldntrendereither").add(new 
Label("label",
+                       new PropertyModel<String>(this, "nonexistentprop"))));
+       }
+}

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/EnclosureTest.java
 Sun Jul  3 10:42:04 2011
@@ -18,12 +18,18 @@ package org.apache.wicket.markup.html.in
 
 import java.io.IOException;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.Page;
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.authorization.Action;
+import org.apache.wicket.authorization.IAuthorizationStrategy;
 import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.request.component.IRequestableComponent;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.tester.DiffUtil;
 import org.apache.wicket.util.tester.FormTester;
+import org.apache.wicket.util.tester.WicketTester;
 
 
 /**
@@ -301,4 +307,44 @@ public class EnclosureTest extends Wicke
        {
                executeTest(EnclosurePage_11.class, 
"EnclosurePageExpectedResult_11.html");
        }
+
+       /**
+        * @throws Exception
+        */
+       public void testRenderPage12() throws Exception
+       {
+               executeTest(EnclosurePage_12.class, 
"EnclosurePageExpectedResult_12.html");
+       }
+
+       /**
+        * @throws Exception
+        */
+       public void testRenderPage13() throws Exception
+       {
+               tester = new WicketTester(new MockApplication()
+               {
+                       @Override
+                       protected void init()
+                       {
+                               super.init();
+
+                               // This should cause all SecuredContainer 
components to be hidden
+                               
getSecuritySettings().setAuthorizationStrategy(new IAuthorizationStrategy()
+                               {
+                                       public boolean 
isActionAuthorized(Component component, Action action)
+                                       {
+                                               return !(component instanceof 
SecuredContainer_13);
+                                       }
+
+                                       public <T extends 
IRequestableComponent> boolean isInstantiationAuthorized(
+                                               Class<T> componentClass)
+                                       {
+                                               return true;
+                                       }
+                               });
+                       }
+               });
+
+               executeTest(EnclosurePage_13.class, 
"EnclosurePageExpectedResult_13.html");
+       }
 }

Modified: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosurePageExpectedResult_1.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosurePageExpectedResult_1.html?rev=1142411&r1=1142410&r2=1142411&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosurePageExpectedResult_1.html
 (original)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosurePageExpectedResult_1.html
 Sun Jul  3 10:42:04 2011
@@ -11,7 +11,7 @@
        </table>
 </div>
 
-<span id="InlineEnclosure-3"></span>
+<span id="InlineEnclosure-3" style="display:none"></span>
 
 <div id="InlineEnclosure-4">
        <table>

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SecuredContainer_13.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SecuredContainer_13.java?rev=1142411&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SecuredContainer_13.java
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SecuredContainer_13.java
 Sun Jul  3 10:42:04 2011
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html.internal;
+
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
+/** */
+public class SecuredContainer_13 extends WebMarkupContainer
+{
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * Construct.
+        * 
+        * @param id
+        */
+       public SecuredContainer_13(String id)
+       {
+               super(id);
+       }
+}


Reply via email to