@@ -7,15 +7,57 @@ import androidx.compose.ui.test.ExperimentalTestApi
77import androidx.compose.ui.test.junit4.ComposeContentTestRule
88
99fun reflect (composeTestRule : ComposeContentTestRule ): ComposeUiTest {
10+ if (composeTestRule is ComposeUiTest ) return composeTestRule
1011 var c: Class <* >? = composeTestRule.javaClass
1112 while (c != null && c != Any ::class .java) {
13+ try {
14+ val m = c.getDeclaredMethod(" getComposeTest" )
15+ m.isAccessible = true
16+ val v = m.invoke(composeTestRule)
17+ if (v is ComposeUiTest ) return v
18+ } catch (_: Throwable ) {
19+ }
1220 try {
1321 val f = c.getDeclaredField(" composeTest" )
1422 f.isAccessible = true
1523 val v = f.get(composeTestRule)
1624 if (v is ComposeUiTest ) return v
17- } catch (_: NoSuchFieldException ) {
18- } catch (_: IllegalAccessException ) {
25+ } catch (_: Throwable ) {
26+ }
27+ try {
28+ val f = c.getDeclaredField(" environment" )
29+ f.isAccessible = true
30+ val env = f.get(composeTestRule)
31+ if (env != null ) {
32+ if (env is ComposeUiTest ) return env
33+ try {
34+ val m = env.javaClass.getMethod(" getTest" )
35+ val v = m.invoke(env)
36+ if (v is ComposeUiTest ) return v
37+ } catch (_: Throwable ) {
38+ }
39+ }
40+ } catch (_: Throwable ) {
41+ }
42+ for (m in c.declaredMethods) {
43+ if (m.parameterTypes.isEmpty() && ComposeUiTest ::class .java.isAssignableFrom(m.returnType)) {
44+ try {
45+ m.isAccessible = true
46+ val v = m.invoke(composeTestRule)
47+ if (v is ComposeUiTest ) return v
48+ } catch (_: Throwable ) {
49+ }
50+ }
51+ }
52+ for (f in c.declaredFields) {
53+ if (ComposeUiTest ::class .java.isAssignableFrom(f.type)) {
54+ try {
55+ f.isAccessible = true
56+ val v = f.get(composeTestRule)
57+ if (v is ComposeUiTest ) return v
58+ } catch (_: Throwable ) {
59+ }
60+ }
1961 }
2062 c = c.superclass
2163 }
0 commit comments