bodewig 02/04/02 06:03:06
Modified: . WHATSNEW
docs/manual coretasklist.html tasksoverview.html
src/main/org/apache/tools/ant/taskdefs defaults.properties
Added: docs/manual/CoreTasks concat.html
src/etc/testcases/taskdefs concat.xml
src/main/org/apache/tools/ant/taskdefs Concat.java
src/testcases/org/apache/tools/ant/taskdefs ConcatTest.java
Log:
New task <concat>
Submitted by: Derek Slager <[EMAIL PROTECTED]>
Revision Changes Path
1.241 +2 -1 jakarta-ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/jakarta-ant/WHATSNEW,v
retrieving revision 1.240
retrieving revision 1.241
diff -u -r1.240 -r1.241
--- WHATSNEW 1 Apr 2002 08:31:14 -0000 1.240
+++ WHATSNEW 2 Apr 2002 14:03:05 -0000 1.241
@@ -116,7 +116,8 @@
BZip2 alogrithm.
* New tasks <replaceregexp>, <checksum>, <translate>, <waitfor>, <input>,
- <manifest>, <vsscp>, <vssadd>, <vsscreate>, <splash>, <basename>,
<dirname>.
+ <manifest>, <vsscp>, <vssadd>, <vsscreate>, <splash>, <basename>,
<dirname>,
+ <concat>.
* A new combined <mail> task, which replaces the old <mail> and
<mimemail> tasks, has been added. The <mimemail> task, and
1.37 +1 -0 jakarta-ant/docs/manual/coretasklist.html
Index: coretasklist.html
===================================================================
RCS file: /home/cvs/jakarta-ant/docs/manual/coretasklist.html,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- coretasklist.html 31 Mar 2002 01:17:57 -0000 1.36
+++ coretasklist.html 2 Apr 2002 14:03:05 -0000 1.37
@@ -25,6 +25,7 @@
<a href="CoreTasks/changelog.html">ChangeLog</a><br>
<a href="CoreTasks/checksum.html">Checksum</a><br>
<a href="CoreTasks/chmod.html">Chmod</a><br>
+<a href="CoreTasks/concat.html">Concat</a><br>
<a href="CoreTasks/condition.html">Condition</a><br>
<a href="CoreTasks/conditions.html">Supported conditions</a><br>
<a href="CoreTasks/copy.html">Copy</a><br>
1.8 +6 -0 jakarta-ant/docs/manual/tasksoverview.html
Index: tasksoverview.html
===================================================================
RCS file: /home/cvs/jakarta-ant/docs/manual/tasksoverview.html,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- tasksoverview.html 2 Apr 2002 11:07:56 -0000 1.7
+++ tasksoverview.html 2 Apr 2002 14:03:05 -0000 1.8
@@ -440,6 +440,12 @@
</tr>
<tr valign="top">
+ <td nowrap><a href="CoreTasks/concat.html">Concat</a></td>
+ <td><p>Concatenates multiple files into a single one or to Ant's
+ logging system.</p></td>
+ </tr>
+
+ <tr valign="top">
<td nowrap><a href="CoreTasks/copy.html">Copy</a></td>
<td><p>Copies a file or Fileset to a new file or directory.</p></td>
</tr>
1.1 jakarta-ant/docs/manual/CoreTasks/concat.html
Index: concat.html
===================================================================
<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<title>Ant User Manual</title>
</head>
<body>
<h2><a name="copy">Concat</a></h2>
<h3>Description</h3>
<p>
Concatenates a file, or a series of files, to a single file or
the console. The destination file will be created if it does
not exist, though the the <var>append</var> attribute may be
used to alter this behavior.
</p>
<p>
<a href="../CoreTypes/fileset.html">FileSet</a>s and/or <a
href="../CoreTypes/filelist.html">FileList</a>s are used to
select which files are to be concatenated. There is no
singular 'file' attribute to specify a single file to cat -- a
fileset or filelist must also be used in these cases.
</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td valign="top"><b>Attribute</b></td>
<td valign="top"><b>Description</b></td>
<td align="center" valign="top"><b>Required</b></td>
</tr>
<tr>
<td valign="top">destfile</td>
<td valign="top">
The destination file for the concatenated stream.
</td>
<td valign="top" align="center">
No, the console will be used as the destination for the
stream in the absence of this attribute.
</td>
</tr>
<tr>
<td valign="top">append</td>
<td valign="top">
Specifies whether or not the file specified by 'destfile'
should be overwritten. Defaults to "yes".
</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">encoding</td>
<td valign="top">
Specifies the encoding for the input files, used only when
concatenating files to the console. Please see <a
href="http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html">http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html</a>
for a list of possible values. Defaults to the platform's
default character encoding.
</td>
<td valign="top" align="center">No</td>
</tr>
</table>
<h3>Parameters specified as nested elements</h3>
<h4>fileset</h4>
<p>
<a href="../CoreTypes/fileset.html">FileSet</a>s are used to
select files to be concatenated. Note that the order in which
the files selected from a fileset are concatenated is
<i>not</i> guaranteed. If this is an issue, use multiple
filesets or consider using filelists.
</p>
<h4>filelist</h4>
<p>
<a href="../CoreTypes/filelist.html">FileList</a>s are used to
select files to be concatenated. The file ordering in the
<var>files</var> attribute will be the same order in which the
files are concatenated.
</p>
<h3>Examples</h3>
<p><b>Cat a string to a file:</b></p>
<pre>
<cat tofile="README">Hello, World!</cat>
</pre>
<p><b>Cat a series of files to the console:</b></p>
<pre>
<cat>
<fileset dir="messages" includes="*important*"
/>
</cat>
</pre>
<p><b>Cat a single file, appending if the destination file
exists:</b></p>
<pre>
<cat tofile="NOTES" append="true">
<filelist dir="notes" files="note.txt" />
</cat>
</pre>
<p><b>Cat a series of files, overwriting if the destination file
exists:</b></p>
<pre>
<cat tofile="${docbook.dir}/all-sections.xml">
<filelist dir="${docbook.dir}/sections"
files="introduction.xml,overview.xml" />
<fileset dir="${docbook.dir}"
includes="sections/*.xml"
excludes="introduction.xml,overview.xml" />
</cat>
</pre>
<hr>
<p align="center">
Copyright © 2002 Apache Software Foundation. All
Rights Reserved.
</p>
</body>
</html>
1.1 jakarta-ant/src/etc/testcases/taskdefs/concat.xml
Index: concat.xml
===================================================================
<?xml version="1.0"?>
<project name="concat-test" basedir="." default="test1">
<property name="tmp.file" value="concat.tmp" />
<property name="tmp.file.2" value="concat.tmp.2" />
<property name="world" value="World" />
<target name="test1">
<concat>
</concat>
</target>
<target name="test2">
<concat destfile="">Hello, ${world}!</concat>
</target>
<target name="test3">
<concat destfile="${tmp.file}">Hello, ${world}!</concat>
</target>
<target name="test4">
<concat destfile="${tmp.file.2}">
<fileset dir="${basedir}" includes="${tmp.file}" />
<filelist dir="${basedir}" files="${tmp.file},${tmp.file}" />
</concat>
</target>
<target name="test5">
<concat>Hello, ${world}!</concat>
</target>
</project>
1.119 +1 -0
jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties
Index: defaults.properties
===================================================================
RCS file:
/home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties,v
retrieving revision 1.118
retrieving revision 1.119
diff -u -r1.118 -r1.119
--- defaults.properties 29 Mar 2002 01:30:41 -0000 1.118
+++ defaults.properties 2 Apr 2002 14:03:05 -0000 1.119
@@ -65,6 +65,7 @@
dirname=org.apache.tools.ant.taskdefs.Dirname
changelog=org.apache.tools.ant.taskdefs.cvslib.ChangeLogTask
buildnumber=org.apache.tools.ant.taskdefs.BuildNumber
+concat=org.apache.tools.ant.taskdefs.Concat
# optional tasks
script=org.apache.tools.ant.taskdefs.optional.Script
1.1
jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Concat.java
Index: Concat.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.taskdefs;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.FileList;
import org.apache.tools.ant.util.StringUtils;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Vector; // 1.1
import java.util.Enumeration; // 1.1
/**
* This class contains the 'concat' task, used to concatenate a series
* of files into a single stream. The destination of this stream may
* be the system console, or a file. The following is a sample
* invocation:
*
* <pre>
* <concat destfile="${build.dir}/index.xml"
* append="false">
*
* <fileset dir="${xml.root.dir}"
* includes="*.xml" />
*
* </concat>
* </pre>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Derek Slager</a>
*/
public class Concat extends Task {
// Attributes.
/**
* The destination of the stream. If <code>null</code>, the system
* console is used.
*/
private File destinationFile = null;
/**
* If the destination file exists, should the stream be appended?
* Defaults to <code>false</code>.
*/
private boolean append = false;
/**
* Stores the input file encoding.
*/
private String encoding = null;
// Child elements.
/**
* This buffer stores the text within the 'concat' element.
*/
private StringBuffer textBuffer;
/**
* Stores a collection of file sets and/or file lists, used to
* select multiple files for concatenation.
*/
private Vector fileSets = new Vector(); // 1.1
// Constructors.
/**
* Public, no-argument constructor. Required by Ant.
*/
public Concat() {}
// Attribute setters.
/**
* Sets the destination file for the stream.
*/
public void setDestfile(File destinationFile) {
this.destinationFile = destinationFile;
}
/**
* Sets the behavior when the destination file exists, if set to
* <code>true</code> the stream data will be appended to the
* existing file, otherwise the existing file will be
* overwritten. Defaults to <code>false</code>.
*/
public void setAppend(boolean append) {
this.append = append;
}
/**
* Sets the encoding for the input files, used when displaying the
* data via the console.
*/
public void setEncoding(String encoding) {
this.encoding = encoding;
}
// Nested element creators.
/**
* Adds a set of files (nested fileset element).
*/
public void addFileset(FileSet set) {
fileSets.addElement(set);
}
/**
* Adds a list of files (nested filelist element).
*/
public void addFilelist(FileList list) {
fileSets.addElement(list);
}
/**
* This method adds text which appears in the 'concat' element.
*/
public void addText(String text) {
if (textBuffer == null) {
// Initialize to the size of the first text fragment, with
// the hopes that it's the only one.
textBuffer = new StringBuffer(text.length());
}
// Append the fragment -- we defer property replacement until
// later just in case we get a partial property in a fragment.
textBuffer.append(text);
}
/**
* This method performs the concatenation.
*/
public void execute()
throws BuildException {
// treat empty nested text as no text
sanitizeText();
// Sanity check our inputs.
if (fileSets.size() == 0 && textBuffer == null) {
// Nothing to concatenate!
throw new BuildException("At least one file " +
"must be provided, or " +
"some text.");
}
// Iterate the FileSet collection, concatenating each file as
// it is encountered.
for (Enumeration e = fileSets.elements(); e.hasMoreElements(); ) {
// Root directory for files.
File fileSetBase = null;
// List of files.
String[] srcFiles = null;
// Get the next file set, which could be a FileSet or a
// FileList instance.
Object next = e.nextElement();
if (next instanceof FileSet) {
FileSet fileSet = (FileSet) next;
// Get a directory scanner from the file set, which will
// determine the files from the set which need to be
// concatenated.
DirectoryScanner scanner =
fileSet.getDirectoryScanner(project);
// Determine the root path.
fileSetBase = fileSet.getDir(project);
// Get the list of files.
srcFiles = scanner.getIncludedFiles();
} else if (next instanceof FileList) {
FileList fileList = (FileList) next;
// Determine the root path.
fileSetBase = fileList.getDir(project);
// Get the list of files.
srcFiles = fileList.getFiles(project);
}
// Concatenate the files.
catFiles(fileSetBase, srcFiles);
}
// Now, cat the inline text, if applicable.
catText();
// Reset state to default.
append = false;
destinationFile = null;
encoding = null;
fileSets = new Vector();
}
/**
* This method concatenates a series of files to a single
* destination.
*
* @param base the base directory for the list of file names.
*
* @param files the names of the files to be concatenated,
* relative to the <code>base</code>.
*/
private void catFiles(File base, String[] files) {
// First, create a list of absolute paths for the input files.
final int len = files.length;
String[] input = new String[len];
for (int i = 0; i < len; i++) {
File current = new File(base, files[i]);
// Make sure the file exists. This will rarely fail when
// using file sets, but it could be rather common when
// using file lists.
if (!current.exists()) {
// File does not exist, log an error and continue.
log("File " + current + " does not exist.",
Project.MSG_ERR);
continue;
}
input[i] = current.getAbsolutePath();
}
// Next, perform the concatenation.
if (destinationFile == null) {
// No destination file, dump to stdout via Ant's logging
// interface, which requires that we assume the input data
// is line-oriented. Generally, this is a safe assumption,
// as most users won't (intentionally) attempt to cat
// binary files to the console.
for (int i = 0; i < len; i++) {
BufferedReader reader = null;
try {
if (encoding == null) {
// Use default encoding.
reader = new BufferedReader(
new FileReader(input[i])
);
} else {
// Use specified encoding.
reader = new BufferedReader(
new InputStreamReader(
new FileInputStream(input[i]),
encoding
)
);
}
String line;
while ((line = reader.readLine()) != null) {
// Log the line, using WARN so it displays in
// 'quiet' mode.
log(line, Project.MSG_WARN);
}
} catch (IOException ioe) {
throw new BuildException("Error while concatenating " +
"file.", ioe);
} finally {
// Close resources.
if (reader != null) {
try {
reader.close();
} catch (Exception ignore) {}
}
}
}
} else {
// Use the provided file, making no assumptions about
// whether or not the file is character or line-oriented.
final int bufferSize = 1024;
OutputStream os = null;
try {
os = new FileOutputStream(destinationFile.getAbsolutePath(),
append);
// This flag should only be recognized for the first
// file. In the context of a single 'cat', we always
// want to append.
append = true;
} catch (IOException ioe) {
throw new BuildException("Unable to open destination " +
"file.", ioe);
}
// Concatenate the file.
try {
for (int i = 0; i < len; i++) {
// Make sure input != output.
if (destinationFile.getAbsolutePath().equals(input[i])) {
log(destinationFile.getName() + ": input file is " +
"output file.", Project.MSG_WARN);
}
InputStream is = null;
try {
is = new FileInputStream(input[i]);
byte[] buffer = new byte[bufferSize];
while (true) {
int bytesRead = is.read(buffer);
if (bytesRead == -1) { // EOF
break;
}
// Write the read data.
os.write(buffer, 0, bytesRead);
}
os.flush();
} catch (IOException ioex) {
throw new BuildException("Error writing file.", ioex);
} finally {
if (is != null) {
try {
is.close();
} catch (Exception ignore) {}
}
}
}
} finally {
if (os != null) {
try {
os.close();
} catch (Exception ignore) {}
}
}
}
}
/**
* This method concatenates the text which was added inside the
* 'concat' tags. If the text between the tags consists only of
* whitespace characters, it is ignored.
*/
private void catText() {
// Check the buffer.
if (textBuffer == null) {
// No text to write.
return;
}
String text = textBuffer.toString();
// If using filesets, disallow inline text. This is similar to
// using GNU 'cat' with file arguments -- stdin is simply
// ignored.
if (fileSets.size() > 0) {
throw new BuildException("Cannot include inline text " +
"when using filesets.");
}
// Replace ${property} strings.
text = ProjectHelper.replaceProperties(project, text,
project.getProperties());
// Set up a writer if necessary.
FileWriter writer = null;
if (destinationFile != null) {
try {
writer = new FileWriter(destinationFile.getAbsolutePath(),
append);
} catch (IOException ioe) {
throw new BuildException("Error creating destination " +
"file.", ioe);
}
}
// Reads the text, line by line.
BufferedReader reader = null;
try {
reader = new BufferedReader(
new StringReader(text)
);
String line;
while ((line = reader.readLine()) != null) {
if (destinationFile == null) {
// Log the line, using WARN so it displays in
// 'quiet' mode.
log(line, Project.MSG_WARN);
} else {
writer.write(line);
writer.write(StringUtils.LINE_SEP);
writer.flush();
}
}
} catch (IOException ioe) {
throw new BuildException("Error while concatenating " +
"text.", ioe);
} finally {
// Close resources.
if (reader != null) {
try {
reader.close();
} catch (Exception ignore) {}
}
if (writer != null) {
try {
writer.close();
} catch (Exception ignore) {}
}
}
}
/**
* Treat empty nested text as no text.
*
* <p>Depending on the XML parser, addText may have been called
* for "ignorable whitespace" as well.</p>
*/
private void sanitizeText() {
if (textBuffer != null) {
if (textBuffer.toString().trim().length() == 0) {
textBuffer = null;
}
}
}
}
1.1
jakarta-ant/src/testcases/org/apache/tools/ant/taskdefs/ConcatTest.java
Index: ConcatTest.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.taskdefs;
import org.apache.tools.ant.BuildFileTest;
import java.io.File;
/**
* A test class for the 'concat' task, used to concatenate a series of
* files into a single stream.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Derek Slager</a>
*/
public class ConcatTest
extends BuildFileTest {
/**
* The name of the temporary file.
*/
private static final String tempFile = "concat.tmp";
/**
* The name of the temporary file.
*/
private static final String tempFile2 = "concat.tmp.2";
/**
* Required constructor.
*/
public ConcatTest(String name) {
super(name);
}
/**
* Test set up, called by the unit test framework prior to each
* test.
*/
public void setUp() {
configureProject("src/etc/testcases/taskdefs/concat.xml");
}
/**
* Test tear down, called by the unit test framework prior to each
* test.
*/
public void tearDown() {
// Remove temporary files.
String[] rm = new String[] { tempFile, tempFile2 };
for (int i = 0; i < rm.length; i++) {
File f = new File(getProjectDir(), rm[i]);
if (f.exists()) {
f.delete();
}
}
}
/**
* Expect an exception when insufficient information is provided.
*/
public void test1() {
expectBuildException("test1", "Insufficient information.");
}
/**
* Expect an exception when the destination file is invalid.
*/
public void test2() {
expectBuildException("test2", "Invalid destination file.");
}
/**
* Cats the string 'Hello, World!' to a temporary file.
*/
public void test3() {
File file = new File(getProjectDir(), tempFile);
if (file.exists()) {
file.delete();
}
executeTarget("test3");
assertTrue(file.exists());
}
/**
* Cats the file created in test3 three times.
*/
public void test4() {
test3();
File file = new File(getProjectDir(), tempFile);
final long origSize = file.length();
executeTarget("test4");
File file2 = new File(getProjectDir(), tempFile2);
final long newSize = file2.length();
assertEquals(origSize * 3, newSize);
}
/**
* Cats the string 'Hello, World!' to the console.
*/
public void test5() {
expectLog("test5", "Hello, World!");
}
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>