<?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">
    <propertyhelper>
      <props:nested />
    </propertyhelper>
  </target>

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

  <target name="testNested" depends="setUp">
    <property name="foo" value="foo.value" />
    <property name="var" value="foo" />
    <au:assertTrue>
      <equals arg1="${${var}}" arg2="foo.value" />
    </au:assertTrue>
  </target>

  <target name="testMultiNested" depends="setUp">
    <property name="foo" value="foo.value" />
    <property name="var1" value="f" />
    <property name="var2" value="oo" />
    <au:assertTrue>
      <equals arg1="${${var1}${var2}}" arg2="foo.value" />
    </au:assertTrue>
  </target>

  <target name="testDoubleNested" depends="setUp">
    <property name="foo" value="foo.value" />
    <property name="var" value="foo" />
    <property name="var.var" value="var" />
    <au:assertTrue>
      <equals arg1="${${${var.var}}}" arg2="foo.value" />
    </au:assertTrue>
  </target>

  <target name="testMixedNested" depends="setUp">
    <property name="foo" value="foo.value" />
    <property name="var" value="f" />
    <property name="var.var" value="v" />
    <au:assertTrue>
      <equals arg1="${${${var.var}ar}oo}" arg2="foo.value" />
    </au:assertTrue>
  </target>

  <target name="testUnbalanced" depends="setUp">
    <property name="foo" value="foo.value" />
    <property name="var" value="foo" />
    <property name="var.var" value="var" />
    <au:assertTrue>
      <equals arg1="${${${var.var}}" arg2="${${${var.var}}" />
    </au:assertTrue>
  </target>

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

</project>
