share a common abstract base class. * Fixed <ant1> test files so that they run under Ant1.4, for checking. * Fixed build so that ant1_todo.atl only includes the correct files. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272107 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -306,7 +306,7 @@ Legal: | |||
| <property name="regexp.package" value="${util.package}/regexp"/> | |||
| <patternset id="ant1.todo.include"> | |||
| <include name="org/apache/tools/**" /> | |||
| <include name="org/apache/tools/todo/**" /> | |||
| <exclude name="${regexp.package}/JakartaRegexp*.java" | |||
| unless="jakarta.regexp.present" /> | |||
| <exclude name="${regexp.package}/JakartaOro*.java" | |||
| @@ -16,12 +16,8 @@ | |||
| <!-- Tasks specialised for myrmidon --> | |||
| <task name="ant1.ant" | |||
| classname="org.apache.tools.ant.taskdefs.Ant" /> | |||
| <!-- Tasks not currently supported. | |||
| <task name="ant1.antcall" | |||
| classname="org.apache.tools.ant.taskdefs.CallTarget" /> | |||
| --> | |||
| <task name="ant1.antcall" | |||
| classname="org.apache.tools.ant.taskdefs.CallTarget" /> | |||
| <!-- standard ant tasks --> | |||
| <task name="ant1.mkdir" | |||
| @@ -10,7 +10,7 @@ package org.apache.tools.ant; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.net.URL; | |||
| import java.security.CodeSource; | |||
| import java.util.Enumeration; | |||
| import java.util.HashSet; | |||
| import java.util.Hashtable; | |||
| @@ -18,7 +18,6 @@ import java.util.Iterator; | |||
| import java.util.Map; | |||
| import java.util.Properties; | |||
| import java.util.Set; | |||
| import java.security.CodeSource; | |||
| import org.apache.aut.converter.Converter; | |||
| import org.apache.aut.converter.ConverterException; | |||
| import org.apache.myrmidon.api.TaskContext; | |||
| @@ -41,6 +40,7 @@ public class Ant1CompatProject extends Project | |||
| public static final String ANT1_TASK_PREFIX = "ant1."; | |||
| public static final String MYRMIDON_PROJECT_PROP = | |||
| org.apache.myrmidon.interfaces.model.Project.PROJECT; | |||
| public static final String ANT1_PROJECT_PROP = "ant1.project"; | |||
| private static String javaclasspath; | |||
| @@ -74,7 +74,7 @@ public class Ant1CompatProject extends Project | |||
| setBaseDir( m_context.getBaseDirectory() ); | |||
| String projectName = | |||
| (String) m_context.getProperty( MYRMIDON_PROJECT_PROP ); | |||
| (String)m_context.getProperty( MYRMIDON_PROJECT_PROP ); | |||
| if( projectName != null ) | |||
| { | |||
| setName( projectName ); | |||
| @@ -27,7 +27,6 @@ import org.apache.myrmidon.api.TaskException; | |||
| public class Task extends OriginalAnt1Task | |||
| implements org.apache.myrmidon.api.Task, Configurable | |||
| { | |||
| private static final String ANT1_PROJECT_PROP = "ant1.project"; | |||
| protected TaskContext m_context; | |||
| /** | |||
| @@ -45,11 +44,11 @@ public class Task extends OriginalAnt1Task | |||
| // Create/recontextualise the Ant1 Project. | |||
| Ant1CompatProject project = | |||
| (Ant1CompatProject)context.getProperty( ANT1_PROJECT_PROP ); | |||
| (Ant1CompatProject)context.getProperty( Ant1CompatProject.ANT1_PROJECT_PROP ); | |||
| if( project == null ) | |||
| { | |||
| project = createProject(); | |||
| m_context.setProperty( ANT1_PROJECT_PROP, project ); | |||
| m_context.setProperty( Ant1CompatProject.ANT1_PROJECT_PROP, project ); | |||
| } | |||
| else | |||
| { | |||
| @@ -0,0 +1,238 @@ | |||
| /* | |||
| * 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.tools.ant.taskdefs; | |||
| import java.util.Iterator; | |||
| import java.util.Vector; | |||
| import org.apache.avalon.framework.configuration.Configuration; | |||
| import org.apache.avalon.framework.configuration.DefaultConfiguration; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import org.apache.myrmidon.interfaces.executor.ExecutionFrame; | |||
| import org.apache.myrmidon.interfaces.executor.Executor; | |||
| import org.apache.tools.ant.Ant1CompatProject; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.Task; | |||
| /** | |||
| * A base class for Ant1 versions of <ant> and <antcall> tasks, | |||
| * which delegate to the Myrmidon versions of these tasks. | |||
| * | |||
| * @author <a href="mailto:darrell@apache.org">Darrell DeBoer</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public abstract class AbstractAnt1AntTask | |||
| extends Task | |||
| { | |||
| /** the target to call if any */ | |||
| private String target = null; | |||
| /** should we inherit properties from the parent ? */ | |||
| private boolean inheritAll = true; | |||
| /** the properties to pass to the new project */ | |||
| private Vector properties = new Vector(); | |||
| /** the references to pass to the new project */ | |||
| private Vector references = new Vector(); | |||
| /** | |||
| * If true, inherit all properties from parent Project | |||
| * If false, inherit only userProperties and those defined | |||
| * inside the ant call itself | |||
| */ | |||
| public void setInheritAll( boolean value ) | |||
| { | |||
| inheritAll = value; | |||
| } | |||
| /** | |||
| * set the target to execute. If none is defined it will | |||
| * execute the default target of the build file | |||
| */ | |||
| public void setTarget( String s ) | |||
| { | |||
| this.target = s; | |||
| } | |||
| /** | |||
| * Create a nested property (ant) or param (antcall) element. | |||
| */ | |||
| protected Property doCreateProperty() | |||
| { | |||
| Property p = new Property( true ); | |||
| properties.addElement( p ); | |||
| return p; | |||
| } | |||
| /** | |||
| * create a reference element that identifies a data type that | |||
| * should be carried over to the new project. | |||
| */ | |||
| public void addReference( Reference r ) | |||
| { | |||
| references.addElement( r ); | |||
| } | |||
| /** | |||
| * Helper class that implements the nested <reference> | |||
| * element of <ant> and <antcall>. | |||
| */ | |||
| public static class Reference | |||
| extends org.apache.tools.ant.types.Reference | |||
| { | |||
| public Reference() | |||
| { | |||
| super(); | |||
| } | |||
| private String targetid = null; | |||
| public void setToRefid( String targetid ) | |||
| { | |||
| this.targetid = targetid; | |||
| } | |||
| public String getToRefid() | |||
| { | |||
| return targetid; | |||
| } | |||
| } | |||
| /** | |||
| * Removes the Ant1CompatProject from the properties, builds a TaskModel for | |||
| * executing the Myrmidon task, and executes that TaskModel. | |||
| * @throws BuildException on error | |||
| */ | |||
| public void execute() throws BuildException | |||
| { | |||
| Object ant1project = unsetAnt1Project(); | |||
| try | |||
| { | |||
| Configuration antConfig = constructTaskModel(); | |||
| executeTask( antConfig ); | |||
| } | |||
| finally | |||
| { | |||
| resetAnt1Project( ant1project ); | |||
| } | |||
| } | |||
| /** | |||
| * Executes the Myrmidon task detailed in the TaskModel provided. | |||
| * @param taskModel the TaskModel for the task to execute. | |||
| */ | |||
| private void executeTask( Configuration taskModel ) | |||
| { | |||
| try | |||
| { | |||
| Executor executor = (Executor)m_context.getService( Executor.class ); | |||
| ExecutionFrame frame = | |||
| (ExecutionFrame)m_context.getService( ExecutionFrame.class ); | |||
| executor.execute( taskModel, frame ); | |||
| } | |||
| catch( TaskException e ) | |||
| { | |||
| throw new BuildException( e ); | |||
| } | |||
| } | |||
| /** | |||
| * Removes the Ant1CompatProject from the TaskContext properties. | |||
| * @return the removed project | |||
| * @throws BuildException | |||
| */ | |||
| private Object unsetAnt1Project() throws BuildException | |||
| { | |||
| Object ant1project = null; | |||
| try | |||
| { | |||
| ant1project = | |||
| m_context.getProperty( Ant1CompatProject.ANT1_PROJECT_PROP ); | |||
| m_context.setProperty( Ant1CompatProject.ANT1_PROJECT_PROP, null ); | |||
| } | |||
| catch( TaskException e ) | |||
| { | |||
| throw new BuildException( e ); | |||
| } | |||
| return ant1project; | |||
| } | |||
| /** | |||
| * Adds the Ant1CompatProject back into the TaskContext properties. | |||
| * @param ant1project the project to add. | |||
| * @throws BuildException | |||
| */ | |||
| private void resetAnt1Project( Object ant1project ) throws BuildException | |||
| { | |||
| try | |||
| { | |||
| m_context.setProperty( Ant1CompatProject.ANT1_PROJECT_PROP, | |||
| ant1project ); | |||
| } | |||
| catch( TaskException e ) | |||
| { | |||
| throw new BuildException( e ); | |||
| } | |||
| } | |||
| /** | |||
| * Builds the TaskModel for executing the Myrmidon version of a task. | |||
| * @return a Configuration containing the TaskModel | |||
| */ | |||
| protected Configuration constructTaskModel() | |||
| { | |||
| DefaultConfiguration antConfig = buildTaskModel(); | |||
| antConfig.setAttribute( "inherit-all", String.valueOf( inheritAll ) ); | |||
| // Ignore inheritRefs for now ( inheritAll == inheritRefs ) | |||
| if( target != null ) | |||
| { | |||
| antConfig.setAttribute( "target", target ); | |||
| } | |||
| addProperties( antConfig ); | |||
| addReferences( antConfig ); | |||
| return antConfig; | |||
| } | |||
| /** | |||
| * Create the Myrmidon TaskModel, and configure with subclass-specific config. | |||
| */ | |||
| protected abstract DefaultConfiguration buildTaskModel(); | |||
| /** | |||
| * Adds all defined properties to the supplied Task model. | |||
| * @param taskModel | |||
| */ | |||
| protected void addProperties( DefaultConfiguration taskModel ) | |||
| { | |||
| // Add all of the properties. | |||
| Iterator iter = properties.iterator(); | |||
| while( iter.hasNext() ) | |||
| { | |||
| DefaultConfiguration param = new DefaultConfiguration( "param", "" ); | |||
| Property property = (Property)iter.next(); | |||
| param.setAttribute( "name", property.getName() ); | |||
| param.setAttribute( "value", property.getValue() ); | |||
| taskModel.addChild( param ); | |||
| } | |||
| } | |||
| /** | |||
| * Adds all defined references to the supplied Task model. | |||
| * @param taskModel | |||
| */ | |||
| protected void addReferences( DefaultConfiguration taskModel ) | |||
| { | |||
| // TODO: Handle references. | |||
| } | |||
| } | |||
| @@ -54,86 +54,47 @@ | |||
| package org.apache.tools.ant.taskdefs; | |||
| import org.apache.tools.ant.Task; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.util.FileUtils; | |||
| import org.apache.avalon.framework.configuration.DefaultConfiguration; | |||
| import org.apache.avalon.framework.configuration.Configuration; | |||
| import org.apache.myrmidon.interfaces.executor.Executor; | |||
| import org.apache.myrmidon.interfaces.executor.ExecutionFrame; | |||
| import org.apache.myrmidon.api.TaskException; | |||
| import java.io.File; | |||
| import java.util.Vector; | |||
| import java.util.Iterator; | |||
| import org.apache.avalon.framework.configuration.DefaultConfiguration; | |||
| import org.apache.tools.ant.util.FileUtils; | |||
| /** | |||
| * Call Ant in a sub-project. | |||
| * | |||
| * <pre> | |||
| * <target name="foo" depends="init"> | |||
| * <ant antfile="build.xml" target="bar" > | |||
| * <property name="property1" value="aaaaa" /> | |||
| * <property name="foo" value="baz" /> | |||
| * </ant></SPAN> | |||
| * </target></SPAN> | |||
| * | |||
| * <target name="bar" depends="init"> | |||
| * <echo message="prop is ${property1} ${foo}" /> | |||
| * </target> | |||
| * </pre> | |||
| * | |||
| * Ant1Compat version of <ant>, which delegates to the Myrmidon version. | |||
| * | |||
| * @author costin@dnt.ro | |||
| * @author <a href="mailto:darrell@apache.org">Darrell DeBoer</a> | |||
| */ | |||
| public class Ant extends Task { | |||
| public class Ant | |||
| extends AbstractAnt1AntTask | |||
| { | |||
| /** the basedir where is executed the build file */ | |||
| private File dir = null; | |||
| /** the build.xml file (can be absolute) in this case dir will be ignored */ | |||
| private String antFile = null; | |||
| /** the target to call if any */ | |||
| private String target = null; | |||
| /** the output */ | |||
| private String output = null; | |||
| /** should we inherit properties from the parent ? */ | |||
| private boolean inheritAll = true; | |||
| /** should we inherit references from the parent ? */ | |||
| private boolean inheritRefs = false; | |||
| /** the properties to pass to the new project */ | |||
| private Vector properties = new Vector(); | |||
| /** the references to pass to the new project */ | |||
| private Vector references = new Vector(); | |||
| /** | |||
| * If true, inherit all properties from parent Project | |||
| * If false, inherit only userProperties and those defined | |||
| * inside the ant call itself | |||
| */ | |||
| public void setInheritAll(boolean value) { | |||
| inheritAll = value; | |||
| } | |||
| /** | |||
| * If true, inherit all references from parent Project | |||
| * If false, inherit only those defined | |||
| * inside the ant call itself | |||
| */ | |||
| public void setInheritRefs(boolean value) { | |||
| public void setInheritRefs( boolean value ) | |||
| { | |||
| inheritRefs = value; | |||
| } | |||
| /** | |||
| * ... | |||
| */ | |||
| public void setDir(File d) { | |||
| public void setDir( File d ) | |||
| { | |||
| this.dir = d; | |||
| } | |||
| @@ -142,159 +103,50 @@ public class Ant extends Task { | |||
| * If it is absolute, <tt>dir</tt> will be ignored, if it is | |||
| * relative it will be resolved relative to <tt>dir</tt>. | |||
| */ | |||
| public void setAntfile(String s) { | |||
| public void setAntfile( String s ) | |||
| { | |||
| // @note: it is a string and not a file to handle relative/absolute | |||
| // otherwise a relative file will be resolved based on the current | |||
| // basedir. | |||
| this.antFile = s; | |||
| } | |||
| /** | |||
| * set the target to execute. If none is defined it will | |||
| * execute the default target of the build file | |||
| */ | |||
| public void setTarget(String s) { | |||
| this.target = s; | |||
| } | |||
| public void setOutput(String s) { | |||
| public void setOutput( String s ) | |||
| { | |||
| this.output = s; | |||
| } | |||
| /** create a property to pass to the new project as a 'user property' */ | |||
| public Property createProperty() { | |||
| Property p = new Property(true); | |||
| properties.addElement( p ); | |||
| return p; | |||
| } | |||
| /** | |||
| * create a reference element that identifies a data type that | |||
| * should be carried over to the new project. | |||
| */ | |||
| public void addReference(Reference r) { | |||
| references.addElement(r); | |||
| } | |||
| /** | |||
| * Helper class that implements the nested <reference> | |||
| * element of <ant> and <antcall>. | |||
| */ | |||
| public static class Reference | |||
| extends org.apache.tools.ant.types.Reference { | |||
| public Reference() {super();} | |||
| private String targetid=null; | |||
| public void setToRefid(String targetid) { this.targetid=targetid; } | |||
| public String getToRefid() { return targetid; } | |||
| public Property createProperty() | |||
| { | |||
| return doCreateProperty(); | |||
| } | |||
| /** | |||
| * Called by the project to let the task do its work. This method may be | |||
| * called more than once, if the task is invoked more than once. | |||
| * For example, | |||
| * if target1 and target2 both depend on target3, then running | |||
| * "ant target1 target2" will run all tasks in target3 twice. | |||
| * | |||
| * @exception BuildException if something goes wrong with the build | |||
| * Construct a TaskModel for the Myrmidon <ant> task, and configure it | |||
| * with sub-class specific values (antfile). | |||
| * @return the TaskModel | |||
| */ | |||
| public void execute() throws BuildException | |||
| { | |||
| Object ant1project = unsetProject(); | |||
| try | |||
| { | |||
| Configuration antConfig = buildAntTaskConfiguration(); | |||
| executeTask( antConfig ); | |||
| } | |||
| finally | |||
| { | |||
| resetProject( ant1project ); | |||
| } | |||
| } | |||
| private void executeTask( Configuration antConfig ) | |||
| { | |||
| try | |||
| { | |||
| Executor executor = (Executor) m_context.getService( Executor.class ); | |||
| ExecutionFrame frame = | |||
| (ExecutionFrame) m_context.getService( ExecutionFrame.class ); | |||
| executor.execute( antConfig, frame ); | |||
| } | |||
| catch( TaskException e ) | |||
| { | |||
| throw new BuildException( e ); | |||
| } | |||
| } | |||
| private Configuration buildAntTaskConfiguration() | |||
| protected DefaultConfiguration buildTaskModel() | |||
| { | |||
| DefaultConfiguration antConfig = new DefaultConfiguration( "ant", "" ); | |||
| antConfig.setAttribute( "inherit-all", String.valueOf( inheritAll ) ); | |||
| // Ignore inheritRefs for now ( inheritAll == inheritRefs ) | |||
| if ( target != null ) | |||
| { | |||
| antConfig.setAttribute( "target", target ); | |||
| } | |||
| // Get the "file" value. | |||
| if (antFile == null) { | |||
| if( antFile == null ) | |||
| { | |||
| antFile = "build.xml"; | |||
| } | |||
| if ( dir == null ) | |||
| if( dir == null ) | |||
| { | |||
| dir = project.getBaseDir(); | |||
| } | |||
| File file = FileUtils.newFileUtils().resolveFile(dir, antFile); | |||
| File file = FileUtils.newFileUtils().resolveFile( dir, antFile ); | |||
| antFile = file.getAbsolutePath(); | |||
| antConfig.setAttribute( "file", antFile ); | |||
| // Add all of the properties. | |||
| Iterator iter = properties.iterator(); | |||
| while( iter.hasNext() ) | |||
| { | |||
| DefaultConfiguration param = new DefaultConfiguration( "param", "" ); | |||
| Property property = (Property)iter.next(); | |||
| param.setAttribute( "name", property.getName() ); | |||
| param.setAttribute( "value", property.getValue() ); | |||
| antConfig.addChild( param ); | |||
| } | |||
| return antConfig; | |||
| } | |||
| private void resetProject( Object ant1project ) throws BuildException | |||
| { | |||
| try | |||
| { | |||
| m_context.setProperty( "ant1.project", ant1project ); | |||
| } | |||
| catch( TaskException e ) | |||
| { | |||
| throw new BuildException( e ); | |||
| } | |||
| } | |||
| private Object unsetProject() throws BuildException | |||
| { | |||
| Object ant1project = null; | |||
| try | |||
| { | |||
| ant1project = m_context.getProperty( "ant1.project" ); | |||
| m_context.setProperty( "ant1.project", null ); | |||
| } | |||
| catch( TaskException e ) | |||
| { | |||
| throw new BuildException( e ); | |||
| } | |||
| return ant1project; | |||
| } | |||
| } | |||
| @@ -0,0 +1,36 @@ | |||
| /* | |||
| * 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.tools.ant.taskdefs; | |||
| import org.apache.avalon.framework.configuration.DefaultConfiguration; | |||
| /** | |||
| * The Ant1Compat version of the <antcall> task, which delegates to the | |||
| * Myrmidon version. | |||
| * | |||
| * @author <a href="mailto:darrell@apache.org">Darrell DeBoer</a> | |||
| * @version $Revision$ $Date$ | |||
| */ | |||
| public class CallTarget extends AbstractAnt1AntTask | |||
| { | |||
| /** | |||
| * Properties are referred to as Parameters in <antcall> | |||
| */ | |||
| public Property createParam() | |||
| { | |||
| return doCreateProperty(); | |||
| } | |||
| /** | |||
| * The only configuration not done by base class is the task name. | |||
| */ | |||
| protected DefaultConfiguration buildTaskModel() | |||
| { | |||
| return new DefaultConfiguration( "ant-call", "" ); | |||
| } | |||
| } | |||
| @@ -37,6 +37,11 @@ public abstract class AbstractAntTask extends AbstractTask | |||
| * will use default in specified build file. | |||
| */ | |||
| private String m_target; | |||
| /** | |||
| * The parameters/properties which will be passed to the workspace | |||
| * for the target execution. | |||
| */ | |||
| private final ArrayList m_parameters = new ArrayList(); | |||
| /** | |||
| @@ -96,8 +96,31 @@ public class Ant1CompatTestCase | |||
| "test-prop = [set in calling task]" ); | |||
| tracker.addExpectedMessage( "property-test", | |||
| "test-prop = [set in calling target]" ); | |||
| // executeTarget( projectFile, "ant-setprops-test", tracker ); | |||
| tracker.addExpectedMessage( "property-test", | |||
| "test-prop = [test-value]" ); | |||
| // executeTarget( projectFile, "ant-setprops-test", tracker ); | |||
| executeTarget( projectFile, "ant-setprops-test" ); | |||
| } | |||
| public void testAntcallTask() throws Exception | |||
| { | |||
| final File projectFile = getTestResource( "antcall-task-test.xml" ); | |||
| // TODO - Get the <ant> project listeners working, so we can test log messages. | |||
| LogMessageTracker tracker = new LogMessageTracker(); | |||
| tracker.addExpectedMessage( "default-target", | |||
| "In default target." ); | |||
| tracker.addExpectedMessage( "antcall-target", | |||
| "In antcall-target: test-prop = [test-value]" ); | |||
| tracker.addExpectedMessage( "antcall-target", | |||
| "In antcall-target: test-prop = [set in calling task]" ); | |||
| tracker.addExpectedMessage( "antcall-target", | |||
| "In antcall-target: test-prop = [set in calling target]" ); | |||
| tracker.addExpectedMessage( "antcall-target", | |||
| "In antcall-target: test-prop = [test-value]" ); | |||
| // executeTarget( projectFile, "ant-samefile-test", tracker ); | |||
| executeTarget( projectFile, "antcall-test" ); | |||
| } | |||
| } | |||
| @@ -1,5 +1,4 @@ | |||
| <project name="ant-task-test" | |||
| description="Tests for the <ant> task in the Ant1 Compatibility layer." | |||
| default="default-target"> | |||
| <target name="default-target"> | |||
| @@ -47,6 +46,10 @@ | |||
| <!-- Override property in containing project --> | |||
| <property name="test-prop" value="set in calling target"/> | |||
| <ant antfile="subdir/build.xml" target="property-test"/> | |||
| <!-- Test inherit-all = false --> | |||
| <ant antfile="subdir/build.xml" target="property-test" | |||
| inheritall="false"/> | |||
| </target> | |||
| </project> | |||
| </project> | |||
| @@ -0,0 +1,34 @@ | |||
| <project name="antcall-task-test" | |||
| default="default-target"> | |||
| <target name="default-target"> | |||
| <echo message="In default target."/> | |||
| </target> | |||
| <target name="antcall-target"> | |||
| <property name="test-prop" value="test-value"/> | |||
| <echo message="In antcall-target: test-prop = [${test-prop}]"/> | |||
| </target> | |||
| <!-- Basic <antcall> --> | |||
| <target name="antcall-test"> | |||
| <!-- <antcall with default target --> | |||
| <antcall/> | |||
| <!-- <antcall> with defined target (No property overrides) --> | |||
| <antcall target="antcall-target"/> | |||
| <!-- Override property within task def --> | |||
| <antcall target="antcall-target"> | |||
| <param name="test-prop" value="set in calling task"/> | |||
| </antcall> | |||
| <!-- Override property in containing project --> | |||
| <property name="test-prop" value="set in calling target"/> | |||
| <antcall target="antcall-target"/> | |||
| <!-- Test inherit-all = false --> | |||
| <antcall target="antcall-target" inheritall="false"/> | |||
| </target> | |||
| </project> | |||
| @@ -1,5 +1,4 @@ | |||
| <project name="ant1compat-test" | |||
| description="Basic tests for the Ant1 Compatibility layer." | |||
| default="echo-test"> | |||
| <property name="prop-1" value="value-1"/> | |||
| @@ -19,4 +18,4 @@ | |||
| <echo message="Omit$, replace$$, but keep ${} and $"/> | |||
| </target> | |||
| </project> | |||
| </project> | |||
| @@ -1,5 +1,4 @@ | |||
| <project name="if-unless-test" | |||
| description="Tests for if/unless functionality of the Ant1 Compatibility layer." | |||
| default="if-unless-tests"> | |||
| <target name="if-unless-tests" | |||
| @@ -60,4 +59,4 @@ | |||
| <target name="if-with-unless-test-3" if="prop-set" unless="prop-set"> | |||
| <echo message="Ran target: if-with-unless-test-3"/> | |||
| </target> | |||
| </project> | |||
| </project> | |||