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 2006/11/03 20:40:15 UTC

svn commit: r470966 - in /tapestry/tapestry5/tapestry-core/trunk: ./ src/main/java/org/apache/tapestry/ src/main/java/org/apache/tapestry/corelib/components/ src/main/java/org/apache/tapestry/internal/services/ src/main/java/org/apache/tapestry/interna...

Author: hlship
Date: Fri Nov  3 11:40:13 2006
New Revision: 470966

URL: http://svn.apache.org/viewvc?view=rev&rev=470966
Log:
Add tapestry.Environment service to infrastructure
Turn off parallel execution of TestNG tests (too unstable)
Allow the context associated with a component event to be an array of objects (not an array of strings)
Add some utilities for encoding and decoding to Base64

Added:
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/AcceptVoidEventHandler.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64InputStream.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64ObjectInputStream.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64ObjectOutputStream.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64OutputStream.java
Modified:
    tapestry/tapestry5/tapestry-core/trunk/pom.xml
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/UtilMessages.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
    tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/util/UtilStrings.properties
    tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/infrastructure.apt
    tapestry/tapestry5/tapestry-core/trunk/src/test/conf/testng.xml
    tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentEventImplTest.java

Modified: tapestry/tapestry5/tapestry-core/trunk/pom.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/pom.xml?view=diff&rev=470966&r1=470965&r2=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/pom.xml (original)
+++ tapestry/tapestry5/tapestry-core/trunk/pom.xml Fri Nov  3 11:40:13 2006
@@ -26,6 +26,11 @@
             <groupId>commons-logging</groupId>
             <artifactId>commons-logging</artifactId>
         </dependency>
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>1.3</version>
+        </dependency>
         <!-- Override parent pom: needed at compile time. -->
         <dependency>
             <groupId>org.easymock</groupId>

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java?view=diff&rev=470966&r1=470965&r2=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/ComponentResourcesCommon.java Fri Nov  3 11:40:13 2006
@@ -65,13 +65,15 @@
      * @param eventType
      *            event type (as determined from the request, or otherwise by design)
      * @param context
-     *            the request context (as extracted from the request)
+     *            the context (as extracted from the request, or provided by the triggering
+     *            component); these values may be provided to event handler methods via their
+     *            parameters
      * @param handler
      *            the handler to be informed of the result
      * @return true if any event handler was invoked (even if no event handler method returns a
      *         non-null value)
      */
-    boolean triggerEvent(String eventType, String[] context, ComponentEventHandler handler);
+    boolean triggerEvent(String eventType, Object[] context, ComponentEventHandler handler);
 
     /**
      * Returns true if the component is currently rendering, false otherwise. This is most often

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java?view=auto&rev=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/corelib/components/Form.java Fri Nov  3 11:40:13 2006
@@ -0,0 +1,60 @@
+package org.apache.tapestry.corelib.components;
+
+import org.apache.tapestry.ComponentEventHandler;
+import org.apache.tapestry.ComponentResources;
+import org.apache.tapestry.annotations.CleanupRender;
+import org.apache.tapestry.annotations.ComponentClass;
+import org.apache.tapestry.annotations.Inject;
+import org.apache.tapestry.annotations.SetupRender;
+import org.apache.tapestry.internal.util.AcceptVoidEventHandler;
+import org.apache.tapestry.services.Environment;
+import org.apache.tapestry.services.FormSupport;
+
+@ComponentClass
+public class Form
+{
+    /**
+     * Invoked to let the containing component(s) prepare for the form rendering or the form
+     * submission.
+     */
+    public static final String PREPARE_EVENT = "prepare";
+
+    @Inject("infrastructure:environment")
+    private Environment _environment;
+
+    @Inject
+    private ComponentResources _resources;
+
+    private String _componentId = _resources.getId();
+
+    @SetupRender
+    void setup()
+    {
+        FormSupport support = new FormSupport()
+        {
+        };
+
+        // TODO: Forms should not allow to nest. Perhaps a set() method instead of a push() method
+        // for this kind of check?
+
+        _environment.push(FormSupport.class, support);
+
+        // Now that the environment is setup.
+
+        fireNotification(PREPARE_EVENT);
+    }
+
+    private void fireNotification(String eventType)
+    {
+        ComponentEventHandler handler = new AcceptVoidEventHandler(eventType, _resources
+                .getCompleteId());
+
+        _resources.triggerEvent(eventType, null, handler);
+    }
+
+    @CleanupRender
+    void cleanup()
+    {
+        _environment.pop(FormSupport.class);
+    }
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventImpl.java?view=diff&rev=470966&r1=470965&r2=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/ComponentEventImpl.java Fri Nov  3 11:40:13 2006
@@ -18,6 +18,7 @@
 import org.apache.tapestry.ComponentResources;
 import org.apache.tapestry.ioc.services.TypeCoercer;
 import org.apache.tapestry.runtime.ComponentEvent;
+import org.apache.tapestry.util.Defense;
 
 public class ComponentEventImpl implements ComponentEvent
 {
@@ -25,22 +26,40 @@
 
     private final String _originatingComponentId;
 
-    private final String[] _context;
+    private final Object[] _context;
 
     private final ComponentEventHandler _handler;
 
     private final TypeCoercer _typeCoercer;
 
+    private final int _contextLength;
+
     private boolean _aborted;
 
-    public ComponentEventImpl(String eventType, String originatingComponentId, String[] context,
+    /**
+     * @param eventType
+     *            non blank string used to identify the type of event that was triggered
+     * @param originatingComponentId
+     *            the id of the component that triggered the event (this will likely need to change
+     *            somewhat)
+     * @param context
+     *            an array of values that can be made available to handler methods via method
+     *            parameters
+     * @param handler
+     *            invoked when a non-null return value is obtained from an event handler method
+     * @param typeCoercer
+     *            used when coercing context values to parameter types
+     */
+    public ComponentEventImpl(String eventType, String originatingComponentId, Object[] context,
             ComponentEventHandler handler, TypeCoercer typeCoercer)
     {
-        _eventType = eventType;
+        _eventType = Defense.notBlank(eventType, "eventType");
         _originatingComponentId = originatingComponentId;
         _context = context;
-        _handler = handler;
-        _typeCoercer = typeCoercer;
+        _handler = Defense.notNull(handler, "handler");
+        _typeCoercer = Defense.notNull(typeCoercer, "typeCoercer");
+
+        _contextLength = context != null ? context.length : 0;
     }
 
     public boolean isAborted()
@@ -99,7 +118,7 @@
     @SuppressWarnings("unchecked")
     public Object coerceContext(int index, String desiredTypeName, String methodDescription)
     {
-        if (index >= _context.length)
+        if (index >= _contextLength)
             throw new IllegalArgumentException(ServicesMessages
                     .contextIndexOutOfRange(methodDescription));
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java?view=diff&rev=470966&r1=470965&r2=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/ComponentPageElementImpl.java Fri Nov  3 11:40:13 2006
@@ -554,7 +554,7 @@
         return _page.createActionLink(this, action, forForm, context);
     }
 
-    public boolean triggerEvent(String eventType, String[] context, ComponentEventHandler handler)
+    public boolean triggerEvent(String eventType, Object[] context, ComponentEventHandler handler)
     {
         boolean result = false;
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java?view=diff&rev=470966&r1=470965&r2=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/InternalComponentResourcesImpl.java Fri Nov  3 11:40:13 2006
@@ -113,7 +113,7 @@
         return _element.isRendering();
     }
 
-    public boolean triggerEvent(String eventType, String[] context, ComponentEventHandler handler)
+    public boolean triggerEvent(String eventType, Object[] context, ComponentEventHandler handler)
     {
         return _element.triggerEvent(eventType, context, handler);
     }

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/AcceptVoidEventHandler.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/AcceptVoidEventHandler.java?view=auto&rev=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/AcceptVoidEventHandler.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/AcceptVoidEventHandler.java Fri Nov  3 11:40:13 2006
@@ -0,0 +1,32 @@
+package org.apache.tapestry.internal.util;
+
+import org.apache.tapestry.ComponentEventHandler;
+
+/**
+ * A {@link ComponentEventHandler} that does not accept any value. This is used when an event is
+ * dispatched as a notification. Event handlers should not return a value.
+ */
+public class AcceptVoidEventHandler implements ComponentEventHandler
+{
+    private final String _eventType;
+
+    private final String _completeId;
+
+    public AcceptVoidEventHandler(final String eventType, final String completeId)
+    {
+        _eventType = eventType;
+        _completeId = completeId;
+    }
+
+    public void handleResult(Object result, String methodDescription)
+    {
+        // Don't even need a null check because this is only invoked if a method returns non-null.
+
+        throw new IllegalArgumentException(UtilMessages.noReturnValueAccepted(
+                _eventType,
+                _completeId,
+                result,
+                methodDescription));
+    }
+
+}

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64InputStream.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64InputStream.java?view=auto&rev=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64InputStream.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64InputStream.java Fri Nov  3 11:40:13 2006
@@ -0,0 +1,24 @@
+package org.apache.tapestry.internal.util;
+
+import java.io.ByteArrayInputStream;
+
+import org.apache.commons.codec.binary.Base64;
+
+/**
+ * An extension of {@link ByteArrayInputStream} that is initialized from a Base64 input stream
+ * (rather than from a byte array).
+ */
+public class Base64InputStream extends ByteArrayInputStream
+{
+    public Base64InputStream(String base64)
+    {
+        super(decode(base64));
+    }
+
+    private static byte[] decode(String base64)
+    {
+        byte[] array = base64.getBytes();
+
+        return Base64.decodeBase64(array);
+    }
+}

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64ObjectInputStream.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64ObjectInputStream.java?view=auto&rev=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64ObjectInputStream.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64ObjectInputStream.java Fri Nov  3 11:40:13 2006
@@ -0,0 +1,18 @@
+package org.apache.tapestry.internal.util;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * A convienience for building a {@link ObjectInputStream} around a Base64 encoding (that originated
+ * in {@link Base64ObjectOutputStream}).
+ */
+public class Base64ObjectInputStream extends ObjectInputStream
+{
+    public Base64ObjectInputStream(String base64) throws IOException
+    {
+        super(new BufferedInputStream(new GZIPInputStream(new Base64InputStream(base64))));
+    }
+}

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64ObjectOutputStream.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64ObjectOutputStream.java?view=auto&rev=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64ObjectOutputStream.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64ObjectOutputStream.java Fri Nov  3 11:40:13 2006
@@ -0,0 +1,35 @@
+package org.apache.tapestry.internal.util;
+
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.util.zip.GZIPOutputStream;
+
+/**
+ * Wraps a {@link Base64OutputStream} with a {@link GZIPOutputStream} as an
+ * {@link ObjectOutputStream}. This allows an object (or objects) to be encoded into a Base64
+ * string (accessed via {@link #toBase64()}).
+ * 
+ * @see Base64ObjectInputStream
+ */
+public class Base64ObjectOutputStream extends ObjectOutputStream
+{
+    private final Base64OutputStream _output;
+
+    private Base64ObjectOutputStream(Base64OutputStream output) throws IOException
+    {
+        super(new BufferedOutputStream(new GZIPOutputStream(output)));
+
+        _output = output;
+    }
+
+    public Base64ObjectOutputStream() throws IOException
+    {
+        this(new Base64OutputStream());
+    }
+
+    public String toBase64()
+    {
+        return _output.toBase64();
+    }
+}

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64OutputStream.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64OutputStream.java?view=auto&rev=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64OutputStream.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/Base64OutputStream.java Fri Nov  3 11:40:13 2006
@@ -0,0 +1,21 @@
+package org.apache.tapestry.internal.util;
+
+import java.io.ByteArrayOutputStream;
+
+import org.apache.commons.codec.binary.Base64;
+
+/**
+ * An extension of {@link ByteArrayOutputStream} that allows the final byte array to be converted to
+ * a Base64 string.
+ */
+public final class Base64OutputStream extends ByteArrayOutputStream
+{
+    public String toBase64()
+    {
+        byte[] binary = toByteArray();
+
+        byte[] base64 = Base64.encodeBase64(binary);
+
+        return new String(base64);
+    }
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/UtilMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/UtilMessages.java?view=diff&rev=470966&r1=470965&r2=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/UtilMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/util/UtilMessages.java Fri Nov  3 11:40:13 2006
@@ -51,4 +51,11 @@
     {
         return MESSAGES.format("one-shot-lock", element);
     }
+
+    static String noReturnValueAccepted(String eventType, String componentId, Object returnValue,
+            String methodDescription)
+    {
+        return MESSAGES.format("no-return-value-accepted", eventType, componentId, String
+                .valueOf(returnValue), methodDescription);
+    }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java?view=diff&rev=470966&r1=470965&r2=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java Fri Nov  3 11:40:13 2006
@@ -368,6 +368,7 @@
     {
         add(configuration, locator, MarkupWriterFactory.class);
         add(configuration, locator, PersistentFieldManager.class);
+        add(configuration, locator, Environment.class);
 
         configuration.add(new InfrastructureContribution("request", request));
         configuration.add(new InfrastructureContribution("response", response));
@@ -550,10 +551,6 @@
      * rendering process. The primary use of this is to initialize environmental services inside the
      * {@link Environment}. The Environment is cleared before any of the contributions are
      * executed.
-     * 
-     * @param configuration
-     * @param environment
-     * @return
      */
     public static Runnable buildPageRenderInitializer(final Collection<Runnable> configuration,
             @InjectService("Environment")

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/util/UtilStrings.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/util/UtilStrings.properties?view=diff&rev=470966&r1=470965&r2=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/util/UtilStrings.properties (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/util/UtilStrings.properties Fri Nov  3 11:40:13 2006
@@ -16,4 +16,6 @@
 dependency-cycle=Unable to add '%s' as a dependency of '%s', as that forms a dependency cycle ('%<s' depends on itself via '%1$s'). The dependency has been ignored.
 duplicate-orderer=Could not add object with duplicate id '%s'.  The duplicate object has been ignored.
 constraint-format=Could not parse ordering constraint '%s' (for '%s'). The constraint has been ignored.
-one-shot-lock=Method %s may no longer be invoked.
\ No newline at end of file
+one-shot-lock=Method %s may no longer be invoked.
+no-return-value-accepted=Event '%s' from %s received an event handler method return value of %s from %s. \
+  This type of event does not support return values from event handler methods.
\ No newline at end of file

Modified: tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/infrastructure.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/infrastructure.apt?view=diff&rev=470966&r1=470965&r2=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/infrastructure.apt (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/site/apt/guide/infrastructure.apt Fri Nov  3 11:40:13 2006
@@ -49,6 +49,8 @@
 *-----------------------+--------------------------------------------------------------------+------------------------------------+
 | <<Property>>          | <<Service Interface>>                                             | <<Default Service>>               |
 *-----------------------+--------------------------------------------------------------------+-----------------------------------+
+| environment | {{{../apidocs/org/apache/tapestry/services/Environment.html}Environment}} | tapestry.Environment |
+*-----------------------+--------------------------------------------------------------------+-----------------------------------+
 | markupWriterFactory | {{{../apidocs/org/apache/tapestry/services/MarkupWriterFactory.html}MarkupWriterFactory}} | tapestry.MarkupWriterFactory |
 *-----------------------+--------------------------------------------------------------------+-----------------------------------+
 | persistentFieldManager | {{{../apidocs/org/apache/tapestry/services/PersistentFieldManager.html}PersistentFieldManager}} | tapestry.PersistentFieldManager |

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/conf/testng.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/conf/testng.xml?view=diff&rev=470966&r1=470965&r2=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/conf/testng.xml (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/conf/testng.xml Fri Nov  3 11:40:13 2006
@@ -15,7 +15,7 @@
    limitations under the License.
 -->
 
-<suite name="Tapestry" parallel="true" thread-count="10" annotations="1.5" verbose="2">
+<suite name="Tapestry" parallel="false" thread-count="10" annotations="1.5" verbose="2">
   <test name="Tapestry Core">
     <packages>
       <!-- Logically we'd like to do the General (unit) testing first, but practically,

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentEventImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentEventImplTest.java?view=diff&rev=470966&r1=470965&r2=470966
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentEventImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/ComponentEventImplTest.java Fri Nov  3 11:40:13 2006
@@ -22,9 +22,6 @@
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-/**
- * 
- */
 public class ComponentEventImplTest extends InternalBaseTestCase
 {
     private TypeCoercer _coercer;
@@ -44,39 +41,62 @@
     @Test
     public void matches_on_event_type()
     {
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, null, _coercer);
+        ComponentEventHandler handler = newComponentEventHandler();
+
+        replay();
+
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler,
+                _coercer);
 
         assertTrue(event.matchesByEventType(new String[]
         { "foo", "eventType", "bar" }));
         assertFalse(event.matchesByEventType(new String[]
         { "foo", "bar" }));
+
+        verify();
     }
 
     @Test
     public void matches_on_component_id()
     {
-        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, null, _coercer);
+        ComponentEventHandler handler = newComponentEventHandler();
+
+        replay();
+        ComponentEvent event = new ComponentEventImpl("eventType", "someId", null, handler,
+                _coercer);
 
         assertTrue(event.matchesByComponentId(null, new String[]
         { "foo", "someId", "bar" }));
         assertFalse(event.matchesByComponentId(null, new String[]
         { "foo", "bar" }));
+
+        verify();
     }
 
     @Test
     public void coerce_context()
     {
+        ComponentEventHandler handler = newComponentEventHandler();
+
+        replay();
+
         ComponentEvent event = new ComponentEventImpl("eventType", "someId", new String[]
-        { "27" }, null, _coercer);
+        { "27" }, handler, _coercer);
 
         assertEquals(event.coerceContext(0, "java.lang.Integer", "method descrip"), new Integer(27));
+
+        verify();
     }
 
     @Test
     public void coerce_when_not_enough_context()
     {
+        ComponentEventHandler handler = newComponentEventHandler();
+
+        replay();
+
         ComponentEvent event = new ComponentEventImpl("eventType", "someId", new String[]
-        { "27" }, null, _coercer);
+        { "27" }, handler, _coercer);
 
         try
         {
@@ -88,13 +108,19 @@
                     ex.getMessage(),
                     "Method foo.Bar.baz() has more parameters than there are context values for this component event.");
         }
+
+        verify();
     }
 
     @Test
     public void unable_to_coerce()
     {
+        ComponentEventHandler handler = newComponentEventHandler();
+
+        replay();
+
         ComponentEvent event = new ComponentEventImpl("eventType", "someId", new String[]
-        { "abc" }, null, _coercer);
+        { "abc" }, handler, _coercer);
 
         try
         {
@@ -105,10 +131,12 @@
         {
             // Different JVMs will report the conversion error slightly differently,
             // so we don't try to check that part of the error message.
-            
+
             assertTrue(ex.getMessage().startsWith(
                     "Exception in method foo.Bar.baz(), parameter #1:"));
         }
+
+        verify();
     }
 
     @Test