diff --git a/docs/manual/CoreTasks/ant.html b/docs/manual/CoreTasks/ant.html index bc7b6f4db..5604b4cb3 100644 --- a/docs/manual/CoreTasks/ant.html +++ b/docs/manual/CoreTasks/ant.html @@ -67,6 +67,43 @@ setting of inheritAll. This allows you to parameterize your subprojects.
The basedir value of the new project is affected by the two +attributes dir and inheritall, see the following table for +details:
+ +dir attribute | +inheritAll attribute | +new project's basedir | +
value provided | +true | +value of dir attribute | +
value provided | +false | +value of dir attribute | +
omitted | +true | +basedir of calling project (the one whose build + file contains the <ant> task). | +
omitted | +false | +basedir attribute of the <project> element + of the new project | +
<ant antfile="subproject/subbuild.xml" dir="subproject" target="compile"/> diff --git a/src/etc/testcases/taskdefs/ant.xml b/src/etc/testcases/taskdefs/ant.xml index b8bf9eda1..d65b79b6a 100644 --- a/src/etc/testcases/taskdefs/ant.xml +++ b/src/etc/testcases/taskdefs/ant.xml @@ -31,4 +31,26 @@+ + + ++ + + ++ + + ++ + + ++ + + diff --git a/src/etc/testcases/taskdefs/ant/ant.xml b/src/etc/testcases/taskdefs/ant/ant.xml new file mode 100644 index 000000000..a1d585e92 --- /dev/null +++ b/src/etc/testcases/taskdefs/ant/ant.xml @@ -0,0 +1,16 @@ ++ + + \ No newline at end of file diff --git a/src/testcases/org/apache/tools/ant/taskdefs/AntTest.java b/src/testcases/org/apache/tools/ant/taskdefs/AntTest.java index 64e046d91..e9b6fc2dd 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/AntTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/AntTest.java @@ -54,17 +54,29 @@ package org.apache.tools.ant.taskdefs; +import java.io.File; + +import junit.framework.AssertionFailedError; + +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.BuildListener; + /** * @author Nico Seessle+ + +This build file should only be run from within the testcase ++ + ++ + + + ++ + * @author Stefan Bodewig + * @version $Revision$ */ public class AntTest extends TaskdefsTest { + private static final String TESTCASES_DIR = "src/etc/testcases"; + private static final String TASKDEFS_DIR = TESTCASES_DIR + "/taskdefs"; + public AntTest(String name) { super(name); } public void setUp() { - configureProject("src/etc/testcases/taskdefs/ant.xml"); + configureProject(TASKDEFS_DIR + "/ant.xml"); } public void test1() { @@ -92,4 +104,91 @@ public class AntTest extends TaskdefsTest { public void test6() { executeTarget("test6"); } + + public void testExplicitBasedir1() { + File dir1 = getProjectDir(); + File dir2 = new File(TESTCASES_DIR); + testBaseDirs("explicitBasedir1", + new String[] {dir1.getAbsolutePath(), + dir2.getAbsolutePath() + }); + } + + public void testExplicitBasedir2() { + File dir1 = getProjectDir(); + File dir2 = new File(TESTCASES_DIR); + testBaseDirs("explicitBasedir2", + new String[] {dir1.getAbsolutePath(), + dir2.getAbsolutePath() + }); + } + + public void testInheritBasedir() { + String basedir = getProjectDir().getAbsolutePath(); + testBaseDirs("inheritBasedir", new String[] {basedir, basedir}); + } + + public void testDoNotInheritBasedir() { + File dir1 = getProjectDir(); + File dir2 = new File(TASKDEFS_DIR+"/ant"); + String basedir = getProjectDir().getAbsolutePath(); + testBaseDirs("doNotInheritBasedir", + new String[] {dir1.getAbsolutePath(), + dir2.getAbsolutePath() + }); + } + + public void testBasedirTripleCall() { + File dir1 = getProjectDir(); + File dir2 = new File(TASKDEFS_DIR+"/ant"); + testBaseDirs("tripleCall", + new String[] {dir1.getAbsolutePath(), + dir2.getAbsolutePath(), + dir1.getAbsolutePath() + }); + } + + protected void testBaseDirs(String target, String[] dirs) { + BasedirChecker bc = new BasedirChecker(dirs); + project.addBuildListener(bc); + executeTarget(target); + AssertionFailedError ae = bc.getError(); + if (ae != null) { + throw ae; + } + } + + private class BasedirChecker implements BuildListener { + private String[] expectedBasedirs; + private int calls = 0; + private AssertionFailedError error; + + BasedirChecker(String[] dirs) { + expectedBasedirs = dirs; + } + + public void buildStarted(BuildEvent event) {} + public void buildFinished(BuildEvent event) {} + public void targetFinished(BuildEvent event){} + public void taskStarted(BuildEvent event) {} + public void taskFinished(BuildEvent event) {} + public void messageLogged(BuildEvent event) {} + + public void targetStarted(BuildEvent event) { + if (error == null) { + try { + assertEquals(expectedBasedirs[calls++], + event.getProject().getBaseDir().getAbsolutePath()); + } catch (AssertionFailedError e) { + error = e; + } + } + } + + AssertionFailedError getError() { + return error; + } + + } + }