@@ -4,7 +4,6 @@ import android.graphics.Bitmap
44import androidx.compose.ui.test.assertIsDisplayed
55import androidx.compose.ui.test.junit4.createEmptyComposeRule
66import androidx.compose.ui.test.onNodeWithTag
7- import androidx.compose.ui.test.onNodeWithText
87import androidx.compose.ui.test.performClick
98import androidx.compose.ui.test.performScrollToIndex
109import androidx.test.core.graphics.writeToTestStorage
@@ -20,7 +19,9 @@ import androidx.test.espresso.matcher.ViewMatchers.withText
2019import androidx.test.ext.junit.rules.activityScenarioRule
2120import androidx.test.ext.junit.runners.AndroidJUnit4
2221import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
22+ import info.appdev.chartexample.notimportant.DemoBase
2323import info.appdev.chartexample.notimportant.DemoBase.Companion.optionMenus
24+ import info.appdev.chartexample.notimportant.DemoBaseCompose
2425import info.appdev.chartexample.notimportant.MainActivity
2526import info.hannes.timber.DebugFormatTree
2627import org.junit.After
@@ -103,11 +104,97 @@ class StartTest {
103104 onView(ViewMatchers .isRoot())
104105 .perform(captureToBitmap { bitmap: Bitmap -> bitmap.writeToTestStorage(" ${javaClass.simpleName} _${nameRule.methodName} -${index} -${it.simpleName} -${contentItem.name} -1SampleClick" ) })
105106
106- optionMenu = " "
107- optionMenus.filter { plain -> Character .isDigit(plain.first()) }.forEach { filteredTitle ->
108- optionMenu = " $index ->$filteredTitle "
109- openActionBarOverflowOrOptionsMenu(getInstrumentation().targetContext)
110- screenshotOfOptionMenu(" ${javaClass.simpleName} _${nameRule.methodName} -${index} -${it.simpleName} -${contentItem.name} " , filteredTitle)
107+ // Test option menus based on activity type
108+ if (DemoBase ::class .java.isAssignableFrom(it)) {
109+ // Test traditional ActionBar menu for DemoBase activities
110+ optionMenu = " "
111+ optionMenus.filter { plain -> plain.isNotEmpty() && Character .isDigit(plain.first()) }.forEach { filteredTitle ->
112+ optionMenu = " $index ->$filteredTitle "
113+ Timber .d(" optionMenu=$optionMenu " )
114+ openActionBarOverflowOrOptionsMenu(getInstrumentation().targetContext)
115+ Timber .d(" screenshot optionMenu=$optionMenu " )
116+ screenshotOfOptionMenu(" ${javaClass.simpleName} _${nameRule.methodName} -${index} -${it.simpleName} -${contentItem.name} " , filteredTitle)
117+ }
118+ } else if (DemoBaseCompose ::class .java.isAssignableFrom(it)) {
119+ // Test Compose dropdown menu for DemoBaseCompose activities
120+ Timber .d(" Testing Compose menu for: ${it.simpleName} " )
121+ optionMenu = " "
122+
123+ try {
124+ // Click the menu button to open dropdown
125+ composeTestRule
126+ .onNodeWithTag(" menuButton" )
127+ .assertIsDisplayed()
128+ .performClick()
129+ composeTestRule.waitForIdle()
130+ Thread .sleep(100 ) // Wait for dropdown to appear
131+
132+ // Define menu items to test (those starting with numbers in traditional menus)
133+ val composeMenuItems = listOf (
134+ " Toggle Values" ,
135+ " Toggle Icons" ,
136+ " Toggle Highlight" ,
137+ " Toggle Pinch Zoom" ,
138+ " Toggle Auto Scale MinMax" ,
139+ " Toggle Bar Borders" ,
140+ // "Animate X",
141+ // "Animate Y",
142+ // "Animate XY",
143+ // "Save to Gallery"
144+ )
145+
146+ composeMenuItems.forEach { menuTitle ->
147+ try {
148+ optionMenu = " $index ->$menuTitle "
149+ Timber .d(" Testing Compose menu item: $optionMenu " )
150+
151+ // Click the menu item
152+ composeTestRule
153+ .onNodeWithTag(" menuItem_$menuTitle " )
154+ .performClick()
155+ composeTestRule.waitForIdle()
156+ Thread .sleep(150 ) // Wait for action to complete
157+ onView(ViewMatchers .isRoot())
158+ .perform(captureToBitmap { bitmap: Bitmap ->
159+ bitmap.writeToTestStorage(" ${javaClass.simpleName} _${nameRule.methodName} -${index} -${it.simpleName} -${contentItem.name} -${menuTitle
160+ .replace(" " ," " )
161+ } " )
162+ })
163+
164+ // Reopen menu for next item
165+ composeTestRule
166+ .onNodeWithTag(" menuButton" )
167+ .performClick()
168+ composeTestRule.waitForIdle()
169+ Thread .sleep(100 )
170+ } catch (e: Exception ) {
171+ Timber .w(" Could not test menu item '$menuTitle ': ${e.message} " )
172+ // Try to reopen menu if it closed unexpectedly
173+ try {
174+ composeTestRule
175+ .onNodeWithTag(" menuButton" )
176+ .performClick()
177+ composeTestRule.waitForIdle()
178+ } catch (_: Exception ) {
179+ // Menu button might not be available
180+ }
181+ }
182+ }
183+
184+ // Close the menu before going back
185+ try {
186+ // Click outside to close menu or press back
187+ Espresso .pressBack()
188+ composeTestRule.waitForIdle()
189+ } catch (_: Exception ) {
190+ // Menu might already be closed
191+ }
192+
193+ } catch (e: Exception ) {
194+ Timber .e(" Error testing Compose menu: ${e.message} " , e)
195+ }
196+ } else {
197+ Timber .d(" Unknown activity type: ${it.simpleName} " )
111198 }
112199
113200 // Thread.sleep(100)
0 commit comments