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