OSDN Git Service

merge from tools-r6
[android-x86/sdk.git] / files / ant_test_rules_r2.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project name="android_test_rules" default="run-tests">
3
4     <import file="ant_rules_r2.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>