| <?xml version="1.0" encoding="UTF-8"?> |
| <project name="android_test_rules" default="run-tests"> |
| |
| <import file="android_rules.xml" /> |
| |
| <property name="tested.project.absolute.dir" location="${tested.project.dir}" /> |
| <property name="instrumentation.dir" value="instrumented" /> |
| <property name="instrumentation.absolute.dir" location="${instrumentation.dir}" /> |
| |
| <property name="test.runner" value="android.test.InstrumentationTestRunner" /> |
| <!-- Application package of the tested project extracted from its manifest file --> |
| <xpath input="${tested.project.absolute.dir}/AndroidManifest.xml" |
| expression="/manifest/@package" output="tested.manifest.package" /> |
| |
| <!-- TODO: make it more configurable in the next CL's - now it is default for auto-generated |
| project --> |
| <property name="emma.dump.file" |
| value="/data/data/${tested.manifest.package}/files/coverage.ec" /> |
| |
| <macrodef name="run-tests-helper"> |
| <attribute name="emma.enabled" default="false" /> |
| <element name="extra-instrument-args" optional="yes" /> |
| <sequential> |
| <echo>Running tests ...</echo> |
| <exec executable="${adb}" failonerror="true"> |
| <arg value="shell" /> |
| <arg value="am" /> |
| <arg value="instrument" /> |
| <arg value="-w" /> |
| <arg value="-e" /> |
| <arg value="coverage" /> |
| <arg value="@{emma.enabled}" /> |
| <extra-instrument-args /> |
| <arg value="${manifest.package}/${test.runner}" /> |
| </exec> |
| </sequential> |
| </macrodef> |
| |
| <!-- Invoking this target sets the value of extensible.classpath, which is being added to javac |
| classpath in target 'compile' (android_rules.xml) --> |
| <target name="-set-coverage-classpath"> |
| <property name="extensible.classpath" |
| location="${instrumentation.absolute.dir}/classes" /> |
| </target> |
| |
| <!-- Ensures that tested project is installed on the device before we run the tests. |
| Used for ordinary tests, without coverage measurement --> |
| <target name="-install-tested-project"> |
| <property name="do.not.compile.again" value="true" /> |
| <subant target="install"> |
| <fileset dir="${tested.project.absolute.dir}" includes="build.xml" /> |
| </subant> |
| </target> |
| |
| <target name="run-tests" depends="-install-tested-project, install" |
| description="Runs tests from the package defined in test.package property"> |
| <run-tests-helper /> |
| </target> |
| |
| <target name="-install-instrumented"> |
| <property name="do.not.compile.again" value="true" /> |
| <subant target="-install-with-emma"> |
| <property name="out.absolute.dir" value="${instrumentation.absolute.dir}" /> |
| <fileset dir="${tested.project.absolute.dir}" includes="build.xml" /> |
| </subant> |
| </target> |
| |
| <target name="coverage" depends="-set-coverage-classpath, -install-instrumented, install" |
| description="Runs the tests against the instrumented code and generates |
| code coverage report"> |
| <run-tests-helper emma.enabled="true"> |
| <extra-instrument-args> |
| <arg value="-e" /> |
| <arg value="coverageFile" /> |
| <arg value="${emma.dump.file}" /> |
| </extra-instrument-args> |
| </run-tests-helper> |
| <echo>Downloading coverage file into project directory...</echo> |
| <exec executable="${adb}" failonerror="true"> |
| <arg value="pull" /> |
| <arg value="${emma.dump.file}" /> |
| <arg value="coverage.ec" /> |
| </exec> |
| <echo>Extracting coverage report...</echo> |
| <emma> |
| <report sourcepath="${tested.project.absolute.dir}/${source.dir}" |
| verbosity="${verbosity}"> |
| <!-- TODO: report.dir or something like should be introduced if necessary --> |
| <infileset dir="."> |
| <include name="coverage.ec" /> |
| <include name="coverage.em" /> |
| </infileset> |
| <!-- TODO: reports in other, indicated by user formats --> |
| <html outfile="coverage.html" /> |
| </report> |
| </emma> |
| <echo>Cleaning up temporary files...</echo> |
| <delete dir="${instrumentation.absolute.dir}" /> |
| <delete file="coverage.ec" /> |
| <delete file="coverage.em" /> |
| <echo>Saving the report file in ${basedir}/coverage/coverage.html</echo> |
| </target> |
| |
| </project> |