You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2006/09/23 19:07:43 UTC
svn commit: r449272 - in /tapestry/tapestry5/tapestry-core/trunk/src:
main/java/org/apache/tapestry/internal/
main/java/org/apache/tapestry/internal/services/
main/java/org/apache/tapestry/internal/structure/
main/java/org/apache/tapestry/services/ mai...
Author: hlship
Date: Sat Sep 23 10:07:42 2006
New Revision: 449272
URL: http://svn.apache.org/viewvc?view=rev&rev=449272
Log:
Make use of the TypeCoercer when reading parameter bindings.
Modified:
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryException.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageElementFactoryImpl.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/TypeCoercerImpl.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/StructureMessages.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/services/TapestryModule.java
tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java
tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/structure/StructureStrings.properties
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/components/Output.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/Countdown.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/MerryChristmas.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageElementFactoryImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/TypeCoercerImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java
tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties
tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/MerryChristmas.html
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryException.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryException.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryException.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/TapestryException.java Sat Sep 23 10:07:42 2006
@@ -48,6 +48,17 @@
/**
* @param message
* a message (may be null)
+ * @param cause
+ * if not null, the root cause of the exception, also used to set the location
+ */
+ public TapestryException(String message, Throwable cause)
+ {
+ this(message, cause, cause);
+ }
+
+ /**
+ * @param message
+ * a message (may be null)
* @param locatable
* location to associated with the exception, or null if not known
* @param cause
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/InternalModule.java Sat Sep 23 10:07:42 2006
@@ -51,6 +51,7 @@
import org.apache.tapestry.services.ComponentClassResolver;
import org.apache.tapestry.services.ComponentClassTransformWorker;
import org.apache.tapestry.services.MarkupWriterFactory;
+import org.apache.tapestry.services.TypeCoercer;
import org.apache.tapestry.services.WebContext;
import org.apache.tapestry.services.WebRequestFilter;
@@ -132,9 +133,11 @@
return new TemplateParserImpl(log);
}
- public PageElementFactory buildPageElementFactory()
+ public PageElementFactory buildPageElementFactory(@InjectService("tapestry.TypeCoercer")
+ TypeCoercer typeCoercer)
{
- return new PageElementFactoryImpl(_componentInstantiatorSource, _componentClassResolver);
+ return new PageElementFactoryImpl(_componentInstantiatorSource, _componentClassResolver,
+ typeCoercer);
}
public PageLoader buildPageLoader(@InjectService("PageElementFactory")
@@ -386,7 +389,7 @@
BindingFactory stringFactory = new BindingFactory()
{
// This will match embedded single quotes as-is, no escaping necessary.
-
+
private final Pattern _pattern = Pattern.compile("^\\s*'(.*)'\\s*$");
@SuppressNullCheck
@@ -407,7 +410,7 @@
};
// Do be honest, order probably doesn't matter.
-
+
configuration.add("Keyword", keywordFactory);
configuration.add("This", thisFactory);
configuration.add("Long", longFactory);
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageElementFactoryImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageElementFactoryImpl.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageElementFactoryImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/PageElementFactoryImpl.java Sat Sep 23 10:07:42 2006
@@ -16,6 +16,7 @@
import org.apache.tapestry.Location;
import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.internal.annotations.SuppressNullCheck;
import org.apache.tapestry.internal.parser.AttributeToken;
import org.apache.tapestry.internal.parser.StartElementToken;
import org.apache.tapestry.internal.parser.TextToken;
@@ -29,21 +30,29 @@
import org.apache.tapestry.model.ComponentModel;
import org.apache.tapestry.runtime.RenderQueue;
import org.apache.tapestry.services.ComponentClassResolver;
+import org.apache.tapestry.services.TypeCoercer;
/**
+ * Null check suppressed as much as to simplify testing (yea! I can pass a null TypeCoercer) as it
+ * is for efficiency.
+ *
* @author Howard M. Lewis Ship
*/
+@SuppressNullCheck
public class PageElementFactoryImpl implements PageElementFactory
{
private final ComponentInstantiatorSource _componentInstantiatorSource;
private final ComponentClassResolver _componentClassResolver;
+ private final TypeCoercer _typeCoercer;
+
public PageElementFactoryImpl(ComponentInstantiatorSource componentInstantiatorSource,
- ComponentClassResolver resolver)
+ ComponentClassResolver resolver, TypeCoercer typeCoercer)
{
_componentInstantiatorSource = componentInstantiatorSource;
_componentClassResolver = resolver;
+ _typeCoercer = typeCoercer;
}
/** Singleton instance that represents any close tag of any element in any template. */
@@ -99,7 +108,7 @@
// template.
ComponentPageElementImpl result = new ComponentPageElementImpl(page, container, id,
- instantiator, model, location);
+ instantiator, model, _typeCoercer, location);
page.addLifecycleListener(result);
@@ -111,7 +120,8 @@
Instantiator instantiator = _componentInstantiatorSource.findInstantiator(componentType);
ComponentModel model = _componentInstantiatorSource.findComponentModel(componentType);
- ComponentPageElementImpl result = new ComponentPageElementImpl(page, instantiator, model);
+ ComponentPageElementImpl result = new ComponentPageElementImpl(page, instantiator, model,
+ _typeCoercer);
page.addLifecycleListener(result);
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/TypeCoercerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/TypeCoercerImpl.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/TypeCoercerImpl.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/services/TypeCoercerImpl.java Sat Sep 23 10:07:42 2006
@@ -121,9 +121,17 @@
Class effectiveTargetType = TransformUtils.getWrapperType(targetType);
+ // Is a coercion even necessary? Not if the target type is assignable from the
+ // input value.
+
+ if (effectiveTargetType.isAssignableFrom(sourceType))
+ return input;
+
Coercion coercer = findCoercer(sourceType, effectiveTargetType);
Object result = coercer.coerce(input);
+
+ // Double check that the coercer provided a result of the correct type
return effectiveTargetType.cast(result);
}
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=449272&r1=449271&r2=449272
==============================================================================
--- 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 Sat Sep 23 10:07:42 2006
@@ -36,6 +36,7 @@
import org.apache.tapestry.runtime.PageLifecycleListener;
import org.apache.tapestry.runtime.RenderCommand;
import org.apache.tapestry.runtime.RenderQueue;
+import org.apache.tapestry.services.TypeCoercer;
/**
* Implements {@link org.apache.tapestry.internal.structure.PageElement} and
@@ -85,34 +86,19 @@
private boolean _loaded;
- private static final Map<Class, Class> PRIMITIVE_TO_WRAPPER = newMap();
+ private final TypeCoercer _typeCoercer;
- static
+ /**
+ * Constructor for the root component of a page.
+ *
+ * @param typeCoercer
+ * TODO
+ */
+ @SuppressNullCheck
+ public ComponentPageElementImpl(Page page, Instantiator instantiator, ComponentModel model,
+ TypeCoercer typeCoercer)
{
- PRIMITIVE_TO_WRAPPER.put(boolean.class, Boolean.class);
- PRIMITIVE_TO_WRAPPER.put(byte.class, Byte.class);
- PRIMITIVE_TO_WRAPPER.put(short.class, Short.class);
- PRIMITIVE_TO_WRAPPER.put(int.class, Integer.class);
- PRIMITIVE_TO_WRAPPER.put(long.class, Long.class);
- PRIMITIVE_TO_WRAPPER.put(char.class, Character.class);
- PRIMITIVE_TO_WRAPPER.put(float.class, Float.class);
- PRIMITIVE_TO_WRAPPER.put(double.class, Double.class);
- }
-
- /** Constructor for the root component of a page. */
- public ComponentPageElementImpl(Page page, Instantiator instantiator, ComponentModel model)
- {
- super(null);
-
- _container = null;
- _id = null;
-
- // A little bit of duplication that's unavoiable if we want
- // to keep the fields final.
-
- _page = page;
- _componentModel = model;
- _component = instantiator.newInstance(this);
+ this(page, null, null, instantiator, model, typeCoercer, null);
}
/**
@@ -129,22 +115,24 @@
* used to create the new component instance
* @param model
* defines the component
+ * @param typeCoercer
+ * TODO
* @param location
* location of the element (within a template), used as part of exception reporting
*/
+ @SuppressNullCheck
public ComponentPageElementImpl(Page page, ComponentPageElement container, String id,
- Instantiator instantiator, ComponentModel model, Location location)
+ Instantiator instantiator, ComponentModel model, TypeCoercer typeCoercer,
+ Location location)
{
super(location);
_container = container;
_id = id;
-
- // A little bit of duplication that's unavoiable if we want
- // to keep the fields final.
-
_page = page;
_componentModel = model;
+ _typeCoercer = typeCoercer;
+
_component = instantiator.newInstance(this);
}
@@ -466,15 +454,19 @@
// TODO: If binding is null ...
- // TODO: Type coercion to expected type
-
- // Easier to do primitive-to-wrapper conversions in this code than in
- // the generated component code.
-
- if (expectedType.isPrimitive())
- expectedType = PRIMITIVE_TO_WRAPPER.get(expectedType);
+ try
+ {
+ Object boundValue = b.get();
- return expectedType.cast(b.get());
+ return _typeCoercer.coerce(boundValue, expectedType);
+ }
+ catch (Exception ex)
+ {
+ throw new TapestryException(StructureMessages.getParameterFailure(
+ parameterName,
+ getCompleteId(),
+ ex), ex);
+ }
}
public <T> void writeParameter(String parameterName, T parameterValue)
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/StructureMessages.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/StructureMessages.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/StructureMessages.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/internal/structure/StructureMessages.java Sat Sep 23 10:07:42 2006
@@ -39,4 +39,9 @@
{
return MESSAGES.format("no-such-component", parent.getCompleteId(), embeddedId);
}
+
+ static String getParameterFailure(String parameterName, String componentId, Throwable cause)
+ {
+ return MESSAGES.format("get-parameter-failure", parameterName, componentId, cause);
+ }
}
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=449272&r1=449271&r2=449272
==============================================================================
--- 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 Sat Sep 23 10:07:42 2006
@@ -489,12 +489,18 @@
}
/**
- * Contributes a set of standard coercions:
+ * Contributes a set of standard type coercions:
* <ul>
* <li>Object to String</li>
- * <li>String to Integer</li>
+ * <li>String to Double</li>
+ * <li>Number to Byte</li>
+ * <li>Number to Short</li>
* <li>Number to Integer</li>
- * <li>String to Boolean</li>
+ * <li>Number to Long</li>
+ * <li>Number to Float</li>
+ * <li>Number to Double</li>
+ * <li>String to Boolean ("false" is always false, other non-blank strings are true)</li>
+ * <li>Number to Boolean (true if long value is non zero)</li>
* <li>Null to Boolean (always false)</li>
* </ul>
*
@@ -510,11 +516,27 @@
}
});
- add(configuration, String.class, Integer.class, new Coercion<String, Integer>()
+ add(configuration, String.class, Double.class, new Coercion<String, Double>()
{
- public Integer coerce(String input)
+ public Double coerce(String input)
{
- return new Integer(input);
+ return new Double(input);
+ }
+ });
+
+ add(configuration, Number.class, Byte.class, new Coercion<Number, Byte>()
+ {
+ public Byte coerce(Number input)
+ {
+ return input.byteValue();
+ }
+ });
+
+ add(configuration, Number.class, Short.class, new Coercion<Number, Short>()
+ {
+ public Short coerce(Number input)
+ {
+ return input.shortValue();
}
});
@@ -526,6 +548,30 @@
}
});
+ add(configuration, Number.class, Long.class, new Coercion<Number, Long>()
+ {
+ public Long coerce(Number input)
+ {
+ return input.longValue();
+ }
+ });
+
+ add(configuration, Number.class, Float.class, new Coercion<Number, Float>()
+ {
+ public Float coerce(Number input)
+ {
+ return input.floatValue();
+ }
+ });
+
+ add(configuration, Number.class, Double.class, new Coercion<Number, Double>()
+ {
+ public Double coerce(Number input)
+ {
+ return input.doubleValue();
+ }
+ });
+
add(configuration, String.class, Boolean.class, new Coercion<String, Boolean>()
{
public Boolean coerce(String input)
@@ -538,6 +584,14 @@
// Any non-blank string but "false"
return true;
+ }
+ });
+
+ add(configuration, Number.class, Boolean.class, new Coercion<Number, Boolean>()
+ {
+ public Boolean coerce(Number input)
+ {
+ return input.longValue() != 0;
}
});
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/test/BaseTestCase.java Sat Sep 23 10:07:42 2006
@@ -59,6 +59,7 @@
import org.apache.tapestry.services.ClassTransformation;
import org.apache.tapestry.services.ComponentClassResolver;
import org.apache.tapestry.services.MethodSignature;
+import org.apache.tapestry.services.TypeCoercer;
import org.apache.tapestry.services.WebRequest;
/**
@@ -494,5 +495,16 @@
{
model.getParameterNames();
setReturnValue(Arrays.asList(names));
+ }
+
+ protected <S, T> void train_coerce(TypeCoercer coercer, S input, Class<T> expectedType, T coercedValue)
+ {
+ coercer.coerce(input, expectedType);
+ setReturnValue(coercedValue);
+ }
+
+ protected final TypeCoercer newTypeCoercer()
+ {
+ return newMock(TypeCoercer.class);
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/structure/StructureStrings.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/structure/StructureStrings.properties?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/structure/StructureStrings.properties (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/structure/StructureStrings.properties Sat Sep 23 10:07:42 2006
@@ -13,4 +13,5 @@
# limitations under the License.
missing-parameters=Parameter(s) %s are required for %s, but have not been bound.
-no-such-component=Component %s does not contain an embedded component with id '%s'.
\ No newline at end of file
+no-such-component=Component %s does not contain an embedded component with id '%s'.
+get-parameter-failure=Failure reading parameter %s of component %s: %s
\ No newline at end of file
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java Sat Sep 23 10:07:42 2006
@@ -36,7 +36,7 @@
private static final String BASE_URL = "http://localhost/";
/** 5 seconds */
- public static final String PAGE_LOAD_TIMEOUT = "5000";
+ public static final String PAGE_LOAD_TIMEOUT = "50000";
private Selenium _selenium;
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/components/Output.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/components/Output.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/components/Output.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/components/Output.java Sat Sep 23 10:07:42 2006
@@ -23,11 +23,11 @@
public class Output
{
@Parameter(required = true)
- private Object _value;
+ private String _value;
@BeginRender
void render(MarkupWriter writer)
{
- writer.write(_value.toString());
+ writer.write(_value);
}
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/Countdown.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/Countdown.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/Countdown.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/Countdown.java Sat Sep 23 10:07:42 2006
@@ -26,7 +26,7 @@
public class Countdown
{
@Component(parameters =
- { "start=max", "end=min", "value=count" })
+ { "start=5", "end=1", "value=count" })
private Loop _loop;
@SuppressWarnings("unused")
@@ -43,18 +43,6 @@
public void setCount(int count)
{
_count = count;
- }
-
- // These are just necessary until we get parameter type coercions working.
-
- public int getMax()
- {
- return 5;
- }
-
- public int getMin()
- {
- return 1;
}
// Just needed until component: binding prefix is added.
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/MerryChristmas.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/MerryChristmas.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/MerryChristmas.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/MerryChristmas.java Sat Sep 23 10:07:42 2006
@@ -19,8 +19,4 @@
@ComponentClass
public class MerryChristmas
{
- public int getMax()
- {
- return 3;
- }
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageElementFactoryImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageElementFactoryImplTest.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageElementFactoryImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageElementFactoryImplTest.java Sat Sep 23 10:07:42 2006
@@ -42,7 +42,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source, resolver);
+ PageElementFactory factory = new PageElementFactoryImpl(source, resolver, null);
StartElementToken token = new StartElementToken("fred", l);
PageElement element = factory.newStartElement(token);
@@ -66,7 +66,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source, resolver);
+ PageElementFactory factory = new PageElementFactoryImpl(source, resolver, null);
AttributeToken token = new AttributeToken("name", "value", l);
PageElement element = factory.newAttributeElement(token);
@@ -91,7 +91,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source, resolver);
+ PageElementFactory factory = new PageElementFactoryImpl(source, resolver, null);
PageElement element = factory.newEndElement();
@@ -117,7 +117,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source, resolver);
+ PageElementFactory factory = new PageElementFactoryImpl(source, resolver, null);
PageElement element1 = factory.newEndElement();
PageElement element2 = factory.newEndElement();
@@ -138,7 +138,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source, resolver);
+ PageElementFactory factory = new PageElementFactoryImpl(source, resolver, null);
TextToken token = new TextToken("some text", l);
PageElement element = factory.newTextElement(token);
@@ -165,7 +165,7 @@
replay();
- PageElementFactory factory = new PageElementFactoryImpl(source, resolver);
+ PageElementFactory factory = new PageElementFactoryImpl(source, resolver, null);
PageElement element = factory.newRenderBodyElement(component);
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/TypeCoercerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/TypeCoercerImplTest.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/TypeCoercerImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/TypeCoercerImplTest.java Sat Sep 23 10:07:42 2006
@@ -33,13 +33,13 @@
@Test
public void builtin_coercion()
{
- // String to Integer
+ // String to Double
- assertEquals(_coercer.coerce("-15", Integer.class), new Integer(-15));
+ assertEquals(_coercer.coerce("-15", Double.class), new Double(-15));
// Now a second pass through, to exercise the internal cache
- assertEquals(_coercer.coerce("227", Integer.class), new Integer(227));
+ assertEquals(_coercer.coerce("2.27", Double.class), new Double(2.27));
}
@Test
@@ -49,6 +49,14 @@
}
@Test
+ public void no_coercion_necessary()
+ {
+ Object input = new Integer(-37);
+
+ assertSame(_coercer.coerce(input, Number.class), input);
+ }
+
+ @Test
public void combined_coercion()
{
StringBuilder builder = new StringBuilder("12345");
@@ -56,6 +64,10 @@
// This should trigger Object -> String, String -> Integer
assertEquals(_coercer.coerce(builder, int.class), new Integer(12345));
+
+ // This should trigger String -> Double, Number -> Integer
+
+ assertEquals(_coercer.coerce("52", Integer.class), new Integer(52));
}
@Test
@@ -96,6 +108,15 @@
{ "false", Boolean.class, false },
{ " False ", Boolean.class, false },
{ null, Boolean.class, false }, // void --> Boolean
+ { new Double(256), Integer.class, new Integer(256) }, // Number --> Integer
+ { new Double(22.7), Integer.class, new Integer(22) },
+ { new Integer(0), Boolean.class, false }, // Number --> Boolean
+ { new Long(32838), Boolean.class, true },
+ { new Integer(127), Byte.class, new Byte("127") }, // Number --> Byte
+ { new Double(58), Short.class, new Short("58") }, // Number --> Short
+ { new Integer(33), Long.class, new Long(33) }, // Number --> Long
+ { new Integer(22), Float.class, new Float(22) }, // Number --> Float
+ { new Integer(1234), Double.class, new Double(1234) }, // Number --> Float
};
}
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/structure/ComponentPageElementImplTest.java Sat Sep 23 10:07:42 2006
@@ -23,6 +23,7 @@
import org.apache.tapestry.model.ComponentModel;
import org.apache.tapestry.model.ParameterModel;
import org.apache.tapestry.runtime.ComponentLifecycle;
+import org.apache.tapestry.services.TypeCoercer;
import org.easymock.EasyMock;
import org.testng.annotations.Test;
@@ -43,7 +44,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model, null);
assertFalse(cpe.isBound("fred"));
@@ -70,7 +71,7 @@
replay();
- ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, model);
+ ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, model, null);
cpe.addParameter("barney", binding);
@@ -96,7 +97,7 @@
replay();
- ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, model);
+ ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, ins, model, null);
cpe.containingPageDidLoad();
@@ -129,7 +130,7 @@
replay();
ComponentPageElementImpl cpe = new ComponentPageElementImpl(page, container, "myid", ins,
- model, l);
+ model, null, l);
try
{
@@ -161,7 +162,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model, null);
assertFalse(cpe.isInvariant("fred"));
@@ -180,19 +181,23 @@
ComponentLifecycle component = newComponentLifecycle();
Instantiator ins = newInstantiator(component);
ComponentModel model = newComponentModel();
-
+ TypeCoercer coercer = newTypeCoercer();
Binding binding = newBinding();
+ Long boundValue = new Long(23);
+
binding.get();
- setReturnValue(new Long(23));
+ setReturnValue(boundValue);
+
+ train_coerce(coercer, boundValue, Long.class, boundValue);
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model, coercer);
cpe.addParameter("barney", binding);
- assertEquals(cpe.readParameter("barney", Long.class), new Long(23));
+ assertSame(cpe.readParameter("barney", Long.class), boundValue);
verify();
}
@@ -211,7 +216,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model, null);
cpe.addParameter("barney", binding);
@@ -232,7 +237,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model, null);
try
{
@@ -262,7 +267,7 @@
replay();
- ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model);
+ ComponentPageElement cpe = new ComponentPageElementImpl(page, ins, model, null);
cpe.addEmbeddedElement(childElement);
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/log4j.properties Sat Sep 23 10:07:42 2006
@@ -19,7 +19,7 @@
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%c{1} [%p] %m%n
+log4j.appender.A1.layout.ConversionPattern=[%p] %c{1} %m%n
log4j.category.org.apache.tapestry=debug
log4j.category.tapestry=debug
Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/MerryChristmas.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/MerryChristmas.html?view=diff&rev=449272&r1=449271&r2=449272
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/MerryChristmas.html (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/MerryChristmas.html Sat Sep 23 10:07:42 2006
@@ -1,5 +1,5 @@
<t:comp type="Border" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<p> The Loop component demonstrates reading and writing of properties with the prop: binding prefix.</p>
- <p> Merry Christmas: <t:comp type="Loop" end="prop:max"> Ho! </t:comp>
+ <p> Merry Christmas: <t:comp type="Loop" end="3"> Ho! </t:comp>
</p>
</t:comp>