Added some more testcases to document this behavior. PR: 10769 Reported by: jan.grant@bristol.ac.uk (Jan Grant) git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273105 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -22,4 +22,20 @@ | |||||
| <basename property="file.wo.suf" file="foo.txt" suffix="txt"/> | <basename property="file.wo.suf" file="foo.txt" suffix="txt"/> | ||||
| </target> | </target> | ||||
| <target name="testMultipleDots"> | |||||
| <basename property="file.wo.suf" file="foo.bar.txt" suffix="txt"/> | |||||
| </target> | |||||
| <target name="testNoDots"> | |||||
| <basename property="file.wo.suf" file="foo.bartxt" suffix="txt"/> | |||||
| </target> | |||||
| <target name="testValueEqualsSuffixWithDot"> | |||||
| <basename property="file.wo.suf" file=".txt" suffix=".txt"/> | |||||
| </target> | |||||
| <target name="testValueEqualsSuffixWithoutDot"> | |||||
| <basename property="file.wo.suf" file=".txt" suffix="txt"/> | |||||
| </target> | |||||
| </project> | </project> | ||||
| @@ -118,20 +118,25 @@ public class Basename extends Task { | |||||
| // The method executing the task | // The method executing the task | ||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| String value; | |||||
| if (property == null) { | if (property == null) { | ||||
| throw new BuildException("property attribute required", location); | throw new BuildException("property attribute required", location); | ||||
| } | } | ||||
| if (file == null) { | if (file == null) { | ||||
| throw new BuildException("file attribute required", location); | throw new BuildException("file attribute required", location); | ||||
| } else { | |||||
| value = file.getName(); | |||||
| if (suffix != null && value.endsWith(suffix)) { | |||||
| int pos = value.indexOf('.'); | |||||
| value = value.substring(0, pos); | |||||
| } | |||||
| getProject().setNewProperty(property, value); | |||||
| } | } | ||||
| String value = file.getName(); | |||||
| if (suffix != null && value.endsWith(suffix)) { | |||||
| // if the suffix does not starts with a '.' and the | |||||
| // char preceding the suffix is a '.', we assume the user | |||||
| // wants to remove the '.' as well (see docs) | |||||
| int pos = value.length() - suffix.length(); | |||||
| if (pos > 0 && suffix.charAt(0) != '.' | |||||
| && value.charAt(pos - 1) == '.') { | |||||
| pos--; | |||||
| } | |||||
| value = value.substring(0, pos); | |||||
| } | |||||
| getProject().setNewProperty(property, value); | |||||
| } | } | ||||
| } | } | ||||
| @@ -84,20 +84,38 @@ public class BasenameTest extends BuildFileTest { | |||||
| public void test4() { | public void test4() { | ||||
| executeTarget("test4"); | executeTarget("test4"); | ||||
| String expected = "foo.txt"; | |||||
| String checkprop = project.getProperty("file.w.suf"); | String checkprop = project.getProperty("file.w.suf"); | ||||
| if (!checkprop.equals(expected)) { | |||||
| fail("basename failed"); | |||||
| } | |||||
| assertEquals("foo.txt", checkprop); | |||||
| } | } | ||||
| public void test5() { | public void test5() { | ||||
| executeTarget("test5"); | executeTarget("test5"); | ||||
| String expected = "foo"; | |||||
| String checkprop = project.getProperty("file.wo.suf"); | String checkprop = project.getProperty("file.wo.suf"); | ||||
| if (!checkprop.equals(expected)) { | |||||
| fail("basename failed"); | |||||
| } | |||||
| assertEquals("foo", checkprop); | |||||
| } | } | ||||
| public void testMultipleDots() { | |||||
| executeTarget("testMultipleDots"); | |||||
| String checkprop = project.getProperty("file.wo.suf"); | |||||
| assertEquals("foo.bar", checkprop); | |||||
| } | |||||
| public void testNoDots() { | |||||
| executeTarget("testNoDots"); | |||||
| String checkprop = project.getProperty("file.wo.suf"); | |||||
| assertEquals("foo.bar", checkprop); | |||||
| } | |||||
| public void testValueEqualsSuffixWithDot() { | |||||
| executeTarget("testValueEqualsSuffixWithDot"); | |||||
| String checkprop = project.getProperty("file.wo.suf"); | |||||
| assertEquals("", checkprop); | |||||
| } | |||||
| public void testValueEqualsSuffixWithoutDot() { | |||||
| executeTarget("testValueEqualsSuffixWithoutDot"); | |||||
| String checkprop = project.getProperty("file.wo.suf"); | |||||
| assertEquals("", checkprop); | |||||
| } | |||||
| } | } | ||||