@@ -27,18 +27,27 @@ import android.content.SharedPreferences
2727import android.net.Uri
2828import android.os.Build.VERSION.SDK_INT
2929import android.os.Build.VERSION_CODES.TIRAMISU
30+ import android.util.Log
3031import androidx.lifecycle.Lifecycle
3132import androidx.preference.PreferenceManager
3233import androidx.test.core.app.ActivityScenario
3334import androidx.test.core.app.ApplicationProvider
3435import androidx.test.espresso.Espresso.onView
35- import androidx.test.espresso.action.ViewActions
36+ import androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu
37+ import androidx.test.espresso.NoMatchingViewException
38+ import androidx.test.espresso.action.ViewActions.click
39+ import androidx.test.espresso.assertion.ViewAssertions.matches
40+ import androidx.test.espresso.matcher.ViewMatchers
41+ import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
3642import androidx.test.espresso.matcher.ViewMatchers.withId
3743import androidx.test.espresso.matcher.ViewMatchers.withText
3844import androidx.test.ext.junit.runners.AndroidJUnit4
45+ import androidx.test.platform.app.InstrumentationRegistry
3946import androidx.test.rule.GrantPermissionRule
4047import com.amaze.filemanager.R
48+ import com.amaze.filemanager.matcher.ActionMenuIconMatcher.withActionIconDrawable
4149import com.amaze.filemanager.test.StoragePermissionHelper
50+ import com.amaze.filemanager.ui.activities.MainActivity
4251import com.amaze.filemanager.ui.activities.PreferencesActivity
4352import com.amaze.filemanager.ui.fragments.preferencefragments.BackupPrefsFragment
4453import com.google.gson.GsonBuilder
@@ -55,7 +64,6 @@ import java.io.File
5564
5665@RunWith(AndroidJUnit4 ::class )
5766class BackupPrefsFragmentTest {
58- var storagePath = " /storage/emulated/0"
5967 var fileName = " amaze_backup.json"
6068
6169 @Rule
@@ -86,6 +94,17 @@ class BackupPrefsFragmentTest {
8694 fun testPreferencesExportImport () {
8795 val context = ApplicationProvider .getApplicationContext<Context >()
8896
97+ // Get the device's home path
98+ val activityScenario = ActivityScenario .launch(MainActivity ::class .java)
99+ activityScenario.moveToState(Lifecycle .State .RESUMED )
100+
101+ lateinit var storagePath: String
102+ activityScenario.onActivity { mainActivity ->
103+ storagePath = mainActivity.getStorageDirectories()[0 ].path
104+ }
105+
106+ Log .i(BackupPrefsFragmentTest ::class .java.simpleName, " File $storagePath " )
107+
89108 val exportFile = File (" $storagePath${File .separator}$fileName " )
90109 exportFile.delete() // delete if already exists
91110
@@ -100,25 +119,32 @@ class BackupPrefsFragmentTest {
100119 context : Context ,
101120 exportFile : File ,
102121 ) {
103- val backupPrefsFragment = BackupPrefsFragment ()
104122 val activityScenario = ActivityScenario .launch(PreferencesActivity ::class .java)
123+ activityScenario.moveToState(Lifecycle .State .RESUMED )
105124
106- activityScenario.moveToState(Lifecycle .State .STARTED )
107-
108- activityScenario.onActivity {
109- it.supportFragmentManager.beginTransaction()
110- .add(backupPrefsFragment, null )
111- .commitNow()
112-
113- backupPrefsFragment.exportPrefs()
114- }
125+ onView(withText(R .string.backup)).perform(click())
126+ onView(withText(R .string.pref_export)).perform(click())
115127
116128 val tempFile = File (" ${context.cacheDir.absolutePath}${File .separator}$fileName " )
117129
118130 assertTrue(tempFile.exists())
119131
120- onView(withId(R .id.home)).perform(ViewActions .click())
121- onView(withText(R .string.save)).perform(ViewActions .click())
132+ try {
133+ // HACK to be able to open the overflow on smaller devices, but not on larger devices,
134+ // as the overflow menu would hide the home button on larger devices
135+
136+ onView(withId(R .id.home))
137+ .check(matches(withEffectiveVisibility(ViewMatchers .Visibility .VISIBLE )))
138+ // Use icon if visible
139+ onView(withActionIconDrawable(R .drawable.ic_home_white_24dp)).perform(click())
140+ } catch (_: NoMatchingViewException ) {
141+ // Open the menu first, to be able to select the home button on smaller devices
142+ openActionBarOverflowOrOptionsMenu(InstrumentationRegistry .getInstrumentation().targetContext)
143+ // Use text if visible
144+ onView(withText(R .string.home)).perform(click())
145+ }
146+
147+ onView(withText(R .string.save)).perform(click())
122148
123149 assertTrue(exportFile.exists())
124150
@@ -172,8 +198,6 @@ class BackupPrefsFragmentTest {
172198 .add(backupPrefsFragment, null )
173199 .commitNow()
174200
175- javaClass.getResourceAsStream(" /$fileName " )?.copyTo(exportFile.outputStream())
176-
177201 backupPrefsFragment.onActivityResult(
178202 BackupPrefsFragment .IMPORT_BACKUP_FILE ,
179203 Activity .RESULT_OK ,
0 commit comments