* Split <is-set> into <is-set> and <is-true> conditions. <is-true> uses the converter to determine whether something is 'true', so is a little fussy. * Moved <uptodate> and <equals> into antlib, and made <uptodate> a condition. * Added <type-available> condition, which checks whether a particular type is defined. * Fixed <not> to actually work. * Added test cases for some of the conditions. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272066 13f79535-47bb-0310-9956-ffa450edef68master
@@ -0,0 +1,130 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.antlib.build; | |||
import java.io.File; | |||
import java.util.ArrayList; | |||
import java.util.Iterator; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.framework.FileNameMapper; | |||
import org.apache.myrmidon.framework.conditions.Condition; | |||
import org.apache.tools.todo.types.DirectoryScanner; | |||
import org.apache.tools.todo.types.FileSet; | |||
import org.apache.tools.todo.types.ScannerUtil; | |||
import org.apache.tools.todo.types.SourceFileScanner; | |||
import org.apache.tools.todo.util.mappers.MergingMapper; | |||
/** | |||
* A condition which evaluates to true when the specified target has a | |||
* timestamp greater than all of the source files. | |||
* | |||
* @author William Ferguson <a href="mailto:williamf@mincom.com"> | |||
* williamf@mincom.com</a> | |||
* @author Hiroaki Nakamura <a href="mailto:hnakamur@mc.neweb.ne.jp"> | |||
* hnakamur@mc.neweb.ne.jp</a> | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
* | |||
* @ant.type type="condition" name="uptodate" | |||
*/ | |||
public class UpToDateCondition | |||
implements Condition | |||
{ | |||
private final ArrayList m_fileSets = new ArrayList(); | |||
private FileNameMapper m_mapper; | |||
private File m_targetFile; | |||
/** | |||
* The file which must be more up to date than each of the source files if | |||
* the property is to be set. | |||
* | |||
* @param file the file which we are checking against. | |||
*/ | |||
public void setTargetFile( final File file ) | |||
{ | |||
m_targetFile = file; | |||
} | |||
/** | |||
* Nested <srcfiles> element. | |||
* | |||
* @param fs The feature to be added to the Srcfiles attribute | |||
*/ | |||
public void addSrcfiles( final FileSet fs ) | |||
{ | |||
m_fileSets.add( fs ); | |||
} | |||
/** | |||
* Defines the FileNameMapper to use (nested mapper element). | |||
*/ | |||
public void add( final FileNameMapper mapper ) | |||
throws TaskException | |||
{ | |||
if( m_mapper != null ) | |||
{ | |||
throw new TaskException( "Cannot define more than one mapper" ); | |||
} | |||
m_mapper = mapper; | |||
} | |||
/** | |||
* Evaluates this condition. | |||
* | |||
* @param context | |||
* The context to evaluate the condition in. | |||
*/ | |||
public boolean evaluate( TaskContext context ) | |||
throws TaskException | |||
{ | |||
if( m_targetFile == null && m_mapper == null ) | |||
{ | |||
throw new TaskException( "The targetfile attribute or a nested mapper element must be set" ); | |||
} | |||
// if not there then it can't be up to date | |||
if( m_targetFile != null && !m_targetFile.exists() ) | |||
{ | |||
return false; | |||
} | |||
final Iterator enum = m_fileSets.iterator(); | |||
while( enum.hasNext() ) | |||
{ | |||
final FileSet fs = (FileSet)enum.next(); | |||
final DirectoryScanner ds = ScannerUtil.getDirectoryScanner( fs ); | |||
if ( !scanDir( fs.getDir(), ds.getIncludedFiles(), context ) ) | |||
{ | |||
return false; | |||
} | |||
} | |||
return true; | |||
} | |||
private boolean scanDir( final File srcDir, | |||
final String files[], | |||
final TaskContext context ) | |||
throws TaskException | |||
{ | |||
final SourceFileScanner scanner = new SourceFileScanner(); | |||
FileNameMapper mapper = null; | |||
File dir = srcDir; | |||
if( m_mapper == null ) | |||
{ | |||
final MergingMapper mm = new MergingMapper(); | |||
mm.setTo( m_targetFile.getAbsolutePath() ); | |||
mapper = mm; | |||
dir = null; | |||
} | |||
else | |||
{ | |||
mapper = m_mapper; | |||
} | |||
return scanner.restrict( files, srcDir, dir, mapper, context ).length == 0; | |||
} | |||
} |
@@ -0,0 +1,53 @@ | |||
package org.apache.antlib.core; | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.framework.conditions.Condition; | |||
/** | |||
* Simple String comparison condition. | |||
* | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
* @version $Revision$ | |||
* | |||
* @ant.type type="condition" name="equals" | |||
*/ | |||
public class Equals implements Condition | |||
{ | |||
private String arg1, arg2; | |||
public void setArg1( String a1 ) | |||
{ | |||
arg1 = a1; | |||
} | |||
public void setArg2( String a2 ) | |||
{ | |||
arg2 = a2; | |||
} | |||
/** | |||
* Evaluates this condition. | |||
* | |||
* @param context | |||
* The context to evaluate the condition in. | |||
*/ | |||
public boolean evaluate( final TaskContext context ) | |||
throws TaskException | |||
{ | |||
if( arg1 == null || arg2 == null ) | |||
{ | |||
throw new TaskException( "both arg1 and arg2 are required in equals" ); | |||
} | |||
return arg1.equals( arg2 ); | |||
} | |||
} |
@@ -14,7 +14,7 @@ import org.apache.avalon.framework.configuration.Configuration; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.framework.AbstractContainerTask; | |||
import org.apache.myrmidon.framework.conditions.Condition; | |||
import org.apache.myrmidon.framework.conditions.IsSetCondition; | |||
import org.apache.myrmidon.framework.conditions.IsTrueCondition; | |||
import org.apache.myrmidon.framework.conditions.NotCondition; | |||
/** | |||
@@ -44,7 +44,7 @@ public class IfTask | |||
throws TaskException | |||
{ | |||
verifyConditionNull(); | |||
m_condition = new IsSetCondition( condition ); | |||
m_condition = new IsTrueCondition( condition ); | |||
} | |||
/** | |||
@@ -57,7 +57,7 @@ public class IfTask | |||
throws TaskException | |||
{ | |||
verifyConditionNull(); | |||
m_condition = new NotCondition( new IsSetCondition( condition ) ); | |||
m_condition = new NotCondition( new IsTrueCondition( condition ) ); | |||
} | |||
public void add( final Configuration task ) | |||
@@ -4,3 +4,7 @@ facility.no-namespace.error=Must specify namespace parameter. | |||
import.no-lib.error=Must specify lib parameter. | |||
import.no-deploy.error=Error importing tasklib. | |||
typeavailable.no-type-name.error=No type name was specified. | |||
typeavailable.unknown-role.error=Unknown role "{0}". | |||
typeavailable.evaluate.error=Could not determine if type "{0}" is available. |
@@ -0,0 +1,102 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.antlib.runtime; | |||
import org.apache.myrmidon.framework.conditions.Condition; | |||
import org.apache.myrmidon.framework.DataType; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.interfaces.role.RoleManager; | |||
import org.apache.myrmidon.interfaces.role.RoleInfo; | |||
import org.apache.myrmidon.interfaces.type.TypeManager; | |||
import org.apache.myrmidon.interfaces.type.TypeFactory; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
/** | |||
* A condition that evaluates to true if a particular type is available. | |||
* | |||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
* @version $Revision$ $Date$ | |||
* | |||
* @ant.type type="condition" name="type-available" | |||
*/ | |||
public class TypeAvailableCondition | |||
implements Condition | |||
{ | |||
private final static Resources REZ = | |||
ResourceManager.getPackageResources( TypeAvailableCondition.class ); | |||
private String m_roleShorthand; | |||
private String m_name; | |||
/** | |||
* Sets the role to search for. | |||
*/ | |||
public void setType( final String type ) | |||
{ | |||
m_roleShorthand = type; | |||
} | |||
/** | |||
* Sets the type to search for. | |||
*/ | |||
public void setName( final String name ) | |||
{ | |||
m_name = name; | |||
} | |||
/** | |||
* Evaluates this condition. | |||
* | |||
* @param context | |||
* The context to evaluate the condition in. | |||
*/ | |||
public boolean evaluate( final TaskContext context ) | |||
throws TaskException | |||
{ | |||
if( m_name == null ) | |||
{ | |||
final String message = REZ.getString( "typeavailable.no-type-name.error" ); | |||
throw new TaskException( message ); | |||
} | |||
try | |||
{ | |||
// Map the shorthand name to a role | |||
final String roleName; | |||
if( m_roleShorthand != null ) | |||
{ | |||
final RoleManager roleManager = (RoleManager)context.getService( RoleManager.class ); | |||
final RoleInfo roleInfo = roleManager.getRoleByShorthandName( m_roleShorthand ); | |||
if( roleInfo == null ) | |||
{ | |||
final String message = REZ.getString( "typeavailable.unknown-role.error", m_roleShorthand ); | |||
throw new TaskException( message ); | |||
} | |||
roleName = roleInfo.getName(); | |||
} | |||
else | |||
{ | |||
roleName = DataType.ROLE; | |||
} | |||
// Lookup the type | |||
final TypeManager typeManager = (TypeManager)context.getService( TypeManager.class ); | |||
final TypeFactory typeFactory = typeManager.getFactory( roleName ); | |||
// Check if the type is available | |||
return typeFactory.canCreate( m_name ); | |||
} | |||
catch( final Exception e ) | |||
{ | |||
final String message = REZ.getString( "typeavailable.evaluate.error", m_name ); | |||
throw new TaskException( message, e ); | |||
} | |||
} | |||
} |
@@ -12,7 +12,7 @@ import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.framework.conditions.Condition; | |||
import org.apache.myrmidon.framework.conditions.IsSetCondition; | |||
import org.apache.myrmidon.framework.conditions.IsTrueCondition; | |||
import org.apache.myrmidon.framework.conditions.NotCondition; | |||
/** | |||
@@ -80,7 +80,7 @@ public class Pattern | |||
throws TaskException | |||
{ | |||
verifyConditionNull(); | |||
m_condition = new IsSetCondition( condition ); | |||
m_condition = new IsTrueCondition( condition ); | |||
} | |||
/** | |||
@@ -93,7 +93,7 @@ public class Pattern | |||
throws TaskException | |||
{ | |||
verifyConditionNull(); | |||
m_condition = new NotCondition( new IsSetCondition( condition ) ); | |||
m_condition = new NotCondition( new IsTrueCondition( condition ) ); | |||
} | |||
public String evaluateName( final TaskContext context ) | |||
@@ -13,8 +13,7 @@ import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
/** | |||
* A {@link Condition} that is true when a property is set, but not set to | |||
* 'false'. | |||
* A {@link Condition} that is true when a property is set. | |||
* | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
* @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
@@ -62,6 +61,6 @@ public class IsSetCondition | |||
// Resolve the condition | |||
final Object object = context.getProperty( m_property ); | |||
return ( object != null && !object.toString().equals( "false" ) ); | |||
return ( object != null ); | |||
} | |||
} |
@@ -0,0 +1,84 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.myrmidon.framework.conditions; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.aut.converter.Converter; | |||
import org.apache.aut.converter.ConverterException; | |||
/** | |||
* A {@link Condition} that is true when a property is set, but not set to | |||
* 'false'. | |||
* | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
* @author <a href="mailto:peter@apache.org">Peter Donald</a> | |||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
* @version $Revision$ $Date$ | |||
* | |||
* @ant.type type="condition" name="is-true" | |||
*/ | |||
public class IsTrueCondition | |||
implements Condition | |||
{ | |||
private final static Resources REZ = | |||
ResourceManager.getPackageResources( IsTrueCondition.class ); | |||
private String m_property; | |||
public IsTrueCondition( final String propName ) | |||
{ | |||
m_property = propName; | |||
} | |||
public IsTrueCondition() | |||
{ | |||
} | |||
/** | |||
* Set the property name to test. | |||
*/ | |||
public void setProperty( final String propName ) | |||
{ | |||
m_property = propName; | |||
} | |||
/** | |||
* Evaluates the condition. | |||
*/ | |||
public boolean evaluate( final TaskContext context ) | |||
throws TaskException | |||
{ | |||
if( m_property == null ) | |||
{ | |||
final String message = REZ.getString( "isset.no-property.error" ); | |||
throw new TaskException( message ); | |||
} | |||
// Resolve the property name | |||
final Object object = context.getProperty( m_property ); | |||
if( object == null ) | |||
{ | |||
return false; | |||
} | |||
// Convert value to boolean | |||
try | |||
{ | |||
final Converter converter = (Converter)context.getService( Converter.class ); | |||
final Boolean value = (Boolean)converter.convert( Boolean.class, object, context ); | |||
return value.booleanValue(); | |||
} | |||
catch( final ConverterException e ) | |||
{ | |||
throw new TaskException( e.getMessage(), e ); | |||
} | |||
} | |||
} |
@@ -9,6 +9,8 @@ package org.apache.myrmidon.framework.conditions; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.avalon.excalibur.i18n.ResourceManager; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
/** | |||
* <not> condition. Evaluates to true if the single condition nested into | |||
@@ -22,6 +24,9 @@ import org.apache.myrmidon.api.TaskException; | |||
public class NotCondition | |||
implements Condition | |||
{ | |||
private final static Resources REZ = | |||
ResourceManager.getPackageResources( NotCondition.class ); | |||
private Condition m_condition; | |||
public NotCondition() | |||
@@ -34,10 +39,16 @@ public class NotCondition | |||
} | |||
/** | |||
* Sets the nested condition. | |||
* Adds a nested condition. | |||
*/ | |||
public void set( final Condition condition ) | |||
public void add( final Condition condition ) | |||
throws TaskException | |||
{ | |||
if( m_condition != null ) | |||
{ | |||
final String message = REZ.getString( "not.too-many-conditions.error" ); | |||
throw new TaskException( message ); | |||
} | |||
m_condition = condition; | |||
} | |||
@@ -49,7 +60,8 @@ public class NotCondition | |||
{ | |||
if( m_condition == null ) | |||
{ | |||
throw new TaskException( "no condition set" ); | |||
final String message = REZ.getString( "not.no-condition.error" ); | |||
throw new TaskException( message ); | |||
} | |||
return ! m_condition.evaluate( context ); | |||
@@ -1 +1,4 @@ | |||
isset.no-property.error=No property specified to test. | |||
istrue.no-property.error=No property specified to test. | |||
not.no-condition.error=No condition specified. | |||
not.too-many-conditions.error=Too many conditions specified. |
@@ -42,9 +42,7 @@ public class IfTestCase | |||
executeTarget( projectFile, "true-prop", listener ); | |||
// Test when property is set to a value other than 'true' or 'false' | |||
listener = new LogMessageTracker(); | |||
listener.addExpectedMessage( "set-prop", "test-prop is set" ); | |||
executeTarget( projectFile, "set-prop", listener ); | |||
executeTargetExpectError( projectFile, "set-prop", new String[0] ); | |||
// Test when property is set to 'false' | |||
listener = new LogMessageTracker(); | |||
@@ -127,7 +127,7 @@ public abstract class AbstractMyrmidonTest | |||
/** | |||
* Returns the directory containing a Myrmidon install. | |||
*/ | |||
protected File getHomeDirectory() | |||
protected File getInstallDirectory() | |||
{ | |||
final File file = new File( m_baseDir, "dist" ); | |||
return getCanonicalFile( file ); | |||
@@ -59,7 +59,7 @@ public class AbstractProjectTest | |||
m_embeddor.enableLogging( logger ); | |||
final Parameters params = new Parameters(); | |||
final File instDir = getHomeDirectory(); | |||
final File instDir = getInstallDirectory(); | |||
params.setParameter( "myrmidon.home", instDir.getAbsolutePath() ); | |||
m_embeddor.parameterize( params ); | |||
m_embeddor.initialize(); | |||
@@ -0,0 +1,37 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.myrmidon.framework.conditions.test; | |||
import java.io.File; | |||
import org.apache.myrmidon.AbstractProjectTest; | |||
/** | |||
* Test cases for the <and> condition. | |||
* | |||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
* @version $Revision$ $Date$ | |||
*/ | |||
public class AndConditionTestCase | |||
extends AbstractProjectTest | |||
{ | |||
public AndConditionTestCase( final String name ) | |||
{ | |||
super( name ); | |||
} | |||
/** | |||
* Tests evaluation of the <and> condition. | |||
*/ | |||
public void testEvaluation() throws Exception | |||
{ | |||
final File projectFile = getTestResource( "and.ant" ); | |||
executeTarget( projectFile, "empty" ); | |||
executeTarget( projectFile, "truth-table" ); | |||
executeTarget( projectFile, "lazy" ); | |||
} | |||
} |
@@ -0,0 +1,50 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.myrmidon.framework.conditions.test; | |||
import org.apache.myrmidon.api.AbstractTask; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.myrmidon.framework.conditions.Condition; | |||
/** | |||
* A simple assert task, used for testing conditions. | |||
* | |||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
* @version $Revision$ $Date$ | |||
* | |||
* @ant.task name="assert" | |||
*/ | |||
public class ConditionTestTask | |||
extends AbstractTask | |||
{ | |||
private boolean m_expected = true; | |||
private Condition m_condition; | |||
public void setExpected( final boolean expected ) | |||
{ | |||
m_expected = expected; | |||
} | |||
public void add( final Condition condition ) | |||
{ | |||
m_condition = condition; | |||
} | |||
/** | |||
* Execute task. | |||
*/ | |||
public void execute() | |||
throws TaskException | |||
{ | |||
final boolean result = m_condition.evaluate( getContext() ); | |||
if( result != m_expected ) | |||
{ | |||
throw new TaskException( "Expected " + m_expected + ", got " + result ); | |||
} | |||
} | |||
} |
@@ -0,0 +1,48 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.myrmidon.framework.conditions.test; | |||
import java.io.File; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.myrmidon.AbstractProjectTest; | |||
import org.apache.myrmidon.framework.conditions.IsSetCondition; | |||
/** | |||
* Test cases for the <is-set> condition. | |||
* | |||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
* @version $Revision$ $Date$ | |||
*/ | |||
public class IsSetConditionTestCase | |||
extends AbstractProjectTest | |||
{ | |||
public IsSetConditionTestCase( final String name ) | |||
{ | |||
super( name ); | |||
} | |||
/** | |||
* Test cases for <is-set> evaluation. | |||
*/ | |||
public void testEvaluation() throws Exception | |||
{ | |||
final File projectFile = getTestResource( "isset.ant" ); | |||
executeTarget( projectFile, "set" ); | |||
executeTarget( projectFile, "set2true" ); | |||
executeTarget( projectFile, "set2false" ); | |||
executeTarget( projectFile, "not-set" ); | |||
Resources res = getResourcesForTested( IsSetCondition.class ); | |||
final String[] messages = { | |||
null, | |||
res.getString( "isset.no-property.error" ) | |||
}; | |||
executeTargetExpectError( projectFile, "no-prop-name", messages ); | |||
} | |||
} |
@@ -0,0 +1,51 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.myrmidon.framework.conditions.test; | |||
import java.io.File; | |||
import org.apache.avalon.excalibur.i18n.Resources; | |||
import org.apache.myrmidon.AbstractProjectTest; | |||
import org.apache.myrmidon.framework.conditions.IsTrueCondition; | |||
/** | |||
* Test cases for the <is-true> condition. | |||
* | |||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
* @version $Revision$ $Date$ | |||
*/ | |||
public class IsTrueConditionTestCase | |||
extends AbstractProjectTest | |||
{ | |||
public IsTrueConditionTestCase( final String name ) | |||
{ | |||
super( name ); | |||
} | |||
/** | |||
* Test cases for <is-true> evaluation. | |||
*/ | |||
public void testEvaluation() throws Exception | |||
{ | |||
final File projectFile = getTestResource( "istrue.ant" ); | |||
executeTarget( projectFile, "set2true" ); | |||
executeTarget( projectFile, "set2false" ); | |||
executeTarget( projectFile, "not-set" ); | |||
// TODO - check error message | |||
String[] messages = {}; | |||
executeTargetExpectError( projectFile, "set", messages ); | |||
final Resources res = getResourcesForTested( IsTrueCondition.class ); | |||
messages = new String[] { | |||
null, | |||
res.getString( "istrue.no-property.error" ) | |||
}; | |||
executeTargetExpectError( projectFile, "no-prop-name", messages ); | |||
} | |||
} |
@@ -0,0 +1,39 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.myrmidon.framework.conditions.test; | |||
import org.apache.myrmidon.AbstractProjectTest; | |||
import java.io.File; | |||
/** | |||
* Test cases for the <not> condition. | |||
* | |||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
* @version $Revision$ $Date$ | |||
*/ | |||
public class NotConditionTestCase | |||
extends AbstractProjectTest | |||
{ | |||
public NotConditionTestCase( final String name ) | |||
{ | |||
super( name ); | |||
} | |||
/** | |||
* Tests evaluation of <not>. | |||
*/ | |||
public void testEvaluation() throws Exception | |||
{ | |||
final File projectFile = getTestResource( "not.ant" ); | |||
executeTarget( projectFile, "truth-table" ); | |||
// TODO - check error messages | |||
executeTargetExpectError( projectFile, "empty", new String[0] ); | |||
executeTargetExpectError( projectFile, "too-many-nested", new String[0] ); | |||
} | |||
} |
@@ -0,0 +1,37 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.myrmidon.framework.conditions.test; | |||
import java.io.File; | |||
import org.apache.myrmidon.AbstractProjectTest; | |||
/** | |||
* Test cases for the <or> condition. | |||
* | |||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
* @version $Revision$ $Date$ | |||
*/ | |||
public class OrConditionTestCase | |||
extends AbstractProjectTest | |||
{ | |||
public OrConditionTestCase( final String name ) | |||
{ | |||
super( name ); | |||
} | |||
/** | |||
* Tests evaluation of the <or> condition. | |||
*/ | |||
public void testEvaluation() throws Exception | |||
{ | |||
final File projectFile = getTestResource( "or.ant" ); | |||
executeTarget( projectFile, "empty" ); | |||
executeTarget( projectFile, "truth-table" ); | |||
executeTarget( projectFile, "lazy" ); | |||
} | |||
} |
@@ -0,0 +1,57 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE.txt file. | |||
*/ | |||
package org.apache.myrmidon.framework.conditions.test; | |||
import org.apache.myrmidon.framework.conditions.Condition; | |||
import org.apache.myrmidon.api.TaskContext; | |||
import org.apache.myrmidon.api.TaskException; | |||
import org.apache.avalon.framework.configuration.Configurable; | |||
import org.apache.avalon.framework.configuration.Configuration; | |||
import org.apache.avalon.framework.configuration.ConfigurationException; | |||
/** | |||
* A condition used for testing. | |||
* | |||
* @author <a href="mailto:adammurdoch@apache.org">Adam Murdoch</a> | |||
* @version $Revision$ $Date$ | |||
* | |||
* @ant.type type="condition" name="true" | |||
* @ant.type type="condition" name="false" | |||
* @ant.type type="condition" name="fail" | |||
*/ | |||
public class TestCondition | |||
implements Condition, Configurable | |||
{ | |||
private String m_action; | |||
public void configure( final Configuration configuration ) | |||
throws ConfigurationException | |||
{ | |||
m_action = configuration.getName(); | |||
} | |||
/** | |||
* Evaluates this condition. | |||
*/ | |||
public boolean evaluate( final TaskContext context ) | |||
throws TaskException | |||
{ | |||
if( m_action.equalsIgnoreCase( "true" ) ) | |||
{ | |||
return true; | |||
} | |||
else if( m_action.equalsIgnoreCase( "false" ) ) | |||
{ | |||
return false; | |||
} | |||
else | |||
{ | |||
throw new TaskException( "Fail." ); | |||
} | |||
} | |||
} |
@@ -0,0 +1,40 @@ | |||
<!-- Tests for the <and> condition. --> | |||
<project version="2.0"> | |||
<!-- An empty <and> condition --> | |||
<target name="empty"> | |||
<assert> | |||
<and/> | |||
</assert> | |||
</target> | |||
<!-- The truth-table --> | |||
<target name="truth-table"> | |||
<assert expected="false"> | |||
<and><false/></and> | |||
</assert> | |||
<assert> | |||
<and><true/></and> | |||
</assert> | |||
<assert expected="false"> | |||
<and><false/><false/></and> | |||
</assert> | |||
<assert expected="false"> | |||
<and><true/><false/></and> | |||
</assert> | |||
<assert expected="false"> | |||
<and><false/><true/></and> | |||
</assert> | |||
<assert> | |||
<and><true/><true/></and> | |||
</assert> | |||
</target> | |||
<!-- Check lazy evaluation --> | |||
<target name="lazy"> | |||
<assert expected="false"> | |||
<and><false/><fail/></and> | |||
</assert> | |||
</target> | |||
</project> |
@@ -0,0 +1,44 @@ | |||
<!-- Tests for the <is-set> condition. --> | |||
<project version="2.0"> | |||
<!-- Set to some arbirary value --> | |||
<target name="set"> | |||
<property name="test-prop"> | |||
<path location="some-location"/> | |||
</property> | |||
<assert> | |||
<is-set property="test-prop"/> | |||
</assert> | |||
</target> | |||
<!-- Set to true --> | |||
<target name="set2true"> | |||
<property name="test-prop" value="true"/> | |||
<assert> | |||
<is-set property="test-prop"/> | |||
</assert> | |||
</target> | |||
<!-- Set to false --> | |||
<target name="set2false"> | |||
<property name="test-prop" value="false"/> | |||
<assert> | |||
<is-set property="test-prop"/> | |||
</assert> | |||
</target> | |||
<!-- Not set --> | |||
<target name="not-set"> | |||
<assert expected="false"> | |||
<is-set property="test-prop"/> | |||
</assert> | |||
</target> | |||
<!-- No property name --> | |||
<target name="no-prop-name"> | |||
<assert> | |||
<is-set/> | |||
</assert> | |||
</target> | |||
</project> |
@@ -0,0 +1,44 @@ | |||
<!-- Tests for the <is-true> condition. --> | |||
<project version="2.0"> | |||
<!-- Set to some arbirary value --> | |||
<target name="set"> | |||
<property name="test-prop"> | |||
<path location="some-location"/> | |||
</property> | |||
<assert> | |||
<is-true property="test-prop"/> | |||
</assert> | |||
</target> | |||
<!-- Set to true --> | |||
<target name="set2true"> | |||
<property name="test-prop" value="true"/> | |||
<assert> | |||
<is-true property="test-prop"/> | |||
</assert> | |||
</target> | |||
<!-- Set to false --> | |||
<target name="set2false"> | |||
<property name="test-prop" value="false"/> | |||
<assert expected="false"> | |||
<is-true property="test-prop"/> | |||
</assert> | |||
</target> | |||
<!-- Not set --> | |||
<target name="not-set"> | |||
<assert expected="false"> | |||
<is-true property="test-prop"/> | |||
</assert> | |||
</target> | |||
<!-- No property name --> | |||
<target name="no-prop-name"> | |||
<assert> | |||
<is-true/> | |||
</assert> | |||
</target> | |||
</project> |
@@ -0,0 +1,28 @@ | |||
<!-- Tests for the <not> condition. --> | |||
<project version="2.0"> | |||
<!-- An empty <or> condition --> | |||
<target name="empty"> | |||
<assert> | |||
<not/> | |||
</assert> | |||
</target> | |||
<!-- The truth-table --> | |||
<target name="truth-table"> | |||
<assert expected="false"> | |||
<not><true/></not> | |||
</assert> | |||
<assert> | |||
<not><false/></not> | |||
</assert> | |||
</target> | |||
<!-- Too many nested conditions --> | |||
<target name="too-many-nested"> | |||
<assert> | |||
<not><true/><false/></not> | |||
</assert> | |||
</target> | |||
</project> |
@@ -0,0 +1,40 @@ | |||
<!-- Tests for the <or> condition. --> | |||
<project version="2.0"> | |||
<!-- An empty <or> condition --> | |||
<target name="empty"> | |||
<assert> | |||
<or/> | |||
</assert> | |||
</target> | |||
<!-- The truth-table --> | |||
<target name="truth-table"> | |||
<assert expected="false"> | |||
<or><false/></or> | |||
</assert> | |||
<assert> | |||
<or><true/></or> | |||
</assert> | |||
<assert expected="false"> | |||
<or><false/><false/></or> | |||
</assert> | |||
<assert> | |||
<or><true/><false/></or> | |||
</assert> | |||
<assert> | |||
<or><false/><true/></or> | |||
</assert> | |||
<assert> | |||
<or><true/><true/></or> | |||
</assert> | |||
</target> | |||
<!-- Check lazy evaluation --> | |||
<target name="lazy"> | |||
<assert> | |||
<or><true/><fail/></or> | |||
</assert> | |||
</target> | |||
</project> |