<?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 default="antunit" xmlns:au="antlib:org.apache.ant.antunit">
  <import file="../../../antunit-base.xml" />

  <path id="junit">
    <fileset dir="../../../../../../lib/optional" includes="junit*"/>
  </path>

  <target name="setUp">
    <mkdir dir="${input}"/>
    <mkdir dir="${output}"/>
    <echo file="${input}/ATest.java"><![CDATA[
package test;
import junit.framework.TestCase;

public class ATest extends TestCase {
    public void testEmpty() {}
}
]]></echo>
    <javac srcdir="${input}" destdir="${output}">
      <classpath refid="junit"/>
    </javac>
    <macrodef name="j">
      <sequential>
        <junit fork="true" forkMode="perBatch">
          <classpath refid="junit"/>
          <classpath location="${output}"/>
          <batchtest todir="${output}">
            <fileset dir="${output}">
              <include name="**/*Test.class" />
            </fileset>
          </batchtest>
          <formatter type="plain" if="${if}" extension=".dollar_if"/>
          <formatter type="plain" if="if" extension=".if"/>
          <formatter type="plain" unless="${if}" extension=".dollar_unless"/>
          <formatter type="plain" unless="if" extension=".unless"/>
        </junit>
      </sequential>
    </macrodef>
  </target>

  <target name="testPropertyNotSet" depends="setUp">
    <j/>
    <au:assertFileDoesntExist file="${output}/TEST-test.ATest.dollar_if"/>
    <au:assertFileDoesntExist file="${output}/TEST-test.ATest.if"/>
    <au:assertFileExists file="${output}/TEST-test.ATest.dollar_unless"/>
    <au:assertFileExists file="${output}/TEST-test.ATest.unless"/>
  </target>

  <target name="testPropertySet" depends="setUp">
    <property name="if" value="whatever"/>
    <j/>
    <au:assertFileDoesntExist file="${output}/TEST-test.ATest.dollar_if"/>
    <au:assertFileExists file="${output}/TEST-test.ATest.if"/>
    <au:assertFileExists file="${output}/TEST-test.ATest.dollar_unless"/>
    <au:assertFileDoesntExist file="${output}/TEST-test.ATest.unless"/>
  </target>

  <target name="testPropertyTrue" depends="setUp">
    <property name="if" value="true"/>
    <j/>
    <au:assertFileExists file="${output}/TEST-test.ATest.dollar_if"/>
    <au:assertFileExists file="${output}/TEST-test.ATest.if"/>
    <au:assertFileDoesntExist file="${output}/TEST-test.ATest.dollar_unless"/>
    <au:assertFileDoesntExist file="${output}/TEST-test.ATest.unless"/>
  </target>

  <target name="testPropertyFalse" depends="setUp">
    <property name="if" value="false"/>
    <j/>
    <au:assertFileDoesntExist file="${output}/TEST-test.ATest.dollar_if"/>
    <au:assertFileExists file="${output}/TEST-test.ATest.if"/>
    <au:assertFileExists file="${output}/TEST-test.ATest.dollar_unless"/>
    <au:assertFileDoesntExist file="${output}/TEST-test.ATest.unless"/>
  </target>

</project>
