• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" encoding="UTF-8"?>
2<project name="android_test_rules" default="run-tests">
3
4    <import file="android_rules.xml" />
5
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}" />
9
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" />
14
15    <!-- TODO: make it more configurable in the next CL's - now it is default for auto-generated
16         project -->
17    <property name="emma.dump.file"
18                  value="/data/data/${tested.manifest.package}/files/coverage.ec" />
19
20    <macrodef name="run-tests-helper">
21        <attribute name="emma.enabled" default="false" />
22        <element name="extra-instrument-args" optional="yes" />
23        <sequential>
24            <echo>Running tests ...</echo>
25            <exec executable="${adb}" failonerror="true">
26                <arg value="shell" />
27                <arg value="am" />
28                   <arg value="instrument" />
29                <arg value="-w" />
30                <arg value="-e" />
31                   <arg value="coverage" />
32                   <arg value="@{emma.enabled}" />
33                <extra-instrument-args />
34                <arg value="${manifest.package}/${test.runner}" />
35            </exec>
36        </sequential>
37    </macrodef>
38
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" />
44    </target>
45
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" />
52        </subant>
53    </target>
54
55    <target name="run-tests" depends="-install-tested-project, install"
56                description="Runs tests from the package defined in test.package property">
57        <run-tests-helper />
58    </target>
59
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" />
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">
71        <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>
78        <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}"
87                              verbosity="${verbosity}">
88                <!-- 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>
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>
102    </target>
103
104</project>
105