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. No + +

Basedir of the new project

+ +

The basedir value of the new project is affected by the two +attributes dir and inheritall, see the following table for +details:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
dir attributeinheritAll attributenew project's basedir
value providedtruevalue of dir attribute
value providedfalsevalue of dir attribute
omittedtruebasedir of calling project (the one whose build + file contains the <ant> task).
omittedfalsebasedir attribute of the <project> element + of the new project
+

Examples

   <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 @@
+
+
+  
+    This build file should only be run from within the testcase
+  
+
+  
+    
+  
+
+  
+    
+  
+
+
+
\ 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  
+ * @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;
+        }
+
+    }
+
 }