From a772c4efc280f76bfcf2cc318e20afa1d74237fa Mon Sep 17 00:00:00 2001 From: grechka62 Date: Tue, 14 Mar 2023 13:46:27 +0300 Subject: [PATCH] Fix FailshotRule --- .../java/com/yandex/div/rule/Rules.kt | 2 +- .../java/com/yandex/div/rule/Rules.kt | 2 +- .../com/yandex/test/rules/FailshotRule.kt | 41 +++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 client/android/ui-test-common/src/main/java/com/yandex/test/rules/FailshotRule.kt diff --git a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/Rules.kt b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/Rules.kt index 00aa6fbd6..7df45bff3 100644 --- a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/Rules.kt +++ b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/Rules.kt @@ -3,12 +3,12 @@ package com.yandex.div.rule import com.yandex.test.rules.ClosePopupsRule +import com.yandex.test.rules.FailshotRule import com.yandex.test.rules.LogcatReportRule import com.yandex.test.rules.NoAnimationsRule import com.yandex.test.rules.WindowHierarchyRule import com.yandex.test.util.chain import org.junit.rules.TestRule -import ru.tinkoff.allure.android.FailshotRule fun uiTestRule(innerRule: () -> TestRule): TestRule { return LogcatReportRule() diff --git a/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/rule/Rules.kt b/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/rule/Rules.kt index 72159cc08..9e8260d38 100644 --- a/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/rule/Rules.kt +++ b/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/rule/Rules.kt @@ -5,13 +5,13 @@ package com.yandex.div.rule import com.yandex.divkit.demo.Container import com.yandex.test.idling.waitForIdlingResource import com.yandex.test.rules.ClosePopupsRule +import com.yandex.test.rules.FailshotRule import com.yandex.test.rules.LogcatReportRule import com.yandex.test.rules.NoAnimationsRule import com.yandex.test.rules.WindowHierarchyRule import com.yandex.test.screenshot.ScreenshotRule import com.yandex.test.util.chain import org.junit.rules.TestRule -import ru.tinkoff.allure.android.FailshotRule fun screenshotRule( relativePath: String = "", diff --git a/client/android/ui-test-common/src/main/java/com/yandex/test/rules/FailshotRule.kt b/client/android/ui-test-common/src/main/java/com/yandex/test/rules/FailshotRule.kt new file mode 100644 index 000000000..03d40f488 --- /dev/null +++ b/client/android/ui-test-common/src/main/java/com/yandex/test/rules/FailshotRule.kt @@ -0,0 +1,41 @@ +package com.yandex.test.rules + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.uiautomator.UiDevice +import org.junit.rules.TestRule +import org.junit.runner.Description +import org.junit.runners.model.Statement +import ru.tinkoff.allure.android.AllureAndroidLifecycle +import java.io.File +import java.util.concurrent.TimeUnit + +private const val FILE_NAME = "failshot" +private const val FILE_TYPE = "image/png" +private const val FILE_EXTENSION = ".png" + +class FailshotRule : TestRule { + + private val instrumentation = InstrumentationRegistry.getInstrumentation() + + private val cacheDir get() = instrumentation.targetContext.cacheDir + + private val uiDevice get() = UiDevice.getInstance(instrumentation) + + override fun apply(base: Statement, description: Description) = object : Statement() { + override fun evaluate() { + runCatching { + base.evaluate() + }.onFailure { error -> + failshot() + throw error + } + } + } + + private fun failshot() { + val file = File.createTempFile(FILE_NAME, FILE_TYPE, cacheDir) + uiDevice.waitForIdle(TimeUnit.SECONDS.toMillis(5L)) + uiDevice.takeScreenshot(file) + AllureAndroidLifecycle.addAttachment(FILE_NAME, FILE_TYPE, FILE_EXTENSION, file) + } +}