diff --git a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt index 52b6719209..56da426ecf 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/ProjectBuildTest.kt @@ -4,11 +4,13 @@ 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.clickCreateProject +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 @@ -20,68 +22,96 @@ class ProjectBuildTest : TestCase() { @Test fun test_projectBuild_baseProject_java() { run { - step("Initialize the app") { - scenario(NavigateToMainScreenScenario()) - } - clickCreateProject() + navigateToMainScreen() + clickCreateProjectHomeScreen() step("Select the basic project") { selectTemplate(R.string.template_basic) } selectJavaLanguage() - step("Initialization the project and cancelling the build") { - scenario(InitializationProjectAndCancelingBuildScenario()) - } + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() } } @Test fun test_projectBuild_baseProject_kotlin() { run { - step("Initialize the app") { - scenario(NavigateToMainScreenScenario()) - } - clickCreateProject() + navigateToMainScreen() + clickCreateProjectHomeScreen() step("Select the basic project") { selectTemplate(R.string.template_basic) } selectKotlinLanguage() - step("Initialization the project and cancelling the build") { - scenario(InitializationProjectAndCancelingBuildScenario()) - } + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() } } @Test fun test_projectBuild_navigationDrawerProject_java() { run { - step("Initialize the app") { - scenario(NavigateToMainScreenScenario()) - } - clickCreateProject() + navigateToMainScreen() + clickCreateProjectHomeScreen() step("Select the navigation drawer project") { selectTemplate(R.string.template_navigation_drawer) } selectJavaLanguage() - step("Initialization the project and cancelling the build") { - scenario(InitializationProjectAndCancelingBuildScenario()) - } + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() } } @Test fun test_projectBuild_navigationDrawerProject_kotlin() { run { - step("Initialize the app") { - scenario(NavigateToMainScreenScenario()) - } - clickCreateProject() + navigateToMainScreen() + clickCreateProjectHomeScreen() step("Select the navigation drawer project") { selectTemplate(R.string.template_navigation_drawer) } selectKotlinLanguage() - step("Initialization the project and cancelling the build") { - scenario(InitializationProjectAndCancelingBuildScenario()) + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_bottomNavigationProject_java() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + step("Select the navigation drawer project") { + selectTemplate(R.string.template_navigation_tabs) + } + selectJavaLanguage() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + @Test + fun test_projectBuild_bottomNavigationProject_kotlin() { + run { + navigateToMainScreen() + clickCreateProjectHomeScreen() + step("Select the navigation drawer project") { + selectTemplate(R.string.template_navigation_tabs) } + selectKotlinLanguage() + clickCreateProjectProjectSettings() + initializeProjectAndCancelBuild() + } + } + + private fun TestContext.navigateToMainScreen() { + step("Initialize the app and navigate to the Main Screen") { + scenario(NavigateToMainScreenScenario()) + } + } + + 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/screens/HomeScreen.kt b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/HomeScreen.kt index 1223db91a2..832e3abdf5 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/HomeScreen.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/HomeScreen.kt @@ -24,7 +24,7 @@ object HomeScreen : KScreen() { val button = KButton(matcher) { withId(R.id.itemButton) } } - fun TestContext.clickCreateProject() { + fun TestContext.clickCreateProjectHomeScreen() { step("Click create project") { flakySafely(60000) { HomeScreen { 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 3587965c56..6e36c91c1e 100644 --- a/app/src/androidTest/kotlin/com/itsaky/androidide/screens/ProjectSettingsScreen.kt +++ b/app/src/androidTest/kotlin/com/itsaky/androidide/screens/ProjectSettingsScreen.kt @@ -36,11 +36,6 @@ object ProjectSettingsScreen : KScreen() { click() } } - - createProjectButton { - isVisible() - click() - } } } } @@ -59,13 +54,17 @@ object ProjectSettingsScreen : KScreen() { click() } } - - createProjectButton { - isVisible() - click() - } } } } } + + fun TestContext.clickCreateProjectProjectSettings() { + step("Click create project on the Settings Page") { + createProjectButton { + isVisible() + click() + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/itsaky/androidide/adapters/MainActionsListAdapter.kt b/app/src/main/java/com/itsaky/androidide/adapters/MainActionsListAdapter.kt index 2420173034..39a14251f7 100644 --- a/app/src/main/java/com/itsaky/androidide/adapters/MainActionsListAdapter.kt +++ b/app/src/main/java/com/itsaky/androidide/adapters/MainActionsListAdapter.kt @@ -21,7 +21,6 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.itsaky.androidide.databinding.LayoutMainActionItemBinding -import com.itsaky.androidide.fragments.MainFragment import com.itsaky.androidide.models.MainScreenAction /** @@ -31,33 +30,33 @@ import com.itsaky.androidide.models.MainScreenAction */ class MainActionsListAdapter @JvmOverloads -constructor(val mainFragment : MainFragment, val actions: List = emptyList()) : - RecyclerView.Adapter() { - inner class VH(val binding: LayoutMainActionItemBinding) : RecyclerView.ViewHolder(binding.root) - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = - VH(LayoutMainActionItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)) - - override fun getItemCount(): Int = actions.size - - fun getAction(index: Int) = actions[index] - - override fun onBindViewHolder(holder: VH, position: Int) { - val action = getAction(index = position) - val binding = holder.binding - val button = binding.root - - binding.root.apply { - setText(action.text) - setIconResource(action.icon) - setOnClickListener { - action.onClick?.invoke(action, it) - } - setOnLongClickListener { - action.onLongClick?.invoke(action, it) - true - } - action.view = button +constructor(val actions: List = emptyList()) : + RecyclerView.Adapter() { + inner class VH(val binding: LayoutMainActionItemBinding) : RecyclerView.ViewHolder(binding.root) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = + VH(LayoutMainActionItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)) + + override fun getItemCount(): Int = actions.size + + fun getAction(index: Int) = actions[index] + + override fun onBindViewHolder(holder: VH, position: Int) { + val action = getAction(index = position) + val binding = holder.binding + val button = binding.root + + binding.root.apply { + setText(action.text) + setIconResource(action.icon) + setOnClickListener { + action.onClick?.invoke(action, it) + } + setOnLongClickListener { + action.onLongClick?.invoke(action, it) + true + } + action.view = button + } } - } } diff --git a/app/src/main/java/com/itsaky/androidide/fragments/MainFragment.kt b/app/src/main/java/com/itsaky/androidide/fragments/MainFragment.kt index 81a094d4b5..282b63dfc0 100644 --- a/app/src/main/java/com/itsaky/androidide/fragments/MainFragment.kt +++ b/app/src/main/java/com/itsaky/androidide/fragments/MainFragment.kt @@ -3,8 +3,6 @@ package com.itsaky.androidide.fragments import android.content.Intent import android.net.Uri import android.os.Bundle -import android.os.Handler -import android.os.Looper import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -68,8 +66,6 @@ class MainFragment : BaseFragment() { // There are no request codes } - private val handler: Handler = Handler(Looper.getMainLooper()) - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -117,7 +113,7 @@ class MainFragment : BaseFragment() { } } - binding!!.actions.adapter = MainActionsListAdapter(this, actions) + binding!!.actions.adapter = MainActionsListAdapter(actions) binding!!.greetingText.setOnClickListener { TooltipUtils.showWebPage( requireContext(),