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