Эх сурвалжийг харах

Fix git conflicts

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk 11 сар өмнө
parent
commit
80c46b8d21

+ 1 - 0
app/build.gradle

@@ -391,6 +391,7 @@ dependencies {
     androidTestImplementation "androidx.test.espresso:espresso-web:$espressoVersion"
     androidTestImplementation "androidx.test.espresso:espresso-accessibility:$espressoVersion"
     androidTestImplementation "androidx.test.espresso:espresso-intents:$espressoVersion"
+    implementation "androidx.test.espresso:espresso-idling-resource:$espressoVersion"
 
     // Mocking support
     androidTestImplementation 'com.github.tmurakami:dexopener:2.0.5' // required to allow mocking on API 27 and older

+ 4 - 0
app/src/androidTest/java/com/owncloud/android/AbstractIT.java

@@ -301,6 +301,10 @@ public abstract class AbstractIT {
         InstrumentationRegistry.getInstrumentation().waitForIdleSync();
     }
 
+    protected void onIdleSync(Runnable recipient) {
+        InstrumentationRegistry.getInstrumentation().waitForIdle(recipient);
+    }
+
     protected void openDrawer(IntentsTestRule activityRule) {
         Activity sut = activityRule.launchActivity(null);
 

+ 78 - 72
app/src/androidTest/java/com/owncloud/android/ui/trashbin/TrashbinActivityIT.kt

@@ -10,11 +10,17 @@ package com.owncloud.android.ui.trashbin
 import android.accounts.Account
 import android.accounts.AccountManager
 import android.content.Intent
-import androidx.test.espresso.intent.rule.IntentsTestRule
+import androidx.test.core.app.ActivityScenario
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.espresso.IdlingRegistry
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import com.nextcloud.utils.EspressoIdlingResource
 import com.owncloud.android.AbstractIT
 import com.owncloud.android.MainApp
 import com.owncloud.android.lib.common.accounts.AccountUtils
 import com.owncloud.android.utils.ScreenshotTest
+import org.junit.After
+import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
 
@@ -25,91 +31,91 @@ class TrashbinActivityIT : AbstractIT() {
         FILES
     }
 
+    private var scenario: ActivityScenario<TrashbinActivity>? = null
+    val intent = Intent(ApplicationProvider.getApplicationContext(), TrashbinActivity::class.java)
+
     @get:Rule
-    var activityRule = IntentsTestRule(TrashbinActivity::class.java, true, false)
+    val activityRule = ActivityScenarioRule<TrashbinActivity>(intent)
+
+    @Before
+    fun registerIdlingResource() {
+        IdlingRegistry.getInstance().register(EspressoIdlingResource.countingIdlingResource)
+    }
+
+    @After
+    fun unregisterIdlingResource() {
+        IdlingRegistry.getInstance().unregister(EspressoIdlingResource.countingIdlingResource)
+        scenario?.close()
+    }
 
     @Test
     @ScreenshotTest
     fun error() {
-        val sut: TrashbinActivity = activityRule.launchActivity(null)
-
-        val trashbinRepository = TrashbinLocalRepository(TestCase.ERROR)
-
-        sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
-
-        sut.runOnUiThread { sut.loadFolder() }
-
-        shortSleep()
-
-        screenshot(sut)
+        scenario = activityRule.scenario
+        scenario?.onActivity { sut ->
+            val trashbinRepository = TrashbinLocalRepository(TestCase.ERROR)
+            sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
+            onIdleSync {
+                sut.runOnUiThread { sut.loadFolder() }
+                screenshot(sut)
+            }
+        }
     }
 
     @Test
     @ScreenshotTest
     fun files() {
-        val sut: TrashbinActivity = activityRule.launchActivity(null)
-
-        val trashbinRepository = TrashbinLocalRepository(TestCase.FILES)
-
-        sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
-
-        sut.runOnUiThread { sut.loadFolder() }
-
-        waitForIdleSync()
-        shortSleep()
-        shortSleep()
-
-        screenshot(sut)
+        scenario = activityRule.scenario
+        scenario?.onActivity { sut ->
+            val trashbinRepository = TrashbinLocalRepository(TestCase.FILES)
+            sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
+            onIdleSync {
+                sut.runOnUiThread { sut.loadFolder() }
+                screenshot(sut)
+            }
+        }
     }
 
     @Test
     @ScreenshotTest
     fun empty() {
-        val sut: TrashbinActivity = activityRule.launchActivity(null)
-
-        val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
-
-        sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
-
-        sut.runOnUiThread { sut.loadFolder() }
-
-        shortSleep()
-        shortSleep()
-        waitForIdleSync()
-
-        screenshot(sut.binding.emptyList.emptyListView)
+        scenario = activityRule.scenario
+        scenario?.onActivity { sut ->
+            val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
+            sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
+            onIdleSync {
+                sut.runOnUiThread { sut.loadFolder() }
+                screenshot(sut)
+            }
+        }
     }
 
     @Test
     @ScreenshotTest
     fun loading() {
-        val sut: TrashbinActivity = activityRule.launchActivity(null)
-
-        val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
-
-        sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
-
-        sut.runOnUiThread { sut.showInitialLoading() }
-
-        shortSleep()
-
-        screenshot(sut.binding.listFragmentLayout)
+        scenario = activityRule.scenario
+        scenario?.onActivity { sut ->
+            val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
+            sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
+            onIdleSync {
+                sut.runOnUiThread { sut.showInitialLoading() }
+                screenshot(sut)
+            }
+        }
     }
 
     @Test
     @ScreenshotTest
     fun normalUser() {
-        val sut: TrashbinActivity = activityRule.launchActivity(null)
-
-        val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
-
-        sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
-
-        sut.runOnUiThread { sut.showUser() }
-
-        shortSleep()
-
-        screenshot(sut)
+        scenario = activityRule.scenario
+        scenario?.onActivity { sut ->
+            val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
+            sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
+            onIdleSync {
+                sut.runOnUiThread { sut.showUser() }
+                screenshot(sut)
+            }
+        }
     }
 
     @Test
@@ -122,18 +128,18 @@ class TrashbinActivityIT : AbstractIT() {
         platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_OC_BASE_URL, "https://nextcloud.localhost")
         platformAccountManager.setUserData(temp, AccountUtils.Constants.KEY_USER_ID, "differentUser")
 
-        val intent = Intent()
+        val intent = Intent(targetContext, TrashbinActivity::class.java)
         intent.putExtra(Intent.EXTRA_USER, "differentUser@https://nextcloud.localhost")
-        val sut: TrashbinActivity = activityRule.launchActivity(intent)
-
-        val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
-
-        sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
-
-        sut.runOnUiThread { sut.showUser() }
-
-        shortSleep()
 
-        screenshot(sut)
+        val sutScenario = ActivityScenario.launch<TrashbinActivity>(intent)
+        sutScenario.onActivity { sut ->
+            sut.intent = intent
+            val trashbinRepository = TrashbinLocalRepository(TestCase.EMPTY)
+            sut.trashbinPresenter = TrashbinPresenter(trashbinRepository, sut)
+            onIdleSync {
+                sut.runOnUiThread { sut.showUser() }
+                screenshot(sut)
+            }
+        }
     }
 }

+ 27 - 0
app/src/main/java/com/nextcloud/utils/EspressoIdlingResource.kt

@@ -0,0 +1,27 @@
+/*
+ * Nextcloud - Android Client
+ *
+ * SPDX-FileCopyrightText: 2024 Alper Ozturk <alper.ozturk@nextcloud.com>
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+package com.nextcloud.utils
+
+import androidx.test.espresso.idling.CountingIdlingResource
+
+object EspressoIdlingResource {
+
+    private const val RESOURCE = "GLOBAL"
+
+    @JvmField val countingIdlingResource = CountingIdlingResource(RESOURCE)
+
+    fun increment() {
+        countingIdlingResource.increment()
+    }
+
+    fun decrement() {
+        if (!countingIdlingResource.isIdleNow) {
+            countingIdlingResource.decrement()
+        }
+    }
+}

+ 7 - 0
app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.kt

@@ -25,6 +25,7 @@ import com.nextcloud.client.account.CurrentAccountProvider
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.network.ClientFactory
 import com.nextcloud.client.preferences.AppPreferences
+import com.nextcloud.utils.EspressoIdlingResource
 import com.owncloud.android.R
 import com.owncloud.android.databinding.TrashbinActivityBinding
 import com.owncloud.android.lib.resources.trashbin.model.TrashbinFile
@@ -177,6 +178,7 @@ class TrashbinActivity :
     }
 
     fun loadFolder() {
+        EspressoIdlingResource.increment()
         trashbinListAdapter?.let {
             if (it.itemCount > EMPTY_LIST_COUNT) {
                 binding.swipeContainingList.isRefreshing = true
@@ -186,6 +188,7 @@ class TrashbinActivity :
 
             trashbinPresenter?.loadFolder()
         }
+        EspressoIdlingResource.decrement()
     }
 
     override fun onOptionsItemSelected(item: MenuItem): Boolean {
@@ -285,19 +288,23 @@ class TrashbinActivity :
 
     @VisibleForTesting
     fun showInitialLoading() {
+        EspressoIdlingResource.increment()
         binding.emptyList.emptyListView.visibility = View.GONE
         binding.list.visibility = View.GONE
         binding.loadingContent.visibility = View.VISIBLE
+        EspressoIdlingResource.decrement()
     }
 
     @VisibleForTesting
     fun showUser() {
+        EspressoIdlingResource.increment()
         binding.loadingContent.visibility = View.GONE
         binding.list.visibility = View.VISIBLE
         binding.swipeContainingList.isRefreshing = false
         binding.emptyList.emptyListViewText.text = user.get().accountName
         binding.emptyList.emptyListViewText.visibility = View.VISIBLE
         binding.emptyList.emptyListView.visibility = View.VISIBLE
+        EspressoIdlingResource.decrement()
     }
 
     override fun showError(message: Int) {

+ 13 - 0
gradle/verification-metadata.xml

@@ -6384,6 +6384,14 @@
             <sha256 value="e4bb54753c36a27a0e5d70154a5034fedd8feac4282295034bfd483d6c7aae78" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="com.google.android.apps.common.testing.accessibility.framework" name="accessibility-test-framework" version="3.1">
+         <artifact name="accessibility-test-framework-3.1.aar">
+            <sha256 value="e641e2a2c7287afd41b85310dd8f1344a8668034bbbfc4b02f58a48fd9c05ec7" origin="Generated by Gradle" reason="Artifact is not signed"/>
+         </artifact>
+         <artifact name="accessibility-test-framework-3.1.pom">
+            <sha256 value="80567228cdbd44d61e5320cd090883de7232dbc1ed7ebf5ab5c9810c11cd67e0" origin="Generated by Gradle" reason="Artifact is not signed"/>
+         </artifact>
+      </component>
       <component group="com.google.android.apps.common.testing.accessibility.framework" name="accessibility-test-framework" version="3.1.2">
          <artifact name="accessibility-test-framework-3.1.2.aar">
             <sha256 value="9b586dc8eeeb4f601038e23ef8ffd6a1deeca1163276d02797b0d2b8f9764b62" origin="Generated by Gradle" reason="Artifact is not signed"/>
@@ -7567,6 +7575,11 @@
             <sha256 value="47f0635b33c969e5f55ac9f1a4a8e10c120b8bab2cb3f06faaabc0e82057e276" origin="Generated by Gradle"/>
          </artifact>
       </component>
+      <component group="com.h3xstream.findsecbugs" name="findsecbugs-root-pom" version="1.13.0">
+         <artifact name="findsecbugs-root-pom-1.13.0.pom">
+            <sha256 value="da8755645ba7ae39588598e548f62eb0be1d2f47a6eee57efc5eb2865a4a556b" origin="Generated by Gradle"/>
+         </artifact>
+      </component>
       <component group="com.intellij" name="annotations" version="12.0">
          <artifact name="annotations-12.0.jar">
             <sha256 value="f8ab13b14be080fe2f617f90e55599760e4a1b4deeea5c595df63d0d6375ed6d" origin="Generated by Gradle"/>