<?xml version="1.0" encoding="UTF-8"?>
<!--

  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="FlexPMD Flex Cover Report ANT build report utility" basedir="" default="report">

	<!-- set up the build environment -->
	<property file="build.properties" />
	<property file="flexcover.properties" />
	<property environment="env" />

	<property name="flexpmd.version" value="1.0-RC1" />

	<!-- get the hostname of the machine we're running on -->
	<property name="env.HOSTNAME" value="${env.COMPUTERNAME}" />

	<!-- include the flex target definitions -->
	<taskdef resource="flexTasks.tasks" classpath="${FLEX_TASKS}" />

	<!-- Define the FlexUnit task. -->
	<taskdef resource="com/adobe/ac/ant/tasks/tasks.properties" classpath="${ant.lib}/FlexUnitAntTasks.jar" />

	<!-- uncomment if you need to see what properties ant is picking up -->
	<echoproperties/>

	<!-- the main build target the build machine uses, build, test, report, nag -->
	<target name="run.prepare" 
		depends="clean,getInstrumentationMetadata,compileAndRunTests,cleanUp" 
		description="cleans, compiles and tests the app, builds a non-release package." />

	
	<target name="report">
		<antcall target="run.prepare">
            <param name="testName" value="TestRunner" />
        </antcall>
	</target>
	
	<target name="run">
		<antcall target="run.prepare">
            <param name="testName" value="TestViewRunner" />
        </antcall>
	</target>

	<!-- usethis target to test locally -->
	<target name="compileAndRunTests" depends="clean,compileTest,runTest" 
		description="compile and run the test suite and code coverage tool" />

	<target name="getInstrumentationMetadata" 
		description="compiles the app to get metadata about classes needed for code coverage" depends="clean">
 		<compile />
	</target>

	<target name="cleanUp" description="removes test harness and temp folder from build directory">
		<delete file="${build}/${testAppXML}">
		</delete>
		<delete file="${build}/${testSWF}">
		</delete>
	</target>

	<property name="coverageMetadata-path" location="${coverageMetadata}" />
	<property name="coverageReport-path" location="${coverageReport}" />
	<property name="coverageCVR-path" location="${coverageCVR}" />
	<property name="coverageXML-path" location="${coverageXML}" />

	<target name="launchCodeCoverageApp" description="launches to code coverage listener app">
		<echo>'${coverageMetadata-path}' -output '${coverageCVR-path}' -emma-report '${coverageReport-path}'</echo>
		<launchApp appXML="${coverageXML-path}" additionalArgs="${coverageMetadata-path} -output ${coverageCVR-path} -emma-report ${coverageReport-path}" />
	</target>

	<macrodef name="launchApp">
		<attribute name="appXML" />
		<attribute name="additionalArgs" />
		<attribute name="spawn" default="true" />
		<sequential>
			<pathconvert property="xmlPath" dirsep="${dirSep}">
				<path location="@{appXML}" />
			</pathconvert>
			<echo>launching adl with ${xmlPath}</echo>
			<exec executable="${adl}" spawn="@{spawn}">
				<arg line="'${xmlPath}'" />
				<arg line="--" />
				<arg line="@{additionalArgs}" />
			</exec>
		</sequential>
	</macrodef>

	<macrodef name="compile">
		<attribute name="srcFile" default="${src}/${mainAppMXML}" />
		<attribute name="outputFile" default="${temp}/${mainSWF}" />
		<sequential>
			<mxmlc file="@{srcFile}" output="@{outputFile}" debug="${debugMode}" 
				allow-source-path-overlap="true" show-actionscript-warnings="false" 
				keep-generated-actionscript="false" maxmemory="1024m">

				<define name="CONFIG::debugging" value="false" />

				<load-config filename="${flexConfig}" />

				<!-- path to our source -->
				<source-path path-element="${src}" />
				<source-path path-element="${src_test}" />
				<source-path path-element="${src_locale}" />
				<source-path path-element="${testClassPath}" />
				<source-path path-element="${resourceBundles}" />
				<source-path path-element="${flexUnitSrc}" />

				<!-- core flex libraries -->
				<compiler.library-path dir="${flexcover.sdk}/frameworks" append="true">
					<include name="libs" />
				</compiler.library-path>
				<compiler.library-path dir="${flexcover.sdk}/frameworks/locale" append="true">
					<include name="${LOCALE}" />
				</compiler.library-path>

				<!-- air libraries (why need to declare separate)? -->
				<compiler.library-path dir="${flexcover.sdk}/frameworks" append="true">
					<include name="libs/air" />
				</compiler.library-path>

				<!-- local libraries -->
				<compiler.library-path dir="." append="true">
					<include name="libs" />
					<include name="${ant.lib}" />
				</compiler.library-path>
			</mxmlc>
		</sequential>
	</macrodef>


	<!-- compile the unit tests -->
	<target name="compileTest" description="compile the the test suite">
		<compile srcFile="${src}/${testAppMXML}" outputFile="${build}/${testSWF}" />
		<generateAppXML srcFile="${src}/${testAppXML}" destFile="${build}/${testAppXML}" initialContent="${testSWF}" />
	</target>

	<!-- create the application XML file -->
	<macrodef name="generateAppXML">
		<attribute name="srcFile" />
		<attribute name="destFile" />
		<attribute name="initialContent" />
		<sequential>
			<copy file="@{srcFile}" tofile="@{destFile}" />
			<replace file="@{destFile}" token="${initialContentToken}" value="@{initialContent}" />
			<echo>setting build number to: ${versionNumber}</echo>
			<replace file="@{destFile}" token="%VERSION%" value="${versionNumber}" />
		</sequential>
	</macrodef>

	<!-- Clears out the build directory -->
	<target name="clean">
		<echo message="Removing build directory contents" description="removes build related directory contents" />
	</target>
	
	<target name="runTest" description="runs the test harness and coverage tool" depends="clean,compileTest">
		<parallel timeout="120000">
			<sequential>
				<antcall target="launchCodeCoverageApp">
				</antcall>
				<sleep seconds="15" />
				<launchApp appXML="${build}/${testAppXML}" additionalArgs="'${testOutputDir}'" spawn="no" />
				<airflexunit reportDir="${testOutputDir}" haltonfailure="true" />
				<echo>finished running tests </echo>
				<waitfor>
					<available file="${coverageCVR-path}" />
				</waitfor>
				<echo>found coverage CVR </echo>
				<waitfor>
					<available file="${coverageReport-path}" />
				</waitfor>
				<echo>found coverage report</echo>
			</sequential>
		</parallel>
	</target>


</project>
