<?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 name="testproject" default="def" basedir=".">

  <target name="def">
    <fail>This build-file is intended to be run from the test cases</fail>
  </target>

  <target name="setup1">

    <script language="javascript"> <![CDATA[

      for (i=1; i<=10; i++) {
        echo = testproject.createTask("echo");
        setup1.addTask(echo);
        echo.setMessage(i*i);
      }

    ]]> </script>

  </target>

  <target name="example1" depends="setup1"/>

  <target name="useBeanshell">
    <script language="beanshell"><![CDATA[
       self.log("I'm here", org.apache.tools.ant.Project.MSG_INFO);
    ]]></script>
  </target>

</project>