Repository: wicket
Updated Branches:
  refs/heads/master 77e928ecd -> ad39487fa


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/ad39487f
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/ad39487f
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/ad39487f

Branch: refs/heads/master
Commit: ad39487faa573144deee6da3e6e6f9dd73d382c1
Parents: 77e928e
Author: Igor Vaynberg <[email protected]>
Authored: Tue Dec 11 15:36:54 2018 -0800
Committer: Igor Vaynberg <[email protected]>
Committed: Tue Dec 11 15:40:48 2018 -0800

----------------------------------------------------------------------
 .../main/java/org/apache/wicket/Behaviors.java  |  4 ++-
 .../apache/wicket/behavior/BehaviorTest.java    | 34 ++++++++++++++++++++
 2 files changed, 37 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ad39487f/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/ad39487f/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 29f69d4..ba77c4d 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
@@ -18,6 +18,7 @@ package org.apache.wicket.behavior;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.MockPageWithOneComponent;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.util.tester.TagTester;
@@ -64,4 +65,37 @@ class BehaviorTest extends WicketTestCase
                TagTester tagTester = 
tester.getTagByWicketId(MockPageWithOneComponent.COMPONENT_ID);
                assertEquals(value, tagTester.getAttribute(key));
        }
+
+       @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