<?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

https://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="junit" default="all" xmlns:au="antlib:org.apache.ant.antunit"
 basedir="../../../../">

  <target name="all">
    <fail message="These are not standalone tests." />
  </target>

  <property name="outputdir" location="target/test_output"/>
  <property name="outputfile" location="${outputdir}/junit_out.xml"/>
  
  <target name="suiteSetUp">
    <mkdir dir="${outputdir}"/>
    <delete file="${outputfile}"/>
    <echo file="${outputfile}" append="true" message="suiteSetUp-" />
  </target>
  
  <target name="suiteTearDown">
    <echo file="${outputfile}" append="true" message="suiteTearDown" />
  </target>
  
  <target name="setUp">
    <echo file="${outputfile}" append="true" message="setUp-" />
  </target>

  <target name="tearDown">
    <echo file="${outputfile}" append="true" message="tearDown-" />
  </target>
  

  <target name="test1">
      <echo file="${outputfile}" append="true" message="test1-" />
  </target>  

  <target name="test2">
      <echo file="${outputfile}" append="true" message="test2-" />
  </target>  


 </project>