<?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=".">

  <import file="../../buildfiletest-base.xml"/>

  <property name="root" location="../../../../.."/>

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

  <target name="useSrcAndEncoding">
    <mkdir dir="${output}" />
    <property name="useSrcAndEncoding.encoding" value="UTF-8"/>
    <property name="useSrcAndEncoding.reader.encoding" value="${useSrcAndEncoding.encoding}"
      description="Set a different encoding to raise a failure (ex. ISO-8859-1)" />
    <property name="useSrcAndEncoding.file" location="${output}/script.useSrcAndEncoding.js"/>
    <property name="useSrcAndEncoding.expectedProp" value="eacute [&#233;]" />

    <echo file="${useSrcAndEncoding.file}" encoding="${useSrcAndEncoding.encoding}"
      message="project.setNewProperty('useSrcAndEncoding.prop', '${useSrcAndEncoding.expectedProp}');"/>

    <script language="javascript" src="${useSrcAndEncoding.file}" encoding="${useSrcAndEncoding.reader.encoding}"/>
    <condition property="useSrcAndEncoding.testOK" >
      <equals arg1="${useSrcAndEncoding.expectedProp}" arg2="${useSrcAndEncoding.prop}" />
    </condition>
    <fail message="expected &lt;${useSrcAndEncoding.expectedProp}&gt; but was &lt;${useSrcAndEncoding.prop}&gt;" unless="useSrcAndEncoding.testOK" />
  </target>

</project>