From 00ffcae8ba4680856d71ca39373078c3ad170f65 Mon Sep 17 00:00:00 2001 From: Egor Hutsko Date: Mon, 24 Feb 2025 16:34:05 +0100 Subject: [PATCH 1/4] [ADFA-365] - allow tests to run one after another --- .../ProjectBuildTestWithGroovyGradle.kt | 7 +++ ...izationProjectAndCancelingBuildScenario.kt | 4 +- .../scenarios/NavigateToMainScreenScenario.kt | 58 +++++++++++-------- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt index 95def227fe..f36eea4875 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt @@ -1,6 +1,7 @@ package com.itsaky.androidide import androidx.test.ext.junit.rules.activityScenarioRule +import androidx.test.platform.app.InstrumentationRegistry import com.itsaky.androidide.activities.SplashActivity import com.itsaky.androidide.screens.HomeScreen.clickCreateProjectHomeScreen import com.itsaky.androidide.screens.ProjectSettingsScreen.clickCreateProjectProjectSettings @@ -8,6 +9,7 @@ import com.itsaky.androidide.screens.ProjectSettingsScreen.selectJavaLanguage import com.itsaky.androidide.screens.ProjectSettingsScreen.selectKotlinLanguage import com.itsaky.androidide.screens.ProjectSettingsScreen.uncheckeKotlinScript import com.kaspersky.kaspresso.testcases.api.testcase.TestCase +import org.junit.After import org.junit.Rule import org.junit.Test @@ -16,6 +18,11 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { @get:Rule val activityRule = activityScenarioRule() + @After + fun cleanUp() { + InstrumentationRegistry.getInstrumentation().uiAutomation.executeShellCommand("pm clear ${BuildConfig.APPLICATION_ID} && pm reset-permissions ${BuildConfig.APPLICATION_ID}") + } + @Test fun test_projectBuild_emptyProject_java_groovyGradle() { run { diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/InitializationProjectAndCancelingBuildScenario.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/InitializationProjectAndCancelingBuildScenario.kt index 1da6fabcd0..ab4dce35e0 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/InitializationProjectAndCancelingBuildScenario.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/InitializationProjectAndCancelingBuildScenario.kt @@ -47,11 +47,11 @@ class InitializationProjectAndCancelingBuildScenario : Scenario() { } } step("Confirm that the install dialog appears and click cancel") { - flakySafely(180000) { + flakySafely(240000) { val installDialog = device.uiDevice.findObject(UiSelector().text("Do you want to install this app?")) val cancelButton = device.uiDevice.findObject(UiSelector().text("Cancel")) - if (installDialog.waitForExists(120000)) { + if (installDialog.waitForExists(180000)) { installDialog.exists() cancelButton.click() } else { diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/NavigateToMainScreenScenario.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/NavigateToMainScreenScenario.kt index 7b41f21438..aef858ea29 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/NavigateToMainScreenScenario.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/NavigateToMainScreenScenario.kt @@ -1,5 +1,6 @@ package com.itsaky.androidide.scenarios +import androidx.test.uiautomator.UiSelector import com.itsaky.androidide.screens.InstallToolsScreen import com.itsaky.androidide.screens.OnboardingScreen import com.itsaky.androidide.screens.PermissionScreen @@ -17,42 +18,49 @@ class NavigateToMainScreenScenario : Scenario() { click() } } - step("Grant storage and install packages permissions") { - PermissionScreen { - rvPermissions { - childAt(0) { - grantButton.click() + val permissionsScreen = device.uiDevice.findObject(UiSelector().text("Permissions")) + + if (permissionsScreen.exists()) { + step("Grant storage and install packages permissions") { + PermissionScreen { + rvPermissions { + childAt(0) { + grantButton.click() + } } - } - SystemPermissionsScreen { - storagePermissionView { - click() + SystemPermissionsScreen { + storagePermissionView { + click() + } } - } - device.uiDevice.pressBack() + device.uiDevice.pressBack() - rvPermissions { - childAt(1) { - grantButton.click() + rvPermissions { + childAt(1) { + grantButton.click() + } } - } - SystemPermissionsScreen { - installPackagesPermission { - click() + SystemPermissionsScreen { + installPackagesPermission { + click() + } } - } - device.uiDevice.pressBack() - } - OnboardingScreen.nextButton { - isVisible() - isClickable() - click() + device.uiDevice.pressBack() + } + OnboardingScreen.nextButton { + isVisible() + isClickable() + click() + } } + } else { + println("skip permissions") } + step("Click continue button on the Install Tools Screen") { InstallToolsScreen.doneButton { isVisible() From 6abd85da567cfb9273c4325339414e2ce0bbce2e Mon Sep 17 00:00:00 2001 From: Egor Hutsko Date: Wed, 26 Feb 2025 16:46:43 +0100 Subject: [PATCH 2/4] [ADFA-365] - allow tests to run one after another --- app/build.gradle.kts | 9 +++++++ .../ProjectBuildTestWithGroovyGradle.kt | 26 +++++++++---------- .../ProjectBuildTestWithKtsGradle.kt | 7 +++++ ...izationProjectAndCancelingBuildScenario.kt | 2 +- .../screens/ProjectSettingsScreen.kt | 2 +- 5 files changed, 31 insertions(+), 15 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d7498ac217..4eb0640cee 100755 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -40,6 +40,13 @@ android { defaultConfig { applicationId = BuildConfig.packageName vectorDrawables.useSupportLibrary = true + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + testInstrumentationRunnerArguments["androidx.test.orchestrator.ENABLE"] = "true" + } + + testOptions { + execution = "ANDROIDX_TEST_ORCHESTRATOR" } androidResources { @@ -262,6 +269,8 @@ dependencies { testImplementation(projects.testing.unit) testImplementation(libs.core.tests.anroidx.arch) androidTestImplementation(projects.testing.android) + + androidTestImplementation(libs.tests.androidx.test.runner) } //sentry { diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt index f36eea4875..7d1882d5ce 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt @@ -7,7 +7,7 @@ import com.itsaky.androidide.screens.HomeScreen.clickCreateProjectHomeScreen import com.itsaky.androidide.screens.ProjectSettingsScreen.clickCreateProjectProjectSettings import com.itsaky.androidide.screens.ProjectSettingsScreen.selectJavaLanguage import com.itsaky.androidide.screens.ProjectSettingsScreen.selectKotlinLanguage -import com.itsaky.androidide.screens.ProjectSettingsScreen.uncheckeKotlinScript +import com.itsaky.androidide.screens.ProjectSettingsScreen.uncheckKotlinScript import com.kaspersky.kaspresso.testcases.api.testcase.TestCase import org.junit.After import org.junit.Rule @@ -33,7 +33,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_empty ) selectJavaLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } @@ -49,7 +49,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_empty ) selectKotlinLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } @@ -65,7 +65,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_basic ) selectJavaLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } @@ -81,7 +81,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_basic ) selectKotlinLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } @@ -97,7 +97,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_navigation_drawer ) selectJavaLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } @@ -113,7 +113,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_navigation_drawer ) selectKotlinLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } @@ -129,7 +129,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_navigation_tabs ) selectJavaLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } @@ -145,7 +145,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_navigation_tabs ) selectKotlinLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } @@ -161,7 +161,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_tabs ) selectJavaLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } @@ -177,7 +177,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_tabs ) selectKotlinLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } @@ -193,7 +193,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_no_AndroidX ) selectJavaLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } @@ -209,7 +209,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() { R.string.template_no_AndroidX ) selectKotlinLanguage() - uncheckeKotlinScript() + uncheckKotlinScript() clickCreateProjectProjectSettings() initializeProjectAndCancelBuild() } diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithKtsGradle.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithKtsGradle.kt index 50d893cb83..87eec2b194 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithKtsGradle.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithKtsGradle.kt @@ -6,7 +6,9 @@ import com.itsaky.androidide.screens.HomeScreen.clickCreateProjectHomeScreen import com.itsaky.androidide.screens.ProjectSettingsScreen.clickCreateProjectProjectSettings import com.itsaky.androidide.screens.ProjectSettingsScreen.selectJavaLanguage import com.itsaky.androidide.screens.ProjectSettingsScreen.selectKotlinLanguage +import androidx.test.platform.app.InstrumentationRegistry import com.kaspersky.kaspresso.testcases.api.testcase.TestCase +import org.junit.After import org.junit.Rule import org.junit.Test @@ -15,6 +17,11 @@ class ProjectBuildTestWithKtsGradle : TestCase() { @get:Rule val activityRule = activityScenarioRule() + @After + fun cleanUp() { + InstrumentationRegistry.getInstrumentation().uiAutomation.executeShellCommand("pm clear ${BuildConfig.APPLICATION_ID} && pm reset-permissions ${BuildConfig.APPLICATION_ID}") + } + @Test fun test_projectBuild_emptyProject_java() { run { diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/InitializationProjectAndCancelingBuildScenario.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/InitializationProjectAndCancelingBuildScenario.kt index ab4dce35e0..1275b0b097 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/InitializationProjectAndCancelingBuildScenario.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/InitializationProjectAndCancelingBuildScenario.kt @@ -30,7 +30,7 @@ class InitializationProjectAndCancelingBuildScenario : Scenario() { } } step("Wait for the green button") { - flakySafely(180000) { + flakySafely(240000) { KView { withText(R.string.msg_project_initialized) }.isVisible() diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/ProjectSettingsScreen.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/ProjectSettingsScreen.kt index eb95799c07..ee5201ef20 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/ProjectSettingsScreen.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/ProjectSettingsScreen.kt @@ -73,7 +73,7 @@ object ProjectSettingsScreen : KScreen() { } } - fun TestContext.uncheckeKotlinScript() { + fun TestContext.uncheckKotlinScript() { step("Unselect Kotlin Script for Gradle") { kotlinScriptText { setChecked(false) From 453dfa3d2488c082206b35b0560f3829e3c460e1 Mon Sep 17 00:00:00 2001 From: Egor Hutsko Date: Thu, 27 Feb 2025 13:31:00 +0100 Subject: [PATCH 3/4] [ADFA-365] - add OrderedTestSuite --- .../com/itsaky/androidide/OrderedTestSuite.kt | 13 +++++++++++++ .../com/itsaky/androidide/PermissionsScreenTest.kt | 7 +++++++ .../androidide/ProjectBuildTestWithGroovyGradle.kt | 3 +++ .../androidide/ProjectBuildTestWithKtsGradle.kt | 5 ++++- .../com/itsaky/androidide/WelcomeScreenTest.kt | 7 +++++++ .../androidide/{ => helper}/ProjectBuildHelper.kt | 2 +- 6 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 app/src/androidTest/kotlin/com/itsaky/androidide/OrderedTestSuite.kt rename app/src/androidTest/kotlin/com/itsaky/androidide/{ => helper}/ProjectBuildHelper.kt (95%) diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/OrderedTestSuite.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/OrderedTestSuite.kt new file mode 100644 index 0000000000..482850d36c --- /dev/null +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/OrderedTestSuite.kt @@ -0,0 +1,13 @@ +package com.itsaky.androidide + +import org.junit.runner.RunWith +import org.junit.runners.Suite + +@RunWith(Suite::class) +@Suite.SuiteClasses( + WelcomeScreenTest::class, + PermissionsScreenTest::class, + ProjectBuildTestWithGroovyGradle::class, + ProjectBuildTestWithKtsGradle::class, +) +class OrderedTestSuite \ No newline at end of file diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/PermissionsScreenTest.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/PermissionsScreenTest.kt index 7d331b71ed..cff1f3cc8f 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/PermissionsScreenTest.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/PermissionsScreenTest.kt @@ -2,11 +2,13 @@ package com.itsaky.androidide import androidx.test.espresso.matcher.ViewMatchers.isNotEnabled import androidx.test.ext.junit.rules.activityScenarioRule +import androidx.test.platform.app.InstrumentationRegistry import com.itsaky.androidide.activities.SplashActivity import com.itsaky.androidide.screens.OnboardingScreen import com.itsaky.androidide.screens.PermissionScreen import com.itsaky.androidide.screens.SystemPermissionsScreen import com.kaspersky.kaspresso.testcases.api.testcase.TestCase +import org.junit.After import org.junit.Assert.assertEquals import org.junit.Rule import org.junit.Test @@ -16,6 +18,11 @@ class PermissionsScreenTest : TestCase() { @get:Rule val activityRule = activityScenarioRule() + @After + fun cleanUp() { + InstrumentationRegistry.getInstrumentation().uiAutomation.executeShellCommand("pm clear ${BuildConfig.APPLICATION_ID} && pm reset-permissions ${BuildConfig.APPLICATION_ID}") + } + @Test fun test_permissionsScreen_greenCheckMarksAppearCorrectly() = run { step("Click continue button on the Welcome Screen") { diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt index 7d1882d5ce..a28255a24e 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt @@ -3,6 +3,9 @@ package com.itsaky.androidide import androidx.test.ext.junit.rules.activityScenarioRule import androidx.test.platform.app.InstrumentationRegistry import com.itsaky.androidide.activities.SplashActivity +import com.itsaky.androidide.helper.initializeProjectAndCancelBuild +import com.itsaky.androidide.helper.navigateToMainScreen +import com.itsaky.androidide.helper.selectProjectTemplate import com.itsaky.androidide.screens.HomeScreen.clickCreateProjectHomeScreen import com.itsaky.androidide.screens.ProjectSettingsScreen.clickCreateProjectProjectSettings import com.itsaky.androidide.screens.ProjectSettingsScreen.selectJavaLanguage diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithKtsGradle.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithKtsGradle.kt index 87eec2b194..2eb6fa3feb 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithKtsGradle.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithKtsGradle.kt @@ -1,12 +1,15 @@ package com.itsaky.androidide import androidx.test.ext.junit.rules.activityScenarioRule +import androidx.test.platform.app.InstrumentationRegistry import com.itsaky.androidide.activities.SplashActivity +import com.itsaky.androidide.helper.initializeProjectAndCancelBuild +import com.itsaky.androidide.helper.navigateToMainScreen +import com.itsaky.androidide.helper.selectProjectTemplate import com.itsaky.androidide.screens.HomeScreen.clickCreateProjectHomeScreen import com.itsaky.androidide.screens.ProjectSettingsScreen.clickCreateProjectProjectSettings import com.itsaky.androidide.screens.ProjectSettingsScreen.selectJavaLanguage import com.itsaky.androidide.screens.ProjectSettingsScreen.selectKotlinLanguage -import androidx.test.platform.app.InstrumentationRegistry import com.kaspersky.kaspresso.testcases.api.testcase.TestCase import org.junit.After import org.junit.Rule diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/WelcomeScreenTest.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/WelcomeScreenTest.kt index 76c943b6dd..f252e4eb49 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/WelcomeScreenTest.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/WelcomeScreenTest.kt @@ -1,9 +1,11 @@ package com.itsaky.androidide import androidx.test.ext.junit.rules.activityScenarioRule +import androidx.test.platform.app.InstrumentationRegistry import com.itsaky.androidide.activities.SplashActivity import com.itsaky.androidide.screens.OnboardingScreen import com.kaspersky.kaspresso.testcases.api.testcase.TestCase +import org.junit.After import org.junit.Rule import org.junit.Test @@ -12,6 +14,11 @@ class WelcomeScreenTest : TestCase() { @get:Rule val activityRule = activityScenarioRule() + @After + fun cleanUp() { + InstrumentationRegistry.getInstrumentation().uiAutomation.executeShellCommand("pm clear ${BuildConfig.APPLICATION_ID} && pm reset-permissions ${BuildConfig.APPLICATION_ID}") + } + @Test fun test_welcomeScreen_itemsAppearCorrectly() { OnboardingScreen { diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildHelper.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/helper/ProjectBuildHelper.kt similarity index 95% rename from app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildHelper.kt rename to app/src/androidTest/kotlin/com/itsaky/androidide/helper/ProjectBuildHelper.kt index d54fc41aad..b70af9c4fe 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildHelper.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/helper/ProjectBuildHelper.kt @@ -1,4 +1,4 @@ -package com.itsaky.androidide +package com.itsaky.androidide.helper import com.itsaky.androidide.scenarios.InitializationProjectAndCancelingBuildScenario import com.itsaky.androidide.scenarios.NavigateToMainScreenScenario From 163e2a3c6b4e042c2b8e7a3f96cb64c3167cc404 Mon Sep 17 00:00:00 2001 From: Egor Hutsko Date: Thu, 27 Feb 2025 17:50:42 +0100 Subject: [PATCH 4/4] [ADFA-365] - add CleanupTest --- .../com/itsaky/androidide/CleanupTest.kt | 38 +++++++++++++++++++ .../com/itsaky/androidide/OrderedTestSuite.kt | 1 + 2 files changed, 39 insertions(+) create mode 100644 app/src/androidTest/kotlin/com/itsaky/androidide/CleanupTest.kt diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/CleanupTest.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/CleanupTest.kt new file mode 100644 index 0000000000..f773f451dc --- /dev/null +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/CleanupTest.kt @@ -0,0 +1,38 @@ +package com.itsaky.androidide + +import android.app.Instrumentation +import android.os.ParcelFileDescriptor +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.AfterClass +import org.junit.Test +import java.io.FileInputStream +import java.io.IOException + +class CleanupTest { + companion object { + @JvmStatic + @AfterClass + fun cleanup() { + try { + val command = "rm -rf /sdcard/AndroidIDEProjects" + executeShellCommand(command) + println("Cleanup executed successfully!") + } catch (e: IOException) { + println("Failed to execute cleanup") + e.printStackTrace() + } + } + + private fun executeShellCommand(command: String): String { + val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation() + val pfd: ParcelFileDescriptor = instrumentation.uiAutomation.executeShellCommand(command) + val fileInputStream = FileInputStream(pfd.fileDescriptor) + return fileInputStream.bufferedReader().use { it.readText() } + } + } + + @Test + fun dummyTest() { + // This test ensures the class is executed + } +} diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/OrderedTestSuite.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/OrderedTestSuite.kt index 482850d36c..16ad3a8b43 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/OrderedTestSuite.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/OrderedTestSuite.kt @@ -9,5 +9,6 @@ import org.junit.runners.Suite PermissionsScreenTest::class, ProjectBuildTestWithGroovyGradle::class, ProjectBuildTestWithKtsGradle::class, + CleanupTest::class ) class OrderedTestSuite \ No newline at end of file