<!--/*******************************************************************************
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
*     Rick Curtis- initial API and implementation
#******************************************************************************/-->
<project name="eclipselink.jpa.test.jse" default="test" basedir=".">   
    <property name="jse.el.root"            value="${basedir}/../.."/>
    <property name="jse.jpa.root"           value="${basedir}/.."/>
    
    <property name="jse.src.dir"            value="${basedir}/src"/>
    <property name="jse.classes.dir"        value="${basedir}/classes" />
    <!-- Use common property name to allow override -->
    <property name="reports.dir"            value="${basedir}/reports" />
    
    <property name="jse.el.plugins.dir"     value="${jse.el.root}/plugins"/>
    <property name="jse.jpa.plugins.dir"    value="${jse.jpa.root}/plugins"/>

    <!-- Not sure if there is a better way to refer to dependencies? -->
    <property name="jse.eclipselink.jar" value="${jse.el.root}/eclipselink.jar"/>
    <property name="javax.transaction" value="${jse.el.plugins.dir}/javax.transaction_1.1.0.v201002051055.jar"/>
    <property name="javax.validation" value="${jse.el.plugins.dir}/javax.validation_1.1.0.v201304101302.jar"/>
    <property name="javax.persistence" value="${jse.jpa.plugins.dir}/javax.persistence_2.2.0.v201708071007.jar"/>
   
    <property file="${user.home}/build.properties"/>
    <property file="${test.properties}" />
    <property file="./antbuild.properties" />
    <property file="./test.properties" />

    <!-- JVM used to run tests -->
    <property name="test.junit.jvm" value="${env.JAVA_HOME}"/>
    <property name="test.junit.jvm.exec" value="${test.junit.jvm}/bin/java"/>

    <path id="compile.jse.path">
        <pathelement path="${jse.el.root}/eclipselink.jar" />
        <pathelement path="${javax.transaction}" />
        <pathelement path="${javax.validation}" />
        <pathelement path="${javax.persistence}" />
        <pathelement path="${junit.lib}" />
    </path>
    <path id="run.jse.path">
        <pathelement path="${jse.classes.dir}" />
        <pathelement path="${jse.eclipselink.jar}" />
        <pathelement path="${javax.transaction}" />
        <pathelement path="${javax.validation}" />
        <pathelement path="${javax.persistence}" />
        <pathelement path="${junit.lib}" />
        <pathelement path="${jdbc.driver.jar}" />
    </path>

    <pathconvert property="jse.compile.cp" refid="compile.jse.path"/>
    <pathconvert property="jse.run.cp" refid="run.jse.path"/>
    
    <echo message="jse.el.root                      = ${jse.el.root}"/>
    <echo message="jse.jpa.root                     = ${jse.jpa.root}"/>
    <echo message="jse.eclipselink.jar              = ${jse.eclipselink.jar}"/>
    <echo message="jse.classes.dir                  = ${jse.classes.dir}"/>
    <echo message="jse.src.dir                      = ${jse.src.dir}"/>
    <echo message="compile classpath                = ${jse.compile.cp}"/>
    <echo message="run classpath                    = ${jse.run.cp}"/>   
    <echo message="report dir                       = ${reports.dir}"/>
    <echo message="basedir                          = ${basedir}"/>
    <echo message="junitlib                         = ${junit.lib}"/>
    <echo message="jse.run.cp                       = ${jse.run.cp}"/>

    <target name="test-no-report" depends="test-run"/>
    <target name="test" depends="test-run, test-report"/>
    
    <target name="test-run" depends="compile, weave">
        <mkdir dir="${reports.dir}"/>
        <property name="rmi.port" value="1099"/>
        <property name="additional.jvmargs" value="-Ddummy2=dummy"/>
        <property name="debugargs" value="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=7777"/>
        <property name="rmi" value="-Djava.naming.provider.url=rmi://localhost:${rmi.port} -Djava.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory"/>
        <junit jvm="${test.junit.jvm.exec}" printsummary="on" haltonfailure="false" failureproperty="fail" fork="yes" dir="${jse.classes.dir}" forkmode="once">
            <jvmarg line="${additional.jvmargs} ${rmi}"/>
            <sysproperty key="javax.persistence.jdbc.url" value="${db.url}"/>
            <sysproperty key="javax.persistence.jdbc.driver" value="${db.driver}"/>
            <sysproperty key="javax.persistence.jdbc.user" value="${db.user}"/>
            <sysproperty key="javax.persistence.jdbc.password" value="${db.pwd}"/>
            <sysproperty key="rmi.port" value="${rmi.port}"/>
            <classpath>
                <path refid="run.jse.path" />
            </classpath>

            <formatter type="xml"/>

            <batchtest todir="${reports.dir}">
                <fileset dir="${jse.src.dir}">
                    <include name="**/Test*.java"/>
                </fileset>
            </batchtest>

        </junit>
    </target>
    
    <target name="test-report">
        <junitreport todir="./reports">
          <fileset dir="./reports">
            <include name="TEST-*.xml"/>
          </fileset>
          <report format="frames" todir="./reports/html"/>
        </junitreport>
        <echo message="JUNIT results in ${user.dir}/reports/html"/>
        <fail if="fail" message="Test failures detected, please check the results."/>
    </target>

    <!--
    Ideally we could do something smart here to have different weaving targets to weave with different properties.
    We can cross that bridge when / if it is needed.
    -->
    <target name="weave">
        <weave source="${jse.classes.dir}" target="${jse.classes.dir}" loglevel="WARNING">
            <classpath>
                <path refid="compile.jse.path" />
            </classpath>
        </weave>
    </target>

    <target name="compile">
        <mkdir dir="${jse.classes.dir}"/>
        <copy todir="${jse.classes.dir}/META-INF">
            <fileset dir="${jse.src.dir}/META-INF" includes="**/*" excludes=".git*"/>
        </copy>

        <javac debug="true" destdir="${jse.classes.dir}" includeantruntime="false" source="${javac.version}" target="${javac.version}">
            <classpath refid="compile.jse.path"/>
            <src path="src"/>
        </javac>
    </target>
    <target name="clean">
        <delete dir="${jse.classes.dir}" />
        <delete dir="${reports.dir}" />
    </target>

    <taskdef name="weave" classname="org.eclipse.persistence.tools.weaving.jpa.StaticWeaveAntTask">
        <classpath>
            <path refid="compile.jse.path" />
        </classpath>
    </taskdef>
</project>
