Repository: wicket
Updated Branches:
  refs/heads/wicket-8.x 70c19265e -> 567b62417


WICKET-6623 correctly remove consecutive temporary behaviors


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

Branch: refs/heads/wicket-8.x
Commit: 567b62417ae85ee78051204c784fb0a2411fc414
Parents: 70c1926
Author: Igor Vaynberg <[email protected]>
Authored: Tue Dec 11 15:36:54 2018 -0800
Committer: Igor Vaynberg <[email protected]>
Committed: Tue Dec 11 15:37:15 2018 -0800

----------------------------------------------------------------------
 .../main/java/org/apache/wicket/Behaviors.java  |  4 ++-
 .../apache/wicket/behavior/BehaviorTest.java    | 37 ++++++++++++++++++--
 2 files changed, 38 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/567b6241/wicket-core/src/main/java/org/apache/wicket/Behaviors.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/Behaviors.java 
b/wicket-core/src/main/java/org/apache/wicket/Behaviors.java
index 3d406f2..672cc57 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Behaviors.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Behaviors.java
@@ -126,7 +126,7 @@ final class Behaviors implements IDetachable
        @Override
        public final void detach()
        {
-               final int len = component.data_length();
+               int len = component.data_length();
                for (int i = component.data_start(); i < len; i++)
                {
                        Object obj = component.data_get(i);
@@ -139,6 +139,8 @@ final class Behaviors implements IDetachable
                                if (behavior.isTemporary(component))
                                {
                                        internalRemove(behavior);
+                                       i--;
+                                       len--;
                                }
                        }
                }

http://git-wip-us.apache.org/repos/asf/wicket/blob/567b6241/wicket-core/src/test/java/org/apache/wicket/behavior/BehaviorTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/behavior/BehaviorTest.java 
b/wicket-core/src/test/java/org/apache/wicket/behavior/BehaviorTest.java
index ed4f473..93a57ca 100644
--- a/wicket-core/src/test/java/org/apache/wicket/behavior/BehaviorTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/behavior/BehaviorTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.wicket.behavior;
 
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.*;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.MockPageWithOneComponent;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.util.tester.TagTester;
@@ -63,4 +63,37 @@ public class BehaviorTest extends WicketTestCase
                TagTester tagTester = 
tester.getTagByWicketId(MockPageWithOneComponent.COMPONENT_ID);
                assertThat(tagTester.getAttribute(key), is(equalTo(value)));
        }
+
+       @Test
+       public void temporaryBehaviorsAreRemoved() {
+               WebMarkupContainer container = new WebMarkupContainer("test");
+               TestTemporaryBehavior temp = new TestTemporaryBehavior();
+               container.add(temp);
+               assertTrue(container.getBehaviors().contains(temp));
+               container.detach();
+               assertFalse(container.getBehaviors().contains(temp));
+       }
+
+       @Test
+       public void consecutiveTemporaryBehaviorsAreRemoved() {
+               WebMarkupContainer container = new WebMarkupContainer("test");
+               TestTemporaryBehavior temp1 = new TestTemporaryBehavior();
+               TestTemporaryBehavior temp2 = new TestTemporaryBehavior();
+               container.add(temp1, temp2);
+               assertTrue(container.getBehaviors().contains(temp1));
+               assertTrue(container.getBehaviors().contains(temp2));
+               container.detach();
+               assertFalse(container.getBehaviors().contains(temp1));
+               assertFalse(container.getBehaviors().contains(temp2));
+       }
+
+       private static class TestTemporaryBehavior extends Behavior {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               public boolean isTemporary(Component c) {
+                       return true;
+               }
+       }
+
 }

Reply via email to