<!--
eclat.xml
Author: Christoph Csallner
2005-08-24 Adapted from build.xml
-->

<project name="Groovy" default="archive" basedir=".">
  <description>
		Build and Eclat testee.
	</description>
	
  <!--Environment-->
	<property name="daikon.version" value="4.1.6-fix-2"/>
	<property name="eclat.version" value="1.1"/>
	<property name="daikon.jar" value="c:\lib\daikon-${daikon.version}.jar"/>
	<property name="eclat.jar" value="c:\lib\eclat-${eclat.version}.jar"/>
	<!--c:\lib\eclat-${eclat.version}-cnc.jar requires that daikon-config.txt is in
	the ${inferee.exec} directory-->

	<!--provides loop-->
	<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="c:\lib\ant-contrib-1.0b2.jar"/>
	
  <!--Project-->
	<property name="classpath" value="c:\lib\xml-apis-1.0.b2.jar;c:\lib\commons-logging-1.0.3.jar;c:\lib\asm-1.3.4.jar;c:\lib\asm-util-1.3.4.jar;c:\lib\commons-cli-1.0.jar;c:\lib\mockobjects-core-0.09.jar;c:\lib\junit-3.8.1.jar;c:\lib\servletapi-2.3.jar;c:\lib\ant.jar;c:\lib\bsf-2.3.0-rc1.jar;c:\lib\xerces-2.4.0.jar;c:\lib\classworlds-1.0-rc2.jar;c:\lib\mx4j-2.0-beta-1.jar;c:\lib\openejb-loader-0.9.2.jar;c:\lib\axion-1.0-M3-dev.jar;c:\lib\commons-collections-3.0-dev2.jar;c:\lib\regexp-1.2.jar;c:\lib\ant-optional-1.5.jar"/>		
	<property name="bin" value="cnc-bin"/>  <!--Use CnC compilation-->
	<property name="inferee.exec" value="groovy-1.0-beta-1-src"/>
	<property name="instrumented" value="${inferee.exec}/eclat-scratch/instrumented-classes"/>
	<property name="test.src" value="${inferee.exec}/eclat-src"/>
	<property name="testee.list.filename" value="testees.txt"/>

	<path id="test.classpath">
		<pathelement location="c:\lib"/>  <!--Contains ChicoryPremain.jar-->
		<pathelement location="${daikon.jar}"/>
		<pathelement location="${eclat.jar}"/>
		<pathelement path="${classpath}"/>
		<pathelement location="${bin}"/>
	</path>


	<!--init-->
	<target name="init">
		<tstamp>
			<format property="DSTAMP" pattern="yyyy-MM-dd"/>
		</tstamp>
		<basename property="basedir.basename" file="${basedir}"/>
		<property name="run.id" value="${basedir.basename}-eclat-${eclat.version}-${DSTAMP}-${TSTAMP}"/>
		<property name="eclat.out" value="${run.id}.eclat.txt"/>		
		<property name="test.zip" value="${run.id}.zip"/>

		<!--package/Testee.java package/Testee.java-->
		<loadfile property="testee.list.ws" srcFile="${testee.list.filename}">
			<filterchain>
				<tokenfilter>
					<filetokenizer/>
					<trim/>
					<replaceregex pattern="(\s)+(\S)" replace=" \2" flags="g"/>
				</tokenfilter>
			</filterchain>
		</loadfile>
		<filelist id="testee.filelist" dir="${basedir}" files="${testee.list.ws}"/>
	</target>
	
	
	<!--eclat-->
	<target name="eclat" depends="init">
		<pathconvert property="testee.list.eclat" refid="testee.filelist" pathsep=" ">
			<globmapper from="${basedir}${file.separator}*" to="--test src/main/*"/>
		</pathconvert>  <!-- -test src/main/package/Testee.java-->
	
			<java
					classname="eclat.textui.Main"
					fork="true"
					dir="${inferee.exec}"
					output="${eclat.out}"
					maxmemory="256m"
					args="generate-inputs
							--create-regression-suite
							--verbose
							--classifier-confidence-threshold 0
							--pool-addition-policy normal-no-vios
							--generation-strategy exhaustive
							--time-limit-millis 500000
							--use-existing-inv-file C:\cs\jcrasher\subjects\groovy\JUnitAll-0.8.3-OK.inv.gz
							${testee.list.eclat}
							JUnitAll">
							<!--
							- -generation-strategy hybrid
							- -hybrid-generation-input-limit 10000
							-->
			<classpath refid="test.classpath"/>
		</java>
	</target>
	
	
		<!--instrumented.compile
		if compilation within eclat crashes with out of memory error-->
	<target name="instrumented.compile" depends="init">
	  <!--package/Testee.java, package/Testee.java-->
		<pathconvert property="instrumented.list.comma" refid="testee.filelist" pathsep=",">
			<globmapper from="${basedir}${file.separator}*.java" to="*.java"/>
		</pathconvert>
		
		<for param="instrumented.file" list="${instrumented.list.comma}">
			<sequential>
				<javac srcdir="${instrumented}" destdir="${instrumented}"
						classpathref="test.classpath"
						debug="true"
						includes="@{instrumented.file}"/>
			</sequential>
		</for>
	</target>
	
	
		<!--archive
	Zip this file, the generated test cases, and the results-->
	<target name="archive" depends="eclat">
		<zip destfile="${test.zip}">
			<fileset dir="." includes="eclat.xml,${testee.list.filename}"/>
			<fileset dir="." includes="${inferee.exec}/src/test/JUnitAll.java"/>  <!--inferee-->
			<fileset dir="." includes="${test.src}/"/>  <!--EclatTest.java and invariant checks-->
			<fileset dir="." includes="${eclat.out}"/>
			<fileset dir="." includes="${inferee.exec}/eclat-misc/JUnitAll.allinputs.txt.zip"/>
		</zip>
	</target>
	
	
	<!--clean-->
	<target name="clean"	description="delete all generated files except the archive-bundle">
		<delete>
	  	<fileset dir="${inferee.exec}/eclat-scratch">
	  		<patternset excludes="instrumented-classes/"/>
	  	</fileset>		
		</delete>	
		<delete dir="${inferee.exec}/eclat-src"/>
		<delete dir="${inferee.exec}/eclat-misc"/>
		<delete dir="groovy-1.0-beta-1-src/target"/>  <!--Groovy ONLY-->
		<delete>
	  	<fileset dir="${basedir}">  <!--deletes . if nested patternsets omitted-->
	  		<patternset includes="*.eclat.txt"/>
	  	</fileset>		
		</delete>
	</target>			
</project>
