bodewig 02/04/08 07:25:19
Modified: . build.xml
src/main/org/apache/tools/ant/types DirSet.java FileSet.java
src/testcases/org/apache/tools/ant/types DirSetTest.java
FileSetTest.java
Added: src/main/org/apache/tools/ant/types AbstractFileSet.java
src/testcases/org/apache/tools/ant/types
AbstractFileSetTest.java
Log:
rework inheritance tree for DirSet and FileSet, they are not
interchangeable.
Revision Changes Path
1.286 +1 -0 jakarta-ant/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-ant/build.xml,v
retrieving revision 1.285
retrieving revision 1.286
diff -u -r1.285 -r1.286
--- build.xml 6 Apr 2002 01:32:22 -0000 1.285
+++ build.xml 8 Apr 2002 14:25:18 -0000 1.286
@@ -1168,6 +1168,7 @@
<exclude name="${regexp.package}/RegexpMatcherTest.java" />
<exclude name="${regexp.package}/RegexpTest.java" />
<exclude name="${optional.package}/AbstractXSLTLiaisonTest.java" />
+ <exclude name="${ant.package}/types/AbstractFileSetTest.java" />
<!-- helper classes, not testcases -->
<exclude name="org/example/**" />
1.5 +5 -3
jakarta-ant/src/main/org/apache/tools/ant/types/DirSet.java
Index: DirSet.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/src/main/org/apache/tools/ant/types/DirSet.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DirSet.java 3 Apr 2002 11:38:33 -0000 1.4
+++ DirSet.java 8 Apr 2002 14:25:18 -0000 1.5
@@ -60,16 +60,18 @@
*
* @since Ant 1.5
*/
-public class DirSet extends FileSet {
+public class DirSet extends AbstractFileSet {
public DirSet() {
super();
- setDataTypeName("dirset");
}
protected DirSet(DirSet dirset) {
super(dirset);
- setDataTypeName("dirset");
+ }
+
+ protected String getDataTypeName() {
+ return "dirset";
}
/**
1.27 +5 -261
jakarta-ant/src/main/org/apache/tools/ant/types/FileSet.java
Index: FileSet.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/src/main/org/apache/tools/ant/types/FileSet.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- FileSet.java 4 Apr 2002 14:00:29 -0000 1.26
+++ FileSet.java 8 Apr 2002 14:25:18 -0000 1.27
@@ -54,15 +54,6 @@
package org.apache.tools.ant.types;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.FileScanner;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-
-import java.io.File;
-import java.util.Stack;
-import java.util.Vector;
-
/**
* Moved out of MatchingTask to make it a standalone object that could
* be referenced (by scripts for example).
@@ -74,265 +65,18 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Stefan Bodewig</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Magesh Umasankar</a>
*/
-public class FileSet extends DataType implements Cloneable {
+public class FileSet extends AbstractFileSet {
- private PatternSet defaultPatterns = new PatternSet();
- private Vector additionalPatterns = new Vector();
-
- private File dir;
- private boolean useDefaultExcludes = true;
- private boolean isCaseSensitive = true;
-
- private String dataTypeName = "fileset";
-
public FileSet() {
super();
}
protected FileSet(FileSet fileset) {
- this.dir = fileset.dir;
- this.defaultPatterns = fileset.defaultPatterns;
- this.additionalPatterns = fileset.additionalPatterns;
- this.useDefaultExcludes = fileset.useDefaultExcludes;
- this.isCaseSensitive = fileset.isCaseSensitive;
- setProject(getProject());
- }
-
- /**
- * Makes this instance in effect a reference to another PatternSet
- * instance.
- *
- * <p>You must not set another attribute or nest elements inside
- * this element if you make it a reference.</p>
- */
- public void setRefid(Reference r) throws BuildException {
- if (dir != null || defaultPatterns.hasPatterns()) {
- throw tooManyAttributes();
- }
- if (!additionalPatterns.isEmpty()) {
- throw noChildrenAllowed();
- }
- super.setRefid(r);
- }
-
- public void setDir(File dir) throws BuildException {
- if (isReference()) {
- throw tooManyAttributes();
- }
-
- this.dir = dir;
- }
-
- public File getDir(Project p) {
- if (isReference()) {
- return getRef(p).getDir(p);
- }
- return dir;
- }
-
- public PatternSet createPatternSet() {
- if (isReference()) {
- throw noChildrenAllowed();
- }
- PatternSet patterns = new PatternSet();
- additionalPatterns.addElement(patterns);
- return patterns;
- }
-
- /**
- * add a name entry on the include list
- */
- public PatternSet.NameEntry createInclude() {
- if (isReference()) {
- throw noChildrenAllowed();
- }
- return defaultPatterns.createInclude();
- }
-
- /**
- * add a name entry on the include files list
- */
- public PatternSet.NameEntry createIncludesFile() {
- if (isReference()) {
- throw noChildrenAllowed();
- }
- return defaultPatterns.createIncludesFile();
- }
-
- /**
- * add a name entry on the exclude list
- */
- public PatternSet.NameEntry createExclude() {
- if (isReference()) {
- throw noChildrenAllowed();
- }
- return defaultPatterns.createExclude();
+ super(fileset);
}
- /**
- * add a name entry on the include files list
- */
- public PatternSet.NameEntry createExcludesFile() {
- if (isReference()) {
- throw noChildrenAllowed();
- }
- return defaultPatterns.createExcludesFile();
- }
-
- /**
- * Appends <code>includes</code> to the current list of include
patterns.
- * Patterns may be separated by a comma or a space.
- *
- * @param includes the string containing the include patterns
- */
- public void setIncludes(String includes) {
- if (isReference()) {
- throw tooManyAttributes();
- }
-
- defaultPatterns.setIncludes(includes);
- }
-
- /**
- * Appends <code>excludes</code> to the current list of exclude
patterns.
- * Patterns may be separated by a comma or a space.
- *
- * @param excludes the string containing the exclude patterns
- */
- public void setExcludes(String excludes) {
- if (isReference()) {
- throw tooManyAttributes();
- }
-
- defaultPatterns.setExcludes(excludes);
- }
-
- /**
- * Sets the name of the file containing the includes patterns.
- *
- * @param incl The file to fetch the include patterns from.
- */
- public void setIncludesfile(File incl) throws BuildException {
- if (isReference()) {
- throw tooManyAttributes();
- }
-
- defaultPatterns.setIncludesfile(incl);
- }
-
- /**
- * Sets the name of the file containing the includes patterns.
- *
- * @param excl The file to fetch the exclude patterns from.
- */
- public void setExcludesfile(File excl) throws BuildException {
- if (isReference()) {
- throw tooManyAttributes();
- }
-
- defaultPatterns.setExcludesfile(excl);
- }
-
- /**
- * Sets whether default exclusions should be used or not.
- *
- * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
- * should be used, "false"|"off"|"no" when they
- * shouldn't be used.
- */
- public void setDefaultexcludes(boolean useDefaultExcludes) {
- if (isReference()) {
- throw tooManyAttributes();
- }
-
- this.useDefaultExcludes = useDefaultExcludes;
- }
-
- /**
- * Sets case sensitivity of the file system
- *
- * @param isCaseSensitive "true"|"on"|"yes" if file system is case
- * sensitive, "false"|"off"|"no" when not.
- */
- public void setCaseSensitive(boolean isCaseSensitive) {
- this.isCaseSensitive = isCaseSensitive;
- }
-
- /**
- * sets the name used for this datatype instance.
- */
- protected final void setDataTypeName(String name) {
- dataTypeName = name;
- }
-
- /**
- * Returns the directory scanner needed to access the files to process.
- */
- public DirectoryScanner getDirectoryScanner(Project p) {
- if (isReference()) {
- return getRef(p).getDirectoryScanner(p);
- }
-
- if (dir == null) {
- throw new BuildException("No directory specified for "
- + dataTypeName + ".");
- }
-
- if (!dir.exists()) {
- throw new BuildException(dir.getAbsolutePath()+" not found.");
- }
- if (!dir.isDirectory()) {
- throw new BuildException(dir.getAbsolutePath()+" is not a
directory.");
- }
-
- DirectoryScanner ds = new DirectoryScanner();
- setupDirectoryScanner(ds, p);
- ds.scan();
- return ds;
- }
-
- public void setupDirectoryScanner(FileScanner ds, Project p) {
- if (ds == null) {
- throw new IllegalArgumentException("ds cannot be null");
- }
-
- ds.setBasedir(dir);
-
- final int count = additionalPatterns.size();
- for (int i = 0; i < count; i++) {
- Object o = additionalPatterns.elementAt(i);
- defaultPatterns.append((PatternSet) o, p);
- }
-
- p.log(dataTypeName + ": Setup scanner in dir " + dir +
- " with " + defaultPatterns, Project.MSG_DEBUG );
-
- ds.setIncludes(defaultPatterns.getIncludePatterns(p));
- ds.setExcludes(defaultPatterns.getExcludePatterns(p));
- if (useDefaultExcludes) {
- ds.addDefaultExcludes();
- }
- ds.setCaseSensitive(isCaseSensitive);
- }
-
- /**
- * Performs the check for circular references and returns the
- * referenced FileSet.
- */
- protected FileSet getRef(Project p) {
- if (!checked) {
- Stack stk = new Stack();
- stk.push(this);
- dieOnCircularReference(stk, p);
- }
-
- Object o = ref.getReferencedObject(p);
- if (!getClass().isAssignableFrom(o.getClass())) {
- String msg = ref.getRefId()+" doesn\'t denote a " + dataTypeName;
- throw new BuildException(msg);
- } else {
- return (FileSet) o;
- }
+ protected String getDataTypeName() {
+ return "fileset";
}
/**
@@ -341,7 +85,7 @@
*/
public Object clone() {
if (isReference()) {
- return new FileSet(getRef(getProject()));
+ return new FileSet((FileSet) getRef(getProject()));
} else {
return new FileSet(this);
}
1.1
jakarta-ant/src/main/org/apache/tools/ant/types/AbstractFileSet.java
Index: AbstractFileSet.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.types;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.FileScanner;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project;
import java.io.File;
import java.util.Stack;
import java.util.Vector;
/**
* Class that holds an implicit patternset and supports nested
* patternsets and creates a DirectoryScanner using these patterns.
*
* <p>Common base class for DirSet and FileSet.</p>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Arnout J. Kuiper</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Sam Ruby</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Jon S. Stevens</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Stefan Bodewig</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Magesh Umasankar</a>
*/
public abstract class AbstractFileSet extends DataType implements Cloneable {
private PatternSet defaultPatterns = new PatternSet();
private Vector additionalPatterns = new Vector();
private File dir;
private boolean useDefaultExcludes = true;
private boolean isCaseSensitive = true;
public AbstractFileSet() {
super();
}
protected AbstractFileSet(AbstractFileSet fileset) {
this.dir = fileset.dir;
this.defaultPatterns = fileset.defaultPatterns;
this.additionalPatterns = fileset.additionalPatterns;
this.useDefaultExcludes = fileset.useDefaultExcludes;
this.isCaseSensitive = fileset.isCaseSensitive;
setProject(getProject());
}
/**
* Makes this instance in effect a reference to another instance.
*
* <p>You must not set another attribute or nest elements inside
* this element if you make it a reference.</p>
*/
public void setRefid(Reference r) throws BuildException {
if (dir != null || defaultPatterns.hasPatterns()) {
throw tooManyAttributes();
}
if (!additionalPatterns.isEmpty()) {
throw noChildrenAllowed();
}
super.setRefid(r);
}
/**
* Sets the base-directory for this instance.
*/
public void setDir(File dir) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
this.dir = dir;
}
/**
* Retrieves the base-directory for this instance.
*/
public File getDir(Project p) {
if (isReference()) {
return getRef(p).getDir(p);
}
return dir;
}
/**
* Creates a nested patternset.
*/
public PatternSet createPatternSet() {
if (isReference()) {
throw noChildrenAllowed();
}
PatternSet patterns = new PatternSet();
additionalPatterns.addElement(patterns);
return patterns;
}
/**
* add a name entry on the include list
*/
public PatternSet.NameEntry createInclude() {
if (isReference()) {
throw noChildrenAllowed();
}
return defaultPatterns.createInclude();
}
/**
* add a name entry on the include files list
*/
public PatternSet.NameEntry createIncludesFile() {
if (isReference()) {
throw noChildrenAllowed();
}
return defaultPatterns.createIncludesFile();
}
/**
* add a name entry on the exclude list
*/
public PatternSet.NameEntry createExclude() {
if (isReference()) {
throw noChildrenAllowed();
}
return defaultPatterns.createExclude();
}
/**
* add a name entry on the include files list
*/
public PatternSet.NameEntry createExcludesFile() {
if (isReference()) {
throw noChildrenAllowed();
}
return defaultPatterns.createExcludesFile();
}
/**
* Appends <code>includes</code> to the current list of include
* patterns.
*
* <p>Patterns may be separated by a comma or a space.</p>
*
* @param includes the string containing the include patterns
*/
public void setIncludes(String includes) {
if (isReference()) {
throw tooManyAttributes();
}
defaultPatterns.setIncludes(includes);
}
/**
* Appends <code>excludes</code> to the current list of exclude
* patterns.
*
* <p>Patterns may be separated by a comma or a space.</p>
*
* @param excludes the string containing the exclude patterns
*/
public void setExcludes(String excludes) {
if (isReference()) {
throw tooManyAttributes();
}
defaultPatterns.setExcludes(excludes);
}
/**
* Sets the name of the file containing the includes patterns.
*
* @param incl The file to fetch the include patterns from.
*/
public void setIncludesfile(File incl) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
defaultPatterns.setIncludesfile(incl);
}
/**
* Sets the name of the file containing the includes patterns.
*
* @param excl The file to fetch the exclude patterns from.
*/
public void setExcludesfile(File excl) throws BuildException {
if (isReference()) {
throw tooManyAttributes();
}
defaultPatterns.setExcludesfile(excl);
}
/**
* Sets whether default exclusions should be used or not.
*
* @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
* should be used, "false"|"off"|"no" when they
* shouldn't be used.
*/
public void setDefaultexcludes(boolean useDefaultExcludes) {
if (isReference()) {
throw tooManyAttributes();
}
this.useDefaultExcludes = useDefaultExcludes;
}
/**
* Sets case sensitivity of the file system
*
* @param isCaseSensitive "true"|"on"|"yes" if file system is case
* sensitive, "false"|"off"|"no" when not.
*/
public void setCaseSensitive(boolean isCaseSensitive) {
this.isCaseSensitive = isCaseSensitive;
}
/**
* sets the name used for this datatype instance.
*/
protected abstract String getDataTypeName();
/**
* Returns the directory scanner needed to access the files to process.
*/
public DirectoryScanner getDirectoryScanner(Project p) {
if (isReference()) {
return getRef(p).getDirectoryScanner(p);
}
if (dir == null) {
throw new BuildException("No directory specified for "
+ getDataTypeName() + ".");
}
if (!dir.exists()) {
throw new BuildException(dir.getAbsolutePath()+" not found.");
}
if (!dir.isDirectory()) {
throw new BuildException(dir.getAbsolutePath()
+" is not a directory.");
}
DirectoryScanner ds = new DirectoryScanner();
setupDirectoryScanner(ds, p);
ds.scan();
return ds;
}
public void setupDirectoryScanner(FileScanner ds, Project p) {
if (ds == null) {
throw new IllegalArgumentException("ds cannot be null");
}
ds.setBasedir(dir);
final int count = additionalPatterns.size();
for (int i = 0; i < count; i++) {
Object o = additionalPatterns.elementAt(i);
defaultPatterns.append((PatternSet) o, p);
}
p.log(getDataTypeName() + ": Setup scanner in dir " + dir +
" with " + defaultPatterns, Project.MSG_DEBUG );
ds.setIncludes(defaultPatterns.getIncludePatterns(p));
ds.setExcludes(defaultPatterns.getExcludePatterns(p));
if (useDefaultExcludes) {
ds.addDefaultExcludes();
}
ds.setCaseSensitive(isCaseSensitive);
}
/**
* Performs the check for circular references and returns the
* referenced FileSet.
*/
protected AbstractFileSet getRef(Project p) {
if (!checked) {
Stack stk = new Stack();
stk.push(this);
dieOnCircularReference(stk, p);
}
Object o = ref.getReferencedObject(p);
if (!getClass().isAssignableFrom(o.getClass())) {
String msg = ref.getRefId()+" doesn\'t denote a "
+ getDataTypeName();
throw new BuildException(msg);
} else {
return (AbstractFileSet) o;
}
}
}
1.5 +2 -4
jakarta-ant/src/testcases/org/apache/tools/ant/types/DirSetTest.java
Index: DirSetTest.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/src/testcases/org/apache/tools/ant/types/DirSetTest.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DirSetTest.java 4 Apr 2002 14:16:27 -0000 1.4
+++ DirSetTest.java 8 Apr 2002 14:25:18 -0000 1.5
@@ -61,13 +61,13 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stefan Bodewig</a>
*/
-public class DirSetTest extends FileSetTest {
+public class DirSetTest extends AbstractFileSetTest {
public DirSetTest(String name) {
super(name);
}
- protected FileSet getInstance() {
+ protected AbstractFileSet getInstance() {
return new DirSet();
}
@@ -85,7 +85,6 @@
assertEquals("dummy doesn\'t denote a dirset", e.getMessage());
}
-/*
ds = (DirSet) getInstance();
ds.setProject(getProject());
getProject().addReference("dummy2", ds);
@@ -96,7 +95,6 @@
} catch (BuildException e) {
assertEquals("dummy2 doesn\'t denote a fileset", e.getMessage());
}
-*/
}
}
1.8 +2 -176
jakarta-ant/src/testcases/org/apache/tools/ant/types/FileSetTest.java
Index: FileSetTest.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/src/testcases/org/apache/tools/ant/types/FileSetTest.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- FileSetTest.java 3 Apr 2002 11:38:33 -0000 1.7
+++ FileSetTest.java 8 Apr 2002 14:25:18 -0000 1.8
@@ -70,188 +70,14 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Stefan Bodewig</a>
*/
-public class FileSetTest extends TestCase {
-
- private Project project;
+public class FileSetTest extends AbstractFileSetTest {
public FileSetTest(String name) {
super(name);
}
- public void setUp() {
- project = new Project();
- project.setBasedir(".");
- }
-
- protected FileSet getInstance() {
+ protected AbstractFileSet getInstance() {
return new FileSet();
}
- protected Project getProject() {
- return project;
- }
-
- public void testEmptyElementIfIsReference() {
- FileSet f = getInstance();
- f.setIncludes("**/*.java");
- try {
- f.setRefid(new Reference("dummyref"));
- fail("Can add reference to FileSet with elements from
setIncludes");
- } catch (BuildException be) {
- assertEquals("You must not specify more than one attribute when
using refid",
- be.getMessage());
- }
-
- f = getInstance();
- f.createPatternSet();
- try {
- f.setRefid(new Reference("dummyref"));
- fail("Can add reference to FileSet with nested patternset
element.");
- } catch (BuildException be) {
- assertEquals("You must not specify nested elements when using
refid",
- be.getMessage());
- }
-
- f = getInstance();
- f.createInclude();
- try {
- f.setRefid(new Reference("dummyref"));
- fail("Can add reference to FileSet with nested include
element.");
- } catch (BuildException be) {
- assertEquals("You must not specify more than one attribute when
using refid",
- be.getMessage());
- }
-
- f = getInstance();
- f.setRefid(new Reference("dummyref"));
- try {
- f.setIncludes("**/*.java");
- fail("Can set includes in FileSet that is a reference.");
- } catch (BuildException be) {
- assertEquals("You must not specify more than one attribute when
using refid",
- be.getMessage());
- }
- try {
- f.setIncludesfile(new File("/a"));
- fail("Can set includesfile in FileSet that is a reference.");
- } catch (BuildException be) {
- assertEquals("You must not specify more than one attribute when
using refid",
- be.getMessage());
- }
- try {
- f.setExcludes("**/*.java");
- fail("Can set excludes in FileSet that is a reference.");
- } catch (BuildException be) {
- assertEquals("You must not specify more than one attribute when
using refid",
- be.getMessage());
- }
- try {
- f.setExcludesfile(new File("/a"));
- fail("Can set excludesfile in FileSet that is a reference.");
- } catch (BuildException be) {
- assertEquals("You must not specify more than one attribute when
using refid",
- be.getMessage());
- }
- try {
- f.setDir(project.resolveFile("."));
- fail("Can set dir in FileSet that is a reference.");
- } catch (BuildException be) {
- assertEquals("You must not specify more than one attribute when
using refid",
- be.getMessage());
- }
- try {
- f.createInclude();
- fail("Can add nested include in FileSet that is a reference.");
- } catch (BuildException be) {
- assertEquals("You must not specify nested elements when using
refid",
- be.getMessage());
- }
- try {
- f.createExclude();
- fail("Can add nested exclude in FileSet that is a reference.");
- } catch (BuildException be) {
- assertEquals("You must not specify nested elements when using
refid",
- be.getMessage());
- }
- try {
- f.createIncludesFile();
- fail("Can add nested includesfile in FileSet that is a
reference.");
- } catch (BuildException be) {
- assertEquals("You must not specify nested elements when using
refid",
- be.getMessage());
- }
- try {
- f.createExcludesFile();
- fail("Can add nested excludesfile in FileSet that is a
reference.");
- } catch (BuildException be) {
- assertEquals("You must not specify nested elements when using
refid",
- be.getMessage());
- }
- try {
- f.createPatternSet();
- fail("Can add nested patternset in FileSet that is a
reference.");
- } catch (BuildException be) {
- assertEquals("You must not specify nested elements when using
refid",
- be.getMessage());
- }
- }
-
- public void testCircularReferenceCheck() {
- FileSet f = getInstance();
- project.addReference("dummy", f);
- f.setRefid(new Reference("dummy"));
- try {
- f.getDir(project);
- fail("Can make FileSet a Reference to itself.");
- } catch (BuildException be) {
- assertEquals("This data type contains a circular reference.",
- be.getMessage());
- }
- try {
- f.getDirectoryScanner(project);
- fail("Can make FileSet a Reference to itself.");
- } catch (BuildException be) {
- assertEquals("This data type contains a circular reference.",
- be.getMessage());
- }
-
- // dummy1 --> dummy2 --> dummy3 --> dummy1
- FileSet f1 = getInstance();
- project.addReference("dummy1", f1);
- f1.setRefid(new Reference("dummy2"));
- FileSet f2 = getInstance();
- project.addReference("dummy2", f2);
- f2.setRefid(new Reference("dummy3"));
- FileSet f3 = getInstance();
- project.addReference("dummy3", f3);
- f3.setRefid(new Reference("dummy1"));
- try {
- f1.getDir(project);
- fail("Can make circular reference.");
- } catch (BuildException be) {
- assertEquals("This data type contains a circular reference.",
- be.getMessage());
- }
- try {
- f1.getDirectoryScanner(project);
- fail("Can make circular reference.");
- } catch (BuildException be) {
- assertEquals("This data type contains a circular reference.",
- be.getMessage());
- }
-
- // dummy1 --> dummy2 --> dummy3
- // (which has the Project's basedir as root).
- f1 = getInstance();
- project.addReference("dummy1", f1);
- f1.setRefid(new Reference("dummy2"));
- f2 = getInstance();
- project.addReference("dummy2", f2);
- f2.setRefid(new Reference("dummy3"));
- f3 = getInstance();
- project.addReference("dummy3", f3);
- f3.setDir(project.resolveFile("."));
- File dir = f1.getDir(project);
- assertEquals("Dir is basedir", dir, project.getBaseDir());
- }
}
1.1
jakarta-ant/src/testcases/org/apache/tools/ant/types/AbstractFileSetTest.java
Index: AbstractFileSetTest.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.types;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import junit.framework.TestCase;
import junit.framework.AssertionFailedError;
import java.io.File;
/**
* Base class for FileSetTest and DirSetTest.
*
* <p>This doesn't actually test much, mainly reference handling.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stefan Bodewig</a>
*/
public abstract class AbstractFileSetTest extends TestCase {
private Project project;
public AbstractFileSetTest(String name) {
super(name);
}
public void setUp() {
project = new Project();
project.setBasedir(".");
}
protected abstract AbstractFileSet getInstance();
protected final Project getProject() {
return project;
}
public final void testEmptyElementIfIsReference() {
AbstractFileSet f = getInstance();
f.setIncludes("**/*.java");
try {
f.setRefid(new Reference("dummyref"));
fail("Can add reference to "
+ f.getDataTypeName()
+ " with elements from setIncludes");
} catch (BuildException be) {
assertEquals("You must not specify more than one attribute "
+ "when using refid", be.getMessage());
}
f = getInstance();
f.createPatternSet();
try {
f.setRefid(new Reference("dummyref"));
fail("Can add reference to "
+ f.getDataTypeName()
+ " with nested patternset element.");
} catch (BuildException be) {
assertEquals("You must not specify nested elements when "
+ "using refid", be.getMessage());
}
f = getInstance();
f.createInclude();
try {
f.setRefid(new Reference("dummyref"));
fail("Can add reference to "
+ f.getDataTypeName()
+ " with nested include element.");
} catch (BuildException be) {
assertEquals("You must not specify more than one attribute "
+ "when using refid", be.getMessage());
}
f = getInstance();
f.setRefid(new Reference("dummyref"));
try {
f.setIncludes("**/*.java");
fail("Can set includes in "
+ f.getDataTypeName()
+ " that is a reference.");
} catch (BuildException be) {
assertEquals("You must not specify more than one attribute "
+ "when using refid", be.getMessage());
}
try {
f.setIncludesfile(new File("/a"));
fail("Can set includesfile in "
+ f.getDataTypeName()
+ " that is a reference.");
} catch (BuildException be) {
assertEquals("You must not specify more than one attribute "
+ "when using refid", be.getMessage());
}
try {
f.setExcludes("**/*.java");
fail("Can set excludes in "
+ f.getDataTypeName()
+ " that is a reference.");
} catch (BuildException be) {
assertEquals("You must not specify more than one attribute "
+ "when using refid", be.getMessage());
}
try {
f.setExcludesfile(new File("/a"));
fail("Can set excludesfile in "
+ f.getDataTypeName()
+ " that is a reference.");
} catch (BuildException be) {
assertEquals("You must not specify more than one attribute "
+ "when using refid", be.getMessage());
}
try {
f.setDir(project.resolveFile("."));
fail("Can set dir in "
+ f.getDataTypeName()
+ " that is a reference.");
} catch (BuildException be) {
assertEquals("You must not specify more than one attribute "
+ "when using refid", be.getMessage());
}
try {
f.createInclude();
fail("Can add nested include in "
+ f.getDataTypeName()
+ " that is a reference.");
} catch (BuildException be) {
assertEquals("You must not specify nested elements when using "
+ "refid", be.getMessage());
}
try {
f.createExclude();
fail("Can add nested exclude in "
+ f.getDataTypeName()
+ " that is a reference.");
} catch (BuildException be) {
assertEquals("You must not specify nested elements when using "
+ "refid", be.getMessage());
}
try {
f.createIncludesFile();
fail("Can add nested includesfile in "
+ f.getDataTypeName()
+ " that is a reference.");
} catch (BuildException be) {
assertEquals("You must not specify nested elements when using "
+ "refid", be.getMessage());
}
try {
f.createExcludesFile();
fail("Can add nested excludesfile in "
+ f.getDataTypeName()
+ " that is a reference.");
} catch (BuildException be) {
assertEquals("You must not specify nested elements when using "
+ "refid", be.getMessage());
}
try {
f.createPatternSet();
fail("Can add nested patternset in "
+ f.getDataTypeName()
+ " that is a reference.");
} catch (BuildException be) {
assertEquals("You must not specify nested elements when using "
+ "refid", be.getMessage());
}
}
public void testCircularReferenceCheck() {
AbstractFileSet f = getInstance();
project.addReference("dummy", f);
f.setRefid(new Reference("dummy"));
try {
f.getDir(project);
fail("Can make " + f.getDataTypeName()
+ " a Reference to itself.");
} catch (BuildException be) {
assertEquals("This data type contains a circular reference.",
be.getMessage());
}
try {
f.getDirectoryScanner(project);
fail("Can make " + f.getDataTypeName()
+ " a Reference to itself.");
} catch (BuildException be) {
assertEquals("This data type contains a circular reference.",
be.getMessage());
}
// dummy1 --> dummy2 --> dummy3 --> dummy1
AbstractFileSet f1 = getInstance();
project.addReference("dummy1", f1);
f1.setRefid(new Reference("dummy2"));
AbstractFileSet f2 = getInstance();
project.addReference("dummy2", f2);
f2.setRefid(new Reference("dummy3"));
AbstractFileSet f3 = getInstance();
project.addReference("dummy3", f3);
f3.setRefid(new Reference("dummy1"));
try {
f1.getDir(project);
fail("Can make circular reference.");
} catch (BuildException be) {
assertEquals("This data type contains a circular reference.",
be.getMessage());
}
try {
f1.getDirectoryScanner(project);
fail("Can make circular reference.");
} catch (BuildException be) {
assertEquals("This data type contains a circular reference.",
be.getMessage());
}
// dummy1 --> dummy2 --> dummy3
// (which has the Project's basedir as root).
f1 = getInstance();
project.addReference("dummy1", f1);
f1.setRefid(new Reference("dummy2"));
f2 = getInstance();
project.addReference("dummy2", f2);
f2.setRefid(new Reference("dummy3"));
f3 = getInstance();
project.addReference("dummy3", f3);
f3.setDir(project.resolveFile("."));
File dir = f1.getDir(project);
assertEquals("Dir is basedir", dir, project.getBaseDir());
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>