<!--
   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="@project.organisation@;@project.module@-test" xmlns:au="antlib:org.apache.ant.antunit">
    
    <!-- Mocking required phase --> 
    <phase name="validate"/>
        
    <!-- Import your plugin --> 
    <import file="../../main/resources/@project.module@.ant"/>
    
    <!-- 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"/>
    
    <!-- init test case -->         
    <target name="testInit">
        <antcall target=":init"/>
        <au:assertLogContains level="debug" text="This is the init target of @project.module@"/>
    </target>
    
    <!--
        A sample ant unit test case, 
        see the antunit official documentation for more informations
        
        <target name="testSample" description="a sample of ant unit test case">
            <au:assertTrue>
                <matches string="abc" pattern="abc"/>
            </au:assertTrue>
        </target>
    -->

</project>
