<!--
   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>