<!--
  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.
-->
<!--
  This is separated from the build.xml to prevent the classloading mess caused
  by that build.xml (re)creates lib/docgen.jar.

  Invoke this as:
    ant -f test.xml
-->
<project name="docgen-test" default="test" xmlns:docgen="http://freemarker.org/docgen">

  <taskdef resource="org/freemarker/docgen/antlib.properties"
      uri="http://freemarker.org/docgen"
      classpath="build/lib/docgen.jar"
  />

  <target name="test">
    <mkdir dir="build/test" />
    <delete includeEmptyDirs="true">
      <fileset dir="build/test" includes="**/*" defaultexcludes="no" />
    </delete>

    <docgen:transform
        srcdir="src/test/9" destdir="build/test/9"
        offline="true"
    />

    <docgen:transform
        srcdir="src/test/8" destdir="build/test/8"
        offline="true"
        generateEclipseToC="true"
    />

    <docgen:transform
        srcdir="src/test/7" destdir="build/test/7"
        offline="true"
        generateEclipseToC="true"
    />

    <docgen:transform
        srcdir="src/test/6" destdir="build/test/6"
        offline="true"
        generateEclipseToC="true"
    />

    <docgen:transform
        srcdir="src/test/5" destdir="build/test/5"
        offline="true"
        generateEclipseToC="true"
    />

    <docgen:transform
        srcdir="src/test/4" destdir="build/test/4"
        offline="true"
        generateEclipseToC="true"
    />

    <docgen:transform
        srcdir="src/test/3" destdir="build/test/3"
        offline="true"
        generateEclipseToC="true"
    />

    <docgen:transform
        srcdir="src/test/2" destdir="build/test/2"
        offline="true"
        generateEclipseToC="true"
    />

    <docgen:transform
        srcdir="src/test/1" destdir="build/test/1"
        offline="true"
        generateEclipseToC="true"
    />

  </target>

</project>
