diff --git a/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityScreenshotIT.kt b/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityScreenshotIT.kt index df56b9588c8c..6eecdbf151c1 100644 --- a/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityScreenshotIT.kt +++ b/app/src/androidTest/java/com/nextcloud/client/FileDisplayActivityScreenshotIT.kt @@ -1,6 +1,7 @@ /* * Nextcloud - Android Client * + * SPDX-FileCopyrightText: 2024 Alper Ozturk * SPDX-FileCopyrightText: 2019 Tobias Kaminsky * SPDX-FileCopyrightText: 2019 Nextcloud GmbH * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only @@ -8,28 +9,41 @@ package com.nextcloud.client import android.Manifest -import androidx.test.espresso.Espresso +import androidx.annotation.UiThread +import androidx.test.core.app.launchActivity +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.IdlingRegistry +import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.contrib.DrawerActions import androidx.test.espresso.contrib.NavigationViewActions -import androidx.test.espresso.intent.rule.IntentsTestRule import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.isRoot import androidx.test.rule.GrantPermissionRule import com.owncloud.android.AbstractIT import com.owncloud.android.R import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.ui.activity.FileDisplayActivity +import com.owncloud.android.utils.EspressoIdlingResource import com.owncloud.android.utils.ScreenshotTest +import org.junit.After import org.junit.Assert +import org.junit.Before import org.junit.Rule import org.junit.Test class FileDisplayActivityScreenshotIT : AbstractIT() { - @get:Rule - val activityRule = IntentsTestRule( - FileDisplayActivity::class.java, - true, - false - ) + private val testClassName = "com.nextcloud.client.FileDisplayActivityScreenshotIT" + + @Before + fun registerIdlingResource() { + IdlingRegistry.getInstance().register(EspressoIdlingResource.countingIdlingResource) + } + + @After + fun unregisterIdlingResource() { + IdlingRegistry.getInstance().unregister(EspressoIdlingResource.countingIdlingResource) + } @get:Rule val permissionRule: GrantPermissionRule = GrantPermissionRule.grant( @@ -41,82 +55,110 @@ class FileDisplayActivityScreenshotIT : AbstractIT() { } @Test + @UiThread @ScreenshotTest fun open() { try { - val sut = activityRule.launchActivity(null) - - shortSleep() - sut.runOnUiThread { - sut.listOfFilesFragment!!.setFabEnabled(false) - sut.resetScrolling(true) - sut.listOfFilesFragment!!.setEmptyListLoadingMessage() - sut.listOfFilesFragment!!.isLoading = false + launchActivity().use { scenario -> + scenario.onActivity { sut -> + onIdleSync { + EspressoIdlingResource.increment() + + sut.run { + listOfFilesFragment?.let { + it.setFabEnabled(false) + resetScrolling(true) + it.setEmptyListLoadingMessage() + it.isLoading = false + } + } + + EspressoIdlingResource.decrement() + + val screenShotName = createName(testClassName + "_" + "open", "") + onView(isRoot()).check(matches(isDisplayed())) + screenshotViaName(sut, screenShotName) + } + } } - shortSleep() - waitForIdleSync() - screenshot(sut) } catch (e: SecurityException) { Log_OC.e(TAG, "Error caught at open $e") } } @Test + @UiThread @ScreenshotTest fun showMediaThenAllFiles() { try { - val fileDisplayActivity = activityRule.launchActivity(null) - val sut = fileDisplayActivity.listOfFilesFragment - Assert.assertNotNull(sut) - sut!!.setFabEnabled(false) - sut.setEmptyListLoadingMessage() - sut.isLoading = false - - // open drawer - Espresso.onView(ViewMatchers.withId(R.id.drawer_layout)).perform(DrawerActions.open()) - - // click "all files" - Espresso.onView(ViewMatchers.withId(R.id.nav_view)) - .perform(NavigationViewActions.navigateTo(R.id.nav_gallery)) - - // wait - shortSleep() - - // click "all files" - Espresso.onView(ViewMatchers.withId(R.id.drawer_layout)).perform(DrawerActions.open()) - Espresso.onView(ViewMatchers.withId(R.id.nav_view)) - .perform(NavigationViewActions.navigateTo(R.id.nav_all_files)) - - // then compare screenshot - shortSleep() - sut.setFabEnabled(false) - sut.setEmptyListLoadingMessage() - sut.isLoading = false - shortSleep() - screenshot(fileDisplayActivity) + launchActivity().use { scenario -> + scenario.onActivity { sut -> + onIdleSync { + EspressoIdlingResource.increment() + val fragment = sut.listOfFilesFragment + Assert.assertNotNull(fragment) + fragment!!.setFabEnabled(false) + fragment.setEmptyListLoadingMessage() + fragment.isLoading = false + EspressoIdlingResource.decrement() + + onView(ViewMatchers.withId(R.id.drawer_layout)).perform(DrawerActions.open()) + + onView(ViewMatchers.withId(R.id.nav_view)) + .perform(NavigationViewActions.navigateTo(R.id.nav_gallery)) + + onView(ViewMatchers.withId(R.id.drawer_layout)).perform(DrawerActions.open()) + onView(ViewMatchers.withId(R.id.nav_view)) + .perform(NavigationViewActions.navigateTo(R.id.nav_all_files)) + + EspressoIdlingResource.increment() + fragment.setFabEnabled(false) + fragment.setEmptyListLoadingMessage() + fragment.isLoading = false + EspressoIdlingResource.decrement() + + val screenShotName = createName(testClassName + "_" + "showMediaThenAllFiles", "") + onView(isRoot()).check(matches(isDisplayed())) + screenshotViaName(sut, screenShotName) + } + } + } } catch (e: SecurityException) { Log_OC.e(TAG, "Error caught at open $e") } } @Test + @UiThread @ScreenshotTest fun drawer() { try { - val sut = activityRule.launchActivity(null) - Espresso.onView(ViewMatchers.withId(R.id.drawer_layout)).perform(DrawerActions.open()) - - shortSleep() - sut.runOnUiThread { - sut.hideInfoBox() - sut.resetScrolling(true) - sut.listOfFilesFragment!!.setFabEnabled(false) - sut.listOfFilesFragment!!.setEmptyListLoadingMessage() - sut.listOfFilesFragment!!.isLoading = false + launchActivity().use { scenario -> + scenario.onActivity { sut -> + onIdleSync { + onView(ViewMatchers.withId(R.id.drawer_layout)).perform(DrawerActions.open()) + + EspressoIdlingResource.increment() + + sut.run { + hideInfoBox() + resetScrolling(true) + + listOfFilesFragment?.let { + it.setFabEnabled(false) + it.setEmptyListLoadingMessage() + it.isLoading = false + } + } + + EspressoIdlingResource.decrement() + + val screenShotName = createName(testClassName + "_" + "drawer", "") + onView(isRoot()).check(matches(isDisplayed())) + screenshotViaName(sut, screenShotName) + } + } } - shortSleep() - waitForIdleSync() - screenshot(sut) } catch (e: SecurityException) { Log_OC.e(TAG, "Error caught at open $e") }