From 82846ac918b5b898c82dc26fa122be493f2fdf44 Mon Sep 17 00:00:00 2001 From: Egor Hutsko Date: Tue, 18 Feb 2025 22:23:18 +0100 Subject: [PATCH 1/2] [ADFA-365] - project build test with groovy gradle modules --- .../itsaky/androidide/ProjectBuildHelper.kt | 24 ++ .../com/itsaky/androidide/ProjectBuildTest.kt | 22 -- .../ProjectBuildTestWithGroovyGradle.kt | 210 ++++++++++++++++++ .../screens/ProjectSettingsScreen.kt | 13 ++ 4 files changed, 247 insertions(+), 22 deletions(-) create mode 100644 app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildHelper.kt create mode 100644 app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildHelper.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildHelper.kt new file mode 100644 index 0000000000..d54fc41aad --- /dev/null +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildHelper.kt @@ -0,0 +1,24 @@ +package com.itsaky.androidide + +import com.itsaky.androidide.scenarios.InitializationProjectAndCancelingBuildScenario +import com.itsaky.androidide.scenarios.NavigateToMainScreenScenario +import com.itsaky.androidide.screens.TemplateScreen.selectTemplate +import com.kaspersky.kaspresso.testcases.core.testcontext.TestContext + +fun TestContext.navigateToMainScreen() { + step("Initialize the app and navigate to the Main Screen") { + scenario(NavigateToMainScreenScenario()) + } +} + +fun TestContext.selectProjectTemplate(stepTitle: String, templateResId: Int) { + step(stepTitle) { + selectTemplate(templateResId) + } +} + +fun TestContext.initializeProjectAndCancelBuild() { + step("Initialization the project and cancelling the build") { + scenario(InitializationProjectAndCancelingBuildScenario()) + } +} \ No newline at end of file diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt index 2a611b2ae0..5b33533280 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt @@ -2,15 +2,11 @@ package com.itsaky.androidide import androidx.test.ext.junit.rules.activityScenarioRule import com.itsaky.androidide.activities.SplashActivity -import com.itsaky.androidide.scenarios.InitializationProjectAndCancelingBuildScenario -import com.itsaky.androidide.scenarios.NavigateToMainScreenScenario 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.TemplateScreen.selectTemplate import com.kaspersky.kaspresso.testcases.api.testcase.TestCase -import com.kaspersky.kaspresso.testcases.core.testcontext.TestContext import org.junit.Rule import org.junit.Test @@ -212,22 +208,4 @@ class ProjectBuildTest : TestCase() { initializeProjectAndCancelBuild() } } - - private fun TestContext.navigateToMainScreen() { - step("Initialize the app and navigate to the Main Screen") { - scenario(NavigateToMainScreenScenario()) - } - } - - private fun TestContext.selectProjectTemplate(stepTitle: String, templateResId: Int) { - step(stepTitle) { - selectTemplate(templateResId) - } - } - - private fun TestContext.initializeProjectAndCancelBuild() { - step("Initialization the project and cancelling the build") { - scenario(InitializationProjectAndCancelingBuildScenario()) - } - } } \ No newline at end of file diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt new file mode 100644 index 0000000000..95def227fe --- /dev/null +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithGroovyGradle.kt @@ -0,0 +1,210 @@ +package com.itsaky.androidide + +import androidx.test.ext.junit.rules.activityScenarioRule +import com.itsaky.androidide.activities.SplashActivity +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.kaspersky.kaspresso.testcases.api.testcase.TestCase +import org.junit.Rule +import org.junit.Test + +class ProjectBuildTestWithGroovyGradle : TestCase() { + + @get:Rule + val activityRule = activityScenarioRule() + + @Test + fun test_projectBuild_emptyProject_java_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the empty project", + R.string.template_empty + ) + selectJavaLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_emptyProject_kotlin_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the empty project", + R.string.template_empty + ) + selectKotlinLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_baseProject_java_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the basic project", + R.string.template_basic + ) + selectJavaLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_baseProject_kotlin_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the basic project", + R.string.template_basic + ) + selectKotlinLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_navigationDrawerProject_java_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the navigation drawer project", + R.string.template_navigation_drawer + ) + selectJavaLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_navigationDrawerProject_kotlin_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the navigation drawer project", + R.string.template_navigation_drawer + ) + selectKotlinLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_bottomNavigationProject_java_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the bottom navigation project", + R.string.template_navigation_tabs + ) + selectJavaLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_bottomNavigationProject_kotlin_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the bottom navigation project", + R.string.template_navigation_tabs + ) + selectKotlinLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_tabbedActivityProject_java_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the tabbed activity project", + R.string.template_tabs + ) + selectJavaLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_tabbedActivityProject_kotlin_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the tabbed activity project", + R.string.template_tabs + ) + selectKotlinLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_noAndroidXProject_java_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the no AndroidX project", + R.string.template_no_AndroidX + ) + selectJavaLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_noAndroidXProject_kotlin_groovyGradle() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + selectProjectTemplate( + "Select the no AndroidX project", + R.string.template_no_AndroidX + ) + selectKotlinLanguage() + uncheckeKotlinScript() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } +} \ No newline at end of file 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 6e36c91c1e..eb95799c07 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/ProjectSettingsScreen.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/ProjectSettingsScreen.kt @@ -3,6 +3,7 @@ package com.itsaky.androidide.screens import com.itsaky.androidide.R import com.kaspersky.kaspresso.screens.KScreen import com.kaspersky.kaspresso.testcases.core.testcontext.TestContext +import io.github.kakaocup.kakao.check.KCheckBox import io.github.kakaocup.kakao.spinner.KSpinner import io.github.kakaocup.kakao.spinner.KSpinnerItem import io.github.kakaocup.kakao.text.KButton @@ -23,6 +24,10 @@ object ProjectSettingsScreen : KScreen() { itemTypeBuilder = { itemType(::KSpinnerItem) } ) + val kotlinScriptText = KCheckBox { + withText(R.string.msg_use_kts) + } + fun TestContext.selectJavaLanguage() { step("Select the java language") { ProjectSettingsScreen { @@ -67,4 +72,12 @@ object ProjectSettingsScreen : KScreen() { } } } + + fun TestContext.uncheckeKotlinScript() { + step("Unselect Kotlin Script for Gradle") { + kotlinScriptText { + setChecked(false) + } + } + } } \ No newline at end of file From f0f25c14d9e837f5a3a8aaa3206596882a45d70b Mon Sep 17 00:00:00 2001 From: Egor Hutsko Date: Wed, 19 Feb 2025 12:20:19 +0100 Subject: [PATCH 2/2] [ADFA-365] - project build test with groovy gradle modules --- .../{ProjectBuildTest.kt => ProjectBuildTestWithKtsGradle.kt} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename app/src/androidTest/kotlin/com/itsaky/androidide/{ProjectBuildTest.kt => ProjectBuildTestWithKtsGradle.kt} (99%) diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithKtsGradle.kt similarity index 99% rename from app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt rename to app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithKtsGradle.kt index 5b33533280..50d893cb83 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTestWithKtsGradle.kt @@ -10,7 +10,7 @@ import com.kaspersky.kaspresso.testcases.api.testcase.TestCase import org.junit.Rule import org.junit.Test -class ProjectBuildTest : TestCase() { +class ProjectBuildTestWithKtsGradle : TestCase() { @get:Rule val activityRule = activityScenarioRule()