git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@1095222 13f79535-47bb-0310-9956-ffa450edef68master
@@ -0,0 +1,24 @@ | |||||
# 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. | |||||
echo "some blablablablablablablablablablablabla error message" err>&2 | |||||
echo "some blablablablablablablablablablablabla info message" out | |||||
echo "some blablablablablablablablablablablabla error message" err>&2 | |||||
echo "some blablablablablablablablablablablabla info message" out | |||||
echo "some blablablablablablablablablablablabla error message" err>&2 | |||||
echo "some blablablablablablablablablablablabla info message" out | |||||
echo "some blablablablablablablablablablablabla error message" err>&2 | |||||
echo "some blablablablablablablablablablablabla info message" out | |||||
echo "some blablablablablablablablablablablabla error message" err>&2 | |||||
echo "some blablablablablablablablablablablabla info message" out |
@@ -0,0 +1,19 @@ | |||||
<project name="blabla" default="doit"> | |||||
<target name="blabla"> | |||||
<exec executable="sh"> | |||||
<arg value="blabla.sh" /> | |||||
</exec> | |||||
</target> | |||||
<target name="doit"> | |||||
<antcall target="blabla"/> | |||||
<antcall target="blabla"/> | |||||
<antcall target="blabla"/> | |||||
<antcall target="blabla"/> | |||||
<antcall target="blabla"/> | |||||
<antcall target="blabla"/> | |||||
<antcall target="blabla"/> | |||||
<antcall target="blabla"/> | |||||
<antcall target="blabla"/> | |||||
<antcall target="blabla"/> | |||||
</target> | |||||
</project> |
@@ -20,12 +20,15 @@ | |||||
<!-- this property can be overriden programatically in the Java test case --> | <!-- this property can be overriden programatically in the Java test case --> | ||||
<property name="timeToWait" value="10"/> | <property name="timeToWait" value="10"/> | ||||
<!-- this property can be overriden programatically in the Java test case --> | <!-- this property can be overriden programatically in the Java test case --> | ||||
<property name="logFile" value="${java.io.tmpdir}/spawn.log"/> | |||||
<property name="output" location="${java.io.tmpdir}/testoutput"/> | |||||
<mkdir dir="${output}"/> | |||||
<property name="logFile" value="${output}/spawn.log"/> | |||||
<property environment="env"/> | <property environment="env"/> | ||||
<!-- UNIX --> | <!-- UNIX --> | ||||
<available file="sh" filepath="${env.PATH}" property="sh.executable"/> | <available file="sh" filepath="${env.PATH}" property="sh.executable"/> | ||||
<!-- CYGWIN --> | <!-- CYGWIN --> | ||||
<available file="sh.exe" filepath="${env.PATH}" property="sh.exe.executable"/> | <available file="sh.exe" filepath="${env.PATH}" property="sh.exe.executable"/> | ||||
<property name="test.can.run" value="1"/> | |||||
<condition property="test.can.run"> | <condition property="test.can.run"> | ||||
<or> | <or> | ||||
<isset property="sh.executable"/> | <isset property="sh.executable"/> | ||||
@@ -42,7 +45,25 @@ | |||||
</exec> | </exec> | ||||
</target> | </target> | ||||
<target name="test-out-and-err" description="see https://issues.apache.org/bugzilla/show_bug.cgi?id=50507" depends="init" if="test.can.run"> | |||||
<mkdir dir="${output}" /> | |||||
<ant antfile="blabla.xml" output="${output}/test-out-and-err.txt"> | |||||
</ant> | |||||
<loadfile srcfile="${output}/test-out-and-err.txt" property="test-out-and-err"> | |||||
<filterchain> | |||||
<replaceregex pattern="^\s*\[exec\] some blablablablablablablablablablablabla error message err$" flags="m" /> | |||||
<replaceregex pattern="^\s*\[exec\] some blablablablablablablablablablablabla info message out$" flags="m" /> | |||||
</filterchain> | |||||
</loadfile> | |||||
<echo>${test-out-and-err}</echo> | |||||
<fail message="output indicates a mixup of out and err"> | |||||
<condition> | |||||
<contains string="${test-out-and-err}" substring="[exec]" /> | |||||
</condition> | |||||
</fail> | |||||
</target> | |||||
<target name="cleanup"> | <target name="cleanup"> | ||||
<delete file="${logFile}" /> | |||||
</target> | </target> | ||||
</project> | </project> |
@@ -103,6 +103,10 @@ public class ExecTaskTest extends BuildFileTest { | |||||
logFile = new File(logFile.getAbsolutePath()); | logFile = new File(logFile.getAbsolutePath()); | ||||
assertTrue("log file found after spawn", logFile.exists()); | assertTrue("log file found after spawn", logFile.exists()); | ||||
} | } | ||||
public void testOutAndErr() { | |||||
project.executeTarget("test-out-and-err"); | |||||
} | |||||
private static class MonitoredBuild implements Runnable { | private static class MonitoredBuild implements Runnable { | ||||
private Thread worker; | private Thread worker; | ||||