1 <?xml version="1.0" encoding="UTF-8"?>
2 <project name="android_test_rules" default="run-tests">
4 <import file="ant_rules_r2.xml" />
6 <property name="tested.project.absolute.dir" location="${tested.project.dir}" />
7 <property name="instrumentation.dir" value="instrumented" />
8 <property name="instrumentation.absolute.dir" location="${instrumentation.dir}" />
10 <property name="test.runner" value="android.test.InstrumentationTestRunner" />
11 <!-- Application package of the tested project extracted from its manifest file -->
12 <xpath input="${tested.project.absolute.dir}/AndroidManifest.xml"
13 expression="/manifest/@package" output="tested.manifest.package" />
15 <!-- TODO: make it more configurable in the next CL's - now it is default for auto-generated
17 <property name="emma.dump.file"
18 value="/data/data/${tested.manifest.package}/files/coverage.ec" />
20 <macrodef name="run-tests-helper">
21 <attribute name="emma.enabled" default="false" />
22 <element name="extra-instrument-args" optional="yes" />
24 <echo>Running tests ...</echo>
25 <exec executable="${adb}" failonerror="true">
28 <arg value="instrument" />
31 <arg value="coverage" />
32 <arg value="@{emma.enabled}" />
33 <extra-instrument-args />
34 <arg value="${manifest.package}/${test.runner}" />
39 <!-- Invoking this target sets the value of extensible.classpath, which is being added to javac
40 classpath in target 'compile' (android_rules.xml) -->
41 <target name="-set-coverage-classpath">
42 <property name="extensible.classpath"
43 location="${instrumentation.absolute.dir}/classes" />
46 <!-- Ensures that tested project is installed on the device before we run the tests.
47 Used for ordinary tests, without coverage measurement -->
48 <target name="-install-tested-project">
49 <property name="do.not.compile.again" value="true" />
50 <subant target="install">
51 <fileset dir="${tested.project.absolute.dir}" includes="build.xml" />
55 <target name="run-tests" depends="-install-tested-project, install"
56 description="Runs tests from the package defined in test.package property">
60 <target name="-install-instrumented">
61 <property name="do.not.compile.again" value="true" />
62 <subant target="-install-with-emma">
63 <property name="out.absolute.dir" value="${instrumentation.absolute.dir}" />
64 <fileset dir="${tested.project.absolute.dir}" includes="build.xml" />
68 <target name="coverage" depends="-set-coverage-classpath, -install-instrumented, install"
69 description="Runs the tests against the instrumented code and generates
70 code coverage report">
71 <run-tests-helper emma.enabled="true">
72 <extra-instrument-args>
74 <arg value="coverageFile" />
75 <arg value="${emma.dump.file}" />
76 </extra-instrument-args>
78 <echo>Downloading coverage file into project directory...</echo>
79 <exec executable="${adb}" failonerror="true">
81 <arg value="${emma.dump.file}" />
82 <arg value="coverage.ec" />
84 <echo>Extracting coverage report...</echo>
86 <report sourcepath="${tested.project.absolute.dir}/${source.dir}"
87 verbosity="${verbosity}">
88 <!-- TODO: report.dir or something like should be introduced if necessary -->
90 <include name="coverage.ec" />
91 <include name="coverage.em" />
93 <!-- TODO: reports in other, indicated by user formats -->
94 <html outfile="coverage.html" />
97 <echo>Cleaning up temporary files...</echo>
98 <delete dir="${instrumentation.absolute.dir}" />
99 <delete file="coverage.ec" />
100 <delete file="coverage.em" />
101 <echo>Saving the report file in ${basedir}/coverage/coverage.html</echo>