<!--
   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;compile-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"/>

    <property name="src.main.java" value="${basedir}/src/main/java"/>
    <property name="javac.debug.mode" value="false"/>
   
    <!-- 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"/>
    <target name="tearDown" depends="clean"/>
    
    <target name="test-compile-java:init" depends="compile-java:init">
        <au:assertPropertyEquals name="src.main.java" value="${basedir}/src/main/java"/>
        <au:assertPropertyEquals name="javac.debug.mode" value="false"/>
        <au:assertPropertyEquals name="compile.java.includes.pattern" value="**/*.java"/>
        <au:assertPropertyEquals name="compile.java.excludes.pattern" value=""/>
        <au:assertPropertyEquals name="compile.java.target.version" value="${ant.java.version}"/>
        <au:assertPropertyEquals name="compile.java.source.version" value="${ant.java.version}"/>
        <au:assertPropertyEquals name="has.src.main.java" value="true"/>
    </target>

    <target name="test-compile-java:compile" depends="compile-java:compile">
        <au:assertFileExists file="${target.main.classes}"/>
        <au:assertFileExists file="${target.main.classes}/org/apache/easyant/example/Example.class"/>
        <au:assertFileExists file="${target.main.classes}/org/apache/easyant/example/Example2.class"/>
    </target>
</project>
