<!--
/*
 * 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.
 */
 -->

<!-- $Id$ -->

<!-- 
     Compiles DBCP unit tests and attempts to run them using the compiled dbcp jar
     specified in the "commons-dbcp.jar" property.  Set this property in build.properties
     along with commons-pool.jar and execute the "test" target to run the tests.
     
     If the jdk level is <= 1.5, JDBC 4 methods will be commented out in the test 
     code before compilation of the tests.
-->

<project name="commons-dbcp" default="test" basedir=".">

   <target name="init">
      <tstamp/>

      <!-- read properties from the build.properties, if any -->
      <property name="component-propfile" value="${basedir}/build.properties"/>
      <property file="${component-propfile}"/>

      <!-- read properties from the ${user.home}/propfile, if any -->
      <property name="user-propfile" value="${user.home}/build.properties"/>
      <property file="${user-propfile}"/>

      <property name="commons-pool.jar" value="${basedir}/../pool/dist/commons-pool.jar"/>
      <property name="commons-dbcp.jar" value="${basedir}/../../commons-dbcp-1.3-SNAPSHOT.jar"/>

      <!-- now combine the classpaths -->
      <property name="classpath" 
       value="${cp}:${commons-pool.jar}:${commons-dbcp.jar}:${jdbc20ext.jar}:${junit.jar}:
        ${naming-common.jar}:${naming-java.jar}:${commons-logging.jar}:
        ${xerces.jar}:${xml-apis.jar}:${jta-spec.jar}:${jta-impl.jar}:
        ${backport-util-concurrent.jar}:${ejb-spec.jar}"/>

      <property name="build.dir" value="${basedir}/build"/>
      <property name="build.test-classes.dir" value="${build.dir}/test-classes"/>

      <property name="test.entry" value="org.apache.commons.dbcp.TestAll"/>
      <property name="test.failonerror" value="true" /> 
      <property name="test.runner" value="junit.textui.TestRunner" /> 
 
      <property name="javac.optimize" value="false"/>
      <property name="javac.debug" value="true"/>
      <property name="javac.deprecation" value="false"/>
      
      <available property="jndi.present" classname="javax.naming.Context"/>
      <available property="jdbc4.present" classname="java.sql.Wrapper"/>
   </target>

   <target name="check_jar">
       <available file="${file}" property="found"/>
       <antcall target="check_message"/>
   </target>

    <target name="check_message" unless="found">
        <!-- echo could be replaced with fail if required -->
        <echo message="Could not find ${file}"/>
   </target>

   <!-- Check that all the dependencies exist -->
   <target name="check_depends" depends="init">
       <echo>Checking dependencies</echo>
       <antcall target="check_jar">
           <param name="file" value="${commons-pool.jar}"/>
       </antcall>
       <antcall target="check_jar">
           <param name="file" value="${junit.jar}"/>
       </antcall>
       <antcall target="check_jar">
           <param name="file" value="${naming-common.jar}"/>
       </antcall>
       <antcall target="check_jar">
           <param name="file" value="${naming-java.jar}"/>
       </antcall>
       <antcall target="check_jar">
           <param name="file" value="${commons-logging.jar}"/>
       </antcall>
       <antcall target="check_jar">
           <param name="file" value="${xerces.jar}"/>
       </antcall>
       <antcall target="check_jar">
           <param name="file" value="${jta-spec.jar}"/>
       </antcall>
       <antcall target="check_jar">
           <param name="file" value="${jta-impl.jar}"/>
       </antcall>
       <antcall target="check_jar">
           <param name="file" value="${backport-util-concurrent.jar}"/>
       </antcall>
       <antcall target="check_jar">
           <param name="file" value="${ejb-spec.jar}"/>
       </antcall>
   </target>

   <!-- ######################################################### -->

   <target name="clean" depends="init" description="removes generated files">
      <delete dir="${build.dir}"/>
      <delete dir="${dist.dir}"/>
   </target>

    <target name="prepare-nojdbc4" depends="init" unless="jdbc4.present">
       <echo message="Commenting out the jdbc4 additional methods since JDBC 4 was not detected."/>
       <property name="src.dir" value="${build.dir}/src"/>
       <property name="src.java.dir" value="${src.dir}/java"/>
       <property name="src.test.dir" value="${src.dir}/test"/>
       <property name="javac.source" value="1.4" />

       <mkdir dir="${src.dir}"/> 
       <copy todir="${src.dir}" filtering="yes">
          <fileset dir="${basedir}/src" defaultexcludes="no">
             <include name="**/*.java"/>
             <include name="**/*.xml"/>
             <include name="**/*.properties"/>
             <include name="**/*.jocl"/>
             <include name="**/package.html"/>
          </fileset>
       </copy>
       <replace dir="${src.dir}" token="/* JDBC_4_ANT_KEY_BEGIN */" value="/*"/>
       <replace dir="${src.dir}" token="/* JDBC_4_ANT_KEY_END */" value="*/"/>
    </target>

    <target name="prepare-jdbc4" depends="init" if="jdbc4.present">
      <echo message="JDBC 4 was detected."/>
          <property name="src.dir" value="${basedir}/src"/>
          <property name="src.java.dir" value="${src.dir}/java"/>
          <property name="src.test.dir" value="${src.dir}/test"/>
          <property name="javac.source" value="1.5" />
       </target>

   <target name="prepare" depends="init,prepare-nojdbc4,prepare-jdbc4"/>

   <!-- ######################################################### -->
   
   <target name="compile-test" depends="check_depends,prepare" description="compiles test files">
      <mkdir dir="${build.test-classes.dir}"/>
      <javac destdir="${build.test-classes.dir}"
             srcdir="${src.test.dir}"
             debug="${javac.debug}"
             deprecation="${javac.deprecation}"
             optimize="${javac.optimize}"
             source="${javac.source}">
        <classpath>
          <pathelement location="${build.test-classes.dir}" /> 
          <pathelement path="${classpath}" /> 
        </classpath>
      </javac>
      <copy todir="${build.test-classes.dir}" file="${src.test.dir}/testpool.jocl"/>
   </target>

   <target name="test" depends="compile-test" description="runs (junit) unit tests">
      <echo message="${classpath}"/>
      <junit printsummary="true" showoutput="true" fork="yes" haltonfailure="${test.failonerror}">
        <classpath>
          <pathelement location="${build.test-classes.dir}" /> 
          <pathelement path="${classpath}" /> 
        </classpath>
        <test name="${test.entry}"/>
        <formatter type="plain"/>
      </junit>
   </target>
   
</project>
