<!--

    Copyright (c) 2002, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!DOCTYPE project [
  <!ENTITY common SYSTEM "../../../config/common.xml">
  <!ENTITY testcommon SYSTEM "../../../config/properties.xml">
]>

<project name="connector1.5 TEST" default="all" basedir=".">
<property name="j2ee.home" value="../.."/>
<property name="client.class" value="client/Client"/>

  <!-- include common.xml and testcommon.xml -->
  &common;
  &testcommon;

  <target name="all" depends="init-common, build, setup, runtest, unset"/>
  <target name="run-dp-test" depends="init-common, build, setup-dp, deploy-dp, runtest, unset-dp, undeploy-dp"/>
  <target name="build" depends="init-common">
   <ant dir="ra" inheritAll="false" target="all"/>
   <ant dir="app" inheritAll="false" target="all"/>
  </target>

  <target name="setup">
    <ant dir="." inheritAll="false" target="deploy"/>
    <ant dir="app" inheritAll="false" target="setupJdbc"/>
  </target>

  <target name="setup-dp">
    <ant dir="app" inheritAll="false" target="setupJdbc"/>
  </target>

  <target name="deploy">
    <ant dir="ra" inheritAll="false" target="deploy"/>
<!--
    <ant dir="ra" inheritAll="false" target="testAddAdmin"/>
-->
    <ant dir="app" inheritAll="false" target="deploy-ear"/>
    <ant dir="." inheritAll="false" target="restart"/>
  </target>

  <target name="deploy-dp">
    <ant dir="ra" inheritAll="false" target="testAddAdmin"/>
    <ant dir="app" inheritAll="false" target="deploy-ear"/>
    <ant dir="." inheritAll="false" target="restart"/>
  </target>

  <target name="runtest" depends="init-common">
    <antcall target="runclient-common">
        <param name="appname" value="simplemdb" />
    </antcall>
  </target>

  <target name="unset">
    <ant dir="app" inheritAll="false" target="unsetJdbc"/>
    <ant dir="." inheritAll="false" target="undeploy"/>
    <ant dir="." inheritAll="false" target="restart"/>
  </target>

  <target name="unset-dp">
    <ant dir="app" inheritAll="false" target="unsetJdbc"/>
    <ant dir="." inheritAll="false" target="restart"/>
  </target>

  <target name="undeploy">
    <ant dir="app" inheritAll="false" target="undeploy"/>
<!--
    <ant dir="ra" inheritAll="false" target="testDelAdmin"/>
-->
    <ant dir="ra" inheritAll="false" target="undeploy"/>
  </target>

  <target name="undeploy-dp">
    <ant dir="app" inheritAll="false" target="undeploy"/>
<!--
    <ant dir="ra" inheritAll="false" target="testDelAdmin"/>
-->
  </target>

  <target name="restart" depends="init-common">
    <echo message="Not required to restart"/>
  </target>

  <target name="clean">
    <ant dir="ra" inheritAll="false" target="clean"/>
    <ant dir="app" inheritAll="false" target="clean"/>
  </target>

</project>
