You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by mb...@apache.org on 2012/08/20 19:48:34 UTC

svn commit: r1375136 - in /ant/core/trunk: WHATSNEW src/main/org/apache/tools/ant/types/resources/FileResource.java src/tests/junit/org/apache/tools/ant/types/resources/FileResourceTest.java

Author: mbenson
Date: Mon Aug 20 17:48:34 2012
New Revision: 1375136

URL: http://svn.apache.org/viewvc?rev=1375136&view=rev
Log:
Any FileResource whose represented File has a parent also has a basedir.

Added:
    ant/core/trunk/src/tests/junit/org/apache/tools/ant/types/resources/FileResourceTest.java   (with props)
Modified:
    ant/core/trunk/WHATSNEW
    ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java

Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=1375136&r1=1375135&r2=1375136&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Mon Aug 20 17:48:34 2012
@@ -14,6 +14,8 @@ Changes that could break older environme
    classes of Execute has been extracted to the
    org.apache.tools.ant.taskdefs.launcher package.
 
+ * Any FileResource whose represented File has a parent also has a basedir.
+
 Fixed bugs:
 -----------
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java?rev=1375136&r1=1375135&r2=1375136&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java Mon Aug 20 17:48:34 2012
@@ -57,8 +57,8 @@ public class FileResource extends Resour
      * @param name   the relative filename.
      */
     public FileResource(File b, String name) {
-        setFile(FILE_UTILS.resolveFile(b, name));
-        setBaseDir(b);
+        this.baseDir = b;
+        this.file = FILE_UTILS.resolveFile(b, name);
     }
 
     /**
@@ -76,8 +76,8 @@ public class FileResource extends Resour
      * @since Ant 1.8
      */
     public FileResource(Project p, File f) {
+        this(f);
         setProject(p);
-        setFile(f);
     }
 
     /**
@@ -97,6 +97,9 @@ public class FileResource extends Resour
     public void setFile(File f) {
         checkAttributesAllowed();
         file = f;
+        if (f != null && (getBaseDir() == null || !FILE_UTILS.isLeadingPath(getBaseDir(), f))) {
+            setBaseDir(f.getParentFile());
+        }
     }
 
     /**
@@ -372,7 +375,7 @@ public class FileResource extends Resour
 
     /**
      * Create a new resource that matches a relative or absolute path.
-     * If the current instance has a baseDir attribute, it is copied.
+     * If the current instance has a compatible baseDir attribute, it is copied.
      * @param path relative/absolute path to a resource
      * @return a new resource of type FileResource
      * @throws BuildException if desired
@@ -381,7 +384,9 @@ public class FileResource extends Resour
     public Resource getResource(String path) {
         File newfile = FILE_UTILS.resolveFile(getFile(), path);
         FileResource fileResource = new FileResource(newfile);
-        fileResource.setBaseDir(getBaseDir());
+        if (FILE_UTILS.isLeadingPath(getBaseDir(), newfile)) {
+            fileResource.setBaseDir(getBaseDir());
+        }
         return fileResource;
     }
 }

Added: ant/core/trunk/src/tests/junit/org/apache/tools/ant/types/resources/FileResourceTest.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/apache/tools/ant/types/resources/FileResourceTest.java?rev=1375136&view=auto
==============================================================================
--- ant/core/trunk/src/tests/junit/org/apache/tools/ant/types/resources/FileResourceTest.java (added)
+++ ant/core/trunk/src/tests/junit/org/apache/tools/ant/types/resources/FileResourceTest.java Mon Aug 20 17:48:34 2012
@@ -0,0 +1,109 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.tools.ant.types.resources;
+
+import java.io.File;
+
+import org.apache.tools.ant.Project;
+
+import junit.framework.TestCase;
+
+/**
+ * Test Java API of {@link FileResource}.
+ */
+public class FileResourceTest extends TestCase {
+
+    private File root;
+
+    public void setUp() {
+        root = new File(System.getProperty("root"));
+    }
+
+    public void testAttributes() {
+        FileResource f = new FileResource();
+        f.setBaseDir(root);
+        f.setName("foo");
+        assertEquals(new File(root, "foo"), f.getFile());
+        assertEquals(root, f.getBaseDir());
+        assertEquals("foo", f.getName());
+    }
+
+    public void testNonImmediateBasedir() {
+        FileResource f = new FileResource();
+        f.setBaseDir(root);
+        f.setName("foo/bar");
+        assertEquals(new File(root, "foo/bar"), f.getFile());
+        assertEquals(root, f.getBaseDir());
+        assertEquals("foo/bar", f.getName());
+    }
+
+    public void testFile() {
+        FileResource f = new FileResource(new File(root, "foo"));
+        assertEquals(new File(root, "foo"), f.getFile());
+        assertEquals(root, f.getBaseDir());
+        assertEquals("foo", f.getName());
+    }
+
+    public void testBasedirAndName() {
+        FileResource f = new FileResource(root, "foo");
+        assertEquals(new File(root, "foo"), f.getFile());
+        assertEquals(root, f.getBaseDir());
+        assertEquals("foo", f.getName());
+    }
+
+    public void testNonImmediateBasedirAndName() {
+        FileResource f = new FileResource(root, "foo/bar");
+        assertEquals(new File(root, "foo/bar"), f.getFile());
+        assertEquals(root, f.getBaseDir());
+        assertEquals("foo/bar", f.getName());
+    }
+
+    public void testProjectAndFilename() {
+        Project p = new Project();
+        p.setBaseDir(root);
+        FileResource f = new FileResource(p, "foo");
+        assertEquals(new File(root, "foo"), f.getFile());
+        assertEquals(root, f.getBaseDir());
+        assertEquals("foo", f.getName());
+    }
+
+    public void testRelativeFactoryResource() {
+        FileResource f = new FileResource(root, "foo");
+        FileResource relative = f.getResource("bar").as(FileResource.class);
+        assertEquals(new File(root, "foo/bar"), relative.getFile());
+        assertEquals("foo/bar", relative.getName());
+        assertEquals(root, relative.getBaseDir());
+    }
+
+    public void testAbsoluteFactoryResource() {
+        FileResource f = new FileResource(new File(root, "foo/a"));
+        assertEquals(new File(root, "foo"), f.getBaseDir());
+        File bar = new File(root, "bar");
+        FileResource fromFactory = f.getResource(bar.getAbsolutePath()).as(FileResource.class);
+        assertEquals(bar, fromFactory.getFile());
+        assertEquals(root, fromFactory.getBaseDir());
+    }
+
+    public void testParentSiblingFactoryResource() {
+        FileResource f = new FileResource(new File(root, "foo/a"));
+        assertEquals(new File(root, "foo"), f.getBaseDir());
+        FileResource parentSibling = f.getResource("../../bar").as(FileResource.class);
+        assertEquals(root, parentSibling.getBaseDir());
+        assertEquals("bar", parentSibling.getName());
+    }
+}

Propchange: ant/core/trunk/src/tests/junit/org/apache/tools/ant/types/resources/FileResourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native