where it was. * Changed PropertyResolver.resolveProperties() to use a PropertyStore, rather than a TaskContext. * Changed PropertyStore methods to throw a TaskException. * Changed contract of PropertyStore.getProperty() to throw exception if the requested property is not set. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272288 13f79535-47bb-0310-9956-ffa450edef68master
@@ -101,6 +101,7 @@ public class DefaultEmbeddor | |||
projectType = FileUtil.getExtension( location ); | |||
} | |||
// TODO - reuse the project builders, or dispose them | |||
final ProjectBuilder builder = getProjectBuilder( projectType, parameters ); | |||
return builder.build( location ); | |||
} | |||
@@ -136,6 +137,8 @@ public class DefaultEmbeddor | |||
// to the workspace | |||
parameters.setParameter( MYRMIDON_HOME, m_parameters.getParameter( MYRMIDON_HOME ) ); | |||
setupObject( workspace, m_workspaceServiceManager, parameters ); | |||
// TODO - should keep track of workspaces, to dispose them later | |||
return workspace; | |||
} | |||
@@ -145,7 +148,7 @@ public class DefaultEmbeddor | |||
* @param name The shorthand name of the listener. | |||
* @return the listener. | |||
*/ | |||
public ProjectListener createListener( String name ) | |||
public ProjectListener createListener( final String name ) | |||
throws Exception | |||
{ | |||
final TypeFactory factory = m_typeManager.getFactory( ProjectListener.ROLE ); | |||
@@ -8,7 +8,8 @@ | |||
package org.apache.myrmidon.components.property; | |||
import org.apache.myrmidon.interfaces.property.PropertyResolver; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.interfaces.property.PropertyStore; | |||
import org.apache.myrmidon.api.TaskException; | |||
/** | |||
* A {@link PropertyResolver} implementation which resolves properties | |||
@@ -28,19 +29,16 @@ public class ClassicPropertyResolver | |||
* If there is no such value, returns the original property reference. | |||
* | |||
* @param propertyName the name of the property to retrieve | |||
* @param context the set of known properties | |||
* @param properties the set of known properties | |||
*/ | |||
protected Object getPropertyValue( final String propertyName, | |||
final TaskContext context ) | |||
final PropertyStore properties ) | |||
throws TaskException | |||
{ | |||
Object propertyValue = context.getProperty( propertyName ); | |||
if ( propertyValue == null ) | |||
if( ! properties.isPropertySet( propertyName ) ) | |||
{ | |||
return "${" + propertyName + "}"; | |||
} | |||
else | |||
{ | |||
return propertyValue; | |||
} | |||
return properties.getProperty( propertyName ); | |||
} | |||
} |
@@ -14,9 +14,9 @@ import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.avalon.framework.service.ServiceException; | |||
import org.apache.avalon.framework.service.ServiceManager; | |||
import org.apache.avalon.framework.service.Serviceable; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.interfaces.property.PropertyResolver; | |||
import org.apache.myrmidon.interfaces.property.PropertyStore; | |||
/** | |||
* Base class for PropertyResolver implementations. | |||
@@ -51,12 +51,12 @@ public class DefaultPropertyResolver | |||
* <code>toString()</code> called on the property value. | |||
* | |||
* @param content the property to resolve | |||
* @param context the context in which to resolve property | |||
* @param properties the context in which to resolve property | |||
* @return the reolved property | |||
* @exception TaskException if an error occurs | |||
*/ | |||
public Object resolveProperties( final String content, | |||
final TaskContext context ) | |||
final PropertyStore properties ) | |||
throws TaskException | |||
{ | |||
int start = findNextProperty( content, 0 ); | |||
@@ -72,7 +72,7 @@ public class DefaultPropertyResolver | |||
if( 0 == start && end == ( length - 1 ) ) | |||
{ | |||
return getPropertyValue( content.substring( start + 2, end ), | |||
context ); | |||
properties ); | |||
} | |||
final StringBuffer sb = new StringBuffer( length * 2 ); | |||
@@ -82,7 +82,7 @@ public class DefaultPropertyResolver | |||
{ | |||
final String propertyValue = | |||
getPropertyStringValue( content.substring( start + 2, end ), | |||
context ); | |||
properties ); | |||
sb.append( content.substring( lastPlace, start ) ); | |||
sb.append( propertyValue ); | |||
@@ -108,12 +108,12 @@ public class DefaultPropertyResolver | |||
* substitutions based on specified context. | |||
* | |||
* @param content the property to resolve | |||
* @param context the context in which to resolve property | |||
* @param properties the context in which to resolve property | |||
* @return the reolved property | |||
* @exception TaskException if an error occurs | |||
*/ | |||
private Object recursiveResolveProperty( final String content, | |||
final TaskContext context ) | |||
final PropertyStore properties ) | |||
throws TaskException | |||
{ | |||
int start = findNextProperty( content, 0 ); | |||
@@ -129,8 +129,8 @@ public class DefaultPropertyResolver | |||
if( 0 == start && end == ( length - 1 ) ) | |||
{ | |||
final String propertyName = content.substring( start + 2, end ); | |||
final Object key = recursiveResolveProperty( propertyName, context ); | |||
return getPropertyValue( key.toString(), context ); | |||
final Object key = recursiveResolveProperty( propertyName, properties ); | |||
return getPropertyValue( key.toString(), properties ); | |||
} | |||
final StringBuffer sb = new StringBuffer( length * 2 ); | |||
@@ -140,8 +140,8 @@ public class DefaultPropertyResolver | |||
while( true ) | |||
{ | |||
final String propertyName = content.substring( start + 2, end ); | |||
final Object key = recursiveResolveProperty( propertyName, context ); | |||
final String value = getPropertyStringValue( key.toString(), context ); | |||
final Object key = recursiveResolveProperty( propertyName, properties ); | |||
final String value = getPropertyStringValue( key.toString(), properties ); | |||
sb.append( content.substring( lastPlace, start ) ); | |||
sb.append( value ); | |||
@@ -246,17 +246,17 @@ public class DefaultPropertyResolver | |||
* Returns a property's value, converted to a String. | |||
*/ | |||
private String getPropertyStringValue( final String propertyName, | |||
final TaskContext context ) | |||
final PropertyStore properties ) | |||
throws TaskException | |||
{ | |||
final Object value = getPropertyValue( propertyName, context ); | |||
final Object value = getPropertyValue( propertyName, properties ); | |||
if( value instanceof String ) | |||
{ | |||
return (String)value; | |||
} | |||
try | |||
{ | |||
return (String)m_converter.convert( String.class, value, context ); | |||
return (String)m_converter.convert( String.class, value, properties ); | |||
} | |||
catch( final ConverterException e ) | |||
{ | |||
@@ -268,24 +268,15 @@ public class DefaultPropertyResolver | |||
* Retrieve a value from the specified context using the specified key. | |||
* | |||
* @param propertyName the key of value in context | |||
* @param context the set of known properties | |||
* @param properties the set of known properties | |||
* @return the object retrieved from context | |||
* @exception TaskException if the property is undefined | |||
*/ | |||
protected Object getPropertyValue( final String propertyName, | |||
final TaskContext context ) | |||
final PropertyStore properties ) | |||
throws TaskException | |||
{ | |||
Object propertyValue = context.getProperty( propertyName ); | |||
if ( propertyValue == null ) | |||
{ | |||
final String message = REZ.getString( "prop.missing-value.error", propertyName ); | |||
throw new TaskException( message ); | |||
} | |||
else | |||
{ | |||
return propertyValue; | |||
} | |||
return properties.getProperty( propertyName ); | |||
} | |||
} | |||
@@ -17,7 +17,7 @@ import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.interfaces.model.DefaultNameValidator; | |||
import org.apache.myrmidon.interfaces.model.NameValidator; | |||
import org.apache.myrmidon.interfaces.store.PropertyStore; | |||
import org.apache.myrmidon.interfaces.property.PropertyStore; | |||
/** | |||
* This is the Default implementation of PropertyStore. It follows | |||
@@ -32,7 +32,7 @@ import org.apache.myrmidon.interfaces.store.PropertyStore; | |||
* | |||
* @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
* @version $Revision$ $Date$ | |||
* @see PropertyStore | |||
* @see org.apache.myrmidon.interfaces.property.PropertyStore | |||
*/ | |||
public class DefaultPropertyStore | |||
implements PropertyStore | |||
@@ -61,15 +61,17 @@ public class DefaultPropertyStore | |||
*/ | |||
public DefaultPropertyStore() | |||
{ | |||
this( null, null ); | |||
this( "", null, null ); | |||
} | |||
/** | |||
* Construct a PropertyStore with specified parent. | |||
* | |||
* @param parent the parent PropertyStore (may be null) | |||
* @param parent the parent PropertyStore (may be null). | |||
* @param validator the validator to use to check property names (may be null). | |||
*/ | |||
public DefaultPropertyStore( final PropertyStore parent, | |||
public DefaultPropertyStore( final String name, | |||
final PropertyStore parent, | |||
final NameValidator validator ) | |||
{ | |||
m_parent = parent; | |||
@@ -82,6 +84,7 @@ public class DefaultPropertyStore | |||
m_validator = candidateValidator; | |||
m_contextData.put( TaskContext.NAME, name ); | |||
} | |||
/** | |||
@@ -91,10 +94,10 @@ public class DefaultPropertyStore | |||
* | |||
* @param name the name of property | |||
* @param value the value of property | |||
* @throws Exception if property can not be set | |||
* @throws TaskException if property can not be set | |||
*/ | |||
public void setProperty( final String name, final Object value ) | |||
throws Exception | |||
throws TaskException | |||
{ | |||
checkPropertyName( name ); | |||
checkPropertyValid( name, value ); | |||
@@ -118,11 +121,8 @@ public class DefaultPropertyStore | |||
{ | |||
try | |||
{ | |||
final Object value = getProperty( name ); | |||
if( null != value ) | |||
{ | |||
return true; | |||
} | |||
getProperty( name ); | |||
return true; | |||
} | |||
catch( Exception e ) | |||
{ | |||
@@ -136,18 +136,24 @@ public class DefaultPropertyStore | |||
* | |||
* @param name the name of the property | |||
* @return the value of the property, or null if no such property | |||
* @throws Exception if theres an error retrieving property, such | |||
* @throws TaskException if theres an error retrieving property, such | |||
* as an invalid property name | |||
*/ | |||
public Object getProperty( String name ) | |||
throws Exception | |||
public Object getProperty( final String name ) | |||
throws TaskException | |||
{ | |||
Object value = m_contextData.get( name ); | |||
if( value == null && m_parent != null ) | |||
if( value != null ) | |||
{ | |||
return value; | |||
} | |||
if( m_parent != null ) | |||
{ | |||
value = m_parent.getProperty( name ); | |||
return m_parent.getProperty( name ); | |||
} | |||
return value; | |||
final String message = REZ.getString( "unknown-prop.error", name ); | |||
throw new TaskException( message ); | |||
} | |||
/** | |||
@@ -156,10 +162,10 @@ public class DefaultPropertyStore | |||
* | |||
* @return a copy of all the properties that are "in-scope" | |||
* for store. | |||
* @throws Exception if theres an error retrieving propertys | |||
* @throws TaskException if theres an error retrieving propertys | |||
*/ | |||
public Map getProperties() | |||
throws Exception | |||
throws TaskException | |||
{ | |||
final Map properties = new HashMap(); | |||
if( m_parent != null ) | |||
@@ -178,17 +184,28 @@ public class DefaultPropertyStore | |||
* | |||
* @param name the name of child store | |||
* @return the child store | |||
* @throws Exception if theres an error creating child store | |||
* @throws TaskException if theres an error creating child store | |||
*/ | |||
public PropertyStore createChildStore( final String name ) | |||
throws Exception | |||
throws TaskException | |||
{ | |||
final DefaultPropertyStore store = new DefaultPropertyStore( this, m_validator ); | |||
final String newName = getProperty( TaskContext.NAME ) + "." + name; | |||
store.setProperty( TaskContext.NAME, newName ); | |||
// Build the name for the new store | |||
final String thisName = (String)m_contextData.get( TaskContext.NAME ); | |||
final String newName; | |||
if( name == null || name.length() == 0 ) | |||
{ | |||
newName = thisName; | |||
} | |||
else if( thisName.length() == 0 ) | |||
{ | |||
newName = name; | |||
} | |||
else | |||
{ | |||
newName = thisName + "." + name; | |||
} | |||
return store; | |||
return new DefaultPropertyStore( newName, this, m_validator ); | |||
} | |||
/** | |||
@@ -203,7 +220,7 @@ public class DefaultPropertyStore | |||
} | |||
catch( Exception e ) | |||
{ | |||
String message = REZ.getString( "bad-property-name.error" ); | |||
String message = REZ.getString( "bad-property-name.error", name ); | |||
throw new TaskException( message, e ); | |||
} | |||
} | |||
@@ -1,5 +1,5 @@ | |||
unknown-prop.error=Unknown property {0}. | |||
bad-property.error=Property {0} must have a value of type {1}. | |||
bad-property-name.error=Invalid property name. | |||
unknown-prop.error=Unknown property "{0}". | |||
bad-property.error=Property "{0}" must have a value of type {1}. | |||
bad-property-name.error=Invalid property name "{0}". | |||
null-resolved-value.error=Value "{0}" resolved to null. | |||
bad-resolve.error=Unable to resolve value "{0}". |
@@ -19,7 +19,7 @@ import org.apache.avalon.framework.service.ServiceManager; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.interfaces.property.PropertyResolver; | |||
import org.apache.myrmidon.interfaces.store.PropertyStore; | |||
import org.apache.myrmidon.interfaces.property.PropertyStore; | |||
/** | |||
* Default implementation of TaskContext. | |||
@@ -44,7 +44,6 @@ public class DefaultTaskContext | |||
public DefaultTaskContext( final ServiceManager serviceManager, | |||
final Logger logger, | |||
final PropertyStore store ) | |||
throws TaskException | |||
{ | |||
m_serviceManager = serviceManager; | |||
m_logger = logger; | |||
@@ -150,7 +149,7 @@ public class DefaultTaskContext | |||
m_propertyResolver = (PropertyResolver)getService( PropertyResolver.class ); | |||
} | |||
final Object object = | |||
m_propertyResolver.resolveProperties( value, this ); | |||
m_propertyResolver.resolveProperties( value, m_store ); | |||
if( null == object ) | |||
{ | |||
final String message = REZ.getString( "null-resolved-value.error", value ); | |||
@@ -192,14 +191,7 @@ public class DefaultTaskContext | |||
public Map getProperties() | |||
throws TaskException | |||
{ | |||
try | |||
{ | |||
return m_store.getProperties(); | |||
} | |||
catch( final Exception e ) | |||
{ | |||
throw new TaskException( e.getMessage(), e ); | |||
} | |||
return m_store.getProperties(); | |||
} | |||
/** | |||
@@ -211,14 +203,7 @@ public class DefaultTaskContext | |||
public void setProperty( final String name, final Object value ) | |||
throws TaskException | |||
{ | |||
try | |||
{ | |||
m_store.setProperty( name, value ); | |||
} | |||
catch( final Exception e ) | |||
{ | |||
throw new TaskException( e.getMessage(), e ); | |||
} | |||
m_store.setProperty( name, value ); | |||
} | |||
/** | |||
@@ -387,18 +372,11 @@ public class DefaultTaskContext | |||
public TaskContext createSubContext( final String name ) | |||
throws TaskException | |||
{ | |||
try | |||
{ | |||
final PropertyStore store = m_store.createChildStore( name ); | |||
final DefaultServiceManager serviceManager = | |||
new DefaultServiceManager( m_serviceManager ); | |||
final Logger logger = m_logger.getChildLogger( name ); | |||
final PropertyStore store = m_store.createChildStore( name ); | |||
final DefaultServiceManager serviceManager = | |||
new DefaultServiceManager( m_serviceManager ); | |||
final Logger logger = m_logger.getChildLogger( name ); | |||
return new DefaultTaskContext( serviceManager, logger, store ); | |||
} | |||
catch( final Exception e ) | |||
{ | |||
throw new TaskException( e.getMessage(), e ); | |||
} | |||
return new DefaultTaskContext( serviceManager, logger, store ); | |||
} | |||
} |
@@ -37,7 +37,7 @@ import org.apache.myrmidon.interfaces.model.Target; | |||
import org.apache.myrmidon.interfaces.model.TypeLib; | |||
import org.apache.myrmidon.interfaces.type.TypeManager; | |||
import org.apache.myrmidon.interfaces.workspace.Workspace; | |||
import org.apache.myrmidon.interfaces.store.PropertyStore; | |||
import org.apache.myrmidon.interfaces.property.PropertyStore; | |||
import org.apache.myrmidon.listeners.ProjectListener; | |||
import org.apache.myrmidon.components.store.DefaultPropertyStore; | |||
@@ -227,6 +227,8 @@ public class DefaultWorkspace | |||
final TypeManager typeManager = m_typeManager.createChildTypeManager(); | |||
serviceManager.put( TypeManager.ROLE, typeManager ); | |||
// TODO - Add child role manager | |||
//We need to create a new deployer so that it deploys | |||
//to project specific TypeManager | |||
final Deployer deployer = m_deployer.createChildDeployer( serviceManager ); | |||
@@ -427,6 +429,7 @@ public class DefaultWorkspace | |||
getLogger().debug( message ); | |||
} | |||
//TODO - put this back in | |||
//frame.getContext().setProperty( Project.TARGET, target ); | |||
// Execute all tasks assciated with target | |||
@@ -8,7 +8,6 @@ | |||
package org.apache.myrmidon.interfaces.property; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.api.TaskContext; | |||
/** | |||
* | |||
@@ -31,11 +30,11 @@ public interface PropertyResolver | |||
* Rules used for property resolution are implementation dependent. | |||
* | |||
* @param value the value to resolve, which may contain property identifiers | |||
* @param context the set of properties to resolve against. | |||
* @param properties the set of properties to resolve against. | |||
* @return the resolved content | |||
* @exception TaskException if an error occurs | |||
*/ | |||
Object resolveProperties( final String value, | |||
final TaskContext context ) | |||
final PropertyStore properties ) | |||
throws TaskException; | |||
} |
@@ -5,9 +5,10 @@ | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.myrmidon.interfaces.store; | |||
package org.apache.myrmidon.interfaces.property; | |||
import java.util.Map; | |||
import org.apache.myrmidon.api.TaskException; | |||
/** | |||
* This component stores and manages properties. It is also | |||
@@ -36,10 +37,10 @@ public interface PropertyStore | |||
* | |||
* @param name the name of property | |||
* @param value the value of property | |||
* @throws Exception if property can not be set | |||
* @throws TaskException if property can not be set | |||
*/ | |||
void setProperty( String name, Object value ) | |||
throws Exception; | |||
throws TaskException; | |||
/** | |||
* Return <code>true</code> if the specified property is set. | |||
@@ -50,15 +51,14 @@ public interface PropertyStore | |||
/** | |||
* Retrieve the value of specified property. | |||
* Will return null if no such property exists. | |||
* | |||
* @param name the name of the property | |||
* @return the value of the property, or null if no such property | |||
* @throws Exception if theres an error retrieving property, such | |||
* as an invalid property name | |||
* @return the value of the property. Never returns null. | |||
* @throws TaskException if there is no such property, or on error | |||
* retrieving property, such as an invalid property name. | |||
*/ | |||
Object getProperty( String name ) | |||
throws Exception; | |||
throws TaskException; | |||
/** | |||
* Retrieve a copy of all the properties that are "in-scope" | |||
@@ -66,10 +66,10 @@ public interface PropertyStore | |||
* | |||
* @return a copy of all the properties that are "in-scope" | |||
* for store. | |||
* @throws Exception if theres an error retrieving propertys | |||
* @throws TaskException if theres an error retrieving propertys | |||
*/ | |||
Map getProperties() | |||
throws Exception; | |||
throws TaskException; | |||
/** | |||
* Return a child PropertyStore with specified name. | |||
@@ -79,8 +79,8 @@ public interface PropertyStore | |||
* | |||
* @param name the name of child store | |||
* @return the child store | |||
* @throws Exception if theres an error creating child store | |||
* @throws TaskException if theres an error creating child store | |||
*/ | |||
PropertyStore createChildStore( String name ) | |||
throws Exception; | |||
throws TaskException; | |||
} |
@@ -13,6 +13,7 @@ import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.myrmidon.AbstractProjectTest; | |||
import org.apache.myrmidon.LogMessageTracker; | |||
import org.apache.myrmidon.components.workspace.DefaultTaskContext; | |||
import org.apache.myrmidon.components.store.DefaultPropertyStore; | |||
/** | |||
* Test cases for <property> task. | |||
@@ -98,18 +99,29 @@ public class PropertyTestCase | |||
{ | |||
final File projectFile = getTestResource( "property.ant" ); | |||
final Resources contextResources | |||
= ResourceManager.getPackageResources( DefaultTaskContext.class ); | |||
final Resources rez | |||
= ResourceManager.getPackageResources( DefaultPropertyStore.class ); | |||
// Invalid names | |||
String[] messages = new String[] | |||
{ | |||
null, | |||
contextResources.getString( "bad-property-name.error" ), | |||
null | |||
rez.getString( "bad-property-name.error", "badname!" ) | |||
}; | |||
executeTargetExpectError( projectFile, "bad-prop-name1", messages ); | |||
messages = new String[] | |||
{ | |||
null, | |||
rez.getString( "bad-property-name.error", "bad name" ) | |||
}; | |||
executeTargetExpectError( projectFile, "bad-prop-name2", messages ); | |||
messages = new String[] | |||
{ | |||
null, | |||
rez.getString( "bad-property-name.error", "" ) | |||
}; | |||
executeTargetExpectError( projectFile, "bad-prop-name3", messages ); | |||
} | |||
@@ -11,13 +11,12 @@ import java.io.File; | |||
import java.util.Date; | |||
import org.apache.aut.converter.lib.ObjectToStringConverter; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.avalon.framework.service.DefaultServiceManager; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.components.AbstractComponentTest; | |||
import org.apache.myrmidon.components.property.DefaultPropertyResolver; | |||
import org.apache.myrmidon.components.store.DefaultPropertyStore; | |||
import org.apache.myrmidon.components.workspace.DefaultTaskContext; | |||
import org.apache.myrmidon.interfaces.property.PropertyResolver; | |||
import org.apache.myrmidon.interfaces.property.PropertyStore; | |||
/** | |||
* General-purpose property resolver test cases. | |||
@@ -28,10 +27,8 @@ import org.apache.myrmidon.interfaces.property.PropertyResolver; | |||
public abstract class AbstractPropertyResolverTestCase | |||
extends AbstractComponentTest | |||
{ | |||
protected final static Resources REZ = getResourcesForTested( AbstractPropertyResolverTestCase.class ); | |||
protected PropertyResolver m_resolver; | |||
protected DefaultTaskContext m_context; | |||
protected PropertyStore m_store; | |||
public AbstractPropertyResolverTestCase( final String name ) | |||
{ | |||
@@ -42,11 +39,9 @@ public abstract class AbstractPropertyResolverTestCase | |||
{ | |||
m_resolver = (PropertyResolver)getServiceManager().lookup( PropertyResolver.ROLE ); | |||
final DefaultPropertyStore store = new DefaultPropertyStore(); | |||
final DefaultServiceManager serviceManager = new DefaultServiceManager(); | |||
m_context = new DefaultTaskContext( serviceManager, getLogger(), store ); | |||
m_context.setProperty( "intProp", new Integer( 333 ) ); | |||
m_context.setProperty( "stringProp", "String property" ); | |||
m_store = new DefaultPropertyStore(); | |||
m_store.setProperty( "intProp", new Integer( 333 ) ); | |||
m_store.setProperty( "stringProp", "String property" ); | |||
registerConverter( ObjectToStringConverter.class, Object.class, String.class ); | |||
} | |||
@@ -92,14 +87,14 @@ public abstract class AbstractPropertyResolverTestCase | |||
private void testPropertyValue( final Object propObject ) | |||
throws Exception | |||
{ | |||
m_context.setProperty( "typedProp", propObject ); | |||
m_store.setProperty( "typedProp", propObject ); | |||
final String propString = propObject.toString(); | |||
doTestResolution( "${typedProp}", propObject, m_context ); | |||
doTestResolution( "${typedProp}", propObject, m_store ); | |||
doTestResolution( "${typedProp} with following text", | |||
propString + " with following text", m_context ); | |||
propString + " with following text", m_store ); | |||
doTestResolution( "Preceding text with ${typedProp}", | |||
"Preceding text with " + propString, m_context ); | |||
"Preceding text with " + propString, m_store ); | |||
} | |||
/** | |||
@@ -107,15 +102,15 @@ public abstract class AbstractPropertyResolverTestCase | |||
*/ | |||
public void testMultipleProperties() throws Exception | |||
{ | |||
m_context.setProperty( "prop1", "value1" ); | |||
m_context.setProperty( "prop2", "value2" ); | |||
m_context.setProperty( "int1", new Integer( 123 ) ); | |||
m_store.setProperty( "prop1", "value1" ); | |||
m_store.setProperty( "prop2", "value2" ); | |||
m_store.setProperty( "int1", new Integer( 123 ) ); | |||
doTestResolution( "${prop1}${prop2}", "value1value2", m_context ); | |||
doTestResolution( "${prop1}${prop1}${prop1}", "value1value1value1", m_context ); | |||
doTestResolution( "${prop1}${prop2}", "value1value2", m_store ); | |||
doTestResolution( "${prop1}${prop1}${prop1}", "value1value1value1", m_store ); | |||
doTestResolution( "before ${prop2} between ${prop1} after", | |||
"before value2 between value1 after", m_context ); | |||
doTestResolution( "${prop1}-${int1}-${prop2}", "value1-123-value2", m_context ); | |||
"before value2 between value1 after", m_store ); | |||
doTestResolution( "${prop1}-${int1}-${prop2}", "value1-123-value2", m_store ); | |||
} | |||
/** | |||
@@ -123,13 +118,13 @@ public abstract class AbstractPropertyResolverTestCase | |||
*/ | |||
public void testInvalidTypeDeclarations() throws Exception | |||
{ | |||
final Resources rez = getResourcesForTested( DefaultPropertyResolver.class ); | |||
doTestFailure( "${unclosed", | |||
REZ.getString( "prop.mismatched-braces.error" ), | |||
m_context ); | |||
rez.getString( "prop.mismatched-braces.error" ), | |||
m_store ); | |||
doTestFailure( "${", | |||
REZ.getString( "prop.mismatched-braces.error" ), | |||
m_context ); | |||
rez.getString( "prop.mismatched-braces.error" ), | |||
m_store ); | |||
/* TODO - need to handle these cases. */ | |||
// testFailure( "${bad${}", "", m_context ); | |||
@@ -141,10 +136,10 @@ public abstract class AbstractPropertyResolverTestCase | |||
*/ | |||
protected void doTestResolution( final String value, | |||
final Object expected, | |||
final TaskContext context ) | |||
final PropertyStore properties ) | |||
throws Exception | |||
{ | |||
final Object resolved = m_resolver.resolveProperties( value, context ); | |||
final Object resolved = m_resolver.resolveProperties( value, properties ); | |||
assertEquals( expected, resolved ); | |||
} | |||
@@ -155,11 +150,11 @@ public abstract class AbstractPropertyResolverTestCase | |||
*/ | |||
protected void doTestFailure( final String value, | |||
final String expectedErrorMessage, | |||
final TaskContext context ) | |||
final PropertyStore properties ) | |||
{ | |||
try | |||
{ | |||
m_resolver.resolveProperties( value, context ); | |||
m_resolver.resolveProperties( value, properties ); | |||
fail( "Unexpected sucess - test should have failed." ); | |||
} | |||
catch( TaskException e ) | |||
@@ -37,6 +37,6 @@ public class ClassicPropertyResolverTestCase | |||
{ | |||
final String undefinedProp = "undefinedProperty"; | |||
final String propRef = "${" + undefinedProp + "}"; | |||
doTestResolution( propRef, propRef, m_context ); | |||
doTestResolution( propRef, propRef, m_store ); | |||
} | |||
} |
@@ -10,6 +10,8 @@ package org.apache.myrmidon.components.property.test; | |||
import org.apache.myrmidon.interfaces.property.PropertyResolver; | |||
import org.apache.myrmidon.components.property.test.AbstractPropertyResolverTestCase; | |||
import org.apache.myrmidon.components.property.DefaultPropertyResolver; | |||
import org.apache.myrmidon.components.store.DefaultPropertyStore; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
/** | |||
* Functional tests for {@link org.apache.myrmidon.components.property.DefaultPropertyResolver}. | |||
@@ -35,14 +37,15 @@ public class DefaultPropertyResolverTestCase | |||
*/ | |||
public void testUndefinedProp() throws Exception | |||
{ | |||
final Resources rez = getResourcesForTested( DefaultPropertyStore.class ); | |||
final String undefinedProp = "undefinedProperty"; | |||
doTestFailure( "${" + undefinedProp + "}", | |||
REZ.getString( "prop.missing-value.error", undefinedProp ), | |||
m_context ); | |||
rez.getString( "unknown-prop.error", undefinedProp ), | |||
m_store ); | |||
//TODO - "" should be disallowed as a property name | |||
doTestFailure( "${}", | |||
REZ.getString( "prop.missing-value.error", "" ), | |||
m_context ); | |||
rez.getString( "unknown-prop.error", "" ), | |||
m_store ); | |||
} | |||
} |