Modify StatelessCheckerTest And fix bug.
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/c39fbdc9 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/c39fbdc9 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/c39fbdc9 Branch: refs/heads/master Commit: c39fbdc99e142c6b2c27ea79c34fe6dda98c9ec2 Parents: 20c2b89 Author: kensakurai <[email protected]> Authored: Sat Feb 18 19:48:33 2017 +0900 Committer: kensakurai <[email protected]> Committed: Sat Feb 18 19:48:33 2017 +0900 ---------------------------------------------------------------------- .../StatelessCheckFailureException.java | 2 +- .../devutils/stateless/StatelessChecker.java | 4 + .../stateless/StatelessCheckerTest.java | 126 +++++++++++-------- 3 files changed, 78 insertions(+), 54 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/c39fbdc9/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 index b87e79a..84def0a 100644 --- 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 @@ -42,7 +42,7 @@ public class StatelessCheckFailureException extends WicketRuntimeException */ public StatelessCheckFailureException(Component component, String reason) { - super("'" + component + "' claims to be stateless but isn't. "); + super("'" + component + "' claims to be stateless but isn't." + reason); this.component = component; } http://git-wip-us.apache.org/repos/asf/wicket/blob/c39fbdc9/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 b2a7a32..5312b2f 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 @@ -120,6 +120,7 @@ public class StatelessChecker implements IComponentOnBeforeRenderListener reason = " Stateful behaviors: " + statefulBehaviors.join(); } fail(new StatelessCheckFailureException(component, reason)); + return; } if (component instanceof MarkupContainer) @@ -130,6 +131,7 @@ public class StatelessChecker implements IComponentOnBeforeRenderListener if (o != null) { fail(new StatelessCheckFailureException(container, " Offending component: " + o)); + return; } } @@ -139,10 +141,12 @@ public class StatelessChecker implements IComponentOnBeforeRenderListener if (!p.isBookmarkable()) { fail(new StatelessCheckFailureException(p, " Only bookmarkable pages can be stateless")); + return; } if (!p.isPageStateless()) { fail(new StatelessCheckFailureException(p, " for unknown reason")); + return; } } } http://git-wip-us.apache.org/repos/asf/wicket/blob/c39fbdc9/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 41df859..0d16468 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 @@ -87,14 +87,27 @@ public class StatelessCheckerTest extends Assert } } - private final StatelessChecker checker = new StatelessChecker(); + /** + * StatelessCheckerQuietly + */ + private static class StatelessCheckerQuietly extends StatelessChecker + { + private StatelessCheckFailureException ex; - private final StatelessChecker checkerQuietly = new StatelessChecker() { protected void fail(StatelessCheckFailureException e) { - // Do Nothing... + this.ex = e; } - }; + + public StatelessCheckFailureException getFailureException() + { + return ex; + } + } + + private StatelessChecker checker; + + private StatelessCheckerQuietly checkerQuietly; private WicketTester tester; @@ -105,6 +118,8 @@ public class StatelessCheckerTest extends Assert public void setUp() { tester = new WicketTester(); + checker = new StatelessChecker(); + checkerQuietly = new StatelessCheckerQuietly(); } /** @@ -119,95 +134,100 @@ public class StatelessCheckerTest extends Assert @Test public void testNonBookmarkablePage() { - boolean hit1 = false; try { - tester.getApplication().getComponentPostOnBeforeRenderListeners().add(checker); - tester.startPage(StatelessPage.class); + startNonBookmarkablePage(checker); + fail("Expected tester.startPage() to fail with StatelessCheckFailureException"); } catch (StatelessCheckFailureException ex) { - hit1 = true; + assertNonBookmarkablePage(ex); } - boolean hit = hit1; - assertTrue("Expected exception", hit); } @Test public void testNonBookmarkablePageQuietly() { - boolean hit1 = false; + startNonBookmarkablePage(checkerQuietly); + StatelessCheckFailureException ex = checkerQuietly.getFailureException(); + assertNonBookmarkablePage(ex); + } + + private void startNonBookmarkablePage(StatelessChecker checker) + { + tester.getApplication().getComponentPostOnBeforeRenderListeners().add(checker); + tester.startPage(StatelessPage.class); + } + + private void assertNonBookmarkablePage(StatelessCheckFailureException ex) { + assertEquals("'[Page class = org.apache.wicket.devutils.stateless.StatelessCheckerTest$StatelessPage, id = 0, render count = 1]' claims to be stateless but isn't. Offending component: [TestLink [Component id = testPage]]", ex.getMessage()); + assertEquals(StatelessPage.class, ex.getComponent().getClass()); + } + + @Test + public void testStatefulBehaviors() + { try { - tester.getApplication().getComponentPostOnBeforeRenderListeners().add(checkerQuietly); - tester.startPage(StatelessPage.class); + startComponentInPage(checker, new StatelessLabel("foo").add(new StatefulBehavior())); + fail("Expected tester.startComponentInPage() to fail with StatelessCheckFailureException"); } catch (StatelessCheckFailureException ex) { - hit1 = true; + assertStatefulBehaviors(ex); } - boolean hit = hit1; - assertFalse("Expected exception", hit); } @Test - public void testStatefulBehaviors() - { - boolean hit = isHitBehaviors(checker); - assertTrue("Expected exception", hit); - } - @Test public void testStatefulBehaviorsQuietly() { - boolean hit = isHitBehaviors(checkerQuietly); - assertFalse("Expected exception", hit); + startComponentInPage(checkerQuietly, new StatelessLabel("foo").add(new StatefulBehavior())); + StatelessCheckFailureException ex = checkerQuietly.getFailureException(); + assertStatefulBehaviors(ex); } - @Test - public void testPositive() - { + private void startComponentInPage(StatelessChecker checker, Component foo) { tester.getApplication().getComponentPostOnBeforeRenderListeners().add(checker); - tester.startComponentInPage(new StatelessLabel("foo")); + tester.startComponentInPage(foo); } - @Test - public void testStatefulMarkupContainer() { - boolean hit = isHitMarkupContainer(checker); - assertTrue("Expected exception", hit); + private void assertStatefulBehaviors(StatelessCheckFailureException ex) { + assertEquals("'[Component id = foo]' claims to be stateless but isn't. Stateful behaviors: org.apache.wicket.devutils.stateless.StatelessCheckerTest$StatefulBehavior", ex.getMessage()); + assertEquals(StatelessLabel.class, ex.getComponent().getClass()); } @Test - public void testStatefulMarkupContainerQuietly() { - boolean hit = isHitMarkupContainer(checkerQuietly); - assertFalse("Expected exception", hit); + public void testPositive() + { + startComponentInPage(checker, new StatelessLabel("foo")); } - private boolean isHitMarkupContainer(StatelessChecker checker) { - boolean hit = false; + @Test + public void testStatefulMarkupContainer() + { try { - tester.getApplication().getComponentPostOnBeforeRenderListeners().add(checker); - tester.startComponentInPage(new StatefulMarkupContainer("foo")); + startComponentInPage(checker, new StatefulMarkupContainer("foo")); + fail("Expected tester.startComponentInPage() to fail with StatelessCheckFailureException"); } catch (StatelessCheckFailureException ex) { - hit = true; + assertStatefulMarkupContainer(ex); } - return hit; } - private boolean isHitBehaviors(StatelessChecker checker) { - boolean hit = false; - try - { - tester.getApplication().getComponentPostOnBeforeRenderListeners().add(checker); - tester.startComponentInPage(new StatelessLabel("foo").add(new StatefulBehavior())); - } - catch (StatelessCheckFailureException ex) - { - hit = true; - } - return hit; + @Test + public void testStatefulMarkupContainerQuietly() + { + startComponentInPage(checkerQuietly, new StatefulMarkupContainer("foo")); + StatelessCheckFailureException ex = checkerQuietly.getFailureException(); + assertStatefulMarkupContainer(ex); + } + private void assertStatefulMarkupContainer(StatelessCheckFailureException ex) + { + assertEquals("'[StatefulMarkupContainer [Component id = foo]]' claims to be stateless but isn't. Possible reason: no stateless hint", ex.getMessage()); + assertEquals(StatefulMarkupContainer.class, ex.getComponent().getClass()); + } }
