<!--
   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="org.apache.easyant.plugins;run-java-test" xmlns:au="antlib:org.apache.ant.antunit" xmlns:ivy="antlib:org.apache.ivy.ant"
    xmlns:ea="antlib:org.apache.easyant">
    
    <!-- Import your plugin -->
    <property name="target" value="target/test-antunit" />
    <!-- configure easyant in current project -->
    <ea:configure-easyant-ivy-instance />
    <!-- import our local plugin -->
    <ea:import-test-module moduleIvy="../../../module.ivy" sourceDirectory="../../main/resources" />
   
    <!-- Defines a setUp / tearDown (before each test) that cleans the environnement -->
    <target name="clean" description="remove stale build artifacts before / after each test">
        <delete dir="${basedir}" includeemptydirs="true">
            <include name="**/target/**" />
            <include name="**/lib/**" />
        </delete>
    </target>

    <target name="setUp" depends="clean">
        <property name="target.main.classes" value="${target}/main/classes" />
        <property name="project.main.classname" value="org.apache.easyant.example.Example" />
        <mkdir dir="${target.main.classes}" />

        <javac srcdir="src/main/java" destdir="${target.main.classes}" />
    </target>
    <target name="tearDown" depends="clean" />

    <target name="test-run-java:init" depends="run-java:init">
        <au:assertPropertyEquals name="target.main.classes" value="target/test-antunit/main/classes" />
        <au:assertPropertyEquals name="project.main.classname" value="org.apache.easyant.example.Example" />
        <au:assertPropertyEquals name="run.main.classname" value="org.apache.easyant.example.Example" />
        <au:assertReferenceSet refid="run.main.classpath" />
    </target>

    <target name="test-run-java:run" depends="run-java:run">
        <au:assertPropertyEquals name="is.run.main.classname.configured" value="true" />
        <au:assertLogContains text="Hello World !" />
    </target>
</project>