From e8a1037694f1fea8db48cbc873f16ce0a4733db8 Mon Sep 17 00:00:00 2001 From: Egor Hutsko Date: Tue, 11 Feb 2025 17:45:26 +0100 Subject: [PATCH] [ADFA-365] - project build test with Navigation Drawer Project --- .idea/compiler.xml | 187 -------------- .idea/misc.xml | 229 ------------------ .../com/itsaky/androidide/ProjectBuildTest.kt | 122 ++++------ ...izationProjectAndCancelingBuildScenario.kt | 2 +- .../itsaky/androidide/screens/HomeScreen.kt | 15 ++ .../screens/ProjectSettingsScreen.kt | 47 ++++ .../androidide/screens/TemplateScreen.kt | 13 + 7 files changed, 117 insertions(+), 498 deletions(-) delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/misc.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 1700279aab..0000000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 8690009a66..0000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ 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 a22193f612..52b6719209 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt @@ -4,11 +4,11 @@ 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 -import com.itsaky.androidide.screens.ProjectSettingsScreen -import com.itsaky.androidide.screens.TemplateScreen +import com.itsaky.androidide.screens.HomeScreen.clickCreateProject +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 io.github.kakaocup.kakao.spinner.KSpinnerItem import org.junit.Rule import org.junit.Test @@ -23,47 +23,11 @@ class ProjectBuildTest : TestCase() { step("Initialize the app") { scenario(NavigateToMainScreenScenario()) } - step("Click create project") { - flakySafely(60000) { - HomeScreen { - rvActions { - childAt(0) { - click() - } - } - } - } - } + clickCreateProject() step("Select the basic project") { - flakySafely(10000) { - TemplateScreen { - rvTemplates { - childWith { - withDescendant { withText(R.string.template_basic) } - } perform { click() } - } - } - } - } - step("Select the java language") { - ProjectSettingsScreen { - spinner { - isVisible() - open() - - childAt(0) { - isVisible() - hasText("Java") - click() - } - } - - createProjectButton { - isVisible() - click() - } - } + selectTemplate(R.string.template_basic) } + selectJavaLanguage() step("Initialization the project and cancelling the build") { scenario(InitializationProjectAndCancelingBuildScenario()) } @@ -76,49 +40,45 @@ class ProjectBuildTest : TestCase() { step("Initialize the app") { scenario(NavigateToMainScreenScenario()) } - step("Click create project") { - flakySafely(60000) { - HomeScreen { - rvActions { - childAt(0) { - click() - } - } - } - } - } + clickCreateProject() step("Select the basic project") { - flakySafely(10000) { - TemplateScreen { - rvTemplates { - childWith { - withDescendant { withText(R.string.template_basic) } - } perform { click() } - } - } - } + selectTemplate(R.string.template_basic) } - step("Select the kotlin language") { - flakySafely { - ProjectSettingsScreen { - spinner { - isVisible() - open() + selectKotlinLanguage() + step("Initialization the project and cancelling the build") { + scenario(InitializationProjectAndCancelingBuildScenario()) + } + } + } - childAt(1) { - isVisible() - hasText("Kotlin") - click() - } - } + @Test + fun test_projectBuild_navigationDrawerProject_java() { + run { + step("Initialize the app") { + scenario(NavigateToMainScreenScenario()) + } + clickCreateProject() + step("Select the navigation drawer project") { + selectTemplate(R.string.template_navigation_drawer) + } + selectJavaLanguage() + step("Initialization the project and cancelling the build") { + scenario(InitializationProjectAndCancelingBuildScenario()) + } + } + } - createProjectButton { - isVisible() - click() - } - } - } + @Test + fun test_projectBuild_navigationDrawerProject_kotlin() { + run { + step("Initialize the app") { + scenario(NavigateToMainScreenScenario()) + } + clickCreateProject() + step("Select the navigation drawer project") { + selectTemplate(R.string.template_navigation_drawer) } + selectKotlinLanguage() step("Initialization the project and cancelling the build") { scenario(InitializationProjectAndCancelingBuildScenario()) } 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 ff508a9728..1da6fabcd0 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/InitializationProjectAndCancelingBuildScenario.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/scenarios/InitializationProjectAndCancelingBuildScenario.kt @@ -47,7 +47,7 @@ class InitializationProjectAndCancelingBuildScenario : Scenario() { } } step("Confirm that the install dialog appears and click cancel") { - flakySafely(120000) { + flakySafely(180000) { val installDialog = device.uiDevice.findObject(UiSelector().text("Do you want to install this app?")) val cancelButton = device.uiDevice.findObject(UiSelector().text("Cancel")) diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/HomeScreen.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/HomeScreen.kt index c5f3ee12af..1223db91a2 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/HomeScreen.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/HomeScreen.kt @@ -3,6 +3,7 @@ package com.itsaky.androidide.screens import android.view.View import com.itsaky.androidide.R import com.kaspersky.kaspresso.screens.KScreen +import com.kaspersky.kaspresso.testcases.core.testcontext.TestContext import io.github.kakaocup.kakao.recycler.KRecyclerItem import io.github.kakaocup.kakao.recycler.KRecyclerView import io.github.kakaocup.kakao.text.KButton @@ -22,4 +23,18 @@ object HomeScreen : KScreen() { val button = KButton(matcher) { withId(R.id.itemButton) } } + + fun TestContext.clickCreateProject() { + step("Click create project") { + flakySafely(60000) { + HomeScreen { + rvActions { + childAt(0) { + click() + } + } + } + } + } + } } \ 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 360b7c1f48..3587965c56 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/ProjectSettingsScreen.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/ProjectSettingsScreen.kt @@ -2,6 +2,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.spinner.KSpinner import io.github.kakaocup.kakao.spinner.KSpinnerItem import io.github.kakaocup.kakao.text.KButton @@ -21,4 +22,50 @@ object ProjectSettingsScreen : KScreen() { builder = { withHint("Project Language") }, itemTypeBuilder = { itemType(::KSpinnerItem) } ) + + fun TestContext.selectJavaLanguage() { + step("Select the java language") { + ProjectSettingsScreen { + spinner { + isVisible() + open() + + childAt(0) { + isVisible() + hasText("Java") + click() + } + } + + createProjectButton { + isVisible() + click() + } + } + } + } + + fun TestContext.selectKotlinLanguage() { + step("Select the kotlin language") { + flakySafely { + ProjectSettingsScreen { + spinner { + isVisible() + open() + + childAt(1) { + isVisible() + hasText("Kotlin") + click() + } + } + + createProjectButton { + isVisible() + click() + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/TemplateScreen.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/TemplateScreen.kt index 39461a753b..224b6d19b3 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/TemplateScreen.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/TemplateScreen.kt @@ -3,6 +3,7 @@ package com.itsaky.androidide.screens import android.view.View import com.itsaky.androidide.R import com.kaspersky.kaspresso.screens.KScreen +import com.kaspersky.kaspresso.testcases.core.testcontext.TestContext import io.github.kakaocup.kakao.recycler.KRecyclerItem import io.github.kakaocup.kakao.recycler.KRecyclerView import io.github.kakaocup.kakao.text.KTextView @@ -23,4 +24,16 @@ object TemplateScreen : KScreen() { val nameTemplate = KTextView(matcher) { withId(R.id.template_name) } } + + fun TestContext.selectTemplate(templateResId: Int) { + flakySafely(10000) { + TemplateScreen { + rvTemplates { + childWith { + withDescendant { withText(templateResId) } + } perform { click() } + } + } + } + } } \ No newline at end of file