git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@677355 13f79535-47bb-0310-9956-ffa450edef68master
@@ -188,6 +188,8 @@ Other changes: | |||
are not used by Ant's family of zip tasks. | |||
Bugzilla report 45396. | |||
* <echo> supports an "output" Resource attribute as an alternative to "file". | |||
Changes from Ant 1.7.0 TO Ant 1.7.1 | |||
============================================= | |||
@@ -51,7 +51,13 @@ ignored</p> | |||
<tr> | |||
<td valign="top">file</td> | |||
<td valign="top">the file to write the message to.</td> | |||
<td valign="top" align="center">No</td> | |||
<td valign="top" align="center" rowspan="2">Optionally one of these may be specified</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">output</td> | |||
<td valign="top">the <a href="../CoreTypes/resources.html">Resource</a> | |||
to write the message to (see <a href="../develop.html#set-magic">note</a>). | |||
<b>Since Ant 1.8</b></td> | |||
</tr> | |||
<tr> | |||
<td valign="top">append</td> | |||
@@ -19,8 +19,8 @@ | |||
package org.apache.tools.ant.taskdefs; | |||
import java.io.File; | |||
import java.io.FileWriter; | |||
import java.io.IOException; | |||
import java.io.OutputStream; | |||
import java.io.Writer; | |||
import java.io.BufferedWriter; | |||
import java.io.OutputStreamWriter; | |||
@@ -31,6 +31,9 @@ import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.Task; | |||
import org.apache.tools.ant.util.FileUtils; | |||
import org.apache.tools.ant.types.LogLevel; | |||
import org.apache.tools.ant.types.Resource; | |||
import org.apache.tools.ant.types.resources.FileProvider; | |||
import org.apache.tools.ant.types.resources.FileResource; | |||
/** | |||
* Writes a message to the Ant logging facilities. | |||
@@ -51,25 +54,25 @@ public class Echo extends Task { | |||
protected int logLevel = Project.MSG_WARN; | |||
// CheckStyle:VisibilityModifier ON | |||
private Resource output; | |||
/** | |||
* Does the work. | |||
* | |||
* @exception BuildException if something goes wrong with the build | |||
*/ | |||
public void execute() throws BuildException { | |||
if (file == null) { | |||
if (output == null) { | |||
log(message, logLevel); | |||
} else { | |||
Writer out = null; | |||
try { | |||
String filename = file.getAbsolutePath(); | |||
if (encoding == null || encoding.length() == 0) { | |||
out = new FileWriter(filename, append); | |||
} else { | |||
out = new BufferedWriter( | |||
new OutputStreamWriter( | |||
new FileOutputStream(filename, append), encoding)); | |||
} | |||
OutputStream os = output instanceof FileProvider ? os = new FileOutputStream( | |||
((FileProvider) output).getFile(), append) : output.getOutputStream(); | |||
OutputStreamWriter osw = (encoding == null || "".equals(encoding)) ? new OutputStreamWriter( | |||
os) | |||
: new OutputStreamWriter(os, encoding); | |||
out = new BufferedWriter(osw); | |||
out.write(message, 0, message.length()); | |||
} catch (IOException ioe) { | |||
throw new BuildException(ioe, getLocation()); | |||
@@ -95,6 +98,20 @@ public class Echo extends Task { | |||
*/ | |||
public void setFile(File file) { | |||
this.file = file; | |||
setOutput(new FileResource(getProject(), file)); | |||
} | |||
/** | |||
* Resource to write to. | |||
* @param output the Resource to write to. | |||
* @since Ant 1.8 | |||
*/ | |||
public void setOutput(Resource output) { | |||
if (this.output != null) { | |||
throw new BuildException("Cannot set > 1 output target"); | |||
} | |||
this.output = output; | |||
this.file = output instanceof FileProvider ? ((FileProvider) output).getFile() : null; | |||
} | |||
/** | |||
@@ -0,0 +1,148 @@ | |||
<?xml version="1.0"?> | |||
<!-- | |||
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. | |||
--> | |||
<project name="echo-test" default="antunit" xmlns:au="antlib:org.apache.ant.antunit"> | |||
<import file="../antunit-base.xml" /> | |||
<property name="dest.dir" location="echo.dest"/> | |||
<target name="setUp"> | |||
<mkdir dir="${dest.dir}" /> | |||
</target> | |||
<target name="tearDown"> | |||
<delete dir="${dest.dir}"/> | |||
</target> | |||
<target name="test1"> | |||
<echo/> | |||
<au:assertTrue> | |||
<length length="0"> | |||
<au:logcontent /> | |||
</length> | |||
</au:assertTrue> | |||
</target> | |||
<target name="test2"> | |||
<echo message="OUTPUT OF ECHO"/> | |||
<au:assertLogContains text="OUTPUT OF ECHO" /> | |||
</target> | |||
<target name="test3"> | |||
<echo> | |||
This | |||
is | |||
a | |||
multiline | |||
message | |||
</echo> | |||
<au:assertTrue> | |||
<resourcecount count="1"> | |||
<restrict> | |||
<au:logcontent /> | |||
<contains text="This" /> | |||
<contains text="is" /> | |||
<contains text="a" /> | |||
<contains text="multiline" /> | |||
<contains text="message" /> | |||
</restrict> | |||
</resourcecount> | |||
</au:assertTrue> | |||
</target> | |||
<target name="testFile"> | |||
<echo file="${dest.dir}/echo.txt">Simple text</echo> | |||
<au:assertTrue> | |||
<resourcecount count="1"> | |||
<restrict> | |||
<file file="${dest.dir}/echo.txt" /> | |||
<contains text="Simple text" /> | |||
</restrict> | |||
</resourcecount> | |||
</au:assertTrue> | |||
</target> | |||
<target name="testOutputFile"> | |||
<echo output="${dest.dir}/echo.txt">Simple text</echo> | |||
<au:assertTrue> | |||
<resourcecount count="1"> | |||
<restrict> | |||
<file file="${dest.dir}/echo.txt" /> | |||
<contains text="Simple text" /> | |||
</restrict> | |||
</resourcecount> | |||
</au:assertTrue> | |||
</target> | |||
<target name="testAppend"> | |||
<echo file="${dest.dir}/echo.txt">Simple text</echo> | |||
<echo file="${dest.dir}/echo.txt" append="true">Appended</echo> | |||
<au:assertTrue> | |||
<resourcecount count="1"> | |||
<restrict> | |||
<file file="${dest.dir}/echo.txt" /> | |||
<contains text="Simple text" /> | |||
<contains text="Appended" /> | |||
</restrict> | |||
</resourcecount> | |||
</au:assertTrue> | |||
</target> | |||
<target name="testEmptyEncoding"> | |||
<echo file="${dest.dir}/echo.txt" encoding="">Simple text</echo> | |||
<au:assertTrue> | |||
<resourcecount count="1"> | |||
<restrict> | |||
<file file="${dest.dir}/echo.txt" /> | |||
<contains text="Simple text" /> | |||
</restrict> | |||
</resourcecount> | |||
</au:assertTrue> | |||
</target> | |||
<target name="testUTF16Encoding"> | |||
<property name="char" value="©" /> | |||
<echo file="${dest.dir}/echo16.txt" encoding="UTF-16">${char}</echo> | |||
<au:assertTrue> | |||
<resourcecount count="1"> | |||
<restrict> | |||
<concat encoding="UTF-16"> | |||
<file file="${dest.dir}/echo16.txt" /> | |||
</concat> | |||
<contains text="${char}" /> | |||
</restrict> | |||
</resourcecount> | |||
</au:assertTrue> | |||
</target> | |||
<target name="testUTF8Encoding"> | |||
<property name="char" value="©" /> | |||
<echo file="${dest.dir}/echo8.txt" encoding="UTF8">${char}</echo> | |||
<au:assertTrue> | |||
<resourcecount count="1"> | |||
<restrict> | |||
<concat encoding="UTF-8"> | |||
<file file="${dest.dir}/echo8.txt" /> | |||
</concat> | |||
<contains text="${char}" /> | |||
</restrict> | |||
</resourcecount> | |||
</au:assertTrue> | |||
</target> | |||
</project> |
@@ -21,78 +21,41 @@ package org.apache.tools.ant.taskdefs; | |||
import java.io.ByteArrayOutputStream; | |||
import java.io.PrintStream; | |||
import org.apache.tools.ant.BuildFileTest; | |||
import junit.framework.TestCase; | |||
import org.apache.tools.ant.DefaultLogger; | |||
import org.apache.tools.ant.Project; | |||
/** | |||
* Test Java-dependent parts of the Echo task. | |||
*/ | |||
public class EchoTest extends BuildFileTest { | |||
public class EchoTest extends TestCase { | |||
/** | |||
* Create a new EchoTest. | |||
* @param name | |||
*/ | |||
public EchoTest(String name) { | |||
super(name); | |||
} | |||
public void setUp() { | |||
configureProject("src/etc/testcases/taskdefs/echo.xml"); | |||
} | |||
public void tearDown() { | |||
executeTarget("clean"); | |||
} | |||
// Output an empty String | |||
public void test1() { | |||
expectLog("test1", ""); | |||
} | |||
public void testLogBlankEcho() { | |||
Project p = new Project(); | |||
p.init(); | |||
EchoTestLogger logger = new EchoTestLogger(); | |||
getProject().addBuildListener(logger); | |||
getProject().executeTarget("test1"); | |||
assertEquals(" [echo] ", logger.lastLoggedMessage ); | |||
p.addBuildListener(logger); | |||
Echo echo = new Echo(); | |||
echo.setProject(p); | |||
echo.setTaskName("testLogBlankEcho"); | |||
echo.execute(); | |||
assertEquals("[testLogBlankEcho] ", logger.lastLoggedMessage ); | |||
} | |||
// Output 'OUTPUT OF ECHO' | |||
public void test2() { | |||
expectLog("test2", "OUTPUT OF ECHO"); | |||
} | |||
public void test3() { | |||
expectLog("test3", "\n"+ | |||
" This \n"+ | |||
" is\n"+ | |||
" a \n"+ | |||
" multiline\n"+ | |||
" message\n"+ | |||
" "); | |||
} | |||
public void testFile() throws Exception { | |||
executeTarget("testFile"); | |||
} | |||
public void testAppend() throws Exception { | |||
executeTarget("testAppend"); | |||
} | |||
public void testEmptyEncoding() throws Exception { | |||
executeTarget("testEmptyEncoding"); | |||
} | |||
public void testUTF16Encoding() throws Exception { | |||
executeTarget("testUTF16Encoding"); | |||
} | |||
public void testUTF8Encoding() throws Exception { | |||
executeTarget("testUTF8Encoding"); | |||
} | |||
private class EchoTestLogger extends DefaultLogger { | |||
String lastLoggedMessage; | |||
/** | |||
* | |||
* Create a new EchoTestLogger. | |||
*/ | |||
public EchoTestLogger() { | |||
super(); | |||
@@ -100,8 +63,9 @@ public class EchoTest extends BuildFileTest { | |||
this.setOutputPrintStream(new PrintStream(new ByteArrayOutputStream(256))); | |||
this.setErrorPrintStream(new PrintStream(new ByteArrayOutputStream(256))); | |||
} | |||
/* | |||
* @param message | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
protected void log(String message) { | |||
this.lastLoggedMessage = message; | |||