<?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="test-html-wrapper" basedir=".">

	<taskdef resource="flexTasks.tasks" 
		classpath="../../../lib/flexTasks.jar"/>
		
    <target name="test-html-wrapper" depends="clean-test-html-wrapper">
		<!-- history = false, expressInstall = false -->
        <mkdir dir="html-wrapper-tests/default"/>
        <html-wrapper swf="bar" output="html-wrapper-tests/default"/>
        <!-- history = false, expressInstall = true -->
		<mkdir dir="html-wrapper-tests/express-installation"/>
        <html-wrapper title="foo"
                      height="100"
                      width="100"
                      bgcolor="red"
                      application="bar"
                      swf="bar"
                      version-major="9"
                      version-minor="0"
                      version-revision="0"
                      history="false"
					  express-install="true"
                      output="html-wrapper-tests/express-installation"/>
		<!-- history = true, expressInstall = true -->
        <mkdir dir="html-wrapper-tests/express-installation-with-history"/>
        <html-wrapper title="foo"
                      height="100"
                      width="100"
                      bgcolor="red"
                      application="bar"
                      swf="bar"
                      version-major="9"
                      version-minor="0"
                      version-revision="0"
                      history="true"
                      express-install="true"
                      output="html-wrapper-tests/express-installation-with-history"/>
        <mkdir dir="html-wrapper-tests/history"/>
		<!-- history = true, expressInstall = false -->		
        <html-wrapper title="foo"
                      height="100"
                      width="100"
                      bgcolor="red"
                      application="bar"
                      swf="bar"
                      version-major="9"
                      version-minor="0"
                      version-revision="0"
					  express-install="false"
                      history="true"
                      output="html-wrapper-tests/history"/>
   
    </target>

    <target name="clean-test-html-wrapper">
        <delete dir="html-wrapper-tests/default" />
        <delete dir="html-wrapper-tests/history" />
        <delete dir="html-wrapper-tests/express-installation" />
        <delete dir="html-wrapper-tests/express-installation-with-history" />
    </target>

</project>
