From 56912ea0a4c19fc884df648f75ae47752f8795a8 Mon Sep 17 00:00:00 2001 From: Callum Stott Date: Thu, 18 May 2023 09:42:50 +0300 Subject: [PATCH 1/4] Fix list view heights for delete lists --- collect_app/src/main/res/layout/delete_blank_form_layout.xml | 2 +- collect_app/src/main/res/layout/file_manager_list.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/collect_app/src/main/res/layout/delete_blank_form_layout.xml b/collect_app/src/main/res/layout/delete_blank_form_layout.xml index cd95a3ee7cf..5b24a24e93b 100644 --- a/collect_app/src/main/res/layout/delete_blank_form_layout.xml +++ b/collect_app/src/main/res/layout/delete_blank_form_layout.xml @@ -7,7 +7,7 @@ diff --git a/collect_app/src/main/res/layout/file_manager_list.xml b/collect_app/src/main/res/layout/file_manager_list.xml index 47944990b00..b69f856b4d3 100644 --- a/collect_app/src/main/res/layout/file_manager_list.xml +++ b/collect_app/src/main/res/layout/file_manager_list.xml @@ -22,7 +22,7 @@ the License. From 3cd4d5e6a25a0c9db980537663bf3849e28798eb Mon Sep 17 00:00:00 2001 From: Callum Stott Date: Thu, 18 May 2023 14:35:55 +0300 Subject: [PATCH 2/4] Fix test that should use RecyclerView specific actions --- .../formlists/DeleteBlankFormFragmentTest.kt | 12 +++++++----- testshared/build.gradle | 1 + .../odk/collect/testshared/RecyclerViewMatcher.kt | 13 +++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt b/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt index 6df26c74aad..f003fee0a83 100644 --- a/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt +++ b/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt @@ -43,6 +43,8 @@ import org.odk.collect.androidshared.ui.FragmentFactoryBuilder import org.odk.collect.androidshared.ui.MultiSelectViewModel import org.odk.collect.fragmentstest.FragmentScenarioLauncherRule import org.odk.collect.testshared.RecyclerViewMatcher +import org.odk.collect.testshared.clickOnItemWith +import org.odk.collect.testshared.recyclerView @RunWith(AndroidJUnit4::class) class DeleteBlankFormFragmentTest { @@ -101,8 +103,8 @@ class DeleteBlankFormFragmentTest { blankFormListItem(databaseId = 3, formName = "Form 3") ) - onView(withText("Form 1")).perform(click()) - onView(withText("Form 3")).perform(click()) + onView(recyclerView()).perform(clickOnItemWith(withText("Form 1"))) + onView(recyclerView()).perform(clickOnItemWith(withText("Form 3"))) assertThat(multiSelectViewModel.getSelected().value, equalTo(setOf(1, 3))) } @@ -115,10 +117,10 @@ class DeleteBlankFormFragmentTest { blankFormListItem(databaseId = 2, formName = "Form 2") ) - onView(withText("Form 1")).perform(click()) - onView(withText("Form 2")).perform(click()) + onView(recyclerView()).perform(clickOnItemWith(withText("Form 1"))) + onView(recyclerView()).perform(clickOnItemWith(withText("Form 2"))) - onView(withText("Form 2")).perform(click()) + onView(recyclerView()).perform(clickOnItemWith(withText("Form 2"))) assertThat(multiSelectViewModel.getSelected().value, equalTo(setOf(1))) } diff --git a/testshared/build.gradle b/testshared/build.gradle index c4ef16c20ae..af58c6c6c28 100644 --- a/testshared/build.gradle +++ b/testshared/build.gradle @@ -48,6 +48,7 @@ dependencies { implementation Dependencies.robolectric implementation Dependencies.junit implementation Dependencies.androidx_test_espresso_intents + implementation Dependencies.androidx_test_espresso_contrib implementation Dependencies.android_material implementation Dependencies.danlew_android_joda implementation(Dependencies.androidx_fragment_testing) { diff --git a/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt b/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt index e7cc85319e0..321c6fa7a0f 100644 --- a/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt +++ b/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt @@ -3,6 +3,11 @@ package org.odk.collect.testshared import android.content.res.Resources import android.view.View import androidx.recyclerview.widget.RecyclerView +import androidx.test.espresso.ViewAction +import androidx.test.espresso.action.ViewActions +import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItem +import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom import org.hamcrest.Description import org.hamcrest.Matcher import org.hamcrest.TypeSafeMatcher @@ -72,3 +77,11 @@ class RecyclerViewMatcher private constructor(private val recyclerViewId: Int) { } } } + +fun recyclerView(): Matcher { + return isAssignableFrom(RecyclerView::class.java) +} + +fun clickOnItemWith(matcher: Matcher): ViewAction { + return actionOnItem(ViewMatchers.hasDescendant(matcher), ViewActions.click()) +} From 391493c487a1a73529a0e8ec6cfb36c6b87dd696 Mon Sep 17 00:00:00 2001 From: Callum Stott Date: Thu, 18 May 2023 14:46:45 +0300 Subject: [PATCH 3/4] Remove qualifiers --- .../android/formlists/DeleteBlankFormFragmentTest.kt | 6 +++--- .../java/org/odk/collect/testshared/RecyclerViewMatcher.kt | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt b/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt index f003fee0a83..a6221d32a8c 100644 --- a/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt +++ b/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt @@ -42,7 +42,7 @@ import org.odk.collect.android.formlists.blankformlist.DeleteBlankFormFragment import org.odk.collect.androidshared.ui.FragmentFactoryBuilder import org.odk.collect.androidshared.ui.MultiSelectViewModel import org.odk.collect.fragmentstest.FragmentScenarioLauncherRule -import org.odk.collect.testshared.RecyclerViewMatcher +import org.odk.collect.testshared.RecyclerViewMatcher.Companion.withRecyclerView import org.odk.collect.testshared.clickOnItemWith import org.odk.collect.testshared.recyclerView @@ -90,8 +90,8 @@ class DeleteBlankFormFragmentTest { multiSelectViewModel.select(2) - onView(RecyclerViewMatcher.withRecyclerView(R.id.list).atPositionOnView(1, R.id.form_title)).check(matches(withText("Form 2"))) - onView(RecyclerViewMatcher.withRecyclerView(R.id.list).atPositionOnView(1, R.id.checkbox)).check(matches(isChecked())) + onView(withRecyclerView(R.id.list).atPositionOnView(1, R.id.form_title)).check(matches(withText("Form 2"))) + onView(withRecyclerView(R.id.list).atPositionOnView(1, R.id.checkbox)).check(matches(isChecked())) } @Test diff --git a/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt b/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt index 321c6fa7a0f..9fcba6945a7 100644 --- a/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt +++ b/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt @@ -3,10 +3,11 @@ package org.odk.collect.testshared import android.content.res.Resources import android.view.View import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.test.espresso.ViewAction -import androidx.test.espresso.action.ViewActions +import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItem -import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.espresso.matcher.ViewMatchers.hasDescendant import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom import org.hamcrest.Description import org.hamcrest.Matcher @@ -83,5 +84,5 @@ fun recyclerView(): Matcher { } fun clickOnItemWith(matcher: Matcher): ViewAction { - return actionOnItem(ViewMatchers.hasDescendant(matcher), ViewActions.click()) + return actionOnItem(hasDescendant(matcher), click()) } From 6cd0c10f9c3d589268b3b7a41b1ca4bbbc05a9fa Mon Sep 17 00:00:00 2001 From: Callum Stott Date: Thu, 18 May 2023 14:50:14 +0300 Subject: [PATCH 4/4] Move view action and matchers to dedicated objects --- .../formlists/DeleteBlankFormFragmentTest.kt | 4 ++-- .../odk/collect/testshared/RecyclerViewMatcher.kt | 14 -------------- .../java/org/odk/collect/testshared/ViewActions.kt | 10 ++++++++++ .../org/odk/collect/testshared/ViewMatchers.kt | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 testshared/src/main/java/org/odk/collect/testshared/ViewMatchers.kt diff --git a/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt b/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt index a6221d32a8c..4f9e8062c48 100644 --- a/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt +++ b/collect_app/src/test/java/org/odk/collect/android/formlists/DeleteBlankFormFragmentTest.kt @@ -43,8 +43,8 @@ import org.odk.collect.androidshared.ui.FragmentFactoryBuilder import org.odk.collect.androidshared.ui.MultiSelectViewModel import org.odk.collect.fragmentstest.FragmentScenarioLauncherRule import org.odk.collect.testshared.RecyclerViewMatcher.Companion.withRecyclerView -import org.odk.collect.testshared.clickOnItemWith -import org.odk.collect.testshared.recyclerView +import org.odk.collect.testshared.ViewActions.clickOnItemWith +import org.odk.collect.testshared.ViewMatchers.recyclerView @RunWith(AndroidJUnit4::class) class DeleteBlankFormFragmentTest { diff --git a/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt b/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt index 9fcba6945a7..e7cc85319e0 100644 --- a/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt +++ b/testshared/src/main/java/org/odk/collect/testshared/RecyclerViewMatcher.kt @@ -3,12 +3,6 @@ package org.odk.collect.testshared import android.content.res.Resources import android.view.View import androidx.recyclerview.widget.RecyclerView -import androidx.recyclerview.widget.RecyclerView.ViewHolder -import androidx.test.espresso.ViewAction -import androidx.test.espresso.action.ViewActions.click -import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItem -import androidx.test.espresso.matcher.ViewMatchers.hasDescendant -import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom import org.hamcrest.Description import org.hamcrest.Matcher import org.hamcrest.TypeSafeMatcher @@ -78,11 +72,3 @@ class RecyclerViewMatcher private constructor(private val recyclerViewId: Int) { } } } - -fun recyclerView(): Matcher { - return isAssignableFrom(RecyclerView::class.java) -} - -fun clickOnItemWith(matcher: Matcher): ViewAction { - return actionOnItem(hasDescendant(matcher), click()) -} diff --git a/testshared/src/main/java/org/odk/collect/testshared/ViewActions.kt b/testshared/src/main/java/org/odk/collect/testshared/ViewActions.kt index ad6556a7f2e..7f500982038 100644 --- a/testshared/src/main/java/org/odk/collect/testshared/ViewActions.kt +++ b/testshared/src/main/java/org/odk/collect/testshared/ViewActions.kt @@ -5,8 +5,13 @@ import android.view.View import android.view.ViewGroup import androidx.annotation.StringRes import androidx.core.view.allViews +import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.test.espresso.UiController import androidx.test.espresso.ViewAction +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItem +import androidx.test.espresso.matcher.ViewMatchers.hasDescendant +import org.hamcrest.Matcher object ViewActions { @@ -25,4 +30,9 @@ object ViewActions { } } } + + @JvmStatic + fun clickOnItemWith(matcher: Matcher): ViewAction { + return actionOnItem(hasDescendant(matcher), click()) + } } diff --git a/testshared/src/main/java/org/odk/collect/testshared/ViewMatchers.kt b/testshared/src/main/java/org/odk/collect/testshared/ViewMatchers.kt new file mode 100644 index 00000000000..9793e078d6c --- /dev/null +++ b/testshared/src/main/java/org/odk/collect/testshared/ViewMatchers.kt @@ -0,0 +1,14 @@ +package org.odk.collect.testshared + +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import androidx.test.espresso.matcher.ViewMatchers +import org.hamcrest.Matcher + +object ViewMatchers { + + @JvmStatic + fun recyclerView(): Matcher { + return ViewMatchers.isAssignableFrom(RecyclerView::class.java) + } +}