From d813f1ec173e71aec5549b3ed772a1cb0971e224 Mon Sep 17 00:00:00 2001
From: Hans-Christoph Steiner <hans@eds.org>
Date: Thu, 10 Apr 2014 13:05:59 -0400
Subject: [PATCH] run JUnit tests using android-junit-report to get XML output

Jenkins needs some kind of report from the JUnit tests in order to tell
whether the tests succeeded or not.  android-junit-report is a library to do
exactly that.  With this setup, Jenkins should now successfully understand the
status of the JUnit tests, where before it just ran them and ignored the
results
---
 custom_rules.xml                            |  13 +------------
 test/.gitignore                             |   1 +
 test/AndroidManifest.xml                    |   2 +-
 test/ant.properties                         |   1 +
 test/custom_rules.xml                       |  19 +++++++++++++++++++
 test/libs/android-junit-report-1.5.8.README |   5 +++++
 test/libs/android-junit-report-1.5.8.jar    | Bin 0 -> 9202 bytes
 7 files changed, 28 insertions(+), 13 deletions(-)
 create mode 100644 test/custom_rules.xml
 create mode 100644 test/libs/android-junit-report-1.5.8.README
 create mode 100644 test/libs/android-junit-report-1.5.8.jar

diff --git a/custom_rules.xml b/custom_rules.xml
index 944377a7c..7747834aa 100644
--- a/custom_rules.xml
+++ b/custom_rules.xml
@@ -1,16 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project name="custom_rules" default="fetch-test-report">
-
-  <target name="fetch-test-report">
-    <echo>Downloading XML test report…</echo>
-    <mkdir dir="junitreports"/>
-    <exec executable="${adb}" failonerror="true">
-      <arg line="${adb.device.arg}"/>
-      <arg value="pull" />
-      <arg value="/data/data/${tested.manifest.package}/files/junit-report.xml" />
-      <arg value="junitreports/junit-report.xml" />
-    </exec>
-  </target>
+<project name="custom_rules">
 
   <target name="javadoc" description="Generate Javadocs">
     <javadoc sourcepath="${source.dir}"
diff --git a/test/.gitignore b/test/.gitignore
index 22273c3f4..b8d12b236 100644
--- a/test/.gitignore
+++ b/test/.gitignore
@@ -9,3 +9,4 @@
 /*.iml
 out
 /.settings/
+junit-report.xml
diff --git a/test/AndroidManifest.xml b/test/AndroidManifest.xml
index 3562f038e..12eccb755 100644
--- a/test/AndroidManifest.xml
+++ b/test/AndroidManifest.xml
@@ -15,7 +15,7 @@
     the package of org.fdroid.fdroid.  To run the tests use the command:
     "adb shell am instrument -w org.fdroid.fdroid.tests/android.test.InstrumentationTestRunner"
     -->
-    <instrumentation android:name="android.test.InstrumentationTestRunner"
+    <instrumentation android:name="com.zutubi.android.junitreport.JUnitReportTestRunner"
                      android:targetPackage="org.fdroid.fdroid"
                      android:label="Tests for org.fdroid.fdroid" />
 </manifest>
diff --git a/test/ant.properties b/test/ant.properties
index 16244024c..99458bdd5 100644
--- a/test/ant.properties
+++ b/test/ant.properties
@@ -16,3 +16,4 @@
 # The password will be asked during the build when you use the 'release' target.
 
 tested.project.dir=..
+test.runner=com.zutubi.android.junitreport.JUnitReportTestRunner
diff --git a/test/custom_rules.xml b/test/custom_rules.xml
new file mode 100644
index 000000000..ee90d3fac
--- /dev/null
+++ b/test/custom_rules.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="test_custom_rules" default="fetch-test-report">
+
+  <target name="fetch-test-report">
+    <xpath
+        expression="/manifest/@package"
+        input="${tested.project.dir}/AndroidManifest.xml"
+        output="tested.package" />
+    <echo>Downloading XML test report (/data/data/${tested.package}/files/junit-report.xml)…</echo>
+    <mkdir dir="junitreports"/>
+    <exec executable="${adb}" failonerror="true">
+      <arg line="${adb.device.arg}"/>
+      <arg value="pull" />
+      <arg value="/data/data/${tested.package}/files/junit-report.xml" />
+      <arg value="junit-report.xml" />
+    </exec>
+  </target>
+
+</project>
diff --git a/test/libs/android-junit-report-1.5.8.README b/test/libs/android-junit-report-1.5.8.README
new file mode 100644
index 000000000..a89c98533
--- /dev/null
+++ b/test/libs/android-junit-report-1.5.8.README
@@ -0,0 +1,5 @@
+
+Needed for Jenkins to get JUnit reports.
+
+* https://github.com/jsankey/android-junit-report
+* https://github.com/downloads/jsankey/android-junit-report/android-junit-report-1.5.8.jar
diff --git a/test/libs/android-junit-report-1.5.8.jar b/test/libs/android-junit-report-1.5.8.jar
new file mode 100644
index 0000000000000000000000000000000000000000..09e6a2d4f5ffab82e583fe6fc7b327ce6626e95c
GIT binary patch
literal 9202
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
Bv5Wu!

literal 0
HcmV?d00001