You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2017/03/20 20:58:45 UTC

[02/48] wicket git commit: Add StatelessCheckFailureException

Add StatelessCheckFailureException

Add StatelessCheckFailureException


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

Branch: refs/heads/master
Commit: 20c2b8930d2fee27c809a70824a648cff17f700c
Parents: a787796
Author: kensakurai <sa...@gmail.com>
Authored: Thu Feb 16 02:10:29 2017 +0900
Committer: kensakurai <sa...@gmail.com>
Committed: Thu Feb 16 02:10:29 2017 +0900

----------------------------------------------------------------------
 .../StatelessCheckFailureException.java         | 56 +++++++++++++
 .../devutils/stateless/StatelessChecker.java    | 57 ++-----------
 .../stateless/StatelessCheckerTest.java         | 86 +++++++++++++++-----
 3 files changed, 130 insertions(+), 69 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/20c2b893/wicket-devutils/src/main/java/org/apache/wicket/devutils/stateless/StatelessCheckFailureException.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/stateless/StatelessCheckFailureException.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/stateless/StatelessCheckFailureException.java
new file mode 100644
index 0000000..b87e79a
--- /dev/null
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/stateless/StatelessCheckFailureException.java
@@ -0,0 +1,56 @@
+/*
+ * 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.devutils.stateless;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.Page;
+import org.apache.wicket.WicketRuntimeException;
+
+/**
+ *
+ * Just an exception that can be thrown if a StatelessChecker is invoked, the component being checked is not stateless
+ * or the behavior held by the component is not stateless.
+ *
+ * Includes a  method that to get check failure component.
+ *
+ * @author Ken Sakurai
+ */
+public class StatelessCheckFailureException  extends WicketRuntimeException
+{
+    private static final long serialVersionUID = 1L;
+
+    private Component component;
+
+	/**
+	 * Construct.
+	 * @param component Failure component
+	 * @param reason Reason for exception occurrence
+	 */
+	public StatelessCheckFailureException(Component component, String reason)
+    {
+        super("'" + component + "' claims to be stateless but isn't. ");
+        this.component = component;
+    }
+
+	/**
+	 * Get check failure component
+	 * @return Failure component
+	 */
+	public Component getComponent() {
+		return component;
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/20c2b893/wicket-devutils/src/main/java/org/apache/wicket/devutils/stateless/StatelessChecker.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/stateless/StatelessChecker.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/stateless/StatelessChecker.java
index 9b23cc2..b2a7a32 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/stateless/StatelessChecker.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/stateless/StatelessChecker.java
@@ -56,54 +56,11 @@ public class StatelessChecker implements IComponentOnBeforeRenderListener
 	/**
 	 * The given component claims to be stateless but isn't.
 	 *
-	 * @param component component failing stateless check
-	 * @param reason explaining reason
+	 * @param e StatelessCheckFailureException
 	 */
-	protected void fail(Component component, String reason)
+	protected void fail(StatelessCheckFailureException e)
 	{
-		throw new IllegalArgumentException(getMessage(component) + reason);
-	}
-
-	/**
-	 * The given page claims to be stateless but isn't.
-	 *
-	 * @param page page failing stateless check
-	 * @param reason explaining reason
-	 */
-	protected void failPage(Page page, String reason)
-	{
-		fail(page, reason);
-	}
-
-	/**
-	 * The given markupContainer claims to be stateless but isn't.
-	 *
-	 * @param markupContainer MarkupContainer failing stateless check
-	 * @param reason explaining reason
-	 */
-	protected void failMarkupContainer(MarkupContainer markupContainer, String reason)
-	{
-		fail(markupContainer, reason);
-	}
-	/**
-	 * The given component claims to be stateless but isn't, because the holding behaviors are stateful.
-	 *
-	 * @param component component failing stateless check
-	 * @param reason explaining reason
-	 */
-	protected void failBehaviors(Component component, String reason)
-	{
-		throw new IllegalStateException(getMessage(component) + reason);
-	}
-	/**
-	 * return the message from the component
-	 *
-	 * @param component component failing stateless check
-	 * @return message
-	 */
-	private String getMessage(Component component)
-	{
-		return "'" + component + "' claims to be stateless but isn't. ";
+		throw e;
 	}
 
 	/**
@@ -162,7 +119,7 @@ public class StatelessChecker implements IComponentOnBeforeRenderListener
 				{
 				    reason = " Stateful behaviors: " + statefulBehaviors.join();
 				}
-				failBehaviors(component, reason);
+				fail(new StatelessCheckFailureException(component, reason));
 			}
 
 			if (component instanceof MarkupContainer)
@@ -172,7 +129,7 @@ public class StatelessChecker implements IComponentOnBeforeRenderListener
 				final Object o = container.visitChildren(visitor);
 				if (o != null)
 				{
-					failMarkupContainer(container, " Offending component: " + o);
+					fail(new StatelessCheckFailureException(container, " Offending component: " + o));
 				}
 			}
 
@@ -181,11 +138,11 @@ public class StatelessChecker implements IComponentOnBeforeRenderListener
 				final Page p = (Page)component;
 				if (!p.isBookmarkable())
 				{
-					failPage(p, " Only bookmarkable pages can be stateless");
+					fail(new StatelessCheckFailureException(p, " Only bookmarkable pages can be stateless"));
 				}
 				if (!p.isPageStateless())
 				{
-					failPage(p, " for unknown reason");
+					fail(new StatelessCheckFailureException(p, " for unknown reason"));
 				}
 			}
 		}

http://git-wip-us.apache.org/repos/asf/wicket/blob/20c2b893/wicket-devutils/src/test/java/org/apache/wicket/devutils/stateless/StatelessCheckerTest.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/test/java/org/apache/wicket/devutils/stateless/StatelessCheckerTest.java b/wicket-devutils/src/test/java/org/apache/wicket/devutils/stateless/StatelessCheckerTest.java
index 707e7e0..41df859 100644
--- a/wicket-devutils/src/test/java/org/apache/wicket/devutils/stateless/StatelessCheckerTest.java
+++ b/wicket-devutils/src/test/java/org/apache/wicket/devutils/stateless/StatelessCheckerTest.java
@@ -17,7 +17,7 @@
 package org.apache.wicket.devutils.stateless;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.util.tester.DummyHomePage;
@@ -33,7 +33,7 @@ import org.junit.Test;
 public class StatelessCheckerTest extends Assert
 {
 	/**
-	 * 
+	 * StatelessPage
 	 */
 	@StatelessComponent
 	public static class StatelessPage extends DummyHomePage
@@ -42,7 +42,7 @@ public class StatelessCheckerTest extends Assert
 	}
 
 	/**
-	 * 
+	 * StatelessLabel
 	 */
 	@StatelessComponent
 	private static class StatelessLabel extends Label
@@ -55,6 +55,27 @@ public class StatelessCheckerTest extends Assert
 		}
 	}
 
+	/**
+	 * StatefulMarkupContainer
+	 */
+	@StatelessComponent
+	private static class StatefulMarkupContainer extends MarkupContainer
+	{
+		private static final long serialVersionUID = 1L;
+
+		public StatefulMarkupContainer(String id) {
+			super(id);
+		}
+		@Override
+		public boolean getStatelessHint()
+		{
+			return false;
+		}
+	}
+
+	/**
+	 * StatefulBehavior
+	 */
 	private static class StatefulBehavior extends Behavior
 	{
 		private static final long serialVersionUID = 1L;
@@ -67,15 +88,12 @@ public class StatelessCheckerTest extends Assert
 	}
 
 	private final StatelessChecker checker = new StatelessChecker();
+
 	private final StatelessChecker checkerQuietly = new StatelessChecker() {
-		protected void fail(Component component, String reason)
+		protected void fail(StatelessCheckFailureException e)
 		{
 			// Do Nothing...
 		}
-		protected void failBehaviors(Component component, String reason) {
-			// Do Nothing...
-		}
-
 	};
 
 	private WicketTester tester;
@@ -101,14 +119,34 @@ public class StatelessCheckerTest extends Assert
 	@Test
 	public void testNonBookmarkablePage()
 	{
-		boolean hit = isHitBookmarkablePage(checker);
+		boolean hit1 = false;
+		try
+		{
+			tester.getApplication().getComponentPostOnBeforeRenderListeners().add(checker);
+			tester.startPage(StatelessPage.class);
+		}
+		catch (StatelessCheckFailureException ex)
+		{
+			hit1 = true;
+		}
+		boolean hit = hit1;
 		assertTrue("Expected exception", hit);
 	}
 
 	@Test
 	public void testNonBookmarkablePageQuietly()
 	{
-		boolean hit = isHitBookmarkablePage(checkerQuietly);
+		boolean hit1 = false;
+		try
+		{
+			tester.getApplication().getComponentPostOnBeforeRenderListeners().add(checkerQuietly);
+			tester.startPage(StatelessPage.class);
+		}
+		catch (StatelessCheckFailureException ex)
+		{
+			hit1 = true;
+		}
+		boolean hit = hit1;
 		assertFalse("Expected exception", hit);
 	}
 
@@ -132,30 +170,40 @@ public class StatelessCheckerTest extends Assert
 		tester.startComponentInPage(new StatelessLabel("foo"));
 	}
 
-	private boolean isHitBehaviors(StatelessChecker checker) {
+	@Test
+	public void testStatefulMarkupContainer() {
+		boolean hit = isHitMarkupContainer(checker);
+		assertTrue("Expected exception", hit);
+	}
+
+	@Test
+	public void testStatefulMarkupContainerQuietly() {
+		boolean hit = isHitMarkupContainer(checkerQuietly);
+		assertFalse("Expected exception", hit);
+	}
+
+	private boolean isHitMarkupContainer(StatelessChecker checker) {
 		boolean hit = false;
 		try
 		{
 			tester.getApplication().getComponentPostOnBeforeRenderListeners().add(checker);
-			tester.startComponentInPage(new StatelessLabel("foo").add(new StatefulBehavior()));
+			tester.startComponentInPage(new StatefulMarkupContainer("foo"));
 		}
-		catch (WicketRuntimeException ex)
+		catch (StatelessCheckFailureException ex)
 		{
-			if(ex.getCause() instanceof IllegalStateException) {
-				hit = true;
-			}
+			hit = true;
 		}
 		return hit;
 	}
 
-	private boolean isHitBookmarkablePage(StatelessChecker checker) {
+	private boolean isHitBehaviors(StatelessChecker checker) {
 		boolean hit = false;
 		try
 		{
 			tester.getApplication().getComponentPostOnBeforeRenderListeners().add(checker);
-			tester.startPage(StatelessPage.class);
+			tester.startComponentInPage(new StatelessLabel("foo").add(new StatefulBehavior()));
 		}
-		catch (IllegalArgumentException ex)
+		catch (StatelessCheckFailureException ex)
 		{
 			hit = true;
 		}