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 <[email protected]> Authored: Thu Feb 16 02:10:29 2017 +0900 Committer: kensakurai <[email protected]> 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; }
