You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2009/02/01 02:10:19 UTC
svn commit: r739670 - in /wicket/trunk/wicket/src:
main/java/org/apache/wicket/Component.java
test/java/org/apache/wicket/behavior/ImmutableBehaviorIndexTest.java
Author: ivaynberg
Date: Sun Feb 1 01:10:19 2009
New Revision: 739670
URL: http://svn.apache.org/viewvc?rev=739670&view=rev
Log:
behavior tests
Added:
wicket/trunk/wicket/src/test/java/org/apache/wicket/behavior/ImmutableBehaviorIndexTest.java (with props)
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java?rev=739670&r1=739669&r2=739670&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Component.java Sun Feb 1 01:10:19 2009
@@ -30,7 +30,6 @@
import org.apache.wicket.authorization.IAuthorizationStrategy;
import org.apache.wicket.authorization.UnauthorizedActionException;
import org.apache.wicket.behavior.IBehavior;
-import org.apache.wicket.behavior.IBehaviorListener;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.feedback.IFeedback;
import org.apache.wicket.markup.ComponentTag;
@@ -2319,17 +2318,17 @@
// Instead we check if there are any behaviors downstream that will be affected by
// this, and if there are we set this behavior's slot to null instead of removing it
// to preserve indexes of behaviors downstream.
- boolean listenersAfter = false;
+ boolean anyListenersAfter = false;
for (int j = i + 1; j < len; j++)
{
- if (data_get(j) instanceof IBehaviorListener)
+ if (data_get(j) instanceof IRequestListener)
{
- listenersAfter = true;
+ anyListenersAfter = true;
break;
}
}
- if (listenersAfter)
+ if (anyListenersAfter)
{
data_set(i, null);
}
@@ -2337,7 +2336,7 @@
{
data_remove(i);
- if (o instanceof IBehaviorListener)
+ if (o instanceof IRequestListener)
{
// this was a listener which mightve caused holes in the array, see if we
// can clean them up. notice: at this point we already know there are no
Added: wicket/trunk/wicket/src/test/java/org/apache/wicket/behavior/ImmutableBehaviorIndexTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/behavior/ImmutableBehaviorIndexTest.java?rev=739670&view=auto
==============================================================================
--- wicket/trunk/wicket/src/test/java/org/apache/wicket/behavior/ImmutableBehaviorIndexTest.java (added)
+++ wicket/trunk/wicket/src/test/java/org/apache/wicket/behavior/ImmutableBehaviorIndexTest.java Sun Feb 1 01:10:19 2009
@@ -0,0 +1,181 @@
+/*
+ * 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 java.util.List;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+
+/** IBehavior array management tests */
+public class ImmutableBehaviorIndexTest extends WicketTestCase
+{
+ /** Tests simple behavior */
+ public void testSimple()
+ {
+ MyPage page = new MyPage();
+ page.getContainer().add(new SimpleAttributeModifier("class", "border"));
+ tester.startPage(page);
+
+ assertTrue(tester.getServletResponse().getDocument().contains("class=\"border\""));
+ }
+
+ /**
+ * Tests the fact that url-behavior indexes do not change even if behaviors are removed/added
+ */
+ public void testUrlIndexRendering()
+ {
+ IBehavior border = new SimpleAttributeModifier("class", "border");
+ IBehavior border2 = new SimpleAttributeModifier("class2", "border");
+ IBehavior auto = new SimpleAttributeModifier("autocomplete", "off");
+ IBehavior auto2 = new SimpleAttributeModifier("autocomplete2", "off");
+ IBehavior link = new LinkBehavior("href");
+ IBehavior link2 = new LinkBehavior("onclick");
+
+ MyPage page = new MyPage();
+
+ page.getContainer().add(border, auto, link, border2, link2, auto2);
+ tester.startPage(page);
+
+ String output = tester.getServletResponse().getDocument();
+ System.out.println(output);
+ assertTrue(output.contains("class=\"border\""));
+ assertTrue(output.contains("autocomplete=\"off\""));
+ assertTrue(output.contains("class2=\"border\""));
+ assertTrue(output.contains("autocomplete2=\"off\""));
+ assertTrue(output.contains("IBehaviorListener:2"));
+ assertTrue(output.contains("IBehaviorListener:4"));
+
+ // if we remove a behavior that is before the ibehaviorlistener its url index should not
+ // change
+
+ page.getContainer().remove(border);
+ page.getContainer().remove(border2);
+ page.getContainer().remove(auto);
+ page.getContainer().remove(auto2);
+ tester.startPage(page);
+ output = tester.getServletResponse().getDocument();
+ assertTrue(output.contains("IBehaviorListener:2"));
+ assertTrue(output.contains("IBehaviorListener:4"));
+ }
+
+ /**
+ * Tests that removal of behaviors properly cleans up the data array
+ */
+ public void testBehaviorDataArrayCleanup()
+ {
+ IBehavior border = new SimpleAttributeModifier("class", "border");
+ IBehavior border2 = new SimpleAttributeModifier("class2", "border");
+ IBehavior auto = new SimpleAttributeModifier("autocomplete", "off");
+ IBehavior auto2 = new SimpleAttributeModifier("autocomplete2", "off");
+ IBehavior link = new LinkBehavior("href");
+ IBehavior link2 = new LinkBehavior("onclick");
+
+ MyPage page = new MyPage();
+ page.getContainer().add(border, auto, link, border2, link2, auto2);
+
+ List<IBehavior> behaviors = page.getContainer().getBehaviorsRawList();
+ assertEquals(6, behaviors.size());
+
+ // test removal of various behaviors and make sure they preserve indexes as long as there is
+ // a IBehaviorListener in the list
+
+ // border,auto,link,border2,link2,auto2
+ page.getContainer().remove(border);
+ behaviors = page.getContainer().getBehaviorsRawList();
+ assertEquals(6, behaviors.size());
+ assertNull(behaviors.get(0));
+
+ // null,auto,link,border2,link2,auto2
+ page.getContainer().remove(link);
+ behaviors = page.getContainer().getBehaviorsRawList();
+ assertEquals(6, behaviors.size());
+ assertNull(behaviors.get(0));
+ assertNull(behaviors.get(2));
+
+ // null,auto,null,border2,link2,auto2
+ page.getContainer().remove(auto2);
+ behaviors = page.getContainer().getBehaviorsRawList();
+ assertEquals(5, behaviors.size());
+ assertNull(behaviors.get(0));
+ assertNull(behaviors.get(2));
+
+ // null,auto,null,border2,link2
+ page.getContainer().remove(link2); // last IBehaviorListener
+ behaviors = page.getContainer().getBehaviorsRawList();
+ assertEquals(2, behaviors.size());
+ assertSame(auto, behaviors.get(0));
+ assertSame(border2, behaviors.get(1));
+
+ }
+
+ private static class LinkBehavior extends AbstractBehavior implements IBehaviorListener
+ {
+ private static final long serialVersionUID = 1L;
+
+ private final String attr;
+
+ public LinkBehavior(String attr)
+ {
+ this.attr = attr;
+ }
+
+ @Override
+ public void onComponentTag(Component component, ComponentTag tag)
+ {
+ super.onComponentTag(component, tag);
+ tag.put(attr, component.urlFor(this, IBehaviorListener.INTERFACE));
+ }
+
+ public void onRequest()
+ {
+ }
+ }
+
+ private static class MyPage extends WebPage implements IMarkupResourceStreamProvider
+ {
+ private final WebMarkupContainer container;
+
+ public MyPage()
+ {
+ container = new WebMarkupContainer("container");
+ add(container);
+ }
+
+ public IResourceStream getMarkupResourceStream(MarkupContainer container,
+ Class<?> containerClass)
+ {
+ return new StringResourceStream(
+ "<html><body><a wicket:id='container'></a></body></html>");
+ }
+
+ public WebMarkupContainer getContainer()
+ {
+ return container;
+ }
+
+ }
+
+
+}
Propchange: wicket/trunk/wicket/src/test/java/org/apache/wicket/behavior/ImmutableBehaviorIndexTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain