diff --git a/.github/workflows/screenShotTest.yml b/.github/workflows/screenShotTest.yml index b0f6d78ea1..0f493b462f 100644 --- a/.github/workflows/screenShotTest.yml +++ b/.github/workflows/screenShotTest.yml @@ -8,7 +8,7 @@ permissions: contents: read pull-requests: write -concurrency: +concurrency: group: screenshot-test-${{ github.head_ref || github.run_id }} cancel-in-progress: true @@ -73,6 +73,8 @@ jobs: run: scripts/deleteOldComments.sh "${{ matrix.color }}-${{ matrix.scheme }}" "Screenshot" ${{github.event.number}} - name: Run screenshot tests + env: + SHOT_TEST: "true" uses: reactivecircus/android-emulator-runner@6b0df4b0efb23bb0ec63d881db79aefbc976e4b2 # v2.30.1 with: api-level: ${{ matrix.api-level }} diff --git a/app/build.gradle b/app/build.gradle index 1c94171f13..597c229cfb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,6 @@ -import com.github.spotbugs.snom.SpotBugsTask import com.github.spotbugs.snom.Confidence import com.github.spotbugs.snom.Effort +import com.github.spotbugs.snom.SpotBugsTask import org.gradle.internal.jvm.Jvm buildscript { @@ -32,7 +32,12 @@ apply plugin: 'pmd' apply from: "$rootProject.projectDir/jacoco.gradle" apply plugin: 'com.github.spotbugs' apply plugin: 'io.gitlab.arturbosch.detekt' -apply plugin: 'shot' + +// needed to make renovate run without shot, as shot requires Android SDK +// https://github.com/pedrovgs/Shot/issues/300 +if (shotTest) { + apply plugin: 'shot' +} apply plugin: 'com.google.devtools.ksp' @@ -99,7 +104,11 @@ android { } // arguments to be passed to functional tests - testInstrumentationRunner "com.nextcloud.client.ScreenshotTestRunner" + if (shotTest) { + testInstrumentationRunner "com.karumi.shot.ShotTestRunner" + } else { + testInstrumentationRunner "com.nextcloud.client.TestRunner" + } testInstrumentationRunnerArgument "TEST_SERVER_URL", "${NC_TEST_SERVER_BASEURL}" testInstrumentationRunnerArgument "TEST_SERVER_USERNAME", "${NC_TEST_SERVER_USERNAME}" testInstrumentationRunnerArgument "TEST_SERVER_PASSWORD", "${NC_TEST_SERVER_PASSWORD}" @@ -431,11 +440,13 @@ detekt { config.setFrom("detekt.yml") } -shot { - showOnlyFailingTestsInReports = ciBuild - // CI environment renders some shadows slightly different from local VMs - // Add a 0.5% tolerance to account for that - tolerance = ciBuild ? 0.5 : 0 +if (shotTest) { + shot { + showOnlyFailingTestsInReports = ciBuild + // CI environment renders some shadows slightly different from local VMs + // Add a 0.5% tolerance to account for that + tolerance = ciBuild ? 0.5 : 0 + } } jacoco { diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFile.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFile.png new file mode 100644 index 0000000000..4f329783e3 Binary files /dev/null and b/app/screenshots/gplay/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFile.png differ diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFolder.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFolder.png new file mode 100644 index 0000000000..1257bde358 Binary files /dev/null and b/app/screenshots/gplay/debug/com.owncloud.android.ui.dialog.SyncFileNotEnoughSpaceDialogFragmentTest_showNotEnoughSpaceDialogForFolder.png differ diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png index b19fe8c00f..4b8e5ba280 100644 Binary files a/app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png and b/app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displayJavaSnippetFile.png differ diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png index 054e937cef..bba71fe688 100644 Binary files a/app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png and b/app/screenshots/gplay/debug/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png differ diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_differentUser.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_differentUser.png new file mode 100644 index 0000000000..535bddb9eb Binary files /dev/null and b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_differentUser.png differ diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty.png index 0d6d1ead84..784f51ec88 100644 Binary files a/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty.png and b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_empty.png differ diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error.png index af0ada9dbd..535bddb9eb 100644 Binary files a/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error.png and b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_error.png differ diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files.png index 1ba755826f..e07bb83404 100644 Binary files a/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files.png and b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_files.png differ diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading.png index 9def340b43..6df36850c5 100644 Binary files a/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading.png and b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_loading.png differ diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_normalUser.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_normalUser.png new file mode 100644 index 0000000000..d76e2d91b6 Binary files /dev/null and b/app/screenshots/gplay/debug/com.owncloud.android.ui.trashbin.TrashbinActivityIT_normalUser.png differ diff --git a/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityIT.kt b/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityIT.kt index 8beb926824..df86b1c0e5 100644 --- a/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityIT.kt +++ b/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityIT.kt @@ -137,7 +137,7 @@ class FileDisplayActivityIT : AbstractOnServerIT() { .perform(NavigationViewActions.navigateTo(R.id.nav_shared)) shortSleep() shortSleep() - screenshot(sut) + // screenshot(sut) // todo run without real server } @Test diff --git a/app/src/androidTest/java/com/nextcloud/client/ScreenshotTestRunner.kt b/app/src/androidTest/java/com/nextcloud/client/TestRunner.kt similarity index 95% rename from app/src/androidTest/java/com/nextcloud/client/ScreenshotTestRunner.kt rename to app/src/androidTest/java/com/nextcloud/client/TestRunner.kt index 66a1c07c23..62ae457a00 100644 --- a/app/src/androidTest/java/com/nextcloud/client/ScreenshotTestRunner.kt +++ b/app/src/androidTest/java/com/nextcloud/client/TestRunner.kt @@ -27,11 +27,11 @@ import android.app.Application import android.app.Instrumentation import android.content.Context import android.os.Build +import androidx.test.runner.AndroidJUnitRunner import com.github.tmurakami.dexopener.DexOpener -import com.karumi.shot.ShotTestRunner import com.nextcloud.test.TestMainApp -class ScreenshotTestRunner : ShotTestRunner() { +class TestRunner : AndroidJUnitRunner() { @Throws(ClassNotFoundException::class, IllegalAccessException::class, InstantiationException::class) override fun newApplication(cl: ClassLoader, className: String, context: Context): Application { /* diff --git a/app/src/androidTest/java/com/owncloud/android/ui/dialog/SyncFileNotEnoughSpaceDialogFragmentTest.java b/app/src/androidTest/java/com/owncloud/android/ui/dialog/SyncFileNotEnoughSpaceDialogFragmentTest.java index 7e1b45d867..cb3d05117f 100644 --- a/app/src/androidTest/java/com/owncloud/android/ui/dialog/SyncFileNotEnoughSpaceDialogFragmentTest.java +++ b/app/src/androidTest/java/com/owncloud/android/ui/dialog/SyncFileNotEnoughSpaceDialogFragmentTest.java @@ -25,6 +25,7 @@ package com.owncloud.android.ui.dialog; import com.owncloud.android.AbstractIT; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.ui.activity.FileDisplayActivity; +import com.owncloud.android.utils.ScreenshotTest; import org.junit.Rule; import org.junit.Test; @@ -41,6 +42,7 @@ public class SyncFileNotEnoughSpaceDialogFragmentTest extends AbstractIT { false); @Test + @ScreenshotTest public void showNotEnoughSpaceDialogForFolder() { FileDisplayActivity test = activityRule.launchActivity(null); OCFile ocFile = new OCFile("/Document/"); @@ -56,6 +58,7 @@ public class SyncFileNotEnoughSpaceDialogFragmentTest extends AbstractIT { } @Test + @ScreenshotTest public void showNotEnoughSpaceDialogForFile() { FileDisplayActivity test = activityRule.launchActivity(null); OCFile ocFile = new OCFile("/Video.mp4"); diff --git a/app/src/androidTest/java/com/owncloud/android/ui/preview/PreviewTextFileFragmentTest.java b/app/src/androidTest/java/com/owncloud/android/ui/preview/PreviewTextFileFragmentTest.java index d5a34ef187..b9224d42ff 100644 --- a/app/src/androidTest/java/com/owncloud/android/ui/preview/PreviewTextFileFragmentTest.java +++ b/app/src/androidTest/java/com/owncloud/android/ui/preview/PreviewTextFileFragmentTest.java @@ -26,6 +26,7 @@ import com.owncloud.android.AbstractIT; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.utils.MimeTypeUtil; +import com.owncloud.android.utils.ScreenshotTest; import org.junit.Rule; import org.junit.Test; @@ -41,7 +42,7 @@ public class PreviewTextFileFragmentTest extends AbstractIT { false); @Test - // @ScreenshotTest // todo run without real server + @ScreenshotTest public void displaySimpleTextFile() throws IOException { FileDisplayActivity sut = activityRule.launchActivity(null); @@ -59,7 +60,7 @@ public class PreviewTextFileFragmentTest extends AbstractIT { } @Test - // @ScreenshotTest // todo run without real server + @ScreenshotTest public void displayJavaSnippetFile() throws IOException { FileDisplayActivity sut = activityRule.launchActivity(null); diff --git a/app/src/androidTest/java/com/owncloud/android/ui/trashbin/TrashbinActivityIT.kt b/app/src/androidTest/java/com/owncloud/android/ui/trashbin/TrashbinActivityIT.kt index aa9c8cd481..510a8b3ebf 100644 --- a/app/src/androidTest/java/com/owncloud/android/ui/trashbin/TrashbinActivityIT.kt +++ b/app/src/androidTest/java/com/owncloud/android/ui/trashbin/TrashbinActivityIT.kt @@ -109,6 +109,7 @@ class TrashbinActivityIT : AbstractIT() { } @Test + @ScreenshotTest fun normalUser() { val sut: TrashbinActivity = activityRule.launchActivity(null) @@ -124,6 +125,7 @@ class TrashbinActivityIT : AbstractIT() { } @Test + @ScreenshotTest fun differentUser() { val temp = Account("differentUser@https://nextcloud.localhost", MainApp.getAccountType(targetContext)) diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java index 1925f38de3..6c3c8bf52b 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java @@ -235,14 +235,19 @@ public class TrashbinListAdapter extends RecyclerView.Adapter