diff --git a/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/Div2InputHighlightScreenshotTest.kt b/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/Div2InputHighlightScreenshotTest.kt index b1dcda2f8..b2bc7e182 100644 --- a/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/Div2InputHighlightScreenshotTest.kt +++ b/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/Div2InputHighlightScreenshotTest.kt @@ -1,5 +1,7 @@ package com.yandex.div +import android.content.Context +import androidx.test.core.app.ApplicationProvider import com.yandex.div.rule.ActivityParamsTestRule import com.yandex.div.rule.screenshotRule import com.yandex.div.steps.divFocus @@ -9,18 +11,24 @@ import com.yandex.divkit.demo.screenshot.DivScreenshotActivity import com.yandex.test.screenshot.Screenshot import org.junit.Rule import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized +import java.io.File -private const val CASE_PATH = "ui_test_data/input/div_input_highlight.json" +@RunWith(Parameterized::class) +class Div2InputHighlightScreenshotTest(case: String, escapedCase: String) { -class Div2InputHighlightScreenshotTest { + private val caseName = case + .substringAfterLast(File.separator) + .substringBeforeLast(CASE_EXTENSION) private val activityRule = ActivityParamsTestRule( DivScreenshotActivity::class.java, - DivScreenshotActivity.EXTRA_DIV_ASSET_NAME to CASE_PATH + DivScreenshotActivity.EXTRA_DIV_ASSET_NAME to case ) @get:Rule - val rule = screenshotRule(casePath = CASE_PATH) { activityRule } + val rule = screenshotRule(name = caseName, casePath = case) { activityRule } @Test @Screenshot(viewId = R.id.morda_screenshot_div, name = "highlight_color_initial") @@ -34,4 +42,19 @@ class Div2InputHighlightScreenshotTest { divFocus { clickOnTopInput() } divInput { clickOnActionButton() } } + + companion object { + private const val TEST_CASES_PATH = "ui_test_data/input" + private const val CASE_EXTENSION = ".json" + + private const val CASE_NAME = "/div_input_highlight.json" + + private val context: Context = ApplicationProvider.getApplicationContext() + + @JvmStatic + @Parameterized.Parameters(name = "{1}") + fun cases() = AssetEnumerator(context).enumerate(TEST_CASES_PATH) { filename -> + filename.endsWith(CASE_NAME) + }.withEscapedParameter() + } } diff --git a/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/ScreenshotTestPlugin.kt b/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/ScreenshotTestPlugin.kt index a312fab4e..1b32b2432 100644 --- a/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/ScreenshotTestPlugin.kt +++ b/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/ScreenshotTestPlugin.kt @@ -57,6 +57,7 @@ class ScreenshotTestPlugin : Plugin { if (screenshotTests.enableComparison) { task.finalizedBy(CompareScreenshotsTask.NAME) } + task.finalizedBy(ValidateTestResultsTask.NAME) } } diff --git a/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/CompareScreenshotsTask.kt b/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/CompareScreenshotsTask.kt index 77f458cfb..cd4efd2a4 100644 --- a/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/CompareScreenshotsTask.kt +++ b/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/CompareScreenshotsTask.kt @@ -51,7 +51,6 @@ open class CompareScreenshotsTask : DefaultTask() { private fun loadExplicitScreenshotMatchMap() { try { referenceOverrides.load() - referenceOverrides.deleteReferenceFile() } catch (e: IOException) { throw GradleException("Failed to read references file!", e) } diff --git a/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/PullScreenshotsTask.kt b/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/PullScreenshotsTask.kt index 6856574a3..045ef8294 100644 --- a/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/PullScreenshotsTask.kt +++ b/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/PullScreenshotsTask.kt @@ -13,7 +13,6 @@ open class PullScreenshotsTask : DefaultTask() { init { group = "verification" - this.dependsOn(ValidateTestResultsTask.NAME) } @TaskAction diff --git a/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/ReferenceFileReader.kt b/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/ReferenceFileReader.kt index 19d3ec979..edb21f389 100644 --- a/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/ReferenceFileReader.kt +++ b/client/android/screenshot-test-plugin/src/main/java/com/yandex/test/screenshot/tasks/ReferenceFileReader.kt @@ -36,12 +36,6 @@ class ReferenceFileReader(fileDir: File) { fun resolveReferencePath(relativePath: String): String? { return references[relativePath] } - - fun deleteReferenceFile() { - if (referencesFile.exists()) { - referencesFile.delete() - } - } } private data class FileReference( diff --git a/client/android/scripts/ui-tests/run_snapshot_tests.py b/client/android/scripts/ui-tests/run_snapshot_tests.py deleted file mode 100755 index 8c3d5bbdc..000000000 --- a/client/android/scripts/ui-tests/run_snapshot_tests.py +++ /dev/null @@ -1,82 +0,0 @@ -#!python3 -import json -import os -import shutil -from sys import exit - -SUCCESS_CODE = 0 -TERMINATED_CODE = 33280 - -result_msg = { - SUCCESS_CODE: "!!!SUCCESS!!!", - TERMINATED_CODE: "!!!TERMINATED!!!" -} - -PASSED_TEST_CASES_FILE_PATH = \ - "divkit-demo-app/build/reports/screenshots/collected/passed_test_cases.json" - -TEST_CASES_DIR = "../../test_data" -TEMP_DIR = "divkit-demo-app/build/temp_passed_test_cases" - - -def run_snapshot_tests(max_reruns=1): - """ - Used from gradle project root working directory to run snapshot tests. - @:param max_reruns - max number of test restarts in case of failure (default is 3) - """ - - task_name = ":divkit-demo-app:connectedDebugAndroidTest" - run_command = f"./gradlew {task_name} -Pscreenshot-tests -Pscreenshot-comparison" - passed_test_cases = [] - - def exclude_passed_test_cases(): - if os.path.exists(PASSED_TEST_CASES_FILE_PATH): - with (open(PASSED_TEST_CASES_FILE_PATH)) as file: - test_cases = json.load(file) - file.close() - for passed_case in test_cases: - passed_test_cases.append(passed_case) - # move test case to temp dir - test_case_dir = os.path.dirname(os.path.join(TEMP_DIR, passed_case)) - if not os.path.exists(test_case_dir): - os.makedirs(test_case_dir) - os.replace(f"{TEST_CASES_DIR}/{passed_case}", f"{TEMP_DIR}/{passed_case}") - print(f"PASSED: {passed_case}", flush=True) - else: - print(f"\nWARNING: File {PASSED_TEST_CASES_FILE_PATH} does not exist!\n", flush=True) - - result = os.system(run_command) - - rerun = 1 - while result not in [SUCCESS_CODE, TERMINATED_CODE] and rerun <= max_reruns: - print(f"\nRERUN {rerun}/{max_reruns}\n", flush=True) - exclude_passed_test_cases() - result = os.system(run_command) - rerun += 1 - - # Restore test cases from temp dir - print("\nRestore test cases...") - if passed_test_cases: - for test_case in passed_test_cases: - os.replace(f"{TEMP_DIR}/{test_case}", f"{TEST_CASES_DIR}/{test_case}") - shutil.rmtree(TEMP_DIR) - - return result - - -def main(): - project_dir = os.path.normpath( - os.path.join(os.path.dirname(os.path.normpath(__file__)), "../..") - ) - - os.chdir(project_dir) - - result = run_snapshot_tests() - - print(f"\n{result_msg.get(result, '!!!FAILURE!!!')}") - - exit(result) - - -if __name__ == '__main__': - main()