Browse Source

BZ 62071 - fix error message when fileset.setFile is called twice

master
Stefan Bodewig 7 years ago
parent
commit
a390fd653c
3 changed files with 35 additions and 1 deletions
  1. +5
    -0
      WHATSNEW
  2. +10
    -1
      src/main/org/apache/tools/ant/types/AbstractFileSet.java
  3. +20
    -0
      src/tests/junit/org/apache/tools/ant/types/AbstractFileSetTest.java

+ 5
- 0
WHATSNEW View File

@@ -30,6 +30,11 @@ Fixed bugs:
streams of a process, could end up being truncated.
Bugzilla Report 58833, 58451

* <fileset>/<zipfileset>/<tarfileset> will now throw an exception
with a more useful error message when setFile is called twice on
the same instance.
Bugzilla Report 62071

Other changes:
--------------



+ 10
- 1
src/main/org/apache/tools/ant/types/AbstractFileSet.java View File

@@ -232,7 +232,16 @@ public abstract class AbstractFileSet extends DataType
if (isReference()) {
throw tooManyAttributes();
}
if (getDir() != null) {
if (fileAttributeUsed) {
if (getDir().equals(file.getParentFile())) {
String[] includes = defaultPatterns.getIncludePatterns(getProject());
if (includes.length == 1 && includes[0].equals(file.getName())) {
// NOOP, setFile has been invoked twice with the same parameter
return;
}
}
throw new BuildException("setFile cannot be called twice with different arguments");
} else if (getDir() != null) {
throw dirAndFileAreMutuallyExclusive();
}
setDir(file.getParentFile());


+ 20
- 0
src/tests/junit/org/apache/tools/ant/types/AbstractFileSetTest.java View File

@@ -244,4 +244,24 @@ public abstract class AbstractFileSetTest {
File dir = f1.getDir(project);
assertEquals("Dir is basedir", dir, project.getBaseDir());
}

@Test
public void canCallSetFileTwiceWithSameArgument() {
AbstractFileSet f = getInstance();
f.setFile(new File("/a"));
f.setFile(new File("/a"));
// really only asserts no exception is thrown
}

@Test
public void cantCallSetFileTwiceWithDifferentArguments() {
AbstractFileSet f = getInstance();
f.setFile(new File("/a"));
try {
f.setFile(new File("/b"));
fail("expected an exception");
} catch (BuildException ex) {
assertEquals("setFile cannot be called twice with different arguments", ex.getMessage());
}
}
}

Loading…
Cancel
Save