| <?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 |
| |
| https://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="java-test" basedir="." default="foo"> |
| <property name="tests-classpath.value" value="${java.class.path}"/> |
| <fail unless="tests-classpath.value" |
| message="the property tests-classpath.value is required by this test" /> |
| <import file="../buildfiletest-base.xml"/> |
| |
| <target name="setUp"> |
| <mkdir dir="${output}" /> |
| </target> |
| |
| <!-- this property gets overridden programmatically--> |
| <property name="timeToWait" value="4"/> |
| <!-- this property gets overridden programmatically--> |
| <property name="logFile" value="${output}/spawn.log"/> |
| <property name="tmp" location="${output}/ant.tmp.java-test"/> |
| <mkdir dir="${tmp}" description="The directory must exist"/> |
| <property name="app" |
| value="org.apache.tools.ant.taskdefs.JavaTest$$EntryPoint" /> |
| |
| <property name="app2" |
| value="org.apache.tools.ant.taskdefs.JavaTest$$ExceptingEntryPoint" /> |
| |
| <property name="spawnapp" |
| value="org.apache.tools.ant.taskdefs.JavaTest$$SpawnEntryPoint" /> |
| |
| <property name="pipeapp" |
| value="org.apache.tools.ant.taskdefs.JavaTest$$PipeEntryPoint" /> |
| |
| <property name="module" |
| value="TestModule" /> |
| |
| <target name="testNoJarNoClassname"> |
| <java/> |
| </target> |
| |
| <target name="testJarNoFork"> |
| <java jar="test.jar" fork="false"/> |
| </target> |
| |
| |
| <target name="testJarAndClassName"> |
| <java jar="test.jar" classname="${app}" /> |
| </target> |
| |
| <target name="testClassnameAndJar"> |
| <java classname="${app}" jar="test.jar" /> |
| </target> |
| |
| <target name="testModuleAndJar"> |
| <java module="${module}" jar="test.jar" /> |
| </target> |
| |
| <target name="testJarAndModule"> |
| <java jar="test.jar" module="${module}" /> |
| </target> |
| |
| <target name="testClassnameAndModule"> |
| <java classname="${app}" module="${module}" fork="true"/> |
| </target> |
| |
| <target name="testModuleAndClassname"> |
| <java module="${module}" classname="${app}" fork="true"/> |
| </target> |
| |
| <target name="testModule"> |
| <java module="${module}" fork="true"/> |
| </target> |
| |
| <target name="testRun"> |
| <fail unless="tests-classpath.value" /> |
| <java classname="${app}" |
| classpath="${tests-classpath.value}"/> |
| </target> |
| |
| <target name="testRunFail"> |
| <java classname="${app}" |
| classpath="${tests-classpath.value}" |
| > |
| <arg value="2"/> |
| </java> |
| </target> |
| |
| <target name="testRunFailFoe"> |
| <java classname="${app}" |
| classpath="${tests-classpath.value}" |
| failonerror="true"> |
| <arg value="2"/> |
| </java> |
| </target> |
| |
| <target name="testRunFailFoeFork"> |
| <java classname="${app}" |
| classpath="${tests-classpath.value}" |
| failonerror="true" |
| fork="true"> |
| <arg value="2"/> |
| </java> |
| </target> |
| |
| <target name="testExcepting"> |
| <java classname="${app2}" |
| classpath="${tests-classpath.value}" |
| > |
| </java> |
| </target> |
| |
| <target name="testExceptingFork"> |
| <java classname="${app2}" |
| classpath="${tests-classpath.value}" |
| fork="true"> |
| </java> |
| </target> |
| |
| <target name="testExceptingFoe"> |
| <java classname="${app2}" |
| classpath="${tests-classpath.value}" |
| failonerror="true"> |
| </java> |
| </target> |
| |
| <target name="testExceptingFoeFork"> |
| <java classname="${app2}" |
| classpath="${tests-classpath.value}" |
| failonerror="true" |
| fork="true"> |
| </java> |
| </target> |
| |
| <target name="testResultPropertyZero"> |
| <java classname="${app}" |
| classpath="${tests-classpath.value}" |
| resultproperty="exitcode" |
| fork="true" |
| > |
| </java> |
| <echo message="exitcode = ${exitcode}"/> |
| </target> |
| |
| <target name="testResultPropertyNonZero"> |
| <java classname="${app}" |
| classpath="${tests-classpath.value}" |
| resultproperty="exitcode" |
| failonerror="false" |
| fork="true" |
| > |
| <arg value="2"/> |
| </java> |
| <echo message="exitcode = ${exitcode}"/> |
| </target> |
| |
| <target name="testResultPropertyZeroNoFork"> |
| <java classname="${app}" |
| classpath="${tests-classpath.value}" |
| resultproperty="exitcode" |
| fork="false" |
| > |
| <permissions/> |
| </java> |
| <echo message="exitcode = ${exitcode}"/> |
| </target> |
| |
| <target name="testResultPropertyNonZeroNoFork"> |
| <java classname="${app}" |
| classpath="${tests-classpath.value}" |
| resultproperty="exitcode" |
| failonerror="false" |
| fork="false"> |
| <arg value="-1"/> |
| <permissions/> |
| </java> |
| <echo message="exitcode = ${exitcode}"/> |
| </target> |
| |
| <target name="testRunFailWithFailOnError"> |
| <java classname="${app}" |
| classpath="${tests-classpath.value}" |
| failonerror="true" |
| > |
| <arg value="2"/> |
| </java> |
| </target> |
| |
| <target name="testRunSuccessWithFailOnError"> |
| <java classname="${app}" |
| classpath="${tests-classpath.value}" |
| failonerror="true" |
| > |
| <arg value="0"/> |
| </java> |
| </target> |
| |
| <target name="testSpawn"> |
| <java classname="${spawnapp}" fork="true" spawn="true" classpath="${tests-classpath.value}"> |
| <arg value="${timeToWait}"/> |
| <arg value="${logFile}" /> |
| </java> |
| </target> |
| |
| <!--redirection testcases don't want to run under junit unless forked--> |
| <target name="redirect1"> |
| <tempfile property="outfile" destdir="${tmp}" prefix="redirect" suffix=".out" deleteonexit="true"/> |
| |
| <java classname="${pipeapp}" |
| classpath="${tests-classpath.value}" |
| inputstring="foo" |
| fork="true" |
| output="${outfile}" |
| errorproperty="redirect.err"> |
| <arg value="out" /> |
| </java> |
| |
| <!-- let dumb Windows catch up --> |
| <waitfor maxwait="30000"> |
| <available file="${outfile}" /> |
| </waitfor> |
| <waitfor maxwait="30000"> |
| <length file="${outfile}" length="1" when="greater" /> |
| </waitfor> |
| |
| <loadfile property="redirect.out.contents" srcfile="${outfile}" /> |
| |
| <condition property="r1file"> |
| <equals arg1="${redirect.out.contents}" arg2="foo" /> |
| </condition> |
| |
| <fail unless="r1file">${outfile}: |
| "${redirect.out.contents}" expected "foo"</fail> |
| |
| <condition property="r1prop"> |
| <equals arg1="${redirect.err}" arg2="" /> |
| </condition> |
| |
| <fail unless="r1prop"> |
| redirect.err="${redirect.err}" should be empty</fail> |
| |
| </target> |
| |
| <target name="redirect2" depends="redirect1"> |
| <tempfile property="outfile" destdir="${tmp}" prefix="redirect" suffix=".out" deleteonexit="true"/> |
| |
| <java classname="${pipeapp}" |
| classpath="${tests-classpath.value}" |
| inputstring="bar" |
| append="true" |
| fork="true" |
| output="${outfile}" |
| errorproperty="redirect.err"> |
| <arg value="both" /> |
| </java> |
| |
| <!-- let dumb Windows catch up --> |
| <waitfor maxwait="30000"> |
| <available file="${outfile}" /> |
| </waitfor> |
| <waitfor maxwait="30000"> |
| <length file="${outfile}" length="1" when="greater" /> |
| </waitfor> |
| |
| |
| <loadfile property="redirect.out.contents2" srcfile="${outfile}" /> |
| |
| <condition property="r2file"> |
| <equals arg1="${redirect.out.contents2}" arg2="foobar" /> |
| </condition> |
| |
| <fail unless="r2file">${outfile}: |
| "${redirect.out.contents2}" expected "foobar"</fail> |
| |
| <condition property="r2prop"> |
| <!-- property should not change --> |
| <equals arg1="${redirect.err}" arg2="" /> |
| </condition> |
| |
| <fail unless="r2prop"> |
| redirect.err="${redirect.err}" should be empty</fail> |
| |
| </target> |
| |
| <target name="redirect3"> |
| <tempfile property="outfile" destdir="${tmp}" prefix="redirect" suffix=".out" deleteonexit="true"/> |
| <tempfile property="errfile" destdir="${tmp}" prefix="redirect" suffix=".err" deleteonexit="true"/> |
| |
| <java classname="${pipeapp}" |
| classpath="${tests-classpath.value}" |
| inputstring="foo" |
| fork="true" |
| output="${outfile}" |
| error="${errfile}"> |
| <arg value="both" /> |
| </java> |
| |
| <!-- let dumb Windows catch up --> |
| <waitfor> |
| <and> |
| <available file="${outfile}" /> |
| <available file="${errfile}" /> |
| </and> |
| </waitfor> |
| |
| <loadfile property="redirect.out.contents" srcfile="${outfile}" /> |
| |
| <condition property="r3file"> |
| <equals arg1="${redirect.out.contents}" arg2="foo" /> |
| </condition> |
| |
| <fail unless="r3file">${outfile}: |
| "${redirect.out.contents}" expected "foo"</fail> |
| |
| <condition property="r3match"> |
| <filesmatch file1="${outfile}" file2="${errfile}" /> |
| </condition> |
| |
| <fail unless="r3file">${errfile} differs from ${outfile}</fail> |
| |
| </target> |
| |
| <target name="redirector1"> |
| <tempfile property="outfile" destdir="${tmp}" prefix="redirect" suffix=".out" deleteonexit="true"/> |
| <tempfile property="errfile" destdir="${tmp}" prefix="redirect" suffix=".err" deleteonexit="true"/> |
| |
| <java taskname="foo" classname="${pipeapp}" fork="true" |
| classpath="${tests-classpath.value}"> |
| <redirector inputstring="foo" |
| output="${outfile}" |
| error="${errfile}" |
| createemptyfiles="false" /> |
| <arg value="out" /> |
| </java> |
| |
| <!-- let dumb Windows catch up --> |
| <waitfor> |
| <available file="${outfile}" /> |
| </waitfor> |
| |
| <loadfile property="redirector.out.contents" srcfile="${outfile}" /> |
| |
| <condition property="ror1out"> |
| <equals arg1="${redirector.out.contents}" arg2="foo" /> |
| </condition> |
| |
| <fail unless="ror1out">${outfile}: |
| "${redirector.out.contents}" expected "foo"</fail> |
| |
| <condition property="ror1noerr"> |
| <not> |
| <available file="${errfile}" /> |
| </not> |
| </condition> |
| <fail unless="ror1noerr">${errfile} exists but should not</fail> |
| </target> |
| |
| <target name="redirector2" depends="redirector1"> |
| <tempfile property="outfile" destdir="${tmp}" prefix="redirect" suffix=".out" deleteonexit="true"/> |
| <tempfile property="errfile" destdir="${tmp}" prefix="redirect" suffix=".err" deleteonexit="true"/> |
| |
| <!-- fork here; some VMs can be ill-behaved with files, |
| such as W!nd0ws --> |
| <java taskname="foo" classname="${pipeapp}" fork="true" |
| classpath="${tests-classpath.value}"> |
| <redirector inputstring="foo" |
| append="true" |
| output="${outfile}" |
| error="${errfile}" |
| createemptyfiles="false"> |
| <errorfilterchain> |
| <replacestring from="foo" to="bar" /> |
| </errorfilterchain> |
| </redirector> |
| <arg value="both" /> |
| </java> |
| |
| <!-- let dumb Windows catch up --> |
| <waitfor> |
| <and> |
| <available file="${outfile}" /> |
| <available file="${errfile}" /> |
| </and> |
| </waitfor> |
| |
| <loadfile property="redirector.out.contents2" |
| srcfile="${outfile}" /> |
| |
| <loadfile property="redirector.err.contents" |
| srcfile="${errfile}" /> |
| |
| <condition property="ror2out"> |
| <equals arg1="${redirector.out.contents2}" arg2="foofoo" /> |
| </condition> |
| |
| <fail unless="ror1out">${outfile}: |
| "${redirector.out.contents}" expected "foofoo"</fail> |
| |
| <condition property="ror2err"> |
| <equals arg1="${redirector.err.contents}" arg2="bar" /> |
| </condition> |
| |
| <fail unless="ror1out">${errfile}: |
| "${redirector.err.contents}" expected "bar"</fail> |
| |
| </target> |
| |
| <target name="flushedInput"> |
| <java classname="org.apache.tools.ant.taskdefs.JavaTest$$ReadPoint" fork="true" |
| classpath="${tests-classpath.value}" failonerror="true" timeout="2000" /> |
| </target> |
| |
| <target name="foo" /> |
| |
| <target name="simpleSourceFile" |
| description="Tests that the single source file programs, introduced in Java 11, works as expected"> |
| <mkdir dir="${output}/javasource"/> |
| <echo file="${output}/javasource/A.java"> |
| import java.nio.file.Files; |
| import java.nio.file.Paths; |
| import java.io.BufferedWriter; |
| public class A { |
| public static void main(String[] args) throws Exception { |
| final String outFile = args[0]; |
| try(BufferedWriter bw = Files.newBufferedWriter(Paths.get(outFile));) { |
| bw.write("Hello world!"); |
| } |
| } |
| } |
| </echo> |
| <java sourcefile="${output}/javasource/A.java" fork="true" failonerror="true" logerror="true"> |
| <arg value="${output}/javasource/simpleSourceFileOutput.txt"/> |
| </java> |
| <loadfile property="simpleSourceFile.prog.output" srcfile="${output}/javasource/simpleSourceFileOutput.txt"/> |
| <condition property="simpleSourceFile.execution.success"> |
| <equals arg1="${simpleSourceFile.prog.output}" arg2="Hello world!"/> |
| </condition> |
| <fail unless="simpleSourceFile.execution.success">Java source-file execution did not yield the expected |
| result</fail> |
| </target> |
| |
| |
| <target name="generateDummyJavaSource"> |
| <mkdir dir="${output}/javasource"/> |
| <echo file="${output}/javasource/ThrowsException.java"> |
| public class ThrowsException { |
| public static void main(String[] args) throws Exception { |
| throw new RuntimeException("Wasn't expected to be run"); |
| } |
| } |
| </echo> |
| </target> |
| |
| <target name="sourceFileRequiresFork" depends="generateDummyJavaSource"> |
| <java sourcefile="${output}/javasource/ThrowsException.java" failonerror="true" logerror="true"/> |
| <fail>Execution of java task, for sourcefile, was expected to fail since fork wasn't set</fail> |
| </target> |
| |
| <target name="sourceFileCantUseClassname" depends="generateDummyJavaSource"> |
| <java classname="foo.bar" sourcefile="${output}/javasource/ThrowsException.java" |
| fork="true" failonerror="true" logerror="true"/> |
| <fail>Execution of java task, for sourcefile, was expected to fail since classname attribute was set</fail> |
| </target> |
| |
| <target name="sourceFileCantUseJar" depends="generateDummyJavaSource"> |
| <java jar="irrelevant.jar" sourcefile="${output}/javasource/ThrowsException.java" |
| fork="true" failonerror="true" logerror="true"/> |
| <fail>Execution of java task, for sourcefile, was expected to fail since jar attribute was set</fail> |
| </target> |
| |
| <target name="sourceFileCantUseModule" depends="generateDummyJavaSource"> |
| <java module="irrelevant" sourcefile="${output}/javasource/ThrowsException.java" |
| fork="true" failonerror="true" logerror="true"/> |
| <fail>Execution of java task, for sourcefile, was expected to fail since module attribute was set</fail> |
| </target> |
| |
| </project> |