blob: 78503aef7f585893570c01386d7a8f6612c53e7d [file] [log] [blame]
Piotr Gurgulb0b67262009-09-01 21:58:52 -07001<?xml version="1.0" encoding="UTF-8"?>
2<project name="android_test_rules" default="run-tests">
3
4 <import file="android_rules.xml" />
5
Piotr Gurgulb0b67262009-09-01 21:58:52 -07006 <property name="tested.project.absolute.dir" location="${tested.project.dir}" />
Piotr Gurgule9e8f8c2009-09-14 20:42:13 -07007 <property name="instrumentation.dir" value="instrumented" />
Piotr Gurgulb0b67262009-09-01 21:58:52 -07008 <property name="instrumentation.absolute.dir" location="${instrumentation.dir}" />
9
10 <property name="test.runner" value="android.test.InstrumentationTestRunner" />
Piotr Gurgul0b61bf62009-09-21 21:40:15 -070011 <!-- Application package of the tested project extracted from its manifest file -->
12 <xpath input="${tested.project.absolute.dir}/AndroidManifest.xml"
Piotr Gurgul41fb47d2009-09-22 17:28:26 -070013 expression="/manifest/@package" output="tested.manifest.package" />
Piotr Gurgulb0b67262009-09-01 21:58:52 -070014
Piotr Gurgulb0b67262009-09-01 21:58:52 -070015 <!-- TODO: make it more configurable in the next CL's - now it is default for auto-generated
16 project -->
Piotr Gurgul0b61bf62009-09-21 21:40:15 -070017 <property name="emma.dump.file"
Piotr Gurgul41fb47d2009-09-22 17:28:26 -070018 value="/data/data/${tested.manifest.package}/files/coverage.ec" />
Piotr Gurgulb0b67262009-09-01 21:58:52 -070019
Piotr Gurgulb0b67262009-09-01 21:58:52 -070020 <macrodef name="run-tests-helper">
21 <attribute name="emma.enabled" default="false" />
Piotr Gurgul47d7bdb2009-09-16 13:29:07 -070022 <element name="extra-instrument-args" optional="yes" />
Piotr Gurgulb0b67262009-09-01 21:58:52 -070023 <sequential>
24 <echo>Running tests ...</echo>
25 <exec executable="${adb}" failonerror="true">
26 <arg value="shell" />
Piotr Gurgul47d7bdb2009-09-16 13:29:07 -070027 <arg value="am" />
28 <arg value="instrument" />
29 <arg value="-w" />
Piotr Gurgulb0b67262009-09-01 21:58:52 -070030 <arg value="-e" />
31 <arg value="coverage" />
Piotr Gurgul47d7bdb2009-09-16 13:29:07 -070032 <arg value="@{emma.enabled}" />
33 <extra-instrument-args />
Piotr Gurgul41fb47d2009-09-22 17:28:26 -070034 <arg value="${manifest.package}/${test.runner}" />
Piotr Gurgulb0b67262009-09-01 21:58:52 -070035 </exec>
36 </sequential>
37 </macrodef>
38
Piotr Gurgule9e8f8c2009-09-14 20:42:13 -070039 <!-- 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" />
44 </target>
45
Piotr Gurgulb0b67262009-09-01 21:58:52 -070046 <!-- 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">
Piotr Gurgul11a1b682009-09-24 18:17:22 -070049 <property name="do.not.compile.again" value="true" />
Piotr Gurgulb0b67262009-09-01 21:58:52 -070050 <subant target="install">
51 <fileset dir="${tested.project.absolute.dir}" includes="build.xml" />
52 </subant>
53 </target>
54
Piotr Gurgul11a1b682009-09-24 18:17:22 -070055 <target name="run-tests" depends="-install-tested-project, install"
Piotr Gurgulb0b67262009-09-01 21:58:52 -070056 description="Runs tests from the package defined in test.package property">
57 <run-tests-helper />
58 </target>
59
Piotr Gurgule9e8f8c2009-09-14 20:42:13 -070060 <target name="-install-instrumented">
Piotr Gurgul11a1b682009-09-24 18:17:22 -070061 <property name="do.not.compile.again" value="true" />
Piotr Gurgule9e8f8c2009-09-14 20:42:13 -070062 <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" />
65 </subant>
66 </target>
67
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">
Piotr Gurgul47d7bdb2009-09-16 13:29:07 -070071 <run-tests-helper emma.enabled="true">
72 <extra-instrument-args>
73 <arg value="-e" />
74 <arg value="coverageFile" />
75 <arg value="${emma.dump.file}" />
76 </extra-instrument-args>
77 </run-tests-helper>
Piotr Gurgulb0b67262009-09-01 21:58:52 -070078 <echo>Downloading coverage file into project directory...</echo>
79 <exec executable="${adb}" failonerror="true">
80 <arg value="pull" />
81 <arg value="${emma.dump.file}" />
82 <arg value="coverage.ec" />
83 </exec>
84 <echo>Extracting coverage report...</echo>
85 <emma>
86 <report sourcepath="${tested.project.absolute.dir}/${source.dir}"
Piotr Gurgulb11d00a2009-09-17 16:59:28 -070087 verbosity="${verbosity}">
Piotr Gurgulb0b67262009-09-01 21:58:52 -070088 <!-- TODO: report.dir or something like should be introduced if necessary -->
89 <infileset dir=".">
90 <include name="coverage.ec" />
91 <include name="coverage.em" />
92 </infileset>
93 <!-- TODO: reports in other, indicated by user formats -->
94 <html outfile="coverage.html" />
95 </report>
96 </emma>
Piotr Gurgul73b45f82009-09-16 10:43:19 -070097 <echo>Cleaning up temporary files...</echo>
98 <delete dir="${instrumentation.absolute.dir}" />
99 <delete file="coverage.ec" />
100 <delete file="coverage.em" />
Piotr Gurgul7d63a4a2009-09-24 20:58:35 -0700101 <echo>Saving the report file in ${basedir}/coverage/coverage.html</echo>
Piotr Gurgulb0b67262009-09-01 21:58:52 -0700102 </target>
103
104</project>