summaryrefslogtreecommitdiffhomepage
path: root/android/e2e/src/main/java
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2022-03-07 10:43:01 +0100
committerAlbin <albin@mullvad.net>2022-04-20 17:09:16 +0200
commit83059632cb2998ec71aff242897dea947ae05fb7 (patch)
tree3b2b98d43c3e1aa5f8d116860ed020ec6d30c5cf /android/e2e/src/main/java
parent24f8b8dd5fb827f71b0ae6bb087bc3c6e56ee120 (diff)
downloadmullvadvpn-83059632cb2998ec71aff242897dea947ae05fb7.tar.xz
mullvadvpn-83059632cb2998ec71aff242897dea947ae05fb7.zip
Add Android e2e screenshot rule
This rule will capture screenshot of any failed test and download it to the host executing the test.
Diffstat (limited to 'android/e2e/src/main/java')
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/EndToEndTest.kt6
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/Constants.kt3
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/misc/CaptureScreenshotOnFailedTestRule.kt31
3 files changed, 40 insertions, 0 deletions
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/EndToEndTest.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/EndToEndTest.kt
index 81a496c4f2..0ff6e0b1ae 100644
--- a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/EndToEndTest.kt
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/EndToEndTest.kt
@@ -5,12 +5,18 @@ import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.runner.AndroidJUnit4
import androidx.test.uiautomator.UiDevice
import net.mullvad.mullvadvpn.e2e.interactor.AppInteractor
+import net.mullvad.mullvadvpn.e2e.misc.CaptureScreenshotOnFailedTestRule
import org.junit.Before
+import org.junit.Rule
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
abstract class EndToEndTest {
+ @Rule
+ @JvmField
+ val rule = CaptureScreenshotOnFailedTestRule()
+
lateinit var device: UiDevice
lateinit var targetContext: Context
lateinit var app: AppInteractor
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/Constants.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/Constants.kt
new file mode 100644
index 0000000000..44b8029799
--- /dev/null
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/Constants.kt
@@ -0,0 +1,3 @@
+package net.mullvad.mullvadvpn.e2e.constant
+
+const val LOG_TAG = "mullvad-e2e"
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/misc/CaptureScreenshotOnFailedTestRule.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/misc/CaptureScreenshotOnFailedTestRule.kt
new file mode 100644
index 0000000000..82c43c958b
--- /dev/null
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/misc/CaptureScreenshotOnFailedTestRule.kt
@@ -0,0 +1,31 @@
+package net.mullvad.mullvadvpn.e2e.misc
+
+import android.util.Log
+import androidx.test.runner.screenshot.BasicScreenCaptureProcessor
+import androidx.test.runner.screenshot.ScreenCaptureProcessor
+import androidx.test.runner.screenshot.Screenshot
+import java.time.LocalDateTime
+import java.time.format.DateTimeFormatter
+import net.mullvad.mullvadvpn.e2e.constant.LOG_TAG
+import org.junit.rules.TestWatcher
+import org.junit.runner.Description
+
+class CaptureScreenshotOnFailedTestRule : TestWatcher() {
+ override fun failed(e: Throwable?, description: Description?) {
+ Log.d(LOG_TAG, "Capturing screenshot of failed test: " + description?.methodName)
+ val timestamp = DateTimeFormatter.ISO_DATE_TIME.format(LocalDateTime.now()).replace(":", "")
+ val screenshotName = "$timestamp-${description?.methodName}"
+ captureScreenshot(screenshotName)
+ }
+
+ private fun captureScreenshot(screenShotName: String) {
+ try {
+ val screenCapture = Screenshot.capture().apply { name = screenShotName }
+ val processorSet: MutableSet<ScreenCaptureProcessor> = HashSet()
+ processorSet.add(BasicScreenCaptureProcessor())
+ screenCapture.process(processorSet)
+ } catch (ex: Exception) {
+ Log.d(LOG_TAG, "Error capturing screenshot: " + ex.message)
+ }
+ }
+}