<?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"
         xmlns:props="antlib:org.apache.ant.props">

  <target name="antunit">
    <au:antunit>
      <fileset file="${ant.file}" />
    </au:antunit>
  </target>

  <target name="setUp" unless="setUp">
    <propertyhelper>
      <props:stringops />
    </propertyhelper>
    <property name="setUp" value="true" />
  </target>

  <target name="testSubstring" depends="setUp">
    <property name="testSubstring" value="testSubstring.value" />
    <au:assertTrue>
      <equals arg1="${testSubstring:14:5}" arg2="value" />
    </au:assertTrue>
  </target>

  <target name="testDefaultValue" depends="setUp">
    <property name="testDefaultValue" value="testDefaultValue.value" />
    <au:assertTrue>
      <equals arg1="${testDefaultValue:-MISSING VALUE}" arg2="${testDefaultValue}" />
    </au:assertTrue>
    <au:assertTrue>
      <equals arg1="${testDefaultValueUnset:-MISSING VALUE}" arg2="MISSING VALUE" />
    </au:assertTrue>
  </target>

  <target name="testSetDefaultValue" depends="setUp">
    <property name="testSetDefaultValue" value="testSetDefaultValue.value" />
    <au:assertTrue>
      <equals arg1="${testSetDefaultValue:=MISSING VALUE}" arg2="${testSetDefaultValue}" />
    </au:assertTrue>
    <au:assertTrue>
      <equals arg1="${testSetDefaultValueUnset:=MISSING VALUE}" arg2="MISSING VALUE" />
    </au:assertTrue>
    <au:assertTrue>
      <equals arg1="${testSetDefaultValueUnset}" arg2="MISSING VALUE" />
    </au:assertTrue>
  </target>

  <target name="testTranslate" depends="setUp">
    <property name="testTranslate" value="anything" />
    <echo>$${testTranslate:+Formatted Value}=${testTranslate:+Formatted Value}</echo>
    <echo>$${testTranslateUnset:+Formatted Value}=${testTranslateUnset:+Formatted Value}</echo>
    <au:assertTrue>
      <equals arg1="${testTranslate:+Formatted Value}" arg2="Formatted Value" />
    </au:assertTrue>
    <au:assertTrue>
      <equals arg1="${testTranslateUnset:+Formatted Value}"
              arg2="${testTranslateUnset:+Formatted Value}" />
    </au:assertTrue>
  </target>

  <target name="testRequireProperty" depends="setUp">
    <property name="testRequireProperty" value="testRequireProperty.value" />
    <au:assertTrue>
      <equals arg1="${testRequireProperty:?}" arg2="${testRequireProperty}" />
    </au:assertTrue>
    <au:assertTrue>
      <equals arg1="${testRequireProperty:?ERROR MESSAGE}" arg2="${testRequireProperty}" />
    </au:assertTrue>
    <au:expectfailure expectedMessage="Missing required property testRequirePropertyUnset">
      <echo>${testRequirePropertyUnset:?}</echo>
    </au:expectfailure>
    <au:expectfailure expectedMessage="ERROR MESSAGE">
      <echo>${testRequirePropertyUnset:?ERROR MESSAGE}</echo>
    </au:expectfailure>
  </target>

  <target name="setUpDelete" depends="setUp">
    <property name="testDeletePart" value="foo/bar/baz.ext" />
    <echo level="debug">$${testDeletePart}=${testDeletePart}</echo>
  </target>

  <target name="testDeleteFromStartGreedy" depends="setUpDelete">
    <echo level="debug">$${testDeletePart##*/}=${testDeletePart##*/}</echo>
    <au:assertTrue>
      <equals arg1="${testDeletePart##*/}" arg2="baz.ext" />
    </au:assertTrue>
  </target>

  <target name="testDeleteFromStartReluctant" depends="setUpDelete">
    <au:assertTrue>
      <equals arg1="${testDeletePart#*.}" arg2="ext" />
    </au:assertTrue>
    <au:assertTrue>
      <equals arg1="${testDeletePart#*/}" arg2="bar/baz.ext" />
    </au:assertTrue>
  </target>

  <target name="testDeleteFromEndGreedy" depends="setUpDelete">
    <echo level="debug">$${testDeletePart%%/*}=${testDeletePart%%/*}</echo>
    <au:assertTrue>
      <equals arg1="${testDeletePart%%/*}" arg2="foo" />
    </au:assertTrue>
  </target>

  <target name="testDeleteFromEndReluctant" depends="setUpDelete">
    <echo level="debug">$${testDeletePart%/*}=${testDeletePart%/*}</echo>
    <au:assertTrue>
      <equals arg1="${testDeletePart%/*}" arg2="foo/bar" />
    </au:assertTrue>
  </target>

  <target name="testDeleteExtension" depends="setUpDelete">
    <echo level="debug">$${testDeletePart%.*}=${testDeletePart%.*}</echo>
    <au:assertTrue>
      <equals arg1="${testDeletePart%.*}" arg2="foo/bar/baz" />
    </au:assertTrue>
  </target>

  <target name="testRetainExtension" depends="setUpDelete">
    <echo level="debug">$${testDeletePart##*.}=${testDeletePart##*.}</echo>
    <au:assertTrue>
      <equals arg1="${testDeletePart##*.}" arg2="ext" />
    </au:assertTrue>
  </target>

  <target name="setUpReplace" depends="setUp">
    <property name="testReplace" value="xoxoxoxoxox" />
  </target>

  <target name="testReplaceFirst" depends="setUpReplace">
    <echo level="debug">$${testReplace/xox/-}=${testReplace/xox/-}</echo>
    <au:assertTrue>
      <equals arg1="${testReplace/xox/-}" arg2="-oxoxoxox" />
    </au:assertTrue>
  </target>

  <target name="testReplaceAll" depends="setUpReplace">
    <echo level="debug">$${testReplace//xox/-}=${testReplace//xox/-}</echo>
    <au:assertTrue>
      <equals arg1="${testReplace//xox/-}" arg2="-o-o-" />
    </au:assertTrue>
  </target>

  <target name="testPackageMapping" depends="setUp">
    <property name="path" value="org/apache/ant/props" />
    <echo level="debug">$${path}=${path}</echo>
    <echo level="debug">$${path//\//.}=${path//\//.}</echo>
    <au:assertTrue>
      <equals arg1="${path//\//.}" arg2="org.apache.ant.props" />
    </au:assertTrue>
  </target>

  <target name="testBackslashPackageMapping" depends="setUp">
    <property name="backpath" value="org\apache\ant\props" />
    <echo level="debug">$${backpath}=${backpath}</echo>
    <echo level="debug">$${backpath//\//.}=${backpath//\//.}</echo>
    <au:assertTrue>
      <equals arg1="${backpath//\//.}" arg2="org.apache.ant.props" />
    </au:assertTrue>
  </target>

</project>
