<?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 default="dont-run-this">

  <import file="../buildfiletest-base.xml"/>
  
  <target name="dont-run-this">
    <fail>This build file is supposed to be run by a Unit test</fail>
  </target>
 

  <target name="testPropertyExpansion">
    <sequential>
      <property name="foo" value="it worked"/>
      <echo message="As attribute: ${foo}"/>
      <echo>As nested text: ${foo}</echo>
    </sequential>
  </target>

  <target name="testTaskdef">
    <mkdir dir="${output}"/>
    <javac srcdir="containersrc" destdir="${output}" debug="on"/>

    <sequential>    
      <taskdef name="sseq" classpath="${output}" classname="test.SpecialSeq"/>
      <sseq>
        <fileset dir="."/>
        <property name="foo" value="it worked"/>
        <echo message="As attribute: ${foo}"/>
        <echo>As nested text: ${foo}</echo>
        <nested message="As nested task: ${foo}"/>
      </sseq>
    </sequential>
  </target>

  <target name="testCaseInsensitive">
    <taskdef name="Prattle" classname="org.apache.tools.ant.taskdefs.Echo"/>  
    <taskdef name="Seq"  
             classname="org.apache.tools.ant.taskdefs.Sequential"/>  
    <Prattle>hello</Prattle>  
    <Seq>  
      <Prattle> world</Prattle>  
    </Seq>  
  </target>  

  
</project>
