Author: ivaynberg Date: Sat Feb 19 19:54:43 2011 New Revision: 1072427 URL: http://svn.apache.org/viewvc?rev=1072427&view=rev Log:
Issue: WICKET-3455 Added: wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/RefreshingViewOnRemoveTest.java (with props) Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/MarkupContainer.java Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/MarkupContainer.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/MarkupContainer.java?rev=1072427&r1=1072426&r2=1072427&view=diff ============================================================================== --- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/MarkupContainer.java (original) +++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/MarkupContainer.java Sat Feb 19 19:54:43 2011 @@ -628,6 +628,7 @@ public abstract class MarkupContainer ex // Do not call remove() because the state change would than be // recorded twice. + child.internalOnRemove(); child.detachModel(); child.setParent(null); } Added: wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/RefreshingViewOnRemoveTest.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/RefreshingViewOnRemoveTest.java?rev=1072427&view=auto ============================================================================== --- wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/RefreshingViewOnRemoveTest.java (added) +++ wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/RefreshingViewOnRemoveTest.java Sat Feb 19 19:54:43 2011 @@ -0,0 +1,159 @@ +/* + * 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; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +import org.apache.wicket.Component; +import org.apache.wicket.MarkupContainer; +import org.apache.wicket.WicketTestCase; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.markup.repeater.RefreshingView; +import org.apache.wicket.markup.repeater.util.ModelIteratorAdapter; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.util.resource.IResourceStream; +import org.apache.wicket.util.resource.StringResourceStream; + +/** + * Tests child's {@link Component#onRemove} is on refresh + * + * @author igor + */ +public class RefreshingViewOnRemoveTest extends WicketTestCase +{ + private final List<TestComponent> components = new ArrayList<TestComponent>(); + private int round = 1; + + public void test() + { + tester.startPage(new TestPage()); + + // check everything was detached + for (TestComponent c : components) + { + assertTrue(c.detached); + } + + round++; + tester.startPage(tester.getLastRenderedPage()); + + // check everything was detached + for (TestComponent c : components) + { + assertTrue(c.detached); + } + + // check we have round 1 and round 2 components + boolean round1 = false; + boolean round2 = false; + for (TestComponent c : components) + { + if (c.round == 1) + round1 = true; + if (c.round == 2) + round2 = true; + } + assertTrue(round1); + assertTrue(round2); + + // check onremove was called on all round 1 components + for (TestComponent c : components) + { + if (c.round == 1) + assertTrue(c.removed); + } + + } + + protected Component newComponent(String id) + { + TestComponent c = new TestComponent(id, round); + components.add(c); + return c; + } + + public static class TestComponent extends Label + { + + public boolean detached = false; + public boolean removed = false; + public final int round; + + public TestComponent(String id, int round) + { + super(id, id); + this.round = round; + } + + @Override + protected void onDetach() + { + super.onDetach(); + detached = true; + } + + @Override + protected void onRemove() + { + super.onRemove(); + removed = true; + } + } + + public class TestPage extends WebPage implements IMarkupResourceStreamProvider + { + public TestPage() + { + add(new RefreshingView<Integer>("repeater") + { + @Override + protected Iterator<IModel<Integer>> getItemModels() + { + return new ModelIteratorAdapter<Integer>(Arrays.asList(new Integer[] { 1, 2 }) + .iterator()) + { + @Override + protected IModel<Integer> model(Integer object) + { + return Model.of(object); + } + }; + } + + @Override + protected void populateItem(Item<Integer> item) + { + item.add(newComponent("label")); + } + }); + } + + + public IResourceStream getMarkupResourceStream(MarkupContainer container, + Class<?> containerClass) + { + return new StringResourceStream( + "<html><body><ul><li wicket:id='repeater'><span wicket:id='label'></span></li></ul></body></html>"); + } + } +} Propchange: wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/markup/RefreshingViewOnRemoveTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain