diff options
Diffstat (limited to 'scripts/android_test_rules.xml')
-rw-r--r-- | scripts/android_test_rules.xml | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/scripts/android_test_rules.xml b/scripts/android_test_rules.xml new file mode 100644 index 0000000..dbad32d --- /dev/null +++ b/scripts/android_test_rules.xml @@ -0,0 +1,131 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="android_test_rules" default="run-tests"> + + <import file="android_rules.xml" /> + + <!-- Existence of this property in build.properties or build.xml is an assertion for the test + project + <property name="tested.project.dir" value=".." /> --> + <property name="tested.project.absolute.dir" location="${tested.project.dir}" /> + <property name="instrumentation.dir" value="instru" /> + <property name="instrumentation.absolute.dir" location="${instrumentation.dir}" /> + + <property name="test.runner" value="android.test.InstrumentationTestRunner" /> + <property name="application.package.to.instrument" value="${application.package}.tests" /> + + <!-- Enables adding tested project classes location to test project classpath --> + <property name="extensible.classpath" value="${tested.project.absolute.dir}/bin/classes" /> + + <!-- 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/${application.package}/files/coverage.ec" /> + + <!-- Emma configuration --> + <property name="emma.dir" value="${sdk.dir}/tools/lib" /> + <path id="emma.lib"> + <pathelement location="${emma.dir}/emma.jar" /> + <pathelement location="${emma.dir}/emma_ant.jar" /> + </path> + <taskdef resource="emma_ant.properties" classpathref="emma.lib" /> + <!-- End of emma configuration --> + + <!-- Runs 'compile' target for tested project --> + <target name="-compile-tested-project"> + <subant target="compile"> + <fileset dir="${tested.project.absolute.dir}" includes="build.xml" /> + </subant> + </target> + + <!-- Emma-instruments tested project classes (compiles the tested project if necessary) + and writes instrumented classes to ${instrumentation.absolute.dir}/classes --> + <target name="-emma-instrument" depends="-compile-tested-project"> + <echo>Instrumenting classes from ${instrumentation.dir}/${out.dir}/classes...</echo> + <!-- It only instruments class files, not any external libs --> + <emma enabled="true"> + <instr verbosity="verbose" + mode="copy" + instrpath="${tested.project.absolute.dir}/${out.dir}/classes" + outdir="${instrumentation.absolute.dir}/classes"> + </instr> + <!-- TODO: exclusion filters on R*.class and allowing custom exclusion from + user defined file --> + </emma> + </target> + + <!-- Dexes emma-instrumented classes --> + <target name="-dex-instrumented" depends="-emma-instrument"> + <dex-helper out.absolute.dir="${instrumentation.absolute.dir}/classes" + out.dex.file="${instrumentation.absolute.dir}/${dex.file.name}"> + <external-libs> + <fileset dir="${external.libs.dir}" includes="*.jar" /> + <fileset dir="${emma.dir}"> + <include name="emma_device.jar" /> + </fileset> + </external-libs> + </dex-helper> + </target> + + <!-- Installs instrumented package on the default emulator/device --> + <target name="-install-instrumented" depends="-dex-instrumented"> + <subant target="-install-no-dex"> + <property name="out.absolute.dir" value="${instrumentation.absolute.dir}" /> + <property name="external.jars" location="${emma.dir}/emma_device.jar" /> + <fileset dir="${tested.project.absolute.dir}" includes="build.xml" /> + </subant> + </target> + + <macrodef name="run-tests-helper"> + <attribute name="emma.enabled" default="false" /> + <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}" /> + <arg value="${application.package.to.instrument}/${test.runner}" /> + </exec> + </sequential> + </macrodef> + + <!-- 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"> + <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="coverage" depends="-install-instrumented, install" + description="Runs test on instrumented code and generates code coverage report"> + <run-tests-helper emma.enabled="true" /> + <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="verbose"> + <!-- 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> + </target> + +</project> |