<!--
  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="echoFoo" name="ant-test" basedir="">

  <property name="foo5.1" value="${foo5}"/>

  <target name="writeFoo3Bar3">
    <echo message="foo3 = bar3" file="test.properties"/>
  </target>

  <target name="readWriteFoo4.1Foo4">
    <echo message="foo4.1 = ${foo4}" file="test.properties"/>
  </target>

  <target name="readWriteFoo5.1Foo5InStart">
    <echo message="foo5.1 = ${foo5.1}" file="test.properties"/>
  </target>

  <target name="echoFoo">
    <echo message="${foo}"/>
  </target>

</project>