<?xml version="1.0"?>
<!--
    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="solr-test-framework" default="default">
  <description>Solr Test Framework</description>

  <import file="../common-build.xml"/>

  <path id="solr.test.framework.lucene.libs">
    <pathelement location="${test-framework.jar}"/>
  </path>

  <path id="classpath">
    <fileset dir="lib" excludes="${common.classpath.excludes}"/>
    <path refid="solr.test.framework.lucene.libs" />
    <path refid="solr.base.classpath"/>
  </path>

  <!-- Redefine Lucene test-framework compilation here to avoid circular dependency on compile-core -->
  <target name="compile-test-framework">
    <ant dir="${common.dir}" target="compile-test-framework" inheritall="false">
      <propertyset refid="uptodate.and.compiled.properties"/>
    </ant>
  </target>

  <target name="compile-core" depends="resolve, clover, compile-solr-core, compile-test-framework">
    <!-- TODO: why does test-framework override compile-core to use this special classpath? -->
    <compile srcdir="${src.dir}" destdir="${build.dir}/classes/java">
      <classpath refid="test.base.classpath"/>
    </compile>

    <!-- Copy the resources folder (if existent) -->
    <copy todir="${build.dir}/classes/java">
      <fileset dir="${resources.dir}" erroronmissingdir="no"/>
    </copy>
  </target>

  <!-- redefine the forbidden apis for tests, as we check ourselves -->
  <target name="-check-forbidden-tests" depends="-init-forbidden-apis,compile-core">
    <forbidden-apis suppressAnnotation="**.SuppressForbidden" signaturesFile="${common.dir}/tools/forbiddenApis/tests.txt" classpathref="forbidden-apis.allclasses.classpath">
      <fileset dir="${build.dir}/classes/java"/>
    </forbidden-apis>
  </target>

  <!-- Override common-solr.javadocs to include JUnit links -->
  <!-- and to copy the built javadocs to ${dest}/docs/api/test-framework -->
  <target name="javadocs"
          depends="compile-core,jar-test-framework,lucene-javadocs,javadocs-test-framework,define-lucene-javadoc-url,check-javadocs-uptodate" unless="javadocs-uptodate-${name}">
    <sequential>
      <mkdir dir="${javadoc.dir}/${name}"/>
      <!-- NOTE: explicitly not using solr-invoke-javadoc, or attempting to
     link to lucene-test-framework because if we did javadoc would
     attempt to link class refs in in org.apache.lucene, causing
     broken links. (either broken links to things like "Directory" if
     lucene-test-framework was first, or broken links to things like
     LuceneTestCase if lucene-core was first)
      -->
      <invoke-javadoc destdir="${javadoc.dir}/${name}"
          title="${Name} ${version} Test Framework API">
  <sources>
    <link offline="true" href="${javadoc.link.junit}"
    packagelistLoc="${javadoc.packagelist.dir}/junit"/>
    <packageset dir="${src.dir}"/>
  </sources>
      </invoke-javadoc>
      <solr-jarify basedir="${javadoc.dir}/${name}" destfile="${build.dir}/${final.name}-javadoc.jar"/>
    </sequential>
  </target>
  <target name="module-jars-to-solr"
          depends="-module-jars-to-solr-not-for-package,-module-jars-to-solr-package"/>
  <target name="-module-jars-to-solr-not-for-package" unless="called.from.create-package">
    <antcall target="jar-test-framework" inheritall="true"/>
    <property name="test-framework.uptodate" value="true"/>
    <mkdir dir="${build.dir}/lucene-libs"/>
    <copy todir="${build.dir}/lucene-libs" preservelastmodified="true" flatten="true" failonerror="true" overwrite="true">
      <path refid="solr.test.framework.lucene.libs" />
    </copy>
  </target>
  <target name="-module-jars-to-solr-package" if="called.from.create-package">
    <antcall target="-unpack-lucene-tgz" inheritall="true"/>
    <pathconvert property="relative.solr.test.framework.lucene.libs" pathsep=",">
      <path refid="solr.test.framework.lucene.libs"/>
      <globmapper from="${common.build.dir}/*" to="*" handledirsep="true"/>
    </pathconvert>
    <mkdir dir="${build.dir}/lucene-libs"/>
    <copy todir="${build.dir}/lucene-libs" preservelastmodified="true" flatten="true" failonerror="true" overwrite="true">
      <fileset dir="${lucene.tgz.unpack.dir}/lucene-${version}" includes="${relative.solr.test.framework.lucene.libs}"/>
    </copy>
  </target>

  <target name="dist" depends="module-jars-to-solr, common-solr.dist">
    <!-- we're not a contrib, our lucene-libs and go in a special place -->
    <mkdir  dir="${dist}/test-framework" />
    <copy todir="${dist}/test-framework">
      <fileset dir="${build.dir}">
  <include name="lucene-libs/*.jar" />
      </fileset>
      <fileset dir=".">
  <include name="lib/*" />
  <include name="README.md" />
      </fileset>
    </copy>
  </target>

  <target name="-check-forbidden-sysout"/>
</project>

