Copied: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/RestartServiceTest.java (from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestRestartService.java) URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/RestartServiceTest.java?p2=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/RestartServiceTest.java&p1=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestRestartService.java&r1=332478&r2=332810&rev=332810&view=diff ============================================================================== --- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestRestartService.java (original) +++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/RestartServiceTest.java Sat Nov 12 10:22:15 2005 @@ -20,9 +20,7 @@ import org.apache.commons.logging.Log; import org.apache.tapestry.IRequestCycle; -import org.apache.tapestry.junit.TapestryTestCase; import org.apache.tapestry.services.AbsoluteURLBuilder; -import org.easymock.MockControl; /** * Tests for [EMAIL PROTECTED] org.apache.tapestry.engine.RestartService}. @@ -30,38 +28,24 @@ * @author Howard M. Lewis Ship * @since 4.0 */ -public class TestRestartService extends TapestryTestCase +public class RestartServiceTest extends ServiceTestCase { public void testNoSession() throws Exception { - MockControl requestControl = newControl(HttpServletRequest.class); - HttpServletRequest request = (HttpServletRequest) requestControl.getMock(); - - HttpServletResponse response = (HttpServletResponse) newMock(HttpServletResponse.class); - - MockControl builderControl = newControl(AbsoluteURLBuilder.class); - AbsoluteURLBuilder builder = (AbsoluteURLBuilder) builderControl.getMock(); - - MockControl cycleControl = newControl(IRequestCycle.class); - IRequestCycle cycle = (IRequestCycle) cycleControl.getMock(); + HttpServletRequest request = newServletRequest(); + HttpServletResponse response = newServletResponse(); + IRequestCycle cycle = newCycle(); // Training - request.getSession(false); - requestControl.setReturnValue(null); - - cycle.getAbsoluteURL("/app"); - cycleControl.setReturnValue("http://myserver/app"); - - builder.constructURL("http://myserver/app"); - builderControl.setReturnValue("http://myserver/app"); + trainGetSession(request, false, null); + trainGetAbsoluteURL(cycle, "/app", "http://myserver/app"); response.sendRedirect("http://myserver/app"); replayControls(); RestartService s = new RestartService(); - s.setBuilder(builder); s.setRequest(request); s.setResponse(response); s.setServletPath("/app"); @@ -71,99 +55,95 @@ verifyControls(); } - public void testWithSession() throws Exception + private void trainGetSession(HttpServletRequest request, boolean create, HttpSession session) + { + request.getSession(create); + setReturnValue(request, session); + } + + private AbsoluteURLBuilder newBuilder() { - MockControl requestControl = newControl(HttpServletRequest.class); - HttpServletRequest request = (HttpServletRequest) requestControl.getMock(); + return (AbsoluteURLBuilder) newMock(AbsoluteURLBuilder.class); + } - HttpServletResponse response = (HttpServletResponse) newMock(HttpServletResponse.class); + private HttpServletResponse newServletResponse() + { + return (HttpServletResponse) newMock(HttpServletResponse.class); + } - MockControl builderControl = newControl(AbsoluteURLBuilder.class); - AbsoluteURLBuilder builder = (AbsoluteURLBuilder) builderControl.getMock(); + private HttpServletRequest newServletRequest() + { + return (HttpServletRequest) newMock(HttpServletRequest.class); + } - MockControl cycleControl = newControl(IRequestCycle.class); - IRequestCycle cycle = (IRequestCycle) cycleControl.getMock(); + public void testWithSession() throws Exception + { + HttpServletRequest request = newServletRequest(); + HttpServletResponse response = newServletResponse(); + HttpSession session = newHttpSession(); - HttpSession session = (HttpSession) newMock(HttpSession.class); + IRequestCycle cycle = newCycle(); // Training - request.getSession(false); - requestControl.setReturnValue(session); + trainGetSession(request, false, session); session.invalidate(); - cycle.getAbsoluteURL("/tap"); - cycleControl.setReturnValue("http://myserver/tap"); + trainGetAbsoluteURL(cycle, "/app", "http://myserver/app"); - builder.constructURL("http://myserver/tap"); - builderControl.setReturnValue("http://myserver/tap"); - - response.sendRedirect("http://myserver/tap"); + response.sendRedirect("http://myserver/app"); replayControls(); RestartService s = new RestartService(); - s.setBuilder(builder); s.setRequest(request); s.setResponse(response); - s.setServletPath("/tap"); + s.setServletPath("/app"); s.service(cycle); verifyControls(); } - public void testErrorInvalidatingSession() throws Exception + private HttpSession newHttpSession() { - MockControl requestControl = newControl(HttpServletRequest.class); - HttpServletRequest request = (HttpServletRequest) requestControl.getMock(); - - HttpServletResponse response = (HttpServletResponse) newMock(HttpServletResponse.class); - - MockControl builderControl = newControl(AbsoluteURLBuilder.class); - AbsoluteURLBuilder builder = (AbsoluteURLBuilder) builderControl.getMock(); - - MockControl sessionControl = newControl(HttpSession.class); - HttpSession session = (HttpSession) sessionControl.getMock(); - - MockControl cycleControl = newControl(IRequestCycle.class); - IRequestCycle cycle = (IRequestCycle) cycleControl.getMock(); + return (HttpSession) newMock(HttpSession.class); + } - Log log = (Log) newMock(Log.class); + public void testErrorInvalidatingSession() throws Exception + { + HttpServletRequest request = newServletRequest(); + HttpServletResponse response = newServletResponse(); + HttpSession session = newHttpSession(); + Log log = newLog(); + Throwable ex = new IllegalStateException("Bad state"); - IllegalStateException ex = new IllegalStateException(); + IRequestCycle cycle = newCycle(); // Training - request.getSession(false); - requestControl.setReturnValue(session); + trainGetSession(request, false, session); session.invalidate(); - sessionControl.setThrowable(ex); + setThrowable(session, ex); log.warn("Exception thrown invalidating HttpSession.", ex); - cycle.getAbsoluteURL("/app"); - cycleControl.setReturnValue("http://myserver/app"); - - builder.constructURL("http://myserver/app"); - builderControl.setReturnValue("http://myserver/app"); + trainGetAbsoluteURL(cycle, "/app", "http://myserver/app"); response.sendRedirect("http://myserver/app"); replayControls(); RestartService s = new RestartService(); - s.setBuilder(builder); s.setRequest(request); s.setResponse(response); - s.setLog(log); s.setServletPath("/app"); + s.setLog(log); s.service(cycle); verifyControls(); } - }
Modified: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ServiceTestCase.java URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ServiceTestCase.java?rev=332810&r1=332809&r2=332810&view=diff ============================================================================== --- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ServiceTestCase.java (original) +++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ServiceTestCase.java Sat Nov 12 10:22:15 2005 @@ -19,7 +19,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; +import org.apache.commons.logging.Log; import org.apache.tapestry.BaseComponentTestCase; +import org.apache.tapestry.IComponent; import org.apache.tapestry.IPage; import org.apache.tapestry.IRequestCycle; import org.apache.tapestry.services.LinkFactory; @@ -121,12 +123,11 @@ return (ILink) newMock(ILink.class); } - protected LinkFactory newLinkFactory(IRequestCycle cycle, Map parameters, boolean stateful, - ILink link) + protected LinkFactory newLinkFactory(Map parameters, boolean stateful, ILink link) { LinkFactory lf = (LinkFactory) newMock(LinkFactory.class); - lf.constructLink(false, parameters, stateful); + lf.constructLink(null, false, parameters, stateful); setReturnValue(lf, link); @@ -136,6 +137,53 @@ protected ResponseRenderer newResponseRenderer() { return (ResponseRenderer) newMock(ResponseRenderer.class); + } + + protected void trainConstructLink(LinkFactory linkFactory, IEngineService service, + boolean post, Map parameters, boolean stateful, ILink link) + { + linkFactory.constructLink(service, post, parameters, stateful); + setReturnValue(linkFactory, link); + } + + protected LinkFactory newLinkFactory() + { + return (LinkFactory) newMock(LinkFactory.class); + } + + protected void trainGetPage(IRequestCycle cycle, IPage page) + { + cycle.getPage(); + setReturnValue(cycle, page); + } + + protected void trainGetNestedComponent(IPage page, String idPath, IComponent component) + { + page.getNestedComponent(idPath); + setReturnValue(page, component); + } + + protected void trainGetPage(IRequestCycle cycle, String pageName, IPage page) + { + cycle.getPage(pageName); + setReturnValue(cycle, page); + } + + protected void trainExtractListenerParameters(LinkFactory factory, IRequestCycle cycle, Object[] parameters) + { + factory.extractListenerParameters(cycle); + setReturnValue(factory, parameters); + } + + protected void trainGetAbsoluteURL(IRequestCycle cycle, String shortURL, String fullURL) + { + cycle.getAbsoluteURL(shortURL); + setReturnValue(cycle, fullURL); + } + + protected Log newLog() + { + return (Log) newMock(Log.class); } } Copied: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java (from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/services/impl/TestLinkFactory.java) URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java?p2=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java&p1=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/services/impl/TestLinkFactory.java&r1=332478&r2=332810&rev=332810&view=diff ============================================================================== --- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/services/impl/TestLinkFactory.java (original) +++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java Sat Nov 12 10:22:15 2005 @@ -21,16 +21,19 @@ import java.util.List; import java.util.Map; +import org.apache.hivemind.ApplicationRuntimeException; import org.apache.hivemind.ErrorLog; import org.apache.hivemind.test.HiveMindTestCase; import org.apache.tapestry.IEngine; import org.apache.tapestry.IRequestCycle; +import org.apache.tapestry.engine.IEngineService; import org.apache.tapestry.engine.ILink; import org.apache.tapestry.engine.ServiceEncoder; import org.apache.tapestry.engine.ServiceEncoding; import org.apache.tapestry.engine.encoders.PageServiceEncoder; import org.apache.tapestry.record.PropertyPersistenceStrategy; import org.apache.tapestry.record.PropertyPersistenceStrategySource; +import org.apache.tapestry.services.LinkFactory; import org.apache.tapestry.services.ServiceConstants; import org.apache.tapestry.util.io.DataSqueezerUtil; import org.apache.tapestry.web.WebRequest; @@ -42,7 +45,7 @@ * @author Howard M. Lewis Ship * @since 4.0 */ -public class TestLinkFactory extends HiveMindTestCase +public class LinkFactoryTest extends HiveMindTestCase { private ErrorLog newErrorLog() { @@ -101,28 +104,38 @@ return result; } - private IRequestCycle newCycle() + private IEngine newEngine() { - MockControl enginec = newControl(IEngine.class); - IEngine engine = (IEngine) enginec.getMock(); - - MockControl cyclec = newControl(IRequestCycle.class); - IRequestCycle cycle = (IRequestCycle) cyclec.getMock(); + return (IEngine) newMock(IEngine.class); + } - cycle.getEngine(); - cyclec.setReturnValue(engine); + private IRequestCycle newCycle() + { + return (IRequestCycle) newMock(IRequestCycle.class); + } + private void trainGetOutputEncoding(IEngine engine, String outputEncoding) + { engine.getOutputEncoding(); - enginec.setReturnValue("utf-8"); + setReturnValue(engine, outputEncoding); + } - return cycle; + private void trainGetEngine(IRequestCycle cycle, IEngine engine) + { + cycle.getEngine(); + setReturnValue(cycle, engine); } public void testNoEncoders() { ErrorLog log = newErrorLog(); WebRequest request = newRequest(); + IEngine engine = newEngine(); IRequestCycle cycle = newCycle(); + IEngineService service = newService("myservice"); + + trainGetEngine(cycle, engine); + trainGetOutputEncoding(engine, "utf-8"); replayControls(); @@ -138,33 +151,36 @@ lf.initializeService(); Map parameters = new HashMap(); - parameters.put(ServiceConstants.SERVICE, "myservice"); - ILink link = lf.constructLink(false, parameters, false); + ILink link = lf.constructLink(service, false, parameters, false); verifyControls(); assertEquals("/context/app?service=myservice", link.getURL()); } + private IEngineService newService(String name) + { + IEngineService service = (IEngineService) newMock(IEngineService.class); + + service.getName(); + setReturnValue(service, name); + + return service; + } + public void testStatefulRequest() { ErrorLog log = newErrorLog(); WebRequest request = newRequest(); - MockControl enginec = newControl(IEngine.class); - IEngine engine = (IEngine) enginec.getMock(); - - MockControl cyclec = newControl(IRequestCycle.class); - IRequestCycle cycle = (IRequestCycle) cyclec.getMock(); - - cycle.getEngine(); - cyclec.setReturnValue(engine); + IEngine engine = newEngine(); + IEngineService service = newService("myservice"); + IRequestCycle cycle = newCycle(); - engine.getOutputEncoding(); - enginec.setReturnValue("utf-8"); + trainGetEngine(cycle, engine); + trainGetOutputEncoding(engine, "utf-8"); - cycle.encodeURL("/context/app?foo=bar&service=myservice"); - cyclec.setReturnValue("{encoded}"); + trainEncodeURL(cycle, "/context/app?foo=bar&service=myservice", "{encoded}"); replayControls(); @@ -181,20 +197,30 @@ lf.initializeService(); Map parameters = new HashMap(); - parameters.put(ServiceConstants.SERVICE, "myservice"); - ILink link = lf.constructLink(false, parameters, true); + ILink link = lf.constructLink(service, false, parameters, true); assertEquals("{encoded}", link.getURL()); verifyControls(); } + private void trainEncodeURL(IRequestCycle cycle, String inputURL, String encodeURL) + { + cycle.encodeURL(inputURL); + setReturnValue(cycle, encodeURL); + } + public void testNoopEncoders() { WebRequest request = newRequest(); IRequestCycle cycle = newCycle(); ErrorLog log = newErrorLog(); + IEngine engine = newEngine(); + IEngineService service = newService("myservice"); + + trainGetEngine(cycle, engine); + trainGetOutputEncoding(engine, "utf-8"); replayControls(); @@ -214,9 +240,8 @@ lf.initializeService(); Map parameters = new HashMap(); - parameters.put(ServiceConstants.SERVICE, "myservice"); - ILink link = lf.constructLink(false, parameters, false); + ILink link = lf.constructLink(service, false, parameters, false); verifyControls(); @@ -228,8 +253,14 @@ WebRequest request = newRequest(); IRequestCycle cycle = newCycle(); ErrorLog log = newErrorLog(); + IEngineService service = newService("page"); + IEngine engine = newEngine(); + + trainGetEngine(cycle, engine); + trainGetOutputEncoding(engine, "utf-8"); replayControls(); + PageServiceEncoder e = new PageServiceEncoder(); e.setServiceName("page"); e.setExtension("html"); @@ -248,21 +279,48 @@ lf.initializeService(); Map parameters = new HashMap(); - parameters.put(ServiceConstants.SERVICE, "page"); parameters.put(ServiceConstants.PAGE, "Barney"); - ILink link = lf.constructLink(false, parameters, false); + ILink link = lf.constructLink(service, false, parameters, false); verifyControls(); assertEquals("/context/Barney.html", link.getURL()); } + public void testServiceNameIsNull() + { + IEngineService service = newService(null); + + Map parameters = new HashMap(); + + replayControls(); + + LinkFactory lf = new LinkFactoryImpl(); + + try + { + lf.constructLink(service, false, parameters, true); + unreachable(); + } + catch (ApplicationRuntimeException ex) + { + assertEquals(ImplMessages.serviceNameIsNull(), ex.getMessage()); + } + + verifyControls(); + } + public void testWithServiceParameters() { WebRequest request = newRequest(); IRequestCycle cycle = newCycle(); ErrorLog log = newErrorLog(); + IEngineService service = newService("external"); + IEngine engine = newEngine(); + + trainGetEngine(cycle, engine); + trainGetOutputEncoding(engine, "utf-8"); replayControls(); @@ -285,12 +343,11 @@ lf.initializeService(); Map parameters = new HashMap(); - parameters.put(ServiceConstants.SERVICE, "external"); parameters.put(ServiceConstants.PAGE, "Barney"); parameters.put(ServiceConstants.PARAMETER, new Object[] { Boolean.TRUE }); - ILink link = lf.constructLink(false, parameters, false); + ILink link = lf.constructLink(service, false, parameters, false); verifyControls(); Modified: jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletHomeService.java URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletHomeService.java?rev=332810&r1=332809&r2=332810&view=diff ============================================================================== --- jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletHomeService.java (original) +++ jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletHomeService.java Sat Nov 12 10:22:15 2005 @@ -59,9 +59,7 @@ Map parameters = new HashMap(); - parameters.put(ServiceConstants.SERVICE, getName()); - - return _linkFactory.constructLink(post, parameters, true); + return _linkFactory.constructLink(this, post, parameters, true); } public void setLinkFactory(LinkFactory linkFactory) Modified: jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletLinkFactoryImpl.java URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletLinkFactoryImpl.java?rev=332810&r1=332809&r2=332810&view=diff ============================================================================== --- jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletLinkFactoryImpl.java (original) +++ jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletLinkFactoryImpl.java Sat Nov 12 10:22:15 2005 @@ -21,6 +21,7 @@ import org.apache.hivemind.util.Defense; import org.apache.tapestry.IRequestCycle; +import org.apache.tapestry.engine.IEngineService; import org.apache.tapestry.engine.ILink; import org.apache.tapestry.services.impl.LinkFactoryImpl; import org.apache.tapestry.util.QueryParameterMap; @@ -43,7 +44,7 @@ _renderResponse = renderResponse; } - public ILink constructLink(boolean post, Map parameters, boolean stateful) + public ILink constructLink(IEngineService service, boolean post, Map parameters, boolean stateful) { Defense.notNull(parameters, "parameters"); Modified: jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletHomeService.java URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletHomeService.java?rev=332810&r1=332809&r2=332810&view=diff ============================================================================== --- jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletHomeService.java (original) +++ jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletHomeService.java Sat Nov 12 10:22:15 2005 @@ -117,20 +117,17 @@ public void testGetLink() { Map parameters = new HashMap(); - parameters.put(ServiceConstants.SERVICE, Tapestry.HOME_SERVICE); - - MockControl factoryc = newControl(LinkFactory.class); - LinkFactory factory = (LinkFactory) factoryc.getMock(); + LinkFactory factory = (LinkFactory) newMock(LinkFactory.class); ILink link = (ILink) newMock(ILink.class); - factory.constructLink(false, parameters, true); - factoryc.setReturnValue(link); - - replayControls(); - PortletHomeService phs = new PortletHomeService(); phs.setLinkFactory(factory); + + factory.constructLink(phs, false, parameters, true); + setReturnValue(factory, link); + + replayControls(); assertSame(link, phs.getLink(false, null)); Modified: jakarta/tapestry/trunk/src/documentation/content/xdocs/index.xml URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/src/documentation/content/xdocs/index.xml?rev=332810&r1=332809&r2=332810&view=diff ============================================================================== --- jakarta/tapestry/trunk/src/documentation/content/xdocs/index.xml (original) +++ jakarta/tapestry/trunk/src/documentation/content/xdocs/index.xml Sat Nov 12 10:22:15 2005 @@ -227,6 +227,16 @@ </section> +<section><title>Upgrading from 4.0-beta-12</title> + + <p> + As part of the fix for <a href="http://issues.apache.org/jira/browse/TAPESTRY-620">TAPESTRY-620: Expose the current IRequestCycle as an injectable service</a>, a number + of other interfaces within Tapestry were simplified, removing the IRequestCycle parameter. This may require minor code changes + in a small number of places. + </p> + +</section> + <section><title>Upgrading from 4.0 beta-10</title> <p> Modified: jakarta/tapestry/trunk/status.xml URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/status.xml?rev=332810&r1=332809&r2=332810&view=diff ============================================================================== --- jakarta/tapestry/trunk/status.xml (original) +++ jakarta/tapestry/trunk/status.xml Sat Nov 12 10:22:15 2005 @@ -65,6 +65,7 @@ <action type="fix" dev="HLS" fixes-bug="TAPESTRY-741">PopupLinkRenderer overrides wrong method of DefaultLinkRenderer</action> <action type="fix" dev="HLS" fixes-bug="TAPESTRY-652">Checkbox does not support FieldLabel</action> <action type="fix" dev="HLS" fixes-bug="TAPESTRY-328">When an engine implementation is missing Tapestry does not throw an appropriate error</action> + <action type="fix" dev="HLS" fixes-bug="TAPESTRY-720">Tapestry should validate that all engine services provide a non-null service parameter</action> </release> <release version="4.0-beta-12" date="Oct 30 2005"> <action type="fix" dev="HLS" fixes-bug="TAPESTRY-718">Asset injection makes assets appear as null inside finishLoad()</action> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
