@@ -3,13 +3,14 @@ package org.kabiri.android.usbterminal
33import androidx.test.espresso.Espresso.onView
44import androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu
55import androidx.test.espresso.NoMatchingViewException
6- import androidx.test.espresso.assertion.ViewAssertions.matches
76import androidx.test.espresso.action.ViewActions.click
7+ import androidx.test.espresso.assertion.ViewAssertions.matches
88import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
99import androidx.test.espresso.matcher.ViewMatchers.withId
10+ import androidx.test.espresso.matcher.ViewMatchers.withText
1011import androidx.test.ext.junit.rules.activityScenarioRule
1112import androidx.test.ext.junit.runners.AndroidJUnit4
12- import androidx.test.platform.app.InstrumentationRegistry
13+ import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
1314import org.junit.Rule
1415import org.junit.Test
1516import org.junit.runner.RunWith
@@ -21,15 +22,19 @@ internal class MainActivityAndroidTest {
2122 @get:Rule
2223 var rule = activityScenarioRule<MainActivity >()
2324
24- private fun ensureMenuIsAccessible (menuItemId : Int ) {
25+ private fun ensureMenuIsAccessible (
26+ menuItemId : Int ,
27+ onVisible : () -> Unit ,
28+ onOverflow : () -> Unit
29+ ) {
2530 try {
2631 // Try to find the menu item first
2732 onView(withId(menuItemId)).check(matches(isDisplayed()))
33+ onVisible()
2834 } catch (_: NoMatchingViewException ) {
2935 // If not found then open the overflow menu
30- openActionBarOverflowOrOptionsMenu(
31- InstrumentationRegistry .getInstrumentation().targetContext
32- )
36+ openActionBarOverflowOrOptionsMenu(getInstrumentation().targetContext)
37+ onOverflow()
3338 }
3439 }
3540
@@ -44,31 +49,70 @@ internal class MainActivityAndroidTest {
4449 }
4550
4651 @Test
47- fun checkActionMenuItemsAreDisplayed () {
48- // arrange
49- // act
50- // Ensure action items are accessible, either in the toolbar or via overflow
51- ensureMenuIsAccessible(R .id.actionSettings)
52- ensureMenuIsAccessible(R .id.actionConnect)
53- ensureMenuIsAccessible(R .id.actionDisconnect)
52+ fun checkActionMenuItemSettingsIsDisplayed () = ensureMenuIsAccessible(
53+ menuItemId = R .id.actionSettings,
54+ onVisible = {
5455
55- // assert
56- // Check menu items are displayed
57- onView(withId(R .id.actionSettings)).check(matches(isDisplayed()))
58- onView(withId(R .id.actionConnect)).check(matches(isDisplayed()))
59- onView(withId(R .id.actionDisconnect)).check(matches(isDisplayed()))
60- }
56+ // assert
57+ onView(withId(R .id.actionSettings)).check(matches(isDisplayed()))
58+ },
59+ onOverflow = {
60+
61+ // assert
62+ onView(withText(R .string.title_settings)).check(matches(isDisplayed()))
63+ }
64+ )
65+
66+ @Test
67+ fun checkActionMenuItemConnectIsDisplayed () = ensureMenuIsAccessible(
68+ menuItemId = R .id.actionSettings,
69+ onVisible = {
70+
71+ // assert
72+ onView(withId(R .id.actionConnect)).check(matches(isDisplayed()))
73+ },
74+ onOverflow = {
75+
76+ // assert
77+ onView(withText(R .string.title_connect)).check(matches(isDisplayed()))
78+ }
79+ )
80+
81+ @Test
82+ fun checkActionMenuItemDisconnectIsDisplayed () = ensureMenuIsAccessible(
83+ menuItemId = R .id.actionSettings,
84+ onVisible = {
85+
86+ // assert
87+ onView(withId(R .id.actionDisconnect)).check(matches(isDisplayed()))
88+ },
89+ onOverflow = {
90+
91+ // assert
92+ onView(withText(R .string.title_disconnect)).check(matches(isDisplayed()))
93+ }
94+ )
6195
6296 @Test
6397 fun clickingSettingsOpensSettingsBottomSheet () {
6498 // arrange
65- // Ensure the action item is accisble, either in the toolbar or via overflow
66- ensureMenuIsAccessible(R .id.actionSettings)
99+ ensureMenuIsAccessible(
100+ menuItemId = R .id.actionSettings,
101+ onVisible = {
67102
68- // act
69- onView(withId(R .id.actionSettings)).perform(click())
103+ // act
104+ onView(withId(R .id.actionSettings)).perform(click())
70105
71- // assert
72- onView(withId(R .id.composeViewSettingContent)).check(matches(isDisplayed()))
106+ // assert
107+ onView(withId(R .id.composeViewSettingContent)).check(matches(isDisplayed()))
108+ },
109+ onOverflow = {
110+ // act
111+ onView(withText(R .string.title_settings)).perform(click())
112+
113+ // assert
114+ onView(withId(R .id.composeViewSettingContent)).check(matches(isDisplayed()))
115+ }
116+ )
73117 }
74118}
0 commit comments