<!--
   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;build-webapp-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 -->
    <property name="easyant.file" value="${basedir}/module.ivy"/>
    <ea:import-test-module moduleIvy="../../../module.ivy" sourceDirectory="../../main/resources"/>

    <!-- Defines a setUp / tearDown (before each test) that cleans the environnement --> 
    <target name="clean-test" 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-test">
       <ivy:settings id="project.ivy.instance"/>
    </target>
    <target name="tearDown" depends="clean-test"/>
    
    <target name="test-build-webapp-java:clean" depends="clean">
         <au:assertLogContains text="Cleaning ${target}..."/>
         <au:assertLogContains text="Build sequence for target(s) `setUp', `test-build-webapp-java:clean' is [clean-test, setUp, clean-std:clean, clean, test-build-webapp-java:clean]" level="debug"/>
   </target>

   <target name="test-build-webapp-java:compile" depends="compile">
         <au:assertLogContains text="Build sequence for target(s) `setUp', `test-build-webapp-java:compile' is [clean-test, setUp, -ivy-provisioning:init, abstract-provisioning:provisioning-ready, -ivy-provisioning:resolve, -ivy-provisioning:resolve-main-confs, -ivy-provisioning:resolve-test-confs, -ivy-provisioning:resolve-provided-confs, ivy-provisioning:resolve, abstract-provisioning:provisioning, abstract-compile:compile-ready, compile-java:init, compile-java:compile, compile-test-java:compile, compile-test-java:compile-integration, abstract-compile:compile, compile, test-build-webapp-java:compile]" level="debug"/>
    </target>
    <target name="test-build-webapp-java:test" depends="test">
         <au:assertLogContains text="Running org.apache.easyant.example.ExampleTest"/>
         <au:assertLogContains text="Tests run: 2, Failures: 0, Errors: 0"/>
         <au:assertLogContains text="Build sequence for target(s) `setUp', `test-build-webapp-java:test' is [clean-test, setUp, -ivy-provisioning:init, abstract-provisioning:provisioning-ready, -ivy-provisioning:resolve, -ivy-provisioning:resolve-main-confs, -ivy-provisioning:resolve-test-confs, -ivy-provisioning:resolve-provided-confs, ivy-provisioning:resolve, abstract-provisioning:provisioning, abstract-compile:compile-ready, compile-java:init, compile-java:compile, compile-test-java:compile, compile-test-java:compile-integration, abstract-compile:compile, compile, resources-std:init, -resources-std:check-resources, resources-std:copy-resources, resources-std:copy-test-resources, abstract-test:test-ready, abstract-test:init, test-junit:init, abstract-test:compute-test-sets, -test-junit:test, test-junit:run, abstract-test:test-run, test, test-build-webapp-java:test]" level="debug"/>
    </target>

   <target name="test-build-webapp-java:package" depends="package">
       <au:assertLogContains text="Build sequence for target(s) `setUp', `test-build-webapp-java:package' is [clean-test, setUp, -ivy-provisioning:init, abstract-provisioning:provisioning-ready, -ivy-provisioning:resolve, -ivy-provisioning:resolve-main-confs, -ivy-provisioning:resolve-test-confs, -ivy-provisioning:resolve-provided-confs, ivy-provisioning:resolve, abstract-provisioning:provisioning, abstract-compile:compile-ready, compile-java:init, compile-java:compile, compile-test-java:compile, compile-test-java:compile-integration, abstract-compile:compile, compile, manifest:init, -manifest:generate-version-number, manifest:manifest, manifest:manifest-runnable, resources-std:init, -resources-std:check-resources, resources-std:copy-resources, abstract-package:package-ready, abstract-package:init, abstract-package:compute-metainf, package-war:init, -package-war:prepare-war, package-war:war, abstract-package:register-main-artifact, abstract-package:package, package, test-build-webapp-java:package]" level="debug"/>
   </target>

</project>
