2 * Copyright 2005-2010 the original author or authors.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.wamblee.wicket.page;
18 import static junit.framework.Assert.*;
19 import static org.mockito.Matchers.*;
20 import static org.mockito.Mockito.*;
22 import java.lang.reflect.Field;
24 import javax.persistence.EntityManager;
26 import org.apache.wicket.IPageMap;
27 import org.apache.wicket.PageParameters;
28 import org.apache.wicket.markup.html.WebPage;
29 import org.apache.wicket.model.IModel;
30 import org.apache.wicket.protocol.http.WebResponse;
31 import org.apache.wicket.util.tester.WicketTester;
32 import org.junit.After;
33 import org.junit.Before;
34 import org.junit.Test;
36 public class WebApplicationBasePageTest {
37 private WicketTester wicket;
41 wicket = new WicketTester();
45 public void tearDown() {
49 private void checkBehaviorsInitialized(WebApplicationBasePage aPage)
51 Field behaviorsField = WebApplicationBasePage.class
52 .getDeclaredField("behaviors");
53 behaviorsField.setAccessible(true);
54 CompositePageBehavior behaviors = (CompositePageBehavior) behaviorsField
56 assertNotNull(behaviors);
60 public void testRenderBasePage() throws Exception {
61 WebApplicationBasePage page = new WebApplicationBasePage();
62 wicket.startPage(page);
63 wicket.assertRenderedPage(WebApplicationBasePage.class);
64 checkBehaviorsInitialized(page);
68 public void testRenderBasePageWithModel() throws Exception {
69 WebApplicationBasePage page = new WebApplicationBasePage(
71 wicket.startPage(page);
72 wicket.assertRenderedPage(WebApplicationBasePage.class);
73 checkBehaviorsInitialized(page);
77 public void testRenderBasePageWithPageMap() throws Exception {
78 WebApplicationBasePage page = new WebApplicationBasePage(
79 mock(IPageMap.class));
80 wicket.startPage(page);
81 wicket.assertRenderedPage(WebApplicationBasePage.class);
82 checkBehaviorsInitialized(page);
86 public void testRenderBasePageWithPageMapAndModel() throws Exception {
87 WebApplicationBasePage page = new WebApplicationBasePage(
88 mock(IPageMap.class), mock(IModel.class));
89 wicket.startPage(page);
90 wicket.assertRenderedPage(WebApplicationBasePage.class);
91 checkBehaviorsInitialized(page);
95 public void testRenderBasePageWithPageParameters() throws Exception {
96 WebApplicationBasePage page = new WebApplicationBasePage(
97 new PageParameters());
98 wicket.startPage(page);
99 wicket.assertRenderedPage(WebApplicationBasePage.class);
100 checkBehaviorsInitialized(page);
104 public void testRenderBasePageWithPageMapAndPageParameters()
106 WebApplicationBasePage page = new WebApplicationBasePage(
107 mock(IPageMap.class), new PageParameters());
108 wicket.startPage(page);
109 wicket.assertRenderedPage(WebApplicationBasePage.class);
110 checkBehaviorsInitialized(page);
113 public static final class TestPage extends WebApplicationBasePage {
115 private transient WebResponse response;
117 public TestPage(WebResponse aResponse) {
118 response = aResponse;
121 public void callAfterRender() {
125 public void callSetHeaders() {
126 setHeaders(response);
129 public void callBeforeRender() {
133 public void callOnDetach() {
139 public void testAddBehavior() throws Exception {
140 final WebResponse response = mock(WebResponse.class);
141 TestPage page = new TestPage(response);
142 PageBehavior behavior = mock(PageBehavior.class);
143 page.addBehavior(behavior);
146 page.callBeforeRender();
147 verify(behavior).onBeforeRender(same(page));
148 verifyNoMoreInteractions(behavior);
151 page.callAfterRender();
152 verify(behavior).onAfterRender(same(page));
153 verifyNoMoreInteractions(behavior);
156 page.callSetHeaders();
157 verify(behavior).setHeaders(same(page), same(response));
158 verifyNoMoreInteractions(behavior);
162 verify(behavior).onDetach(same(page));
163 verifyNoMoreInteractions(behavior);
167 public void testSmokeExpirePageImmediatelyBehavior() throws Exception {
168 WebApplicationBasePage page = new WebApplicationBasePage(
169 mock(IPageMap.class), new PageParameters());
170 page.addBehavior(new ExpirePageImmediatelyBehavior());
171 wicket.startPage(page);
172 wicket.assertRenderedPage(WebApplicationBasePage.class);
176 public void testSmokeExpireBehavior() throws Exception {
177 WebApplicationBasePage page = new WebApplicationBasePage(
178 mock(IPageMap.class), new PageParameters());
179 page.addBehavior(new ExpireBehavior() {
181 protected boolean isExpired(WebPage aPage) {
185 wicket.startPage(page);
186 wicket.assertRenderedPage(WebApplicationBasePage.class);
190 public void testSmokeBehaviorDisableCaching() throws Exception {
191 WebApplicationBasePage page = new WebApplicationBasePage(
192 mock(IPageMap.class), new PageParameters());
193 page.addBehavior(new DisableCachingBehavior());
194 wicket.startPage(page);
195 wicket.assertRenderedPage(WebApplicationBasePage.class);
199 public void testSmokeBehaviorFlushEntityManager() throws Exception {
200 WebApplicationBasePage page = new WebApplicationBasePage(
201 mock(IPageMap.class), new PageParameters());
202 final EntityManager entityManager = mock(EntityManager.class);
203 when(entityManager.isOpen()).thenReturn(true);
204 PageBehavior behavior = new FlushEntityManagerBehavior() {
205 public EntityManager getEntityManager() {
206 return entityManager;
209 page.addBehavior(behavior);
210 wicket.startPage(page);
211 wicket.assertRenderedPage(WebApplicationBasePage.class);
212 verify(entityManager).flush();