<!--/*******************************************************************************
* 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.run.dir"            value="${basedir}/run" />
    
    <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.api_2.0.1.Final.jar"/>
    <property name="javax.persistence" value="${jse.jpa.plugins.dir}/javax.persistence_2.2.0.v201708071007.jar"/>
    <property name="jse.modelgen.jar" value="${jse.el.plugins.dir}/org.eclipse.persistence.jpa.modelgen_3.0.0.qualifier.jar"/>

    <property environment="env" />
    <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.eclipselink.jar}" />
        <pathelement path="${jse.modelgen.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="${jse.modelgen.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}"/>
        <mkdir dir="${jse.run.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}"/>
            <sysproperty key="run.dir" value="${jse.run.dir}"/>
            <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}">
            <compilerarg value="-proc:none"/>
            <classpath refid="compile.jse.path"/>
            <src path="src"/>
        </javac>
    </target>
    <target name="clean">
        <delete dir="${jse.classes.dir}" />
        <delete dir="${jse.run.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>
