<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  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
    default="jar:jar"
    xmlns:deploy="deploy"
    xmlns:j="jelly:core"
    xmlns:ant="jelly:ant">

    <!-- Additionally cleans the test data created -->
    <postGoal name="clean">
        <attainGoal name="test:clean"/>
    </postGoal>

    <!-- deletes the test data -->
    <goal name="test:clean">
        <ant:delete includeEmptyDirs="true">
            <ant:fileset dir="applications/test/repository">
                <ant:include name="**/*"/>
                <ant:exclude name="**/custom_nodetypes.xml"/>
            </ant:fileset>
        </ant:delete>
        <ant:delete includeEmptyDirs="true">
            <ant:fileset dir="applications/test/workspaces">
                <ant:include name="**/*"/>
                <ant:exclude name="**/workspace.xml"/>
            </ant:fileset>
        </ant:delete>
        <ant:delete dir="applications/test/tx"/>
        <ant:delete dir="applications/test/version"/>
        <ant:delete file="applications/test/.lock"/>
    </goal>
    
    <!--
        Creates a jar file with the JackrabbitRepositoryStub class which is
        needed for running test cases
    -->
    <goal name="jackrabbit:test-stub">
        <attainGoal name="test:compile"/>
        <ant:jar destfile="./target/jackrabbit-test-stub-${pom.currentVersion}.jar"
            basedir="target/test-classes"
            includes="org/apache/jackrabbit/core/JackrabbitRepositoryStub.class"/>
    </goal>

    <!--
        Run Jackrabbit init tests first.
    -->
    <preGoal name="test:test">
        <j:if test="${context.getVariable('maven.test.skip') != 'true'}">
            <attainGoal name="jackrabbit:test-init"/>
        </j:if>
    </preGoal>

    <!--
        Runs the init test cases to fill the repository with data for
        read-only tests.
    -->
    <goal name="jackrabbit:test-init">
        <j:set var="testcase" value="org.apache.jackrabbit.init.TestAll"/>
        <attainGoal name="test:single"/>
    </goal>

</project>
