Java tutorial
/* * Licensed 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.amplafi.tapestry4; import java.util.Arrays; import java.util.Iterator; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import static org.easymock.classextension.EasyMock.*; import org.apache.commons.collections.Predicate; import org.apache.commons.collections.iterators.FilterIterator; import org.apache.tapestry.IRequestCycle; import org.apache.tapestry.services.ApplicationGlobals; import org.apache.tapestry.services.CookieSource; import org.apache.tapestry.services.RequestGlobals; import org.apache.tapestry.services.ResponseBuilder; import org.apache.tapestry.services.impl.RequestGlobalsImpl; import org.apache.tapestry.spec.IApplicationSpecification; import org.apache.tapestry.web.WebActivator; import org.apache.tapestry.web.WebContext; import org.apache.tapestry.web.WebRequest; import org.apache.tapestry.web.WebResponse; import org.easymock.internal.ClassExtensionHelper; import org.easymock.internal.MocksControl; import org.easymock.internal.RuntimeExceptionWrapper; /** * This class assumes that {@link RequestGlobals} is in a threaded * pool (6/2007:this is current default). * * So if creating mocks it finds that there already is a mock, * it may just reset it. * @author Patrick Moore */ public class ProgrammableTapestryGlobals { private RequestGlobals requestGlobals; private CookieSource cookieSource; private ApplicationGlobals applicationGlobals; public ProgrammableTapestryGlobals() { } public void initializeService() { requestGlobals = new RequestGlobalsImpl(); programApplicationGlobals(); } /** * Assign nice mocks to all Tapestry Request objects. */ public void initializeWithNiceMocks() { store(createNiceMock(IRequestCycle.class)); store(createNiceMock(ResponseBuilder.class)); store(createNiceMock(HttpServletRequest.class), createNiceMock(HttpServletResponse.class)); store(createNiceMock(WebRequest.class), createNiceMock(WebResponse.class)); replayMocks(); } /** * Assign mocks to all Tapestry Request objects. */ public void initializeWithMocks() { store(createMock(IRequestCycle.class)); store(createMock(ResponseBuilder.class)); store(createMock(HttpServletRequest.class), createMock(HttpServletResponse.class)); store(createMock(WebRequest.class), createMock(WebResponse.class)); } public void replayMocks() { for (Iterator<Object> mock = mocksIterator(); mock.hasNext();) { MocksControl control = ClassExtensionHelper.getControl(mock.next()); control.replay(); } } public void resetMocks() { for (Iterator<Object> mock = mocksIterator(); mock.hasNext();) { MocksControl control = ClassExtensionHelper.getControl(mock.next()); control.reset(); } } public void verifyMocks() { for (Iterator<Object> mock = mocksIterator(); mock.hasNext();) { MocksControl control = ClassExtensionHelper.getControl(mock.next()); control.verify(); } } public WebRequest getWebRequest() { return requestGlobals.getWebRequest(); } public WebResponse getWebResponse() { return requestGlobals.getWebResponse(); } public HttpServletRequest getRequest() { return requestGlobals.getRequest(); } public HttpServletResponse getResponse() { return requestGlobals.getResponse(); } public void store(WebRequest request, WebResponse response) { requestGlobals.store(request, response); } public void store(HttpServletRequest request, HttpServletResponse response) { requestGlobals.store(request, response); } public IRequestCycle getRequestCycle() { return requestGlobals.getRequestCycle(); } public void store(IRequestCycle cycle) { requestGlobals.store(cycle); } public ResponseBuilder getResponseBuilder() { return requestGlobals.getResponseBuilder(); } public void store(ResponseBuilder builder) { requestGlobals.store(builder); } public List<Object> requestObjects() { return Arrays.asList( new Object[] { getRequest(), getResponse(), getWebRequest(), getWebResponse(), getRequestCycle() }); } @SuppressWarnings("unchecked") public Iterator<Object> mocksIterator() { return new FilterIterator(requestObjects().iterator(), new Predicate() { @Override public boolean evaluate(Object object) { return isMockObject(object); } }); } private boolean isMockObject(Object object) { if (object == null) { return false; } try { MocksControl control = ClassExtensionHelper.getControl(object); return control != null; } catch (RuntimeExceptionWrapper e) { // was not a mock... ignore return false; } } public RequestGlobals getRequestGlobals() { return requestGlobals; } public CookieSource getCookieSource() { return cookieSource; } /** * */ public void programApplicationGlobals() { if (getApplicationGlobals() != null) { WebActivator activator = createNiceMock(WebActivator.class); expect(activator.getActivatorName()).andReturn("under-test").anyTimes(); WebContext webContext = createNiceMock(WebContext.class); ServletContext servletContext = createNiceMock(ServletContext.class); IApplicationSpecification applicationSpecification = createNiceMock(IApplicationSpecification.class); replay(activator, applicationSpecification, webContext, servletContext); getApplicationGlobals().storeActivator(activator); getApplicationGlobals().storeWebContext(webContext); getApplicationGlobals().storeSpecification(applicationSpecification); getApplicationGlobals().storeServletContext(servletContext); } } public void setApplicationGlobals(ApplicationGlobals applicationGlobals) { this.applicationGlobals = applicationGlobals; } public ApplicationGlobals getApplicationGlobals() { return applicationGlobals; } /** * */ public void storeNiceMocks() { store(createNiceMock(IRequestCycle.class)); store(createNiceMock(ResponseBuilder.class)); store(createNiceMock(HttpServletRequest.class), createNiceMock(HttpServletResponse.class)); } }