You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2005/11/12 19:22:36 UTC

svn commit: r332810 [1/2] - in /jakarta/tapestry/trunk: ./ contrib/src/java/org/apache/tapestry/contrib/ajax/ examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ framework/src/descriptor/META-INF/ framework/src/java/org/apache/tapestry/ass...

Author: hlship
Date: Sat Nov 12 10:22:15 2005
New Revision: 332810

URL: http://svn.apache.org/viewcvs?rev=332810&view=rev
Log:
TAPESTRY-720: Tapestry should validate that all engine services provide a non-null service parameter

Added:
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ActionServiceTest.java
      - copied, changed from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestActionService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java
      - copied, changed from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestDirectService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ExternalServiceTest.java
      - copied, changed from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestExternalService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/PageServiceTest.java
      - copied, changed from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestPageService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ResetServiceTest.java
      - copied, changed from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestResetService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/RestartServiceTest.java
      - copied, changed from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestRestartService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/services/impl/LinkFactoryTest.java
      - copied, changed from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/services/impl/TestLinkFactory.java
Removed:
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestActionService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestDirectService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestExternalService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestPageService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestResetService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestRestartService.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/services/impl/TestLinkFactory.java
Modified:
    jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.java
    jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.jwc
    jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTileService.java
    jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java
    jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/asset/AssetService.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ActionService.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/DirectService.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ExternalService.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/HomeService.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/PageService.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ResetService.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/RestartService.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/LinkFactory.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ImplMessages.java
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ImplStrings.properties
    jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java
    jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ServiceTestCase.java
    jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletHomeService.java
    jakarta/tapestry/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletLinkFactoryImpl.java
    jakarta/tapestry/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletHomeService.java
    jakarta/tapestry/trunk/src/documentation/content/xdocs/index.xml
    jakarta/tapestry/trunk/status.xml

Modified: jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.java (original)
+++ jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.java Sat Nov 12 10:22:15 2005
@@ -21,9 +21,8 @@
 import org.apache.tapestry.IActionListener;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.Tapestry;
+import org.apache.tapestry.engine.IEngineService;
 import org.apache.tapestry.engine.ILink;
-import org.apache.tapestry.services.LinkFactory;
-import org.apache.tapestry.services.ServiceConstants;
 
 /**
  * @author mindbridge
@@ -32,42 +31,43 @@
  */
 public abstract class XTile extends BaseComponent implements IXTile
 {
-    public abstract LinkFactory getLinkFactory();
-    
     public abstract IActionListener getListener();
+
     public abstract String getSendName();
+
     public abstract String getReceiveName();
+
     public abstract String getErrorName();
+
     public abstract boolean getDisableCaching();
 
-	public void trigger(IRequestCycle cycle) {
+    // Injected
+
+    public abstract IEngineService getService();
+
+    public void trigger(IRequestCycle cycle)
+    {
         IActionListener listener = getListener();
 
         if (listener == null)
-        	throw Tapestry.createRequiredParameterException(this, "listener");
+            throw Tapestry.createRequiredParameterException(this, "listener");
 
         listener.actionTriggered(this, cycle);
-	}
-	
-	public Map getScriptSymbols()
-	{
-		Map ret = new HashMap();
-		ret.put("sendFunctionName", getSendName());
-		ret.put("receiveFunctionName", getReceiveName());
-		ret.put("errorFunctionName", getErrorName());
-		ret.put("disableCaching", getDisableCaching() ? "true" : null);
-
-        Map parameters = new HashMap();
-        parameters.put(ServiceConstants.SERVICE, XTileService.SERVICE_NAME);
-        parameters.put(ServiceConstants.PAGE, getPage().getPageName());
-        parameters.put(ServiceConstants.COMPONENT, getIdPath());
-		
-		ILink link = getLinkFactory().constructLink(false, 
-				parameters, false);
-
-		ret.put("url", link.getURL());
-		
-		return ret;
-	}
+    }
+
+    public Map getScriptSymbols()
+    {
+        ILink link = getService().getLink(false, this);
+
+        Map result = new HashMap();
+
+        result.put("sendFunctionName", getSendName());
+        result.put("receiveFunctionName", getReceiveName());
+        result.put("errorFunctionName", getErrorName());
+        result.put("disableCaching", getDisableCaching() ? "true" : null);
+        result.put("url", link.getURL());
+
+        return result;
+    }
 
 }

Modified: jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.jwc
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.jwc?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.jwc (original)
+++ jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTile.jwc Sat Nov 12 10:22:15 2005
@@ -69,6 +69,6 @@
         <binding name="symbols" value="scriptSymbols"/>
     </component>
 
-    <inject property="linkFactory" object="infrastructure:linkFactory"/>
+    <inject property="service" object="engine-service:xtile"/>
         
 </component-specification>

Modified: jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTileService.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTileService.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTileService.java (original)
+++ jakarta/tapestry/trunk/contrib/src/java/org/apache/tapestry/contrib/ajax/XTileService.java Sat Nov 12 10:22:15 2005
@@ -17,6 +17,8 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Map;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -27,6 +29,7 @@
 import javax.xml.transform.stream.StreamResult;
 
 import org.apache.hivemind.ApplicationRuntimeException;
+import org.apache.hivemind.util.Defense;
 import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IPage;
 import org.apache.tapestry.IRequestCycle;
@@ -34,6 +37,7 @@
 import org.apache.tapestry.engine.ILink;
 import org.apache.tapestry.error.RequestExceptionReporter;
 import org.apache.tapestry.request.RequestContext;
+import org.apache.tapestry.services.LinkFactory;
 import org.apache.tapestry.services.ServiceConstants;
 import org.apache.tapestry.util.ContentType;
 import org.apache.tapestry.web.WebResponse;
@@ -45,90 +49,108 @@
  * @author Paul Green
  * @since 4.0
  */
-public class XTileService implements IEngineService 
+public class XTileService implements IEngineService
 {
     public static final String SERVICE_NAME = "xtile";
 
     private RequestExceptionReporter _exceptionReporter;
+
     private WebResponse _response;
     
-	public String getName() 
-	{
-		return SERVICE_NAME;
-	}
-	
-	public ILink getLink(boolean post, Object parameter) {
-		throw new UnsupportedOperationException();
-	}
-	
-	public void service(IRequestCycle cycle) throws IOException {
+    private LinkFactory _linkFactory;
+
+    public String getName()
+    {
+        return SERVICE_NAME;
+    }
+
+    public ILink getLink(boolean post, Object parameter)
+    {
+        Defense.isAssignable(parameter, IComponent.class, "parameter");
+
+        IComponent component = (IComponent) parameter;
+
+        Map parameters = new HashMap();
+        parameters.put(ServiceConstants.PAGE, component.getPage().getPageName());
+        parameters.put(ServiceConstants.COMPONENT, component.getIdPath());
+
+        return _linkFactory.constructLink(this, false, parameters, false);
+    }
+
+    public void service(IRequestCycle cycle) throws IOException
+    {
         String pageName = cycle.getParameter(ServiceConstants.PAGE);
         String componentId = cycle.getParameter(ServiceConstants.COMPONENT);
-        
+
         IPage componentPage = cycle.getPage(pageName);
         IComponent component = componentPage.getNestedComponent(componentId);
-        
+
         if (!(component instanceof IXTile))
-        	throw new ApplicationRuntimeException("Incorrect component type: was " + component.getClass() + " but must be " + IXTile.class, 
-        			component, null, null);
-        
+            throw new ApplicationRuntimeException("Incorrect component type: was "
+                    + component.getClass() + " but must be " + IXTile.class, component, null, null);
+
         IXTile xtile = (IXTile) component;
-        
+
         // do not squeeze on input
-		RequestContext context = cycle.getRequestContext();
+        RequestContext context = cycle.getRequestContext();
         String[] params = context.getParameters(ServiceConstants.PARAMETER);
         cycle.setServiceParameters(params);
         xtile.trigger(cycle);
-        
+
         // do not squeeze on output either
         Object[] args = cycle.getServiceParameters();
         String strArgs = generateOutputString(args);
-        if (strArgs != null) {
-	        OutputStream output = _response.getOutputStream(new ContentType("text/xml"));
-	        output.write(strArgs.getBytes("utf-8"));
+        if (strArgs != null)
+        {
+            OutputStream output = _response.getOutputStream(new ContentType("text/xml"));
+            output.write(strArgs.getBytes("utf-8"));
         }
-	}
-	
-	protected String generateOutputString(Object[] args)
-	{
-		try {
-			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-			dbf.setValidating(false);
-			DocumentBuilder db = dbf.newDocumentBuilder();
-			Document doc = db.newDocument();
-
-			Node rootNode = doc.createElement("data");
-			doc.appendChild(rootNode);
-			
-			if (args != null) {
-				for (int i = 0; i < args.length; i++) {
-					Object value = args[i];
-					
-					Node spNode = doc.createElement("sp");
-					rootNode.appendChild(spNode);
-					
-					Node valueNode = doc.createTextNode(value.toString());
-					spNode.appendChild(valueNode);
-				}
-			}
-			
-			TransformerFactory trf = TransformerFactory.newInstance();
-			Transformer tr = trf.newTransformer();
-			tr.setOutputProperty(OutputKeys.INDENT, "yes");
-
-			DOMSource domSrc = new DOMSource(doc);
-			StringWriter writer = new StringWriter();
-			StreamResult res = new StreamResult(writer);
-			tr.transform(domSrc, res);
-			writer.close();
-			
-			return writer.toString();
-		} 
-		catch (Exception e) {
-			_exceptionReporter.reportRequestException("Cannot generate XML", e);
-			return null;
-		}
-	}
+    }
+
+    protected String generateOutputString(Object[] args)
+    {
+        try
+        {
+            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+            dbf.setValidating(false);
+            DocumentBuilder db = dbf.newDocumentBuilder();
+            Document doc = db.newDocument();
+
+            Node rootNode = doc.createElement("data");
+            doc.appendChild(rootNode);
+
+            if (args != null)
+            {
+                for (int i = 0; i < args.length; i++)
+                {
+                    Object value = args[i];
+
+                    Node spNode = doc.createElement("sp");
+                    rootNode.appendChild(spNode);
+
+                    Node valueNode = doc.createTextNode(value.toString());
+                    spNode.appendChild(valueNode);
+                }
+            }
+
+            TransformerFactory trf = TransformerFactory.newInstance();
+            Transformer tr = trf.newTransformer();
+            tr.setOutputProperty(OutputKeys.INDENT, "yes");
+
+            DOMSource domSrc = new DOMSource(doc);
+            StringWriter writer = new StringWriter();
+            StreamResult res = new StreamResult(writer);
+            tr.transform(domSrc, res);
+            writer.close();
+
+            return writer.toString();
+        }
+        catch (Exception e)
+        {
+            _exceptionReporter.reportRequestException("Cannot generate XML", e);
+            return null;
+        }
+    }
 
     public void setExceptionReporter(RequestExceptionReporter exceptionReporter)
     {
@@ -139,11 +161,17 @@
     {
         _response = response;
     }
-    
-	public static void main(String[] args) {
-		XTileService objService = new XTileService();
-		System.out.println(objService.generateOutputString(new Object[] { "test > work", new Integer(20) }));
-	}
 
+    public static void main(String[] args)
+    {
+        XTileService objService = new XTileService();
+        System.out.println(objService.generateOutputString(new Object[]
+        { "test > work", new Integer(20) }));
+    }
+
+    public void setLinkFactory(LinkFactory linkFactory)
+    {
+        _linkFactory = linkFactory;
+    }
 
 }

Modified: jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java (original)
+++ jakarta/tapestry/trunk/examples/Workbench/src/java/org/apache/tapestry/workbench/chart/ChartService.java Sat Nov 12 10:22:15 2005
@@ -67,7 +67,7 @@
         parameters.put(ServiceConstants.PAGE, component.getPage().getPageName());
         parameters.put(ServiceConstants.COMPONENT, component.getIdPath());
 
-        return _linkFactory.constructLink(false, parameters, true);
+        return _linkFactory.constructLink(this, false, parameters, true);
     }
 
     public void service(IRequestCycle cycle) throws IOException

Modified: jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml (original)
+++ jakarta/tapestry/trunk/framework/src/descriptor/META-INF/tapestry.services.xml Sat Nov 12 10:22:15 2005
@@ -84,7 +84,6 @@
   <service-point id="Restart" interface="IEngineService">
     <invoke-factory>
       <construct class="RestartService">
-        <set-service property="builder" service-id="tapestry.request.AbsoluteURLBuilder"/>
         <set-service property="request" service-id="tapestry.globals.HttpServletRequest"/>
         <set-service property="response" service-id="tapestry.globals.HttpServletResponse"/>
         <set-object property="servletPath" value="app-property:org.apache.tapestry.servlet-path"/>

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/asset/AssetService.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/asset/AssetService.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/asset/AssetService.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/asset/AssetService.java Sat Nov 12 10:22:15 2005
@@ -156,7 +156,7 @@
 
         // Service is stateless, which is the exception to the rule.
 
-        return _linkFactory.constructLink(post, parameters, false);
+        return _linkFactory.constructLink(this, post, parameters, false);
     }
 
     public String getName()

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ActionService.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ActionService.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ActionService.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ActionService.java Sat Nov 12 10:22:15 2005
@@ -73,7 +73,6 @@
 
         boolean stateful = _request.getSession(false) != null;
 
-        parameters.put(ServiceConstants.SERVICE, getName());
         parameters.put(ServiceConstants.COMPONENT, component.getIdPath());
         parameters.put(ServiceConstants.PAGE, activePage.getPageName());
         parameters.put(ServiceConstants.CONTAINER, activePage == componentPage ? null
@@ -81,7 +80,7 @@
         parameters.put(ACTION, asp.getActionId());
         parameters.put(ServiceConstants.SESSION, stateful ? "T" : null);
 
-        return _linkFactory.constructLink(post, parameters, true);
+        return _linkFactory.constructLink(this, post, parameters, true);
     }
 
     public void service(IRequestCycle cycle) throws IOException

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/DirectService.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/DirectService.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/DirectService.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/DirectService.java Sat Nov 12 10:22:15 2005
@@ -77,7 +77,6 @@
 
         boolean stateful = _request.getSession(false) != null;
 
-        parameters.put(ServiceConstants.SERVICE, getName());
         parameters.put(ServiceConstants.PAGE, activePage.getPageName());
         parameters.put(ServiceConstants.COMPONENT, component.getIdPath());
         parameters.put(ServiceConstants.CONTAINER, componentPage == activePage ? null
@@ -85,7 +84,7 @@
         parameters.put(ServiceConstants.SESSION, stateful ? "T" : null);
         parameters.put(ServiceConstants.PARAMETER, dsp.getServiceParameters());
 
-        return _linkFactory.constructLink(post, parameters, true);
+        return _linkFactory.constructLink(this, post, parameters, true);
     }
 
     public void service(IRequestCycle cycle) throws IOException

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ExternalService.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ExternalService.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ExternalService.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ExternalService.java Sat Nov 12 10:22:15 2005
@@ -126,11 +126,11 @@
         ExternalServiceParameter esp = (ExternalServiceParameter) parameter;
 
         Map parameters = new HashMap();
-        parameters.put(ServiceConstants.SERVICE, getName());
+
         parameters.put(ServiceConstants.PAGE, esp.getPageName());
         parameters.put(ServiceConstants.PARAMETER, esp.getServiceParameters());
 
-        return _linkFactory.constructLink(post, parameters, true);
+        return _linkFactory.constructLink(this, post, parameters, true);
     }
 
     public void service(IRequestCycle cycle) throws IOException

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/HomeService.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/HomeService.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/HomeService.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/HomeService.java Sat Nov 12 10:22:15 2005
@@ -55,7 +55,7 @@
 
         parameters.put(ServiceConstants.SERVICE, getName());
 
-        return _linkFactory.constructLink(post, parameters, true);
+        return _linkFactory.constructLink(this, post, parameters, true);
     }
 
     public void service(IRequestCycle cycle) throws IOException

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/PageService.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/PageService.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/PageService.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/PageService.java Sat Nov 12 10:22:15 2005
@@ -46,10 +46,9 @@
 
         Map parameters = new HashMap();
 
-        parameters.put(ServiceConstants.SERVICE, getName());
         parameters.put(ServiceConstants.PAGE, parameter);
 
-        return _linkFactory.constructLink(post, parameters, true);
+        return _linkFactory.constructLink(this, post, parameters, true);
 
     }
 

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ResetService.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ResetService.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ResetService.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/ResetService.java Sat Nov 12 10:22:15 2005
@@ -62,10 +62,9 @@
 
         Map parameters = new HashMap();
 
-        parameters.put(ServiceConstants.SERVICE, getName());
         parameters.put(ServiceConstants.PAGE, _requestCycle.getPage().getPageName());
 
-        return _linkFactory.constructLink(post, parameters, true);
+        return _linkFactory.constructLink(this, post, parameters, true);
     }
 
     public String getName()

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/RestartService.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/RestartService.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/RestartService.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/engine/RestartService.java Sat Nov 12 10:22:15 2005
@@ -50,9 +50,6 @@
     private HttpServletResponse _response;
 
     /** @since 4.0 */
-    private AbsoluteURLBuilder _builder;
-
-    /** @since 4.0 */
     private LinkFactory _linkFactory;
 
     /** @since 4.0 */
@@ -65,9 +62,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 service(IRequestCycle cycle) throws IOException
@@ -88,7 +83,7 @@
             }
         }
 
-        String url = _builder.constructURL(cycle.getAbsoluteURL(_servletPath));
+        String url = cycle.getAbsoluteURL(_servletPath);
 
         _response.sendRedirect(url);
     }
@@ -108,12 +103,6 @@
     public void setRequest(HttpServletRequest request)
     {
         _request = request;
-    }
-
-    /** @since 4.0 */
-    public void setBuilder(AbsoluteURLBuilder builder)
-    {
-        _builder = builder;
     }
 
     /** @since 4.0 */

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/LinkFactory.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/LinkFactory.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/LinkFactory.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/LinkFactory.java Sat Nov 12 10:22:15 2005
@@ -17,6 +17,7 @@
 import java.util.Map;
 
 import org.apache.tapestry.IRequestCycle;
+import org.apache.tapestry.engine.IEngineService;
 import org.apache.tapestry.engine.ILink;
 import org.apache.tapestry.engine.ServiceEncoder;
 
@@ -32,6 +33,8 @@
     /**
      * Constructs an {@link org.apache.tapestry.engine.ILink}.
      * 
+     * @param service
+     *            the service for which the link is being generated
      * @param post
      *            if true, then the link will be used for a post (not a get, i.e., for a HTML form);
      *            this may affect what information is encoded into the link
@@ -45,7 +48,8 @@
      *            If false, the session encoding should not occur. The latter case is useful for
      *            services that will absolutely not need any access to user-specific state.
      */
-    public ILink constructLink(boolean post, Map parameters, boolean stateful);
+    public ILink constructLink(IEngineService service, boolean post, Map parameters,
+            boolean stateful);
 
     /**
      * A secondary function of the service is to convert encoded (aka "squeezed") listener

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ImplMessages.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ImplMessages.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ImplMessages.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ImplMessages.java Sat Nov 12 10:22:15 2005
@@ -274,4 +274,9 @@
     {
         return _formatter.format("engine-class-not-found", engineClassName);
     }
+
+    static String serviceNameIsNull()
+    {
+        return _formatter.getMessage("service-name-is-null");
+    }
 }

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ImplStrings.properties
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ImplStrings.properties?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ImplStrings.properties (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/ImplStrings.properties Sat Nov 12 10:22:15 2005
@@ -60,4 +60,5 @@
 duplicate-infrastructure-contribution=Infrastructure contribution for property ''{0}'' (mode ''{1}'') conflicts with a prior contribution (at {2}) and has been ignored.
 missing-infrastructure-property=Infrastructure property ''{0}'' is not defined.
 used-template-parameter-alias=Parameter {2} (for component {1}, at {0}) was bound; this parameter has been deprecated, bind parameter {3} instead.
-engine-class-not-found=Engine class ''{0}'' not found.
\ No newline at end of file
+engine-class-not-found=Engine class ''{0}'' not found.
+service-name-is-null=The service name is null.  Engine services must implement method getServiceName() and return a non-null value.
\ No newline at end of file

Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java?rev=332810&r1=332809&r2=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java (original)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/services/impl/LinkFactoryImpl.java Sat Nov 12 10:22:15 2005
@@ -27,6 +27,7 @@
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.Tapestry;
 import org.apache.tapestry.engine.EngineServiceLink;
+import org.apache.tapestry.engine.IEngineService;
 import org.apache.tapestry.engine.ILink;
 import org.apache.tapestry.engine.ServiceEncoder;
 import org.apache.tapestry.engine.ServiceEncoding;
@@ -96,9 +97,18 @@
 
     }
 
-    public ILink constructLink(boolean post, Map parameters, boolean stateful)
+    public ILink constructLink(IEngineService service, boolean post, Map parameters,
+            boolean stateful)
     {
+        Defense.notNull(service, "service");
         Defense.notNull(parameters, "parameters");
+
+        String serviceName = service.getName();
+
+        if (serviceName == null)
+            throw new ApplicationRuntimeException(ImplMessages.serviceNameIsNull());
+
+        parameters.put(ServiceConstants.SERVICE, serviceName);
 
         squeezeServiceParameters(parameters);
 

Copied: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ActionServiceTest.java (from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestActionService.java)
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ActionServiceTest.java?p2=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ActionServiceTest.java&p1=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestActionService.java&r1=332478&r2=332810&rev=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestActionService.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ActionServiceTest.java Sat Nov 12 10:22:15 2005
@@ -24,13 +24,11 @@
 import org.apache.tapestry.IPage;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.StaleSessionException;
-import org.apache.tapestry.Tapestry;
 import org.apache.tapestry.services.LinkFactory;
 import org.apache.tapestry.services.ResponseRenderer;
 import org.apache.tapestry.services.ServiceConstants;
 import org.apache.tapestry.web.WebRequest;
 import org.apache.tapestry.web.WebSession;
-import org.easymock.MockControl;
 
 /**
  * Tests for {@link org.apache.tapestry.engine.ActionService}.
@@ -38,33 +36,23 @@
  * @author Howard M. Lewis Ship
  * @since 4.0
  */
-public class TestActionService extends ServiceTestCase
+public class ActionServiceTest extends ServiceTestCase
 {
-
     public void testGetLinkSimple()
     {
-        MockControl componentc = newControl(IComponent.class);
-        IComponent component = (IComponent) componentc.getMock();
-
+        IComponent component = newComponent();
         IPage page = newPage("ActivePage");
-
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
+        IRequestCycle cycle = newCycle();
         WebRequest request = newWebRequest(false, null);
+        LinkFactory lf = newLinkFactory();
+        ILink link = newLink();
 
-        cycle.getPage();
-        cyclec.setReturnValue(page);
-
-        component.getPage();
-        componentc.setReturnValue(page);
+        trainGetPage(cycle, page);
+        trainGetPage(component, page);
 
         Map parameters = new HashMap();
 
-        parameters.put(ServiceConstants.SERVICE, Tapestry.ACTION_SERVICE);
-
-        component.getIdPath();
-        componentc.setReturnValue("fred.barney");
+        trainGetIdPath(component, "fred.barney");
 
         parameters.put(ServiceConstants.COMPONENT, "fred.barney");
         parameters.put(ServiceConstants.PAGE, "ActivePage");
@@ -72,21 +60,15 @@
         parameters.put("action", "action-id");
         parameters.put(ServiceConstants.SESSION, null);
 
-        ILink link = newLink();
-
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
-
-        lf.constructLink(false, parameters, true);
-        lfc.setReturnValue(link);
-
-        replayControls();
-
         ActionService as = new ActionService();
         as.setLinkFactory(lf);
         as.setRequest(request);
         as.setRequestCycle(cycle);
 
+        trainConstructLink(lf, as, false, parameters, true, link);
+
+        replayControls();
+
         ActionServiceParameter p = new ActionServiceParameter(component, "action-id");
 
         assertSame(link, as.getLink(false, p));
@@ -96,28 +78,19 @@
 
     public void testGetLinkSimplePost()
     {
-        MockControl componentc = newControl(IComponent.class);
-        IComponent component = (IComponent) componentc.getMock();
-
+        IComponent component = newComponent();
         IPage page = newPage("ActivePage");
-
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
+        IRequestCycle cycle = newCycle();
         WebRequest request = newWebRequest(false, null);
+        LinkFactory lf = newLinkFactory();
+        ILink link = newLink();
 
-        cycle.getPage();
-        cyclec.setReturnValue(page);
-
-        component.getPage();
-        componentc.setReturnValue(page);
+        trainGetPage(cycle, page);
+        trainGetPage(component, page);
 
         Map parameters = new HashMap();
 
-        parameters.put(ServiceConstants.SERVICE, Tapestry.ACTION_SERVICE);
-
-        component.getIdPath();
-        componentc.setReturnValue("fred.barney");
+        trainGetIdPath(component, "fred.barney");
 
         parameters.put(ServiceConstants.COMPONENT, "fred.barney");
         parameters.put(ServiceConstants.PAGE, "ActivePage");
@@ -125,21 +98,15 @@
         parameters.put("action", "action-id");
         parameters.put(ServiceConstants.SESSION, null);
 
-        ILink link = newLink();
-
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
-
-        lf.constructLink(true, parameters, true);
-        lfc.setReturnValue(link);
-
-        replayControls();
-
         ActionService as = new ActionService();
         as.setLinkFactory(lf);
         as.setRequest(request);
         as.setRequestCycle(cycle);
 
+        trainConstructLink(lf, as, true, parameters, true, link);
+
+        replayControls();
+
         ActionServiceParameter p = new ActionServiceParameter(component, "action-id");
 
         assertSame(link, as.getLink(true, p));
@@ -149,28 +116,20 @@
 
     public void testGetLinkComplex()
     {
-        MockControl componentc = newControl(IComponent.class);
-        IComponent component = (IComponent) componentc.getMock();
+        IComponent component = newComponent();
         WebRequest request = newWebRequest(false, newWebSession());
-
         IPage activePage = newPage("ActivePage");
         IPage componentPage = newPage("ComponentPage");
+        IRequestCycle cycle = newCycle();
+        LinkFactory lf = newLinkFactory();
+        ILink link = newLink();
 
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getPage();
-        cyclec.setReturnValue(activePage);
-
-        component.getPage();
-        componentc.setReturnValue(componentPage);
+        trainGetPage(cycle, activePage);
+        trainGetPage(component, componentPage);
 
         Map parameters = new HashMap();
 
-        parameters.put(ServiceConstants.SERVICE, Tapestry.ACTION_SERVICE);
-
-        component.getIdPath();
-        componentc.setReturnValue("fred.barney");
+        trainGetIdPath(component, "fred.barney");
 
         parameters.put(ServiceConstants.COMPONENT, "fred.barney");
         parameters.put(ServiceConstants.PAGE, "ActivePage");
@@ -178,21 +137,15 @@
         parameters.put("action", "action-id");
         parameters.put(ServiceConstants.SESSION, "T");
 
-        ILink link = newLink();
-
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
-
-        lf.constructLink(false, parameters, true);
-        lfc.setReturnValue(link);
-
-        replayControls();
-
         ActionService as = new ActionService();
         as.setLinkFactory(lf);
         as.setRequest(request);
         as.setRequestCycle(cycle);
 
+        trainConstructLink(lf, as, false, parameters, true, link);
+
+        replayControls();
+
         ActionServiceParameter p = new ActionServiceParameter(component, "action-id");
 
         assertSame(link, as.getLink(false, p));
@@ -202,41 +155,25 @@
 
     public void testServiceSimple() throws Exception
     {
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getParameter(ServiceConstants.COMPONENT);
-        cyclec.setReturnValue("fred.barney");
-
-        cycle.getParameter(ServiceConstants.CONTAINER);
-        cyclec.setReturnValue(null);
-
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
-
-        cycle.getParameter("action");
-        cyclec.setReturnValue("action-id");
-
-        cycle.getParameter(ServiceConstants.SESSION);
-        cyclec.setReturnValue(null);
+        IRequestCycle cycle = newCycle();
+        IPage page = newPage();
+        IAction action = newAction();
+        ResponseRenderer rr = newResponseRenderer();
 
-        MockControl pagec = newControl(IPage.class);
-        IPage page = (IPage) pagec.getMock();
+        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
+        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
+        trainGetParameter(cycle, "action", "action-id");
+        trainGetParameter(cycle, ServiceConstants.SESSION, null);
 
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(page);
+        trainGetPage(cycle, "ActivePage", page);
 
         cycle.activate(page);
 
-        IAction action = (IAction) newMock(IAction.class);
-
-        page.getNestedComponent("fred.barney");
-        pagec.setReturnValue(action);
+        trainGetNestedComponent(page, "fred.barney", action);
 
         cycle.rewindPage("action-id", action);
 
-        ResponseRenderer rr = newResponseRenderer();
-
         rr.renderResponse(cycle);
 
         replayControls();
@@ -249,50 +186,36 @@
         verifyControls();
     }
 
-    public void testSeviceActiveSession() throws Exception
+    private IAction newAction()
     {
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getParameter(ServiceConstants.COMPONENT);
-        cyclec.setReturnValue("fred.barney");
-
-        cycle.getParameter(ServiceConstants.CONTAINER);
-        cyclec.setReturnValue(null);
-
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
-
-        cycle.getParameter("action");
-        cyclec.setReturnValue("action-id");
+        return (IAction) newMock(IAction.class);
+    }
 
-        cycle.getParameter(ServiceConstants.SESSION);
-        cyclec.setReturnValue("T");
+    public void testSeviceActiveSession() throws Exception
+    {
+        IRequestCycle cycle = newCycle();
+        IPage page = newPage();
+        IAction action = newAction();
+        WebSession session = newWebSession(false);
+        WebRequest request = newWebRequest(session);
+        ResponseRenderer rr = newResponseRenderer();
 
-        MockControl pagec = newControl(IPage.class);
-        IPage page = (IPage) pagec.getMock();
+        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
+        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
+        trainGetParameter(cycle, "action", "action-id");
+        trainGetParameter(cycle, ServiceConstants.SESSION, "T");
 
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(page);
+        trainGetPage(cycle, "ActivePage", page);
 
         cycle.activate(page);
 
-        MockControl actionc = newControl(IAction.class);
-        IAction action = (IAction) actionc.getMock();
-
-        page.getNestedComponent("fred.barney");
-        pagec.setReturnValue(action);
+        trainGetNestedComponent(page, "fred.barney", action);
 
-        action.getRequiresSession();
-        actionc.setReturnValue(true);
-
-        WebSession session = newWebSession(false);
-        WebRequest request = newWebRequest(session);
+        trainGetRequiresSession(action, true);
 
         cycle.rewindPage("action-id", action);
 
-        ResponseRenderer rr = newResponseRenderer();
-
         rr.renderResponse(cycle);
 
         replayControls();
@@ -308,45 +231,26 @@
 
     public void testServiceNotAction() throws Exception
     {
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getParameter(ServiceConstants.COMPONENT);
-        cyclec.setReturnValue("fred.barney");
+        IRequestCycle cycle = newCycle();
+        IPage page = newPage();
+        IComponent component = newComponent();
+        Location l = newLocation();
+
+        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
+        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
+        trainGetParameter(cycle, "action", "action-id");
+        trainGetParameter(cycle, ServiceConstants.SESSION, "T");
 
-        cycle.getParameter(ServiceConstants.CONTAINER);
-        cyclec.setReturnValue(null);
-
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
-
-        cycle.getParameter("action");
-        cyclec.setReturnValue("action-id");
-
-        cycle.getParameter(ServiceConstants.SESSION);
-        cyclec.setReturnValue("T");
-
-        MockControl pagec = newControl(IPage.class);
-        IPage page = (IPage) pagec.getMock();
-
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(page);
+        trainGetPage(cycle, "ActivePage", page);
 
         cycle.activate(page);
 
-        MockControl componentc = newControl(IComponent.class);
-        IComponent component = (IComponent) componentc.getMock();
-
-        page.getNestedComponent("fred.barney");
-        pagec.setReturnValue(component);
+        trainGetNestedComponent(page, "fred.barney", component);
 
-        component.getExtendedId();
-        componentc.setReturnValue("ActivePage/fred.barney");
+        trainGetExtendedId(component, "ActivePage/fred.barney");
 
-        Location l = fabricateLocation(17);
-
-        component.getLocation();
-        componentc.setReturnValue(l);
+        trainGetLocation(component, l);
 
         replayControls();
 
@@ -371,53 +275,31 @@
 
     public void testServiceStaleSession() throws Exception
     {
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getParameter(ServiceConstants.COMPONENT);
-        cyclec.setReturnValue("fred.barney");
-
-        cycle.getParameter(ServiceConstants.CONTAINER);
-        cyclec.setReturnValue(null);
-
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
-
-        cycle.getParameter("action");
-        cyclec.setReturnValue("action-id");
-
-        cycle.getParameter(ServiceConstants.SESSION);
-        cyclec.setReturnValue("T");
+        IRequestCycle cycle = newCycle();
+        IPage page = newPage();
+        IAction action = newAction();
+        WebRequest request = newWebRequest(null);
+        Location l = newLocation();
 
-        MockControl pagec = newControl(IPage.class);
-        IPage page = (IPage) pagec.getMock();
+        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
+        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
+        trainGetParameter(cycle, "action", "action-id");
+        trainGetParameter(cycle, ServiceConstants.SESSION, "T");
 
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(page);
+        trainGetPage(cycle, "ActivePage", page);
 
         cycle.activate(page);
 
-        MockControl actionc = newControl(IAction.class);
-        IAction action = (IAction) actionc.getMock();
+        trainGetNestedComponent(page, "fred.barney", action);
 
-        page.getNestedComponent("fred.barney");
-        pagec.setReturnValue(action);
+        trainGetRequiresSession(action, true);
 
-        action.getRequiresSession();
-        actionc.setReturnValue(true);
-
-        WebRequest request = newWebRequest(null);
+        trainGetExtendedId(action, "ActivePage/fred.barney");
 
-        action.getExtendedId();
-        actionc.setReturnValue("ActivePage/fred.barney");
+        trainGetLocation(page, l);
 
-        Location l = fabricateLocation(2);
-
-        page.getLocation();
-        pagec.setReturnValue(l);
-
-        page.getPageName();
-        pagec.setReturnValue("ActivePage");
+        trainGetPageName(page, "ActivePage");
 
         replayControls();
 
@@ -444,47 +326,28 @@
 
     public void testServiceComplex() throws Exception
     {
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getParameter(ServiceConstants.COMPONENT);
-        cyclec.setReturnValue("fred.barney");
-
-        cycle.getParameter(ServiceConstants.CONTAINER);
-        cyclec.setReturnValue("ComponentPage");
-
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
-
-        cycle.getParameter("action");
-        cyclec.setReturnValue("action-id");
-
-        cycle.getParameter(ServiceConstants.SESSION);
-        cyclec.setReturnValue(null);
+        IRequestCycle cycle = newCycle();
+        IPage activePage = newPage();
+        IPage componentPage = newPage();
+        IAction action = newAction();
+        ResponseRenderer rr = newResponseRenderer();
 
-        MockControl activePagec = newControl(IPage.class);
-        IPage activePage = (IPage) activePagec.getMock();
+        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
+        trainGetParameter(cycle, ServiceConstants.CONTAINER, "ComponentPage");
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
+        trainGetParameter(cycle, "action", "action-id");
+        trainGetParameter(cycle, ServiceConstants.SESSION, null);
 
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(activePage);
+        trainGetPage(cycle, "ActivePage", activePage);
 
         cycle.activate(activePage);
 
-        MockControl componentPagec = newControl(IPage.class);
-        IPage componentPage = (IPage) componentPagec.getMock();
-
-        cycle.getPage("ComponentPage");
-        cyclec.setReturnValue(componentPage);
-
-        IAction action = (IAction) newMock(IAction.class);
+        trainGetPage(cycle, "ComponentPage", componentPage);
 
-        componentPage.getNestedComponent("fred.barney");
-        componentPagec.setReturnValue(action);
+        trainGetNestedComponent(componentPage, "fred.barney", action);
 
         cycle.rewindPage("action-id", action);
 
-        ResponseRenderer rr = newResponseRenderer();
-
         rr.renderResponse(cycle);
 
         replayControls();
@@ -495,5 +358,11 @@
         as.service(cycle);
 
         verifyControls();
+    }
+
+    protected void trainGetRequiresSession(IAction action, boolean requiresSession)
+    {
+        action.getRequiresSession();
+        setReturnValue(action, requiresSession);
     }
 }

Copied: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java (from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestDirectService.java)
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java?p2=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java&p1=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestDirectService.java&r1=332478&r2=332810&rev=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestDirectService.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/DirectServiceTest.java Sat Nov 12 10:22:15 2005
@@ -24,7 +24,6 @@
 import org.apache.tapestry.IPage;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.StaleSessionException;
-import org.apache.tapestry.Tapestry;
 import org.apache.tapestry.services.LinkFactory;
 import org.apache.tapestry.services.ResponseRenderer;
 import org.apache.tapestry.services.ServiceConstants;
@@ -38,56 +37,46 @@
  * @author Howard M. Lewis Ship
  * @since 4.0
  */
-public class TestDirectService extends ServiceTestCase
+public class DirectServiceTest extends ServiceTestCase
 {
+    protected IDirect newDirect()
+    {
+        return (IDirect) newMock(IDirect.class);
+    }
+
     public void testGetLinkOnSamePage()
     {
         IPage page = newPage("ThePage");
-
-        MockControl cc = newControl(IDirect.class);
-        IDirect c = (IDirect) cc.getMock();
-
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
+        IDirect c = newDirect();
+        IRequestCycle cycle = newCycle();
         WebRequest request = newWebRequest(false, null);
+        LinkFactory lf = newLinkFactory();
+        ILink link = newLink();
 
-        cycle.getPage();
-        cyclec.setReturnValue(page);
-
-        c.getPage();
-        cc.setReturnValue(page);
-
-        c.getIdPath();
-        cc.setReturnValue("fred.barney");
+        trainGetPage(cycle, page);
+        trainGetPage(c, page);
+        trainGetIdPath(c, "fred.barney");
 
         Object[] serviceParameters = new Object[0];
 
         Map parameters = new HashMap();
 
-        parameters.put(ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
         parameters.put(ServiceConstants.PAGE, "ThePage");
         parameters.put(ServiceConstants.COMPONENT, "fred.barney");
         parameters.put(ServiceConstants.CONTAINER, null);
         parameters.put(ServiceConstants.SESSION, null);
         parameters.put(ServiceConstants.PARAMETER, serviceParameters);
 
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
-
-        ILink link = newLink();
-
-        lf.constructLink(false, parameters, true);
-        lfc.setReturnValue(link);
-
-        replayControls();
-
         DirectService ds = new DirectService();
 
         ds.setLinkFactory(lf);
         ds.setRequest(request);
         ds.setRequestCycle(cycle);
 
+        trainConstructLink(lf, ds, false, parameters, true, link);
+
+        replayControls();
+
         assertSame(link, ds.getLink(false, new DirectServiceParameter(c, serviceParameters)));
 
         verifyControls();
@@ -96,51 +85,36 @@
     public void testGetLinkOnSamePageForPost()
     {
         IPage page = newPage("ThePage");
-
-        MockControl cc = newControl(IDirect.class);
-        IDirect c = (IDirect) cc.getMock();
-
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
+        IDirect c = newDirect();
+        IRequestCycle cycle = newCycle();
         WebRequest request = newWebRequest(false, null);
+        LinkFactory lf = newLinkFactory();
+        ILink link = newLink();
 
-        cycle.getPage();
-        cyclec.setReturnValue(page);
-
-        c.getPage();
-        cc.setReturnValue(page);
-
-        c.getIdPath();
-        cc.setReturnValue("fred.barney");
+        trainGetPage(cycle, page);
+        trainGetPage(c, page);
+        trainGetIdPath(c, "fred.barney");
 
         Object[] serviceParameters = new Object[0];
 
         Map parameters = new HashMap();
 
-        parameters.put(ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
         parameters.put(ServiceConstants.PAGE, "ThePage");
         parameters.put(ServiceConstants.COMPONENT, "fred.barney");
         parameters.put(ServiceConstants.CONTAINER, null);
         parameters.put(ServiceConstants.SESSION, null);
         parameters.put(ServiceConstants.PARAMETER, serviceParameters);
 
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
-
-        ILink link = newLink();
-
-        lf.constructLink(true, parameters, true);
-        lfc.setReturnValue(link);
-
-        replayControls();
-
         DirectService ds = new DirectService();
 
         ds.setLinkFactory(lf);
         ds.setRequest(request);
         ds.setRequestCycle(cycle);
 
+        trainConstructLink(lf, ds, true, parameters, true, link);
+
+        replayControls();
+
         assertSame(link, ds.getLink(true, new DirectServiceParameter(c, serviceParameters)));
 
         verifyControls();
@@ -149,49 +123,36 @@
     public void testGetLinkOnSamePageStateful()
     {
         IPage page = newPage("ThePage");
-        WebRequest request = newWebRequest(false, newWebSession());
-
-        MockControl cc = newControl(IDirect.class);
-        IDirect c = (IDirect) cc.getMock();
-
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getPage();
-        cyclec.setReturnValue(page);
-
-        c.getPage();
-        cc.setReturnValue(page);
+        IDirect c = newDirect();
+        IRequestCycle cycle = newCycle();
+        WebSession session = newWebSession();
+        WebRequest request = newWebRequest(false, session);
+        LinkFactory lf = newLinkFactory();
+        ILink link = newLink();
 
-        c.getIdPath();
-        cc.setReturnValue("fred.barney");
+        trainGetPage(cycle, page);
+        trainGetPage(c, page);
+        trainGetIdPath(c, "fred.barney");
 
         Object[] serviceParameters = new Object[0];
 
         Map parameters = new HashMap();
 
-        parameters.put(ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
         parameters.put(ServiceConstants.PAGE, "ThePage");
         parameters.put(ServiceConstants.COMPONENT, "fred.barney");
         parameters.put(ServiceConstants.CONTAINER, null);
         parameters.put(ServiceConstants.SESSION, "T");
         parameters.put(ServiceConstants.PARAMETER, serviceParameters);
 
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
-
-        ILink link = newLink();
-
-        lf.constructLink(false, parameters, true);
-        lfc.setReturnValue(link);
-
-        replayControls();
-
         DirectService ds = new DirectService();
         ds.setLinkFactory(lf);
         ds.setRequest(request);
         ds.setRequestCycle(cycle);
 
+        trainConstructLink(lf, ds, false, parameters, true, link);
+
+        replayControls();
+
         assertSame(link, ds.getLink(false, new DirectServiceParameter(c, serviceParameters)));
 
         verifyControls();
@@ -201,48 +162,35 @@
     {
         IPage page = newPage("ActivePage");
         IPage componentPage = newPage("ComponentPage");
+        IDirect c = newDirect();
+        IRequestCycle cycle = newCycle();
         WebRequest request = newWebRequest(false, null);
-        MockControl cc = newControl(IDirect.class);
-        IDirect c = (IDirect) cc.getMock();
-
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getPage();
-        cyclec.setReturnValue(page);
-
-        c.getPage();
-        cc.setReturnValue(componentPage);
+        LinkFactory lf = newLinkFactory();
+        ILink link = newLink();
 
-        c.getIdPath();
-        cc.setReturnValue("fred.barney");
+        trainGetPage(cycle, page);
+        trainGetPage(c, componentPage);
+        trainGetIdPath(c, "fred.barney");
 
         Object[] serviceParameters = new Object[0];
 
         Map parameters = new HashMap();
 
-        parameters.put(ServiceConstants.SERVICE, Tapestry.DIRECT_SERVICE);
         parameters.put(ServiceConstants.PAGE, "ActivePage");
         parameters.put(ServiceConstants.COMPONENT, "fred.barney");
         parameters.put(ServiceConstants.CONTAINER, "ComponentPage");
         parameters.put(ServiceConstants.SESSION, null);
         parameters.put(ServiceConstants.PARAMETER, serviceParameters);
 
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
-
-        ILink link = newLink();
-
-        lf.constructLink(false, parameters, true);
-        lfc.setReturnValue(link);
-
-        replayControls();
-
         DirectService ds = new DirectService();
         ds.setLinkFactory(lf);
         ds.setRequest(request);
         ds.setRequestCycle(cycle);
 
+        trainConstructLink(lf, ds, false, parameters, true, link);
+
+        replayControls();
+
         assertSame(link, ds.getLink(false, new DirectServiceParameter(c, serviceParameters)));
 
         verifyControls();
@@ -251,48 +199,28 @@
     public void testServiceSimple() throws Exception
     {
         Object[] parameters = new Object[0];
+        IRequestCycle cycle = newCycle();
+        IPage page = newPage();
+        IDirect d = newDirect();
+        LinkFactory lf = newLinkFactory();
+        ResponseRenderer rr = newResponseRenderer();
 
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getParameter(ServiceConstants.COMPONENT);
-        cyclec.setReturnValue("fred.barney");
-
-        cycle.getParameter(ServiceConstants.CONTAINER);
-        cyclec.setReturnValue(null);
-
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
-
-        cycle.getParameter(ServiceConstants.SESSION);
-        cyclec.setReturnValue(null);
-
-        MockControl pagec = newControl(IPage.class);
-        IPage page = (IPage) pagec.getMock();
-
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(page);
+        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
+        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
+        trainGetParameter(cycle, ServiceConstants.SESSION, null);
 
+        trainGetPage(cycle, "ActivePage", page);
         cycle.activate(page);
 
-        MockControl dc = newControl(IDirect.class);
-        IDirect d = (IDirect) dc.getMock();
-
-        page.getNestedComponent("fred.barney");
-        pagec.setReturnValue(d);
+        trainGetNestedComponent(page, "fred.barney", d);
 
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
-
-        lf.extractListenerParameters(cycle);
-        lfc.setReturnValue(parameters);
+        trainExtractListenerParameters(lf, cycle, parameters);
 
         cycle.setListenerParameters(parameters);
 
         d.trigger(cycle);
 
-        ResponseRenderer rr = newResponseRenderer();
-
         rr.renderResponse(cycle);
 
         replayControls();
@@ -313,54 +241,32 @@
     public void testServiceComplex() throws Exception
     {
         Object[] parameters = new Object[0];
+        IRequestCycle cycle = newCycle();
+        IPage page = newPage();
+        IPage componentPage = newPage();
+        IDirect d = newDirect();
+        LinkFactory lf = newLinkFactory();
+        ResponseRenderer rr = newResponseRenderer();
 
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getParameter(ServiceConstants.COMPONENT);
-        cyclec.setReturnValue("fred.barney");
-
-        cycle.getParameter(ServiceConstants.CONTAINER);
-        cyclec.setReturnValue("ComponentPage");
-
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
-
-        cycle.getParameter(ServiceConstants.SESSION);
-        cyclec.setReturnValue(null);
-
-        MockControl activePagec = newControl(IPage.class);
-        IPage activePage = (IPage) activePagec.getMock();
-
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(activePage);
-
-        cycle.activate(activePage);
-
-        MockControl componentPagec = newControl(IPage.class);
-        IPage componentPage = (IPage) componentPagec.getMock();
+        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
+        trainGetParameter(cycle, ServiceConstants.CONTAINER, "ComponentPage");
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
+        trainGetParameter(cycle, ServiceConstants.SESSION, null);
 
-        cycle.getPage("ComponentPage");
-        cyclec.setReturnValue(componentPage);
+        trainGetPage(cycle, "ActivePage", page);
 
-        MockControl dc = newControl(IDirect.class);
-        IDirect d = (IDirect) dc.getMock();
+        cycle.activate(page);
 
-        componentPage.getNestedComponent("fred.barney");
-        componentPagec.setReturnValue(d);
+        trainGetPage(cycle, "ComponentPage", componentPage);
 
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
+        trainGetNestedComponent(componentPage, "fred.barney", d);
 
-        lf.extractListenerParameters(cycle);
-        lfc.setReturnValue(parameters);
+        trainExtractListenerParameters(lf, cycle, parameters);
 
         cycle.setListenerParameters(parameters);
 
         d.trigger(cycle);
 
-        ResponseRenderer rr = newResponseRenderer();
-
         rr.renderResponse(cycle);
 
         replayControls();
@@ -376,42 +282,23 @@
 
     public void testServiceNotDirect() throws Exception
     {
-        Location l = fabricateLocation(7);
-
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getParameter(ServiceConstants.COMPONENT);
-        cyclec.setReturnValue("fred.barney");
-
-        cycle.getParameter(ServiceConstants.CONTAINER);
-        cyclec.setReturnValue(null);
-
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
-
-        cycle.getParameter(ServiceConstants.SESSION);
-        cyclec.setReturnValue(null);
-
-        MockControl pagec = newControl(IPage.class);
-        IPage page = (IPage) pagec.getMock();
-
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(page);
+        IRequestCycle cycle = newCycle();
+        IPage page = newPage();
+        IComponent c = newComponent();
+        Location l = newLocation();
+
+        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
+        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
+        trainGetParameter(cycle, ServiceConstants.SESSION, null);
 
+        trainGetPage(cycle, "ActivePage", page);
         cycle.activate(page);
 
-        MockControl cc = newControl(IComponent.class);
-        IComponent c = (IComponent) cc.getMock();
+        trainGetNestedComponent(page, "fred.barney", c);
 
-        page.getNestedComponent("fred.barney");
-        pagec.setReturnValue(c);
-
-        c.getExtendedId();
-        cc.setReturnValue("ActivePage/fred.barney");
-
-        c.getLocation();
-        cc.setReturnValue(l);
+        trainGetExtendedId(c, "ActivePage/fred.barney");
+        trainGetLocation(c, l);
 
         replayControls();
 
@@ -437,54 +324,32 @@
     public void testSessionActiveAndRequired() throws Exception
     {
         Object[] parameters = new Object[0];
+        IRequestCycle cycle = newCycle();
+        IPage page = newPage();
+        IDirect d = newDirect();
+        WebSession session = newWebSession(false);
+        WebRequest request = newWebRequest(session);
+        LinkFactory lf = newLinkFactory();
+        ResponseRenderer rr = newResponseRenderer();
 
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getParameter(ServiceConstants.COMPONENT);
-        cyclec.setReturnValue("fred.barney");
-
-        cycle.getParameter(ServiceConstants.CONTAINER);
-        cyclec.setReturnValue(null);
-
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
-
-        cycle.getParameter(ServiceConstants.SESSION);
-        cyclec.setReturnValue("T");
-
-        MockControl pagec = newControl(IPage.class);
-        IPage page = (IPage) pagec.getMock();
-
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(page);
+        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
+        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
+        trainGetParameter(cycle, ServiceConstants.SESSION, "T");
 
+        trainGetPage(cycle, "ActivePage", page);
         cycle.activate(page);
 
-        MockControl dc = newControl(IDirect.class);
-        IDirect d = (IDirect) dc.getMock();
+        trainGetNestedComponent(page, "fred.barney", d);
 
-        page.getNestedComponent("fred.barney");
-        pagec.setReturnValue(d);
+        trainIsStateful(d, true);
 
-        d.isStateful();
-        dc.setReturnValue(true);
-
-        WebSession session = newWebSession(false);
-        WebRequest request = newWebRequest(session);
-
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
-
-        lf.extractListenerParameters(cycle);
-        lfc.setReturnValue(parameters);
+        trainExtractListenerParameters(lf, cycle, parameters);
 
         cycle.setListenerParameters(parameters);
 
         d.trigger(cycle);
 
-        ResponseRenderer rr = newResponseRenderer();
-
         rr.renderResponse(cycle);
 
         replayControls();
@@ -499,52 +364,35 @@
         verifyControls();
     }
 
-    public void testStaleSession() throws Exception
+    protected void trainIsStateful(IDirect direct, boolean isStateful)
     {
-        Location l = fabricateLocation(99);
-
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        cycle.getParameter(ServiceConstants.COMPONENT);
-        cyclec.setReturnValue("fred.barney");
-
-        cycle.getParameter(ServiceConstants.CONTAINER);
-        cyclec.setReturnValue(null);
-
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
-
-        cycle.getParameter(ServiceConstants.SESSION);
-        cyclec.setReturnValue("T");
+        direct.isStateful();
+        setReturnValue(direct, isStateful);
+    }
 
-        MockControl pagec = newControl(IPage.class);
-        IPage page = (IPage) pagec.getMock();
+    public void testStaleSession() throws Exception
+    {
+        IRequestCycle cycle = newCycle();
+        IPage page = newPage();
+        IDirect d = newDirect();
+        WebRequest request = newWebRequest(null);
+        Location l = newLocation();
 
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(page);
+        trainGetParameter(cycle, ServiceConstants.COMPONENT, "fred.barney");
+        trainGetParameter(cycle, ServiceConstants.CONTAINER, null);
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
+        trainGetParameter(cycle, ServiceConstants.SESSION, "T");
 
+        trainGetPage(cycle, "ActivePage", page);
         cycle.activate(page);
 
-        MockControl dc = newControl(IDirect.class);
-        IDirect d = (IDirect) dc.getMock();
-
-        page.getNestedComponent("fred.barney");
-        pagec.setReturnValue(d);
-
-        d.isStateful();
-        dc.setReturnValue(true);
-
-        WebRequest request = newWebRequest(null);
-
-        d.getExtendedId();
-        dc.setReturnValue("ActivePage/fred.barney");
+        trainGetNestedComponent(page, "fred.barney", d);
 
-        page.getLocation();
-        pagec.setReturnValue(l);
+        trainIsStateful(d, true);
 
-        page.getPageName();
-        pagec.setReturnValue("ActivePage");
+        trainGetExtendedId(d, "ActivePage/fred.barney");
+        trainGetLocation(page, l);
+        trainGetPageName(page, "ActivePage");
 
         replayControls();
 

Copied: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ExternalServiceTest.java (from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestExternalService.java)
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ExternalServiceTest.java?p2=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ExternalServiceTest.java&p1=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestExternalService.java&r1=332478&r2=332810&rev=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestExternalService.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ExternalServiceTest.java Sat Nov 12 10:22:15 2005
@@ -22,11 +22,9 @@
 import org.apache.tapestry.IExternalPage;
 import org.apache.tapestry.IPage;
 import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
 import org.apache.tapestry.services.LinkFactory;
 import org.apache.tapestry.services.ResponseRenderer;
 import org.apache.tapestry.services.ServiceConstants;
-import org.easymock.MockControl;
 
 /**
  * Tests for {@link org.apache.tapestry.engine.ExternalService}.
@@ -34,41 +32,25 @@
  * @author Howard M. Lewis Ship
  * @since 4.0
  */
-public class TestExternalService extends ServiceTestCase
+public class ExternalServiceTest extends ServiceTestCase
 {
-    private LinkFactory newLinkFactory(IRequestCycle cycle, Object[] serviceParameters)
-    {
-        MockControl control = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) control.getMock();
-
-        lf.extractListenerParameters(cycle);
-        control.setReturnValue(serviceParameters);
-
-        return lf;
-    }
-
     public void testGetLink()
     {
         Object[] serviceParameters = new Object[0];
+        LinkFactory lf = newLinkFactory();
+        ILink link = newLink();
 
         Map parameters = new HashMap();
-        parameters.put(ServiceConstants.SERVICE, Tapestry.EXTERNAL_SERVICE);
         parameters.put(ServiceConstants.PAGE, "ActivePage");
         parameters.put(ServiceConstants.PARAMETER, serviceParameters);
 
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
-
-        ILink link = (ILink) newMock(ILink.class);
+        ExternalService es = new ExternalService();
+        es.setLinkFactory(lf);
 
-        lf.constructLink(false, parameters, true);
-        lfc.setReturnValue(link);
+        trainConstructLink(lf, es, false, parameters, true, link);
 
         replayControls();
 
-        ExternalService es = new ExternalService();
-        es.setLinkFactory(lf);
-
         ExternalServiceParameter p = new ExternalServiceParameter("ActivePage", serviceParameters);
 
         assertSame(link, es.getLink(false, p));
@@ -78,26 +60,22 @@
 
     public void testService() throws Exception
     {
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
+        IRequestCycle cycle = newCycle();
         IExternalPage page = (IExternalPage) newMock(IExternalPage.class);
-
         Object[] parameters = new Object[0];
+        LinkFactory lf = newLinkFactory();
+        ResponseRenderer rr = newResponseRenderer();
 
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
 
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(page);
+        trainGetPage(cycle, "ActivePage", page);
 
-        LinkFactory lf = newLinkFactory(cycle, parameters);
+        trainExtractListenerParameters(lf, cycle, parameters);
 
         cycle.setListenerParameters(parameters);
         cycle.activate(page);
-        page.activateExternalPage(parameters, cycle);
 
-        ResponseRenderer rr = (ResponseRenderer) newMock(ResponseRenderer.class);
+        page.activateExternalPage(parameters, cycle);
 
         rr.renderResponse(cycle);
 
@@ -114,25 +92,17 @@
 
     public void testServiceWrongType() throws Exception
     {
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
-
-        MockControl pagec = newControl(IPage.class);
-        IPage page = (IPage) pagec.getMock();
-
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("ActivePage");
 
-        cycle.getPage("ActivePage");
-        cyclec.setReturnValue(page);
+        IRequestCycle cycle = newCycle();
+        IPage page = newPage();
+        Location l = newLocation();
 
-        page.getPageName();
-        pagec.setReturnValue("ActivePage");
+        trainGetParameter(cycle, ServiceConstants.PAGE, "ActivePage");
 
-        Location l = fabricateLocation(17);
+        trainGetPage(cycle, "ActivePage", page);
 
-        page.getLocation();
-        pagec.setReturnValue(l);
+        trainGetPageName(page, "ActivePage");
+        trainGetLocation(page, l);
 
         replayControls();
 

Copied: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/PageServiceTest.java (from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestPageService.java)
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/PageServiceTest.java?p2=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/PageServiceTest.java&p1=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestPageService.java&r1=332478&r2=332810&rev=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestPageService.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/PageServiceTest.java Sat Nov 12 10:22:15 2005
@@ -18,37 +18,31 @@
 import java.util.Map;
 
 import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
 import org.apache.tapestry.services.LinkFactory;
 import org.apache.tapestry.services.ResponseRenderer;
 import org.apache.tapestry.services.ServiceConstants;
-import org.easymock.MockControl;
 
 /**
  * @author Howard M. Lewis Ship
  * @since 4.0
  */
-public class TestPageService extends ServiceTestCase
+public class PageServiceTest extends ServiceTestCase
 {
     public void testGetLink()
     {
+        LinkFactory lf = newLinkFactory();
+        ILink link = newLink();
+
         Map parameters = new HashMap();
-        parameters.put(ServiceConstants.SERVICE, Tapestry.PAGE_SERVICE);
         parameters.put(ServiceConstants.PAGE, "TargetPage");
 
-        ILink link = newLink();
-
-        MockControl lfc = newControl(LinkFactory.class);
-        LinkFactory lf = (LinkFactory) lfc.getMock();
+        PageService ps = new PageService();
+        ps.setLinkFactory(lf);
 
-        lf.constructLink(false, parameters, true);
-        lfc.setReturnValue(link);
+        trainConstructLink(lf, ps, false, parameters, true, link);
 
         replayControls();
 
-        PageService ps = new PageService();
-        ps.setLinkFactory(lf);
-
         assertSame(link, ps.getLink(false, "TargetPage"));
 
         verifyControls();
@@ -56,15 +50,12 @@
 
     public void testService() throws Exception
     {
-        MockControl cyclec = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) cyclec.getMock();
+        IRequestCycle cycle = newCycle();
+        ResponseRenderer rr = newResponseRenderer();
 
-        cycle.getParameter(ServiceConstants.PAGE);
-        cyclec.setReturnValue("TargetPage");
+        trainGetParameter(cycle, ServiceConstants.PAGE, "TargetPage");
 
         cycle.activate("TargetPage");
-
-        ResponseRenderer rr = newResponseRenderer();
 
         rr.renderResponse(cycle);
 

Copied: jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ResetServiceTest.java (from r332478, jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestResetService.java)
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ResetServiceTest.java?p2=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ResetServiceTest.java&p1=jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestResetService.java&r1=332478&r2=332810&rev=332810&view=diff
==============================================================================
--- jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/TestResetService.java (original)
+++ jakarta/tapestry/trunk/framework/src/test/org/apache/tapestry/engine/ResetServiceTest.java Sat Nov 12 10:22:15 2005
@@ -19,10 +19,10 @@
 
 import org.apache.tapestry.IPage;
 import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.Tapestry;
 import org.apache.tapestry.services.LinkFactory;
+import org.apache.tapestry.services.ResetEventHub;
+import org.apache.tapestry.services.ResponseRenderer;
 import org.apache.tapestry.services.ServiceConstants;
-import org.easymock.MockControl;
 
 /**
  * Tests for {@link org.apache.tapestry.engine.ResetService}.
@@ -30,40 +30,83 @@
  * @author Howard M. Lewis Ship
  * @since 4.0
  */
-public class TestResetService extends ServiceTestCase
+public class ResetServiceTest extends ServiceTestCase
 {
-    private IRequestCycle newRequestCycle(IPage page)
+    public void testGetLink()
     {
-        MockControl control = newControl(IRequestCycle.class);
-        IRequestCycle cycle = (IRequestCycle) control.getMock();
+        IRequestCycle cycle = newCycle();
+        IPage page = newPage();
+        LinkFactory lf = newLinkFactory();
+        ILink link = newLink();
+
+        ResetService s = new ResetService();
+        s.setLinkFactory(lf);
+        s.setRequestCycle(cycle);
+
+        trainGetPage(cycle, page);
+        trainGetPageName(page, "TargetPage");
+
+        Map parameters = new HashMap();
+        parameters.put(ServiceConstants.PAGE, "TargetPage");
 
-        cycle.getPage();
-        control.setReturnValue(page);
+        trainConstructLink(lf, s, false, parameters, true, link);
 
-        return cycle;
+        replayControls();
+
+        assertSame(link, s.getLink(false, null));
+
+        verifyControls();
     }
 
-    public void testGetLink()
+    public void testService() throws Exception
     {
-        IPage page = newPage("TargetPage");
-        IRequestCycle cycle = newRequestCycle(page);
+        IRequestCycle cycle = newCycle();
+        ResetEventHub hub = (ResetEventHub) newMock(ResetEventHub.class);
+        ResponseRenderer rr = newResponseRenderer();
 
-        Map parameters = new HashMap();
-        parameters.put(ServiceConstants.SERVICE, Tapestry.RESET_SERVICE);
-        parameters.put(ServiceConstants.PAGE, "TargetPage");
+        trainGetParameter(cycle, ServiceConstants.PAGE, "TargetPage");
 
-        ILink link = newLink();
-        LinkFactory lf = newLinkFactory(cycle, parameters, true, link);
+        hub.fireResetEvent();
+
+        cycle.activate("TargetPage");
+
+        rr.renderResponse(cycle);
 
         replayControls();
 
-        ResetService s = new ResetService();
-        s.setLinkFactory(lf);
-        s.setRequestCycle(cycle);
+        ResetService rs = new ResetService();
+        rs.setEnabled(true);
+        rs.setResetEventHub(hub);
+        rs.setResponseRenderer(rr);
 
-        assertSame(link, s.getLink(false, null));
+        rs.service(cycle);
 
         verifyControls();
+    }
+
+    public void testServiceNotEnabled() throws Exception
+    {
+        IRequestCycle cycle = newCycle();
+        ResetEventHub hub = (ResetEventHub) newMock(ResetEventHub.class);
+        ResponseRenderer rr = newResponseRenderer();
+
+        trainGetParameter(cycle, ServiceConstants.PAGE, "TargetPage");
+
+        cycle.activate("TargetPage");
+
+        rr.renderResponse(cycle);
+
+        replayControls();
+
+        ResetService rs = new ResetService();
+        rs.setEnabled(false);
+        rs.setResetEventHub(hub);
+        rs.setResponseRenderer(rr);
+
+        rs.service(cycle);
+
+        verifyControls();
+
     }
 
     public void testGetLinkNonNullParameter()



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org