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

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

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