<?xml version="1.0"?>
<project name="Library" default="usage" basedir=".">

	<target name="usage">
		<echo message="Please refer to the testframework.html in org.eclipse.test for instructions on usage." />
	</target>

	<target name="init">
		<!-- 
			Parameters:
				(Mandatory)
				data-dir		- the directory for Eclipse to write its data
				plugin-name		- the name of the plugin to test
				classname		- the name of the test class
				
				(Optional - overrides defaults set in script)
				vmargs			- a string containing arguments to pass to the VM.
				extraVMargs		- allows separate setting of VM args from separate caller.
				timeout			- overrides default test timeout value (in milliseconds).
				test-output		- overrides default output file produced from test run.
				plugin-path		- path to root of plug-in
				useEclipseExe	- property setting forces test to launch via eclipse executable.
				junit-report-output - output directory for junit reports produced for specified classname.
		-->
		
	  	<tstamp>
	        <format property="TIMENOW" pattern="HHmmssSSSS"/>
	    </tstamp>
		<!--property setting useEclipseExe launches tests using the eclipse executable-->
		<condition property="launchTarget" value="eclipse-test">
			<isset property="useEclipseExe" />
		</condition>
		<!--default launch target for launching tests-->
		<property name="launchTarget" value="java-test" />
		<property name="formatter" value="org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter"/>
	    
		<!--default heap sizes when running performance tests-->
	    <condition property="vmargs" value=" -Xms256M -Xmx256M">
			<equals arg1="${test.target}" arg2="performance" />
	    </condition>
		<property name="extraVMargs" value=""/>
		<property name="plugin-path" value="" />
		<property name="timeout" value="7200000" />
		<property name="test-output" value="${eclipse-home}/${classname}.xml" />
		<property name="junit-report-output" value="${eclipse-home}/results" />
		<mkdir dir="${junit-report-output}"/>
	</target>
	
	<target name="core-test" description="Eclipse application used to launch HEADLESS plugin tests." depends="init">
		<antcall target="${launchTarget}">
			<param name="application" value="org.eclipse.php.test.coretestapplication"/>
		</antcall>
	</target>
	
	<target name="ui-test" description="Eclipse application used to launch UI plugin tests." depends="init">
		<antcall target="${launchTarget}">
			<param name="application" value="org.eclipse.php.test.uitestapplication"/>
		</antcall>
	</target>

	<target name="java-test">
		<!--default vm args-->
		<property name="vmargs" value=" -Xms40m -Xmx256m"/>
	  	
	  	<!--set default jvm to use for testing-->
	   	<property name="jvm" value="${java.home}/bin/java" />
  	
		<echo message="Running ${classname}. Result file: ${junit-report-output}/${classname}.xml."/>

		<java fork="true" dir="." timeout="${timeout}" jvm="${jvm}" logError="true"
			classname="org.eclipse.core.launcher.Main" output="${junit-report-output}/${classname}.txt">
	        <classpath>
	    		<fileset dir="${eclipse-home}/plugins">
	            	<include name="org.eclipse.equinox.launcher_*.jar"/>
	          	</fileset>
	        </classpath>
		    <arg line="-application ${application}"/>
		    <arg line="-data ${data-dir}"/>
		    <arg line="formatter=${formatter},${test-output}"/>
		    <arg line="-testPluginName ${plugin-name}"/>
		    <arg line="-className ${classname}"/>
		    <arg line="-os ${os}"/>
		    <arg line="-ws ${ws}"/>
		    <arg line="-arch ${arch}"/>
		    <arg line="-consolelog"/>
		    <jvmarg line="${vmargs} ${extraVMargs}"/>
		    <sysproperty key="PLUGIN_PATH" value="${plugin-path}"/> 
		</java>
		<antcall target="collect-results" />
	</target>
	
	<target name="eclipse-test" description="Runs the specified classname as a plug-in test.">		
		<property name="vmargs" value="-Xms256m -Xmx512m"/>
		
		<!--use -consolelog if launching a headless test-->
		<condition property="consolelog" value="-consolelog">
			<equals arg1="${application}" arg2="org.eclipse.test.coretestapplication"/>
		</condition>
		<property name="consolelog" value="" />

		<!--
			vm selection priority:
			1.  user-specified java executable via outer Ant property setting of "jvm".
			2.  java executable on path.
		-->
		<condition property="test-vm" value="-vm ${jvm}">
			<isset property="jvm" />
		</condition>
		<property name="test-vm" value="" />
		
		<!--ensure executable has execute permission-->
		<chmod file="${eclipse-home}/eclipse" perm="ugo+rx"/>
		
		
		<echo message="Running ${classname}. Result file: ${junit-report-output}/${classname}.xml."/>

		<exec executable="${eclipse-home}/eclipse" dir="${eclipse-home}" timeout="${timeout}" logError="true" failonerror="false" output="${junit-report-output}/${classname}.txt">
			<arg line="-data ${data-dir}"/>
			<arg line="${test-vm}"/>
			<arg line="-application ${application}"/>
			<arg line="formatter=${formatter},${test-output}"/>
			<arg line="-testPluginName ${plugin-name}"/>
			<arg line="-className ${classname}"/>
			<arg line="-nosplash"/>
			<arg line="-suppressErrors"/>
			<arg line="${consolelog}"/>
			<arg line="-vmargs ${vmargs} ${extraVMargs} -DPLUGIN_PATH=${plugin-path}"/>
		</exec>
		<antcall target="collect-results" />
	</target>
	
	<target name="collect-results">
		<dirname property="output-dir" file="${test-output}"/>
		<basename property="output-file-name" file="${test-output}"/>
		<junitreport todir="${junit-report-output}" tofile="${classname}.xml">
			<fileset dir="${output-dir}">
				<include name="${output-file-name}"/>
			</fileset>
		</junitreport>

		<style style="../${eclipse-home}/plugins/${org.eclipse.php.test}/JUNIT.XSL"
			basedir="${junit-report-output}"
			includes="${classname}.result.xml"
			destdir="${junit-report-output}" />

		<!-- save .log content and *.log content from configuration directory -->
		<concat destfile="${junit-report-output}/${classname}.log">
			<fileset dir="${eclipse-home}" includes="${data-dir}/.metadata/*.log"/>
			<fileset dir="${eclipse-home}" includes="configuration/*.log"/>
		</concat>
	</target>

	<target name="collect">
		<!--
			This target can be used to aggragate test runs from multiple test suites into a single report.
		
			Parameters to this target:
			includes		- the names of the files to include
			output-file		- the name of the output file to produce
		-->
		<junitreport todir="." tofile="${output-file}">
			<fileset dir=".">
				<include name="${includes}"/>
			</fileset>
		</junitreport>
	</target>

</project>

