<?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}:
&quot;${redirect.out.contents}&quot; expected &quot;foo&quot;</fail>

        <condition property="r1prop">
            <equals arg1="${redirect.err}" arg2="" />
        </condition>

        <fail unless="r1prop">
redirect.err=&quot;${redirect.err}&quot; 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}:
&quot;${redirect.out.contents2}&quot; expected &quot;foobar&quot;</fail>

        <condition property="r2prop">
            <!-- property should not change -->
            <equals arg1="${redirect.err}" arg2="" />
        </condition>

        <fail unless="r2prop">
redirect.err=&quot;${redirect.err}&quot; 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}:
&quot;${redirect.out.contents}&quot; expected &quot;foo&quot;</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}:
&quot;${redirector.out.contents}&quot; expected &quot;foo&quot;</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}:
&quot;${redirector.out.contents}&quot; expected &quot;foofoo&quot;</fail>

        <condition property="ror2err">
            <equals arg1="${redirector.err.contents}" arg2="bar" />
        </condition>

        <fail unless="ror1out">${errfile}:
&quot;${redirector.err.contents}&quot; expected &quot;bar&quot;</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>
