Author: hlship
Date: Wed Jan  6 19:29:57 2010
New Revision: 896632

URL: http://svn.apache.org/viewvc?rev=896632&view=rev
Log:
Merge branch 'tap5-674' into trunk

Added:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/PageCallback.java
   (with props)
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/AbstractEventContext.java
      - copied, changed from r896625, 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/EmptyEventContext.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/EventContextTests.java
   (with props)
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/root/PageCallbackTest.java
   (with props)
Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/EventContext.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/EmptyEventContext.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalConstants.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/URLEventContext.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ArrayEventContext.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/EventContext.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/EventContext.java?rev=896632&r1=896631&r2=896632&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/EventContext.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/EventContext.java
 Wed Jan  6 19:29:57 2010
@@ -1,10 +1,10 @@
-// Copyright 2008 The Apache Software Foundation
+// Copyright 2008, 2010 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
+// 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,
@@ -15,9 +15,10 @@
 package org.apache.tapestry5;
 
 /**
- * A collection of parameters that may eventually be passed to an event 
handler method.  Includes the ability to coerce
+ * A collection of parameters that may eventually be passed to an event 
handler method. Includes the
+ * ability to coerce
  * or encode parameters as needed.
- *
+ * 
  * @see org.apache.tapestry5.ioc.services.TypeCoercer
  * @see org.apache.tapestry5.ValueEncoder
  */
@@ -30,11 +31,22 @@
 
     /**
      * Extracts a parameter value and coerces or decodes it to the desired 
type.
-     *
-     * @param desiredType the type of value required
-     * @param index       identifies which parameter value to extract
+     * 
+     * @param desiredType
+     *            the type of value required
+     * @param index
+     *            identifies which parameter value to extract
      * @return the value extracted and converted or coerced
-     * @throws RuntimeException if the value can't be converted or the index 
is out of range
+     * @throws RuntimeException
+     *             if the value can't be converted or the index is out of range
      */
     <T> T get(Class<T> desiredType, int index);
+
+    /**
+     * Extracts the value of each context value as a string.
+     * 
+     * @return context values
+     * @since 5.2.0
+     */
+    String[] toStrings();
 }

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/PageCallback.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/PageCallback.java?rev=896632&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/PageCallback.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/PageCallback.java
 Wed Jan  6 19:29:57 2010
@@ -0,0 +1,98 @@
+// Copyright 2010 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.tapestry5;
+
+import java.io.Serializable;
+
+import org.apache.tapestry5.internal.InternalConstants;
+import org.apache.tapestry5.ioc.internal.util.Defense;
+import org.apache.tapestry5.services.PageRenderLinkSource;
+
+/**
+ * A way of capturing the name of a page and the page activation context so 
that, at a future date,
+ * the page can be invoked with that data. This kind of callback is very 
useful when creating more
+ * complicated workflows, where access to a page is "interrupted" with some 
operation before
+ * returning (via a callback) to the original flow.
+ * <p>
+ * Since the callback is serializable, it can be stored in the session.
+ * 
+ * @since 5.2.0
+ */
+public class PageCallback implements Serializable
+{
+    private static final long serialVersionUID = -8067619978636824702L;
+
+    private String pageName;
+
+    private String[] activationContext;
+
+    public PageCallback(String pageName, String[] activationContext)
+    {
+        this.pageName = Defense.notBlank(pageName, "pageName");
+        this.activationContext = Defense.notNull(activationContext, 
"activationContext");
+    }
+
+    public PageCallback(String pageName, EventContext activationContext)
+    {
+        this(pageName, activationContext.toStrings());
+    }
+
+    public PageCallback(String pageName)
+    {
+        this(pageName, InternalConstants.EMPTY_STRING_ARRAY);
+    }
+
+    public String getPageName()
+    {
+        return pageName;
+    }
+
+    @Override
+    public String toString()
+    {
+        StringBuilder builder = new StringBuilder("PageCallback[");
+
+        builder.append(pageName);
+
+        String sep = " ";
+
+        for (String c : activationContext)
+        {
+            builder.append(sep);
+            builder.append(c);
+
+            sep = "/";
+        }
+
+        builder.append("]");
+
+        return builder.toString();
+    }
+
+    /**
+     * Converts the callback (the page name and activation context) to a link; 
such a link may be
+     * returned from a event handler method to cause Tapestry to redirect to 
the page. Most of the
+     * details
+     * are encapsulated inside the {...@link PageRenderLinkSource} service.
+     * 
+     * @param linkSource
+     *            used to generate the link
+     * @return link corresponding to this callback
+     */
+    public Link toLink(PageRenderLinkSource linkSource)
+    {
+        return linkSource.createPageRenderLinkWithContext(pageName, (Object[]) 
activationContext);
+    }
+}

Propchange: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/PageCallback.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/EmptyEventContext.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/EmptyEventContext.java?rev=896632&r1=896631&r2=896632&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/EmptyEventContext.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/EmptyEventContext.java
 Wed Jan  6 19:29:57 2010
@@ -4,7 +4,7 @@
 // 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
+// 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,
@@ -36,4 +36,9 @@
     {
         return null;
     }
+
+    public String[] toStrings()
+    {
+        return InternalConstants.EMPTY_STRING_ARRAY;
+    }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalConstants.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalConstants.java?rev=896632&r1=896631&r2=896632&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalConstants.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalConstants.java
 Wed Jan  6 19:29:57 2010
@@ -149,4 +149,6 @@
      */
     public static final String INHERIT_BINDING_PREFIX = "inherit:";
     public static final long TEN_YEARS = new 
TimeInterval("10y").milliseconds();
+        
+    public static final String[] EMPTY_STRING_ARRAY = new String[0];
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/URLEventContext.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/URLEventContext.java?rev=896632&r1=896631&r2=896632&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/URLEventContext.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/URLEventContext.java
 Wed Jan  6 19:29:57 2010
@@ -1,10 +1,10 @@
-// Copyright 2008 The Apache Software Foundation
+// Copyright 2008, 2010 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
+// 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,
@@ -14,14 +14,14 @@
 
 package org.apache.tapestry5.internal;
 
-import org.apache.tapestry5.EventContext;
 import org.apache.tapestry5.services.ContextValueEncoder;
 
 /**
- * Implementation based on values extracted from the URL (an event context, or 
a page activation context) that uses a
- * {...@link org.apache.tapestry5.services.ContextValueEncoder} to convert 
from string values to the desired values.
+ * Implementation based on values extracted from the URL (an event context, or 
a page activation
+ * context) that uses a {...@link 
org.apache.tapestry5.services.ContextValueEncoder} to convert from
+ * string values to the desired values.
  */
-public class URLEventContext implements EventContext
+public class URLEventContext extends AbstractEventContext
 {
     private final ContextValueEncoder valueEncoder;
 

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ArrayEventContext.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ArrayEventContext.java?rev=896632&r1=896631&r2=896632&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ArrayEventContext.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ArrayEventContext.java
 Wed Jan  6 19:29:57 2010
@@ -1,10 +1,10 @@
-// Copyright 2009 The Apache Software Foundation
+// Copyright 2009, 2010 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
+// 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,
@@ -14,15 +14,15 @@
 
 package org.apache.tapestry5.internal.services;
 
-import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.internal.AbstractEventContext;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
 
 /**
  * Simple implementation of {...@link org.apache.tapestry5.EventContext}.
- *
+ * 
  * @since 5.1.0.0
  */
-public class ArrayEventContext implements EventContext
+public class ArrayEventContext extends AbstractEventContext
 {
     private final TypeCoercer typeCoercer;
 

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java?rev=896632&r1=896631&r2=896632&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/structure/ComponentPageElementImpl.java
 Wed Jan  6 19:29:57 2010
@@ -1,4 +1,4 @@
-// Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
+// Copyright 2006, 2007, 2008, 2009, 2010 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.
@@ -14,9 +14,33 @@
 
 package org.apache.tapestry5.internal.structure;
 
-import org.apache.tapestry5.*;
-import org.apache.tapestry5.annotations.*;
+import static org.apache.tapestry5.ioc.internal.util.Defense.notBlank;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.tapestry5.Binding;
+import org.apache.tapestry5.Block;
+import org.apache.tapestry5.BlockNotFoundException;
+import org.apache.tapestry5.ComponentEventCallback;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.Renderable;
+import org.apache.tapestry5.TapestryMarkers;
+import org.apache.tapestry5.annotations.AfterRender;
+import org.apache.tapestry5.annotations.AfterRenderBody;
+import org.apache.tapestry5.annotations.AfterRenderTemplate;
+import org.apache.tapestry5.annotations.BeforeRenderTemplate;
+import org.apache.tapestry5.annotations.BeginRender;
+import org.apache.tapestry5.annotations.CleanupRender;
+import org.apache.tapestry5.annotations.SetupRender;
 import org.apache.tapestry5.dom.Element;
+import org.apache.tapestry5.internal.AbstractEventContext;
 import org.apache.tapestry5.internal.InternalComponentResources;
 import org.apache.tapestry5.internal.services.ComponentEventImpl;
 import org.apache.tapestry5.internal.services.EventImpl;
@@ -24,16 +48,22 @@
 import org.apache.tapestry5.internal.util.NotificationEventCallback;
 import org.apache.tapestry5.ioc.BaseLocatable;
 import org.apache.tapestry5.ioc.Location;
-import static org.apache.tapestry5.ioc.internal.util.Defense.notBlank;
-import org.apache.tapestry5.ioc.internal.util.*;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry5.ioc.internal.util.Defense;
+import org.apache.tapestry5.ioc.internal.util.InternalUtils;
+import org.apache.tapestry5.ioc.internal.util.Orderer;
+import org.apache.tapestry5.ioc.internal.util.TapestryException;
 import org.apache.tapestry5.model.ComponentModel;
 import org.apache.tapestry5.model.ParameterModel;
 import org.apache.tapestry5.runtime.Component;
-import org.apache.tapestry5.runtime.*;
+import org.apache.tapestry5.runtime.ComponentEvent;
+import org.apache.tapestry5.runtime.ComponentEventException;
+import org.apache.tapestry5.runtime.Event;
+import org.apache.tapestry5.runtime.PageLifecycleListener;
+import org.apache.tapestry5.runtime.RenderCommand;
+import org.apache.tapestry5.runtime.RenderQueue;
 import org.slf4j.Logger;
 
-import java.util.*;
-
 /**
  * Implements {...@link RenderCommand} and represents a component within an 
overall page. Much of a component page
  * element's behavior is delegated to user code, via a {...@link 
org.apache.tapestry5.runtime.Component} instance.
@@ -1038,7 +1068,7 @@
 
     private EventContext createParameterContext(final Object... values)
     {
-        return new EventContext()
+        return new AbstractEventContext()
         {
             public int getCount()
             {

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java?rev=896632&r1=896631&r2=896632&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/test/TapestryTestCase.java
 Wed Jan  6 19:29:57 2010
@@ -14,7 +14,52 @@
 
 package org.apache.tapestry5.test;
 
-import org.apache.tapestry5.*;
+import static java.lang.Thread.sleep;
+import static org.apache.tapestry5.internal.test.CodeEq.codeEq;
+import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newList;
+import static org.easymock.EasyMock.eq;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.tapestry5.Asset;
+import org.apache.tapestry5.Asset2;
+import org.apache.tapestry5.Binding;
+import org.apache.tapestry5.Block;
+import org.apache.tapestry5.ClientElement;
+import org.apache.tapestry5.ComponentEventCallback;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.ComponentResourcesCommon;
+import org.apache.tapestry5.Field;
+import org.apache.tapestry5.FieldTranslator;
+import org.apache.tapestry5.FieldValidationSupport;
+import org.apache.tapestry5.FieldValidator;
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.NullFieldStrategy;
+import org.apache.tapestry5.PropertyConduit;
+import org.apache.tapestry5.PropertyOverrides;
+import org.apache.tapestry5.RenderSupport;
+import org.apache.tapestry5.Translator;
+import org.apache.tapestry5.ValidationDecorator;
+import org.apache.tapestry5.ValidationTracker;
+import org.apache.tapestry5.Validator;
+import org.apache.tapestry5.ValueEncoder;
 import org.apache.tapestry5.annotations.Id;
 import org.apache.tapestry5.annotations.Parameter;
 import org.apache.tapestry5.annotations.Path;
@@ -22,11 +67,14 @@
 import org.apache.tapestry5.beaneditor.PropertyModel;
 import org.apache.tapestry5.internal.services.MapMessages;
 import org.apache.tapestry5.internal.services.MarkupWriterImpl;
-import static org.apache.tapestry5.internal.test.CodeEq.codeEq;
-import org.apache.tapestry5.ioc.*;
+import org.apache.tapestry5.ioc.AnnotationProvider;
+import org.apache.tapestry5.ioc.Locatable;
+import org.apache.tapestry5.ioc.Location;
+import org.apache.tapestry5.ioc.Messages;
+import org.apache.tapestry5.ioc.ObjectLocator;
+import org.apache.tapestry5.ioc.Resource;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
-import static org.apache.tapestry5.ioc.internal.util.CollectionFactory.newList;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.test.IOCTestCase;
 import org.apache.tapestry5.model.ComponentModel;
@@ -34,23 +82,50 @@
 import org.apache.tapestry5.model.MutableComponentModel;
 import org.apache.tapestry5.model.ParameterModel;
 import org.apache.tapestry5.runtime.Component;
-import org.apache.tapestry5.services.*;
+import org.apache.tapestry5.services.AliasManager;
+import org.apache.tapestry5.services.ApplicationStateCreator;
+import org.apache.tapestry5.services.ApplicationStateManager;
+import org.apache.tapestry5.services.ApplicationStatePersistenceStrategy;
+import org.apache.tapestry5.services.ApplicationStatePersistenceStrategySource;
+import org.apache.tapestry5.services.AssetFactory;
+import org.apache.tapestry5.services.AssetSource;
+import org.apache.tapestry5.services.BaseURLSource;
+import org.apache.tapestry5.services.BeanModelSource;
+import org.apache.tapestry5.services.BindingFactory;
+import org.apache.tapestry5.services.BindingSource;
+import org.apache.tapestry5.services.ClassTransformation;
+import org.apache.tapestry5.services.ClasspathAssetAliasManager;
+import org.apache.tapestry5.services.ComponentClassResolver;
+import org.apache.tapestry5.services.ComponentEventRequestHandler;
+import org.apache.tapestry5.services.ComponentEventResultProcessor;
+import org.apache.tapestry5.services.ComponentRequestHandler;
+import org.apache.tapestry5.services.Context;
+import org.apache.tapestry5.services.Environment;
+import org.apache.tapestry5.services.FieldTranslatorSource;
+import org.apache.tapestry5.services.FieldValidatorSource;
+import org.apache.tapestry5.services.FormSupport;
+import org.apache.tapestry5.services.Heartbeat;
+import org.apache.tapestry5.services.HttpServletRequestHandler;
+import org.apache.tapestry5.services.InjectionProvider;
+import org.apache.tapestry5.services.MetaDataLocator;
+import org.apache.tapestry5.services.MethodFilter;
+import org.apache.tapestry5.services.PageRenderLinkSource;
+import org.apache.tapestry5.services.Request;
+import org.apache.tapestry5.services.RequestGlobals;
+import org.apache.tapestry5.services.RequestHandler;
+import org.apache.tapestry5.services.ResourceDigestGenerator;
+import org.apache.tapestry5.services.Response;
+import org.apache.tapestry5.services.Session;
+import org.apache.tapestry5.services.TransformMethodSignature;
+import org.apache.tapestry5.services.TranslatorSource;
+import org.apache.tapestry5.services.ValidationConstraintGenerator;
+import org.apache.tapestry5.services.ValidationMessagesSource;
+import org.apache.tapestry5.services.ValueEncoderSource;
 import org.easymock.EasyMock;
-import static org.easymock.EasyMock.eq;
 import org.easymock.IAnswer;
 
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import java.io.*;
-import static java.lang.Thread.sleep;
-import java.lang.annotation.Annotation;
-import java.net.URL;
-import java.util.*;
-
 /**
- * Base test case that adds a number of convienience factory and training 
methods for the public interfaces of
+ * Base test case that adds a number of convenience factory and training 
methods for the public interfaces of
  * Tapestry.
  */
 public abstract class TapestryTestCase extends IOCTestCase
@@ -1221,4 +1296,9 @@
     {
         return newMock(RequestGlobals.class);
     }
+
+    protected final PageRenderLinkSource mockPageRenderLinkSource()
+    {
+        return newMock(PageRenderLinkSource.class);
+    }
 }

Copied: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/AbstractEventContext.java
 (from r896625, 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/EmptyEventContext.java)
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/AbstractEventContext.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/AbstractEventContext.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/EmptyEventContext.java&r1=896625&r2=896632&rev=896632&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/EmptyEventContext.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/AbstractEventContext.java
 Wed Jan  6 19:29:57 2010
@@ -1,10 +1,10 @@
-// Copyright 2008 The Apache Software Foundation
+// Copyright 2010 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
+// 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,
@@ -16,24 +16,19 @@
 
 import org.apache.tapestry5.EventContext;
 
-/**
- * Placeholder used when no context is available.
- */
-public class EmptyEventContext implements EventContext
+public abstract class AbstractEventContext implements EventContext
 {
-    /**
-     * Always returns zero.
-     */
-    public int getCount()
+    public String[] toStrings()
     {
-        return 0;
-    }
+        int count = getCount();
 
-    /**
-     * This should never be called because the count is always zero.
-     */
-    public <T> T get(Class<T> desiredType, int index)
-    {
-        return null;
+        String[] result = new String[count];
+
+        for (int i = 0; i < count; i++)
+        {
+            result[i] = get(String.class, i);
+        }
+
+        return result;
     }
 }

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/EventContextTests.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/EventContextTests.java?rev=896632&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/EventContextTests.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/EventContextTests.java
 Wed Jan  6 19:29:57 2010
@@ -0,0 +1,48 @@
+// Copyright 2010 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.tapestry5.internal.services;
+
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.internal.EmptyEventContext;
+import org.apache.tapestry5.internal.test.InternalBaseTestCase;
+import org.apache.tapestry5.ioc.services.TypeCoercer;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class EventContextTests extends InternalBaseTestCase
+{
+    private TypeCoercer typeCoercer;
+
+    @BeforeClass
+    public void setup()
+    {
+        typeCoercer = getService(TypeCoercer.class);
+    }
+
+    @Test
+    public void array_event_context_to_strings()
+    {
+        EventContext ec = new ArrayEventContext(typeCoercer, 1, 2.3);
+
+        assertEquals(ec.toStrings(), new String[]
+        { "1", "2.3" });
+    }
+
+    @Test
+    public void empty_event_context_to_strings()
+    {
+        assertEquals(new EmptyEventContext().toStrings(), new String[0]);
+    }
+}

Propchange: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/EventContextTests.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/root/PageCallbackTest.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/root/PageCallbackTest.java?rev=896632&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/root/PageCallbackTest.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/root/PageCallbackTest.java
 Wed Jan  6 19:29:57 2010
@@ -0,0 +1,76 @@
+// Copyright 2010 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.tapestry5.root;
+
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.Link;
+import org.apache.tapestry5.PageCallback;
+import org.apache.tapestry5.internal.services.ArrayEventContext;
+import org.apache.tapestry5.internal.test.InternalBaseTestCase;
+import org.apache.tapestry5.ioc.services.TypeCoercer;
+import org.apache.tapestry5.services.PageRenderLinkSource;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class PageCallbackTest extends InternalBaseTestCase
+{
+    private TypeCoercer typeCoercer;
+
+    @BeforeClass
+    public void setup()
+    {
+        typeCoercer = getService(TypeCoercer.class);
+    }
+
+    @Test
+    public void callback_with_no_context()
+    {
+        PageRenderLinkSource source = mockPageRenderLinkSource();
+        Link link = mockLink();
+
+        expect(source.createPageRenderLinkWithContext("foo")).andReturn(link);
+
+        PageCallback pc = new PageCallback("foo");
+
+        assertEquals(pc.toString(), "PageCallback[foo]");
+
+        replay();
+
+        assertSame(pc.toLink(source), link);
+
+        verify();
+    }
+
+    @Test
+    public void callback_with_context()
+    {
+        EventContext context = new ArrayEventContext(typeCoercer, 1, 2);
+
+        PageRenderLinkSource source = mockPageRenderLinkSource();
+        Link link = mockLink();
+
+        expect(source.createPageRenderLinkWithContext("bar", "1", 
"2")).andReturn(link);
+
+        PageCallback pc = new PageCallback("bar", context);
+
+        assertEquals(pc.toString(), "PageCallback[bar 1/2]");
+
+        replay();
+
+        assertSame(pc.toLink(source), link);
+
+        verify();
+    }
+}

Propchange: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/root/PageCallbackTest.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to