<?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 xmlns:au="antlib:org.apache.ant.antunit"
         xmlns:props="antlib:org.apache.ant.props" default="antunit">
  <typedef name="condition-type"
           classname="org.apache.ant.props.ConditionTypeEvaluator" />
  <propertyhelper>
    <condition-type />
    <props:nested />
  </propertyhelper>

  <target name="if-available"
          if="${available(classname=org.apache.ant.props.ConditionTypeEvaluator)}">
    <property name="testAvailable.pass" value="true" />
  </target>

  <target name="unless-available"
          unless="${available(classname=org.apache.ant.props.ConditionTypeEvaluator)}">
    <property name="testAvailable.fail" value="true" />
  </target>

  <target name="testAvailable" depends="if-available,unless-available">
    <au:assertTrue>
      <and>
        <istrue value="${testAvailable.pass}" />
        <not><istrue value="${testAvailable.fail}" /></not>
      </and>
    </au:assertTrue>
  </target>

  <target name="set-prop">
    <property name="foo" value="bar"/>
  </target>

  <target name="if-equals" if="${equals(arg1=bar,arg2=${foo})}">
    <property name="testTrueEquals.pass" value="true" />
  </target>

  <target name="unless-equals" unless="${equals(arg1=bar,arg2=${foo})}">
    <property name="testFalseEquals.pass" value="true" />
  </target>

  <target name="testTrueEquals" depends="set-prop,if-equals,unless-equals">
    <au:assertTrue>
      <istrue value="${testTrueEquals.pass}" />
    </au:assertTrue>
  </target>

  <target name="testFalseEquals" depends="if-equals,unless-equals"
          description="Pass is inconclusive">
    <au:assertTrue>
      <istrue value="${testFalseEquals.pass}" />
    </au:assertTrue>
  </target>

  <target name="testEvalToTextFalse">
    <au:assertTrue>
      <!-- equals takes objects; embedding values in () forces string conversion -->
      <equals arg1="(false)" arg2="(${equals(arg1=bar,arg2=${foo})})" />
    </au:assertTrue>
  </target>

  <target name="testEvalToTextTrue" depends="set-prop">
    <au:assertTrue>
      <!-- equals takes objects; embedding values in () forces string conversion -->
      <equals arg1="(true)" arg2="(${equals(arg1=bar,arg2=${foo})})" />
    </au:assertTrue>
  </target>

  <target name="testIsTrue" depends="set-prop">
    <au:assertTrue>
      <istrue value="${equals(arg1=bar,arg2=${foo})}" />
    </au:assertTrue>
  </target>

  <target name="testNotIsTrue" description="Pass is inconclusive">
    <au:assertFalse>
      <istrue value="${equals(arg1=bar,arg2=${foo})}" />
    </au:assertFalse>
  </target>

  <target name="antunit">
    <antunit xmlns="antlib:org.apache.ant.antunit">
      <plainlistener />
      <file file="${ant.file}" xmlns="antlib:org.apache.tools.ant" />
    </antunit>
  </target>

  <target name="testNegation">
    <property name="foo" value="false" />
    <au:assertTrue>
      <istrue value="${!istrue(value=${foo})}" />
    </au:assertTrue>
  </target>

</project>
