blob: f6da9ab4edecaf28d2263fe14f273e9569dd7b14 [file] [log] [blame]
<project name="macro-imports">
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="../../tests/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<property environment="env"/>
<!--
Macro for calling the JSR 308 Java compiler with a checker
for the demo code.
-->
<macrodef name="run-demo">
<attribute name="srcpath"/>
<attribute name="files"/>
<attribute name="checker"/>
<attribute name="lint" default="none"/>
<attribute name="custom.lib" default=""/>
<sequential>
<java fork="true" failonerror="true"
classpath="${checker.lib}"
classname="org.checkerframework.framework.util.CheckerMain"
taskname="javac-cf">
<!-- <arg value="-version"/> -->
<arg value="-g"/>
<arg value="-classpath"/>
<arg value="${checker.lib}:@{custom.lib}"/>
<arg value="-sourcepath"/>
<arg value="@{srcpath}"/>
<arg value="-processor"/>
<arg value="@{checker}"/>
<arg value="-implicit:none"/>
<arg value="-source"/>
<arg value="1.8"/>
<arg value="-encoding"/>
<arg value="utf-8"/>
<arg value="-Xprefer:newer"/>
<arg line="@{files}"/>
<arg value="-Alint=@{lint}"/>
<arg value="-ApermitMissingJdk"/>
<arg value="-AsuppressWarnings=purity"/>
</java>
</sequential>
</macrodef>
<macrodef name="run-demo-basic">
<attribute name="srcpath"/>
<attribute name="files"/>
<attribute name="checker" default="org.checkerframework.common.subtyping.SubtypingChecker"/>
<attribute name="lint" default="none"/>
<attribute name="quals" default=""/>
<attribute name="custom.lib" default=""/>
<sequential>
<java fork="true" failonerror="true"
classpath="${checker.lib}"
classname="org.checkerframework.framework.util.CheckerMain"
taskname="javac-cf">
<!-- <arg value="-version"/> -->
<arg value="-g"/>
<arg value="-classpath"/>
<arg value="@{custom.lib}"/>
<arg value="-sourcepath"/>
<arg value="@{srcpath}"/>
<arg value="-processor"/>
<arg value="@{checker}"/>
<arg value="-implicit:none"/>
<arg value="-source"/>
<arg value="1.8"/>
<arg value="-encoding"/>
<arg value="utf-8"/>
<arg value="-Xprefer:newer"/>
<arg line="@{files}"/>
<arg value="-Alint=@{lint}"/>
<arg value="-Aquals=@{quals}"/>
</java>
</sequential>
</macrodef>
<!-- Pass arguments in the order: expected, actual. -->
<macrodef name="my-diff">
<attribute name="file1"/>
<attribute name="file2"/>
<attribute name="ignore-matching-lines"/>
<sequential>
<exec executable="diff" outputproperty="diff-output" resultproperty="diff-result"> <!-- not failonerror="true because that prevents user-friendly error message below -->
<!-- <arg value="-q"/> -->
<arg value="-I"/>
<arg value="@{ignore-matching-lines}"/>
<!-- ignore lint results -->
<arg value="-I"/>
<arg value="Note:"/>
<!-- ignore ant headers and empty lines -->
<arg value="-I"/>
<arg value="^ *$"/>
<arg value="-I"/>
<arg value="^[^ ]*:$"/>
<!-- ignore version of Checker Framework javac -->
<arg value="-I"/>
<arg value="^javac "/>
<!-- ignore paths -->
<arg value="-I"/>
<arg value=".java"/>
<arg value="-I"/>
<arg value=".xml"/>
<arg value="-I"/>
<arg value="Deleting directory"/>
<arg value="-I"/>
<arg value="Created dir:"/>
<arg value="-I"/>
<arg value="Compiling 2 source files to"/>
<!-- the files to compare -->
<arg line="@{file1}"/>
<arg line="@{file2}"/>
</exec>
<if>
<isfailure code="${diff-result}" />
<then>
<loadfile property="results.expected" srcFile="@{file1}"/>
<loadfile property="results.actual" srcFile="@{file2}"/>
<fail message="Error in the demo.${line.separator}
${line.separator}Expected:
${line.separator}=====================================================================
${line.separator}${results.expected}
${line.separator}=====================================================================
${line.separator}
${line.separator}but found:
${line.separator}=====================================================================
${line.separator}${results.actual}
${line.separator}=====================================================================
${line.separator}
${line.separator}Diff output is:
${line.separator}=====================================================================
${line.separator}${diff-output}
${line.separator}=====================================================================
${line.separator}
${line.separator}NOTE: Did you run 'ant touch-files'?"/>
</then>
</if>
</sequential>
</macrodef>
<macrodef name="my-ant">
<attribute name="task" default=""/>
<attribute name="logfile" default=""/>
<sequential>
<exec executable="ant" failonerror="false"
resultproperty="property.ignore">
<arg value="-e"/>
<arg value="-l"/>
<arg value="@{logfile}"/>
<arg value="@{task}"/>
</exec>
<sleep milliseconds="100"/> <!--sometimes output gets truncated -->
</sequential>
</macrodef>
<macrodef name="check-demo">
<attribute name="patchfile"/>
<attribute name="task"/>
<attribute name="expected"/>
<sequential>
<!-- Apply the patch -->
<patch patchfile="@{patchfile}" quiet="yes" strip="0" failonerror="true"/>
<my-ant task="@{task}" logfile="output.tmp"/>
<my-diff file1="@{expected}" file2="output.tmp"
ignore-matching-lines="Total time"/>
<delete file="output.tmp"/>
</sequential>
</macrodef>
<macrodef name="check-demo-common">
<attribute name="target"/>
<attribute name="step"/>
<attribute name="dir" default="testdemo"/>
<sequential>
<echo message="Checking demo target=@{target} step=@{step}"/>
<check-demo
task="@{target}"
patchfile="@{dir}/@{target}.@{step}.patch"
expected="@{dir}/@{target}.@{step}.expected"/>
</sequential>
</macrodef>
<macrodef name="revert-demo">
<attribute name="target"/>
<attribute name="step"/>
<attribute name="dir" default="testdemo"/>
<sequential>
<patch patchfile="@{dir}/@{target}.@{step}.patch" quiet="yes" reverse="yes" strip="0" failonerror="true"/>
</sequential>
</macrodef>
</project>