Updated Branches:
  refs/heads/wicket-1.5.x a5b50c2e4 -> f8bc999ed

WICKET-4570 Shared Behavior's renderHead method called only for one component, 
not for all of them


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f8bc999e
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f8bc999e
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f8bc999e

Branch: refs/heads/wicket-1.5.x
Commit: f8bc999ed4fd99160988c21cf11c504c7e1b9be1
Parents: a5b50c2
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Sun Jun 3 07:19:19 2012 +0300
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Sun Jun 3 07:19:19 2012 +0300

----------------------------------------------------------------------
 .../src/main/java/org/apache/wicket/Component.java |    4 +-
 .../apache/wicket/behavior/SharedBehaviorTest.java |   86 +++++++++++++++
 .../SharedBehaviorTest_renderHead_expected.html    |    3 +
 3 files changed, 92 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/f8bc999e/wicket-core/src/main/java/org/apache/wicket/Component.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java 
b/wicket-core/src/main/java/org/apache/wicket/Component.java
index f5b7b33..ce3335e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Component.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Component.java
@@ -19,6 +19,7 @@ package org.apache.wicket;
 import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
@@ -2705,7 +2706,8 @@ public abstract class Component
                                        if (response.wasRendered(behavior) == 
false)
                                        {
                                                behavior.renderHead(this, 
response);
-                                               response.markRendered(behavior);
+                                               List<IClusterable> pair = 
Arrays.asList(this, behavior);
+                                               response.markRendered(pair);
                                        }
                                }
                        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/f8bc999e/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest.java 
b/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest.java
new file mode 100644
index 0000000..7cb45c2
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest.java
@@ -0,0 +1,86 @@
+/*
+ * 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.behavior;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.IHeaderResponse;
+import org.apache.wicket.markup.html.WebComponent;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.junit.Test;
+
+/**
+ * @since 1.5.8
+ */
+public class SharedBehaviorTest extends WicketTestCase
+{
+       /**
+        * https://issues.apache.org/jira/browse/WICKET-4570
+        *
+        * A Behavior can be shared between components unless the Behavior 
itself
+        * deny this by overriding its #bind(Component).
+        *
+        * This test verifies that behavior's #renderHead(Component, 
IHeaderResponse) is called
+        * for all its bindings
+        *
+        * @throws Exception
+        */
+       @Test
+       public void sharedBehaviorRenderHead() throws Exception
+       {
+               TestPage page = new TestPage();
+               executeTest(page, 
"SharedBehaviorTest_renderHead_expected.html");
+       }
+
+       /**
+        * A test page for #sharedBehaviorRenderHead()
+        */
+       private static class TestPage extends WebPage implements 
IMarkupResourceStreamProvider
+       {
+               private TestPage()
+               {
+                       SharedBehavior behavior = new SharedBehavior();
+                       WebComponent component1 = new WebComponent("comp1");
+                       component1.add(behavior);
+                       WebComponent component2 = new WebComponent("comp2");
+                       component2.add(behavior);
+                       add(component1, component2);
+               }
+
+               public IResourceStream getMarkupResourceStream(MarkupContainer 
container, Class<?> containerClass)
+               {
+                       return new StringResourceStream("<html><body><div 
wicket:id='comp1'></div><div wicket:id='comp2'></div></body></html>");
+               }
+       }
+
+       /**
+        * A test Behavior for #sharedBehaviorRenderHead()
+        */
+       private static class SharedBehavior extends Behavior
+       {
+               @Override
+               public void renderHead(Component component, IHeaderResponse 
response)
+               {
+                       super.renderHead(component, response);
+                       response.renderString("\nRendering header contribution 
for component with id: " + component.getId());
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/f8bc999e/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest_renderHead_expected.html
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest_renderHead_expected.html
 
b/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest_renderHead_expected.html
new file mode 100644
index 0000000..775baa5
--- /dev/null
+++ 
b/wicket-core/src/test/java/org/apache/wicket/behavior/SharedBehaviorTest_renderHead_expected.html
@@ -0,0 +1,3 @@
+<html><head>
+Rendering header contribution for component with id: comp1
+Rendering header contribution for component with id: comp2</head><body><div 
wicket:id="comp1"></div><div wicket:id="comp2"></div></body></html>
\ No newline at end of file

Reply via email to