Improved the testBookmarkRemainsSavedOrNot which sometimes fails on Android 15, and 16.

This commit is contained in:
MohitMaliFtechiz 2025-08-14 12:45:34 +05:30
parent 3b4a5d29fa
commit 2bc89b9ad2
2 changed files with 38 additions and 26 deletions

View File

@ -132,10 +132,12 @@ class BookmarksRobot : BaseRobot() {
fun assertBookmarkSaved(composeTestRule: ComposeContentTestRule) { fun assertBookmarkSaved(composeTestRule: ComposeContentTestRule) {
pauseForBetterTestPerformance() pauseForBetterTestPerformance()
testFlakyView({
composeTestRule.apply { composeTestRule.apply {
waitForIdle() waitForIdle()
onNodeWithText("Test Zim").assertExists() onNodeWithText("Test Zim").assertExists()
} }
})
} }
fun assertBookmarkRemoved(composeTestRule: ComposeTestRule) { fun assertBookmarkRemoved(composeTestRule: ComposeTestRule) {

View File

@ -18,11 +18,15 @@
package org.kiwix.kiwixmobile.page.bookmarks package org.kiwix.kiwixmobile.page.bookmarks
import android.accessibilityservice.AccessibilityService
import android.content.Context
import android.content.Intent
import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.core.content.edit import androidx.core.content.edit
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.navigation.NavOptions import androidx.navigation.NavOptions
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.accessibility.AccessibilityChecks import androidx.test.espresso.accessibility.AccessibilityChecks
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
@ -128,8 +132,7 @@ class LibkiwixBookmarkTest : BaseActivityTest() {
navOptions navOptions
) )
} }
waitForIdle() waitComposeToSettleViews() // to load the ZIM file properly.
waitUntilTimeout() // to load the ZIM file properly.
} }
bookmarks { bookmarks {
// delete any bookmark if already saved to properly perform this test case. // delete any bookmark if already saved to properly perform this test case.
@ -139,42 +142,49 @@ class LibkiwixBookmarkTest : BaseActivityTest() {
clickOnDeleteButton(composeTestRule) clickOnDeleteButton(composeTestRule)
assertNoBookMarkTextDisplayed(composeTestRule) assertNoBookMarkTextDisplayed(composeTestRule)
pressBack() pressBack()
composeTestRule.apply { waitComposeToSettleViews()
waitForIdle()
waitUntilTimeout()
}
// Test saving bookmark // Test saving bookmark
clickOnSaveBookmarkImage(composeTestRule) clickOnSaveBookmarkImage(composeTestRule)
openBookmarkScreen(kiwixMainActivity as CoreMainActivity, composeTestRule) openBookmarkScreen(kiwixMainActivity as CoreMainActivity, composeTestRule)
assertBookmarkSaved(composeTestRule) assertBookmarkSaved(composeTestRule)
pressBack() pressBack()
// Test removing bookmark // Test removing bookmark
composeTestRule.apply { waitComposeToSettleViews()
waitForIdle()
waitUntilTimeout()
}
clickOnSaveBookmarkImage(composeTestRule) clickOnSaveBookmarkImage(composeTestRule)
longClickOnSaveBookmarkImage(composeTestRule, TEST_PAUSE_MS_FOR_DOWNLOAD_TEST.toLong()) longClickOnSaveBookmarkImage(composeTestRule, TEST_PAUSE_MS_FOR_DOWNLOAD_TEST.toLong())
assertBookmarkRemoved(composeTestRule) assertBookmarkRemoved(composeTestRule)
pressBack() pressBack()
// Save the bookmark to test whether it remains saved after the application restarts or not. // Save the bookmark to test whether it remains saved after the application restarts or not.
composeTestRule.apply { waitComposeToSettleViews()
waitForIdle()
waitUntilTimeout()
}
clickOnSaveBookmarkImage(composeTestRule) clickOnSaveBookmarkImage(composeTestRule)
} waitComposeToSettleViews()
} // Close the application.
InstrumentationRegistry.getInstrumentation().uiAutomation.performGlobalAction(
@Test AccessibilityService.GLOBAL_ACTION_HOME
fun testBookmarkRemainsSavedOrNot() { )
composeTestRule.waitForIdle() // wait a bit
waitComposeToSettleViews()
// reopen the application to test that book remains saved or not.
val context = ApplicationProvider.getApplicationContext<Context>()
val intent = context.packageManager.getLaunchIntentForPackage(context.packageName)
intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
context.startActivity(intent)
InstrumentationRegistry.getInstrumentation().waitForIdleSync()
waitComposeToSettleViews()
topLevel { topLevel {
clickBookmarksOnNavDrawer(kiwixMainActivity as CoreMainActivity, composeTestRule) { clickBookmarksOnNavDrawer(kiwixMainActivity as CoreMainActivity, composeTestRule) {
assertBookmarkSaved(composeTestRule) assertBookmarkSaved(composeTestRule)
} }
} }
} }
}
private fun waitComposeToSettleViews() {
composeTestRule.apply {
waitForIdle()
waitUntilTimeout()
}
}
@Test @Test
fun testSavedBookmarksShowingOnBookmarkScreen() { fun testSavedBookmarksShowingOnBookmarkScreen() {
@ -201,7 +211,7 @@ class LibkiwixBookmarkTest : BaseActivityTest() {
assertNoBookMarkTextDisplayed(composeTestRule) assertNoBookMarkTextDisplayed(composeTestRule)
pressBack() pressBack()
} }
composeTestRule.waitUntilTimeout() waitComposeToSettleViews()
val coreReaderFragment = kiwixMainActivity.supportFragmentManager.fragments val coreReaderFragment = kiwixMainActivity.supportFragmentManager.fragments
.filterIsInstance<CoreReaderFragment>() .filterIsInstance<CoreReaderFragment>()
.firstOrNull() .firstOrNull()