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

Reply via email to