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;
+
[EMAIL PROTECTED]
+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 [EMAIL PROTECTED] 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 [EMAIL PROTECTED] 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 [EMAIL PROTECTED] ObjectInputStream} around a 
Base64 encoding (that originated
+ * in [EMAIL PROTECTED] 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 [EMAIL PROTECTED] Base64OutputStream} with a [EMAIL PROTECTED] 
GZIPOutputStream} as an
+ * [EMAIL PROTECTED] ObjectOutputStream}. This allows an object (or objects) 
to be encoded into a Base64
+ * string (accessed via [EMAIL PROTECTED] #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 [EMAIL PROTECTED] 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
      * [EMAIL PROTECTED] 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


Reply via email to