Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down
38 changes: 38 additions & 0 deletions app/src/androidTest/kotlin/com/itsaky/androidide/CleanupTest.kt
Original file line number Diff line number Diff line change
@@ -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"
Comment thread
YahorZCzygunki marked this conversation as resolved.
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
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
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,
CleanupTest::class
)
class OrderedTestSuite
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -16,6 +18,11 @@ class PermissionsScreenTest : TestCase() {
@get:Rule
val activityRule = activityScenarioRule<SplashActivity>()

@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") {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
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 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
import org.junit.Test

Expand All @@ -16,6 +21,11 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
@get:Rule
val activityRule = activityScenarioRule<SplashActivity>()

@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 {
Expand All @@ -26,7 +36,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_empty
)
selectJavaLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand All @@ -42,7 +52,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_empty
)
selectKotlinLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand All @@ -58,7 +68,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_basic
)
selectJavaLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand All @@ -74,7 +84,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_basic
)
selectKotlinLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand All @@ -90,7 +100,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_navigation_drawer
)
selectJavaLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand All @@ -106,7 +116,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_navigation_drawer
)
selectKotlinLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand All @@ -122,7 +132,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_navigation_tabs
)
selectJavaLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand All @@ -138,7 +148,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_navigation_tabs
)
selectKotlinLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand All @@ -154,7 +164,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_tabs
)
selectJavaLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand All @@ -170,7 +180,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_tabs
)
selectKotlinLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand All @@ -186,7 +196,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_no_AndroidX
)
selectJavaLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand All @@ -202,7 +212,7 @@ class ProjectBuildTestWithGroovyGradle : TestCase() {
R.string.template_no_AndroidX
)
selectKotlinLanguage()
uncheckeKotlinScript()
uncheckKotlinScript()
clickCreateProjectProjectSettings()
initializeProjectAndCancelBuild()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
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 com.kaspersky.kaspresso.testcases.api.testcase.TestCase
import org.junit.After
import org.junit.Rule
import org.junit.Test

Expand All @@ -15,6 +20,11 @@ class ProjectBuildTestWithKtsGradle : TestCase() {
@get:Rule
val activityRule = activityScenarioRule<SplashActivity>()

@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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -12,6 +14,11 @@ class WelcomeScreenTest : TestCase() {
@get:Rule
val activityRule = activityScenarioRule<SplashActivity>()

@After
fun cleanUp() {
InstrumentationRegistry.getInstrumentation().uiAutomation.executeShellCommand("pm clear ${BuildConfig.APPLICATION_ID} && pm reset-permissions ${BuildConfig.APPLICATION_ID}")
}

@Test
fun test_welcomeScreen_itemsAppearCorrectly() {
OnboardingScreen {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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 {
Expand Down
Loading