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