You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by fr...@apache.org on 2006/12/18 16:08:36 UTC

svn commit: r488300 - in /tapestry/tapestry5/tapestry-core/trunk/src: main/java/org/apache/tapestry/internal/services/ main/java/org/apache/tapestry/test/pagelevel/ site/apt/guide/

Author: freemant
Date: Mon Dec 18 07:08:35 2006
New Revision: 488300

URL: http://svn.apache.org/viewvc?view=rev&rev=488300
Log:
1) Changed PageTester to use a StrategyRegistry.
2) Changed to use an Object[] instead of List<?> to store a context.
3) Fixed a typo in the component event doc page.

Added:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ActionLinkClicker.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/LinkClicker.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageLinkClicker.java
Modified:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandler.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkPathSource.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventDispatcher.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandler.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandlerImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkPathSource.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/FooContextPathSource.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/NoOpURLEncoder.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageTester.java
    tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/event.apt

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandler.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandler.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandler.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandler.java Mon Dec 18 07:08:35 2006
@@ -1,3 +1,17 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
 package org.apache.tapestry.internal.services;
 
 import org.apache.tapestry.Link;

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkHandlerImpl.java Mon Dec 18 07:08:35 2006
@@ -34,7 +34,7 @@
 
         element.triggerEvent(
                 pathSource.getAction(),
-                pathSource.getContext().toArray(),
+                pathSource.getContext(),
                 _componentEventHandler);
 
         // It's possible that the component event will have changed the active page.

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkPathSource.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkPathSource.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkPathSource.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ActionLinkPathSource.java Mon Dec 18 07:08:35 2006
@@ -14,7 +14,6 @@
 
 package org.apache.tapestry.internal.services;
 
-import java.util.List;
 
 public class ActionLinkPathSource implements PathSource
 {
@@ -27,10 +26,10 @@
 
     private final String _componentNestedId;
 
-    private final List<?> _context;
+    private final Object[] _context;
 
     public ActionLinkPathSource(String contextPath, String action, String pageName, String componentNestedId,
-            List<?> context)
+            Object[] context)
     {
         _contextPath = contextPath;
         _action = action;
@@ -73,7 +72,7 @@
         return _componentNestedId;
     }
 
-    public List<?> getContext()
+    public Object[] getContext()
     {
         return _context;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventDispatcher.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventDispatcher.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventDispatcher.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventDispatcher.java Mon Dec 18 07:08:35 2006
@@ -15,7 +15,6 @@
 package org.apache.tapestry.internal.services;
 
 import java.io.IOException;
-import java.util.Arrays;
 
 import org.apache.tapestry.Link;
 import org.apache.tapestry.services.Dispatcher;
@@ -63,7 +62,7 @@
             context[i - 1] = chunks[i];
 
         Link link = _actionLinkHandler.handle(new ActionLinkPathSource(null, eventType,
-                logicalPageName, nestedComponentId, Arrays.asList(context)));
+                logicalPageName, nestedComponentId, context));
 
         String URL = link.toRedirectURI();
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/LinkFactoryImpl.java Mon Dec 18 07:08:35 2006
@@ -18,7 +18,6 @@
 import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newMap;
 import static org.apache.tapestry.ioc.internal.util.CollectionFactory.newThreadSafeList;
 
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -106,8 +105,7 @@
         String logicalPageName = _componentClassResolver.resolvePageClassNameToPageName(pageName);
 
         ActionLinkPathSource pathSource = new ActionLinkPathSource(_contextPathSource
-                .getContextPath(), action, logicalPageName, component.getNestedId(), Arrays
-                .asList(context));
+                .getContextPath(), action, logicalPageName, component.getNestedId(), context);
 
         Link link = new LinkImpl(_encoder, pathSource);
 
@@ -144,7 +142,8 @@
 
         rootElement.triggerEvent(TapestryConstants.PASSIVATE_EVENT, null, handler);
 
-        PageLinkPathSource pathSource = new PageLinkPathSource(_contextPathSource.getContextPath(), logicalPageName, context);
+        PageLinkPathSource pathSource = new PageLinkPathSource(_contextPathSource.getContextPath(),
+                logicalPageName, context.toArray());
 
         Link link = new LinkImpl(_encoder, pathSource);
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandler.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandler.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandler.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandler.java Mon Dec 18 07:08:35 2006
@@ -1,3 +1,17 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
 package org.apache.tapestry.internal.services;
 
 public interface PageLinkHandler

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandlerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandlerImpl.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandlerImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkHandlerImpl.java Mon Dec 18 07:08:35 2006
@@ -37,7 +37,7 @@
 
         page.getRootElement().triggerEvent(
                 TapestryConstants.ACTIVATE_EVENT,
-                pathSource.getContext().toArray(),
+                pathSource.getContext(),
                 null);
 
         renderer.renderPage(page);

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkPathSource.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkPathSource.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkPathSource.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageLinkPathSource.java Mon Dec 18 07:08:35 2006
@@ -14,7 +14,6 @@
 
 package org.apache.tapestry.internal.services;
 
-import java.util.List;
 
 public class PageLinkPathSource implements PathSource
 {
@@ -23,9 +22,9 @@
 
     private final String _pageName;
 
-    private final List<?> _context;
+    private final Object[] _context;
 
-    public PageLinkPathSource(String contextPath, String pageName, List<?> context)
+    public PageLinkPathSource(String contextPath, String pageName, Object[] context)
     {
         _contextPath = contextPath;
         _pageName = pageName;
@@ -53,7 +52,7 @@
         return builder.toString();
     }
 
-    public List<?> getContext()
+    public Object[] getContext()
     {
         return _context;
     }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageRenderDispatcher.java Mon Dec 18 07:08:35 2006
@@ -15,7 +15,6 @@
 package org.apache.tapestry.internal.services;
 
 import java.io.IOException;
-import java.util.Arrays;
 
 import org.apache.tapestry.internal.structure.Page;
 import org.apache.tapestry.services.Dispatcher;
@@ -65,24 +64,22 @@
             // TODO: Decode strings?
             context[i - 1] = terms[i];
         }
-        _handler.handle(
-                new PageLinkPathSource(null, logicalPageName, Arrays.asList(context)),
-                new PageRenderer()
-                {
+        _handler.handle(new PageLinkPathSource(null, logicalPageName, context), new PageRenderer()
+        {
 
-                    public void renderPage(Page page)
-                    {
-                        try
-                        {
-                            _renderer.renderPageResponse(page, response);
-                        }
-                        catch (IOException ex)
-                        {
-                            new RuntimeException(ex);
-                        }
+            public void renderPage(Page page)
+            {
+                try
+                {
+                    _renderer.renderPageResponse(page, response);
+                }
+                catch (IOException ex)
+                {
+                    new RuntimeException(ex);
+                }
 
-                    }
-                });
+            }
+        });
 
         return true;
     }

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ActionLinkClicker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ActionLinkClicker.java?view=auto&rev=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ActionLinkClicker.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/ActionLinkClicker.java Mon Dec 18 07:08:35 2006
@@ -0,0 +1,68 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.test.pagelevel;
+
+import org.apache.tapestry.Link;
+import org.apache.tapestry.dom.Document;
+import org.apache.tapestry.internal.services.ActionLinkHandler;
+import org.apache.tapestry.internal.services.ActionLinkPathSource;
+import org.apache.tapestry.internal.services.LinkImpl;
+import org.apache.tapestry.internal.services.PathSource;
+import org.apache.tapestry.ioc.Registry;
+
+/**
+ * Simulates a click on an action link.
+ */
+public class ActionLinkClicker implements LinkClicker
+{
+    private final Registry _registry;
+
+    private final PageLinkClicker _pageLinkClicker;
+
+    private final ActionLinkHandler _actionLinkHandler;
+
+    public ActionLinkClicker(Registry registry, PageLinkClicker pageLinkClicker)
+    {
+        _registry = registry;
+        _pageLinkClicker = pageLinkClicker;
+        _actionLinkHandler = _registry.getService(ActionLinkHandler.class);
+    }
+
+    /**
+     * Click on the action link and get a page link in return. Then use the {@link PageLinkClicker}
+     * to click the page link.
+     * 
+     * @param pageSource
+     *            The path source for the action link.
+     * @return The DOM created. Typically you will assert against it.
+     */
+    public Document click(PathSource pathSource)
+    {
+        Link pageLink = click((ActionLinkPathSource) pathSource);
+        return _pageLinkClicker.click(((LinkImpl) pageLink).getPathSource());
+    }
+
+    private Link click(ActionLinkPathSource pathSource)
+    {
+        try
+        {
+            return _actionLinkHandler.handle(pathSource);
+        }
+        finally
+        {
+            _registry.cleanupThread();
+        }
+    }
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/FooContextPathSource.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/FooContextPathSource.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/FooContextPathSource.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/FooContextPathSource.java Mon Dec 18 07:08:35 2006
@@ -1,3 +1,17 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
 package org.apache.tapestry.test.pagelevel;
 
 import org.apache.tapestry.internal.services.ContextPathSource;

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/LinkClicker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/LinkClicker.java?view=auto&rev=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/LinkClicker.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/LinkClicker.java Mon Dec 18 07:08:35 2006
@@ -0,0 +1,32 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.test.pagelevel;
+
+import org.apache.tapestry.dom.Document;
+import org.apache.tapestry.internal.services.PathSource;
+
+/**
+ * Simulates a click on a link.
+ */
+public interface LinkClicker
+{
+    /**
+     * @param pageSource
+     *            The path source for the link.
+     * @return The DOM created. Typically you will assert against it.
+     */
+    Document click(PathSource pathSource);
+
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/NoOpURLEncoder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/NoOpURLEncoder.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/NoOpURLEncoder.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/NoOpURLEncoder.java Mon Dec 18 07:08:35 2006
@@ -1,3 +1,17 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
 package org.apache.tapestry.test.pagelevel;
 
 import org.apache.tapestry.internal.services.URLEncoder;

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageLinkClicker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageLinkClicker.java?view=auto&rev=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageLinkClicker.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageLinkClicker.java Mon Dec 18 07:08:35 2006
@@ -0,0 +1,74 @@
+// Copyright 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.test.pagelevel;
+
+import org.apache.tapestry.dom.Document;
+import org.apache.tapestry.internal.services.MarkupWriterImpl;
+import org.apache.tapestry.internal.services.PageLinkHandler;
+import org.apache.tapestry.internal.services.PageLinkPathSource;
+import org.apache.tapestry.internal.services.PageMarkupRenderer;
+import org.apache.tapestry.internal.services.PageRenderer;
+import org.apache.tapestry.internal.services.PathSource;
+import org.apache.tapestry.internal.structure.Page;
+import org.apache.tapestry.ioc.Registry;
+
+/**
+ * Simulates a click on a page link.
+ */
+public class PageLinkClicker implements LinkClicker
+{
+    private final Registry _registry;
+
+    private final PageLinkHandler _pageLinkHandler;
+
+    private final PageMarkupRenderer _renderer;
+
+    public PageLinkClicker(Registry registry)
+    {
+        _registry = registry;
+        _pageLinkHandler = _registry.getService(PageLinkHandler.class);
+        _renderer = _registry.getService(PageMarkupRenderer.class);
+    }
+
+    /**
+     * Click on the page link.
+     * 
+     * @param pageSource
+     *            The path source for the page link.
+     * @return The DOM created. Typically you will assert against it.
+     */
+    public Document click(PathSource pathSource)
+    {
+        try
+        {
+            final MarkupWriterImpl writer = new MarkupWriterImpl();
+            _pageLinkHandler.handle((PageLinkPathSource) pathSource, new PageRenderer()
+            {
+
+                public void renderPage(Page page)
+                {
+                    _renderer.renderPageMarkup(page, writer);
+                }
+
+            });
+            return writer.getDocument();
+        }
+        finally
+        {
+            _registry.cleanupThread();
+        }
+    }
+
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageTester.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageTester.java?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageTester.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/pagelevel/PageTester.java Mon Dec 18 07:08:35 2006
@@ -19,37 +19,28 @@
 import java.util.Collections;
 import java.util.Map;
 
-import org.apache.tapestry.Link;
 import org.apache.tapestry.dom.Document;
 import org.apache.tapestry.dom.Element;
 import org.apache.tapestry.internal.TapestryAppInitializer;
-import org.apache.tapestry.internal.services.ActionLinkHandler;
 import org.apache.tapestry.internal.services.ActionLinkPathSource;
 import org.apache.tapestry.internal.services.LinkImpl;
-import org.apache.tapestry.internal.services.MarkupWriterImpl;
-import org.apache.tapestry.internal.services.PageLinkHandler;
 import org.apache.tapestry.internal.services.PageLinkPathSource;
-import org.apache.tapestry.internal.services.PageMarkupRenderer;
-import org.apache.tapestry.internal.services.PageRenderer;
 import org.apache.tapestry.internal.services.PathSource;
-import org.apache.tapestry.internal.structure.Page;
 import org.apache.tapestry.ioc.Registry;
 import org.apache.tapestry.ioc.internal.util.Defense;
+import org.apache.tapestry.ioc.util.StrategyRegistry;
 
 /**
  * This class is used to run a Tapestry app in an in-process testing environment. You can ask it to
- * render a certain page and check the DOM object created. Because no servlet container is required,
- * it is very fast and you can directly debug into your code in your IDE.
+ * render a certain page and check the DOM object created. You can also ask it to click on a link
+ * element in the DOM object to get the next page. Because no servlet container is required, it is
+ * very fast and you can directly debug into your code in your IDE.
  */
 public class PageTester
 {
     private Registry _registry;
 
-    private PageMarkupRenderer _renderer;
-
-    private PageLinkHandler _pageLinkHandler;
-
-    private ActionLinkHandler _actionLinkHandler;
+    private StrategyRegistry<LinkClicker> _clickerRegistry;
 
     /**
      * Initializes a PageTester without overriding any services.
@@ -77,9 +68,16 @@
     {
         _registry = new TapestryAppInitializer(appPackage, appName, "test",
                 addDefaultOverrides(serviceOverrides)).getRegistry();
-        _pageLinkHandler = _registry.getService(PageLinkHandler.class);
-        _actionLinkHandler = _registry.getService(ActionLinkHandler.class);
-        _renderer = _registry.getService(PageMarkupRenderer.class);
+        buildLinkClickersRegistry();
+    }
+
+    private void buildLinkClickersRegistry()
+    {
+        PageLinkClicker pageLinkClicker = new PageLinkClicker(_registry);
+        Map<Class, LinkClicker> map = newMap();
+        map.put(PageLinkPathSource.class, pageLinkClicker);
+        map.put(ActionLinkPathSource.class, new ActionLinkClicker(_registry, pageLinkClicker));
+        _clickerRegistry = new StrategyRegistry<LinkClicker>(LinkClicker.class, map);
     }
 
     private Map<String, Object> addDefaultOverrides(Map<String, Object> serviceOverrides)
@@ -116,12 +114,12 @@
      * Renders a page specified by its name.
      * 
      * @param pageName
-     *            the name of the page to be rendered.
-     * @return the DOM created. Typically you will assert against it.
+     *            The name of the page to be rendered.
+     * @return The DOM created. Typically you will assert against it.
      */
     public Document renderPage(String pageName)
     {
-        return clickPageLink(new PageLinkPathSource(null, pageName, Collections.EMPTY_LIST));
+        return clickLink(new PageLinkPathSource(null, pageName, new Object[0]));
     }
 
     /**
@@ -138,70 +136,13 @@
         {
             throw new IllegalArgumentException("No source object is associated with the Element");
         }
-        return clickLink((LinkImpl) link.getSrc());
-    }
-
-    private Document clickLink(Link link)
-    {
-        PathSource pathSource = ((LinkImpl) link).getPathSource();
-        if (pathSource instanceof ActionLinkPathSource)
-        {
-            return clickLink(clickActionLink((ActionLinkPathSource) pathSource));
-        }
-        if (pathSource instanceof PageLinkPathSource)
-        {
-            return clickPageLink((PageLinkPathSource) pathSource);
-        }
-        throw new IllegalArgumentException("The type of the path source is not supported: "
-                + pathSource.getClass().getName());
-    }
-
-    /**
-     * Simulates a click on an action link. No redirection is performed.
-     * 
-     * @param pageSource
-     *            The path source for the action link.
-     * @return The page Link created.
-     */
-    private Link clickActionLink(ActionLinkPathSource pathSource)
-    {
-        try
-        {
-            return _actionLinkHandler.handle(pathSource);
-        }
-        finally
-        {
-            _registry.cleanupThread();
-        }
+        return clickLink(((LinkImpl) link.getSrc()).getPathSource());
     }
 
-    /**
-     * Simulates a click on a page link.
-     * 
-     * @param pageSource
-     *            The path source for the page link.
-     * @return The DOM created. Typically you will assert against it.
-     */
-    private Document clickPageLink(PageLinkPathSource pathSource)
+    private Document clickLink(PathSource pathSource)
     {
-        try
-        {
-            final MarkupWriterImpl writer = new MarkupWriterImpl();
-            _pageLinkHandler.handle(pathSource, new PageRenderer()
-            {
-
-                public void renderPage(Page page)
-                {
-                    _renderer.renderPageMarkup(page, writer);
-                }
-
-            });
-            return writer.getDocument();
-        }
-        finally
-        {
-            _registry.cleanupThread();
-        }
+        LinkClicker clicker = _clickerRegistry.getByInstance(pathSource);
+        return clicker.click(pathSource);
     }
 
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/event.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/event.apt?view=diff&rev=488300&r1=488299&r2=488300
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/event.apt (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/event.apt Mon Dec 18 07:08:35 2006
@@ -147,7 +147,7 @@
     @Inject
     private CustomerDAO _customerDAO;
     
-    @OnEvent("passivate')
+    @OnEvent("passivate")
     long passivate()
     {
       return _customer.getId();