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