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;
}