blob: dbad32dc1f341b24a7d49c4ac242196f10a61421 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<project name="android_test_rules" default="run-tests">
<import file="android_rules.xml" />
<!-- Existence of this property in build.properties or build.xml is an assertion for the test
project
<property name="tested.project.dir" value=".." /> -->
<property name="tested.project.absolute.dir" location="${tested.project.dir}" />
<property name="instrumentation.dir" value="instru" />
<property name="instrumentation.absolute.dir" location="${instrumentation.dir}" />
<property name="test.runner" value="android.test.InstrumentationTestRunner" />
<property name="application.package.to.instrument" value="${application.package}.tests" />
<!-- Enables adding tested project classes location to test project classpath -->
<property name="extensible.classpath" value="${tested.project.absolute.dir}/bin/classes" />
<!-- TODO: make it more configurable in the next CL's - now it is default for auto-generated
project -->
<property name="emma.dump.file" value="/data/data/${application.package}/files/coverage.ec" />
<!-- Emma configuration -->
<property name="emma.dir" value="${sdk.dir}/tools/lib" />
<path id="emma.lib">
<pathelement location="${emma.dir}/emma.jar" />
<pathelement location="${emma.dir}/emma_ant.jar" />
</path>
<taskdef resource="emma_ant.properties" classpathref="emma.lib" />
<!-- End of emma configuration -->
<!-- Runs 'compile' target for tested project -->
<target name="-compile-tested-project">
<subant target="compile">
<fileset dir="${tested.project.absolute.dir}" includes="build.xml" />
</subant>
</target>
<!-- Emma-instruments tested project classes (compiles the tested project if necessary)
and writes instrumented classes to ${instrumentation.absolute.dir}/classes -->
<target name="-emma-instrument" depends="-compile-tested-project">
<echo>Instrumenting classes from ${instrumentation.dir}/${out.dir}/classes...</echo>
<!-- It only instruments class files, not any external libs -->
<emma enabled="true">
<instr verbosity="verbose"
mode="copy"
instrpath="${tested.project.absolute.dir}/${out.dir}/classes"
outdir="${instrumentation.absolute.dir}/classes">
</instr>
<!-- TODO: exclusion filters on R*.class and allowing custom exclusion from
user defined file -->
</emma>
</target>
<!-- Dexes emma-instrumented classes -->
<target name="-dex-instrumented" depends="-emma-instrument">
<dex-helper out.absolute.dir="${instrumentation.absolute.dir}/classes"
out.dex.file="${instrumentation.absolute.dir}/${dex.file.name}">
<external-libs>
<fileset dir="${external.libs.dir}" includes="*.jar" />
<fileset dir="${emma.dir}">
<include name="emma_device.jar" />
</fileset>
</external-libs>
</dex-helper>
</target>
<!-- Installs instrumented package on the default emulator/device -->
<target name="-install-instrumented" depends="-dex-instrumented">
<subant target="-install-no-dex">
<property name="out.absolute.dir" value="${instrumentation.absolute.dir}" />
<property name="external.jars" location="${emma.dir}/emma_device.jar" />
<fileset dir="${tested.project.absolute.dir}" includes="build.xml" />
</subant>
</target>
<macrodef name="run-tests-helper">
<attribute name="emma.enabled" default="false" />
<sequential>
<echo>Running tests ...</echo>
<exec executable="${adb}" failonerror="true">
<arg value="shell" />
<arg value="am" />
<arg value="instrument" />
<arg value="-w" />
<arg value="-e" />
<arg value="coverage" />
<arg value="@{emma.enabled}" />
<arg value="${application.package.to.instrument}/${test.runner}" />
</exec>
</sequential>
</macrodef>
<!-- Ensures that tested project is installed on the device before we run the tests.
Used for ordinary tests, without coverage measurement -->
<target name="-install-tested-project">
<subant target="install">
<fileset dir="${tested.project.absolute.dir}" includes="build.xml" />
</subant>
</target>
<target name="run-tests" depends="-install-tested-project, install"
description="Runs tests from the package defined in test.package property">
<run-tests-helper />
</target>
<target name="coverage" depends="-install-instrumented, install"
description="Runs test on instrumented code and generates code coverage report">
<run-tests-helper emma.enabled="true" />
<echo>Downloading coverage file into project directory...</echo>
<exec executable="${adb}" failonerror="true">
<arg value="pull" />
<arg value="${emma.dump.file}" />
<arg value="coverage.ec" />
</exec>
<echo>Extracting coverage report...</echo>
<emma>
<report sourcepath="${tested.project.absolute.dir}/${source.dir}"
verbosity="verbose">
<!-- TODO: report.dir or something like should be introduced if necessary -->
<infileset dir=".">
<include name="coverage.ec" />
<include name="coverage.em" />
</infileset>
<!-- TODO: reports in other, indicated by user formats -->
<html outfile="coverage.html" />
</report>
</emma>
</target>
</project>