11/* 
2-  * Copyright 2023 Google LLC 
2+  * Copyright 2023-2025  Google LLC 
33 * 
44 * Licensed under the Apache License, Version 2.0 (the "License"); 
55 * you may not use this file except in compliance with the License. 
@@ -21,6 +21,7 @@ import android.view.View
2121import  android.widget.Button 
2222import  android.widget.FrameLayout 
2323import  android.widget.TextView 
24+ import  androidx.compose.ui.test.junit4.createEmptyComposeRule 
2425import  androidx.constraintlayout.widget.ConstraintLayout 
2526import  androidx.test.ext.junit.rules.ActivityScenarioRule 
2627import  androidx.test.ext.junit.runners.AndroidJUnit4 
@@ -44,19 +45,22 @@ import org.junit.runner.RunWith
4445@RunWith(AndroidJUnit4 ::class )
4546class  AttachmentViewHolderFactoryEspressoTest  {
4647
47-   @Rule
48-   @JvmField
48+   @get:Rule
4949  var  activityScenarioRule:  ActivityScenarioRule <TestActivity > = 
5050    ActivityScenarioRule (TestActivity ::class .java)
5151
52-   private  lateinit  var  parent:  FrameLayout 
52+   @get:Rule val  composeTestRule =  createEmptyComposeRule()
53+ 
5354  private  lateinit  var  viewHolder:  QuestionnaireItemViewHolder 
5455
5556  @Before
5657  fun  setup () {
57-     activityScenarioRule.getScenario().onActivity { activity ->  parent =  FrameLayout (activity) }
58-     viewHolder =  AttachmentViewHolderFactory .create(parent)
59-     setTestLayout(viewHolder.itemView)
58+     activityScenarioRule.scenario.onActivity { activity -> 
59+       viewHolder =  AttachmentViewHolderFactory .create(FrameLayout (activity))
60+       activity.setContentView(viewHolder.itemView)
61+     }
62+ 
63+     InstrumentationRegistry .getInstrumentation().waitForIdleSync()
6064  }
6165
6266  @Test
@@ -74,7 +78,7 @@ class AttachmentViewHolderFactoryEspressoTest {
7478        answersChangedCallback =  { _, _, _, _ ->  },
7579      )
7680
77-     runOnUI {  viewHolder.bind(questionnaireItemView) } 
81+     viewHolder.bind(questionnaireItemView)
7882
7983    assertThat(viewHolder.itemView.findViewById<Button >(R .id.take_photo).visibility)
8084      .isEqualTo(View .VISIBLE )
@@ -83,7 +87,7 @@ class AttachmentViewHolderFactoryEspressoTest {
8387      .isEqualTo(View .VISIBLE )
8488
8589    assertThat(viewHolder.itemView.findViewById<Button >(R .id.upload_photo).text)
86-       .isEqualTo(parent .context.getString(R .string.upload_photo))
90+       .isEqualTo(viewHolder.itemView .context.getString(R .string.upload_photo))
8791  }
8892
8993  @Test
@@ -101,13 +105,13 @@ class AttachmentViewHolderFactoryEspressoTest {
101105        answersChangedCallback =  { _, _, _, _ ->  },
102106      )
103107
104-     runOnUI {  viewHolder.bind(questionnaireItemView) } 
108+     viewHolder.bind(questionnaireItemView)
105109
106110    assertThat(viewHolder.itemView.findViewById<Button >(R .id.upload_audio).visibility)
107111      .isEqualTo(View .VISIBLE )
108112
109113    assertThat(viewHolder.itemView.findViewById<Button >(R .id.upload_audio).text)
110-       .isEqualTo(parent .context.getString(R .string.upload_audio))
114+       .isEqualTo(viewHolder.itemView .context.getString(R .string.upload_audio))
111115  }
112116
113117  @Test
@@ -125,13 +129,13 @@ class AttachmentViewHolderFactoryEspressoTest {
125129        answersChangedCallback =  { _, _, _, _ ->  },
126130      )
127131
128-     runOnUI {  viewHolder.bind(questionnaireItemView) } 
132+     viewHolder.bind(questionnaireItemView)
129133
130134    assertThat(viewHolder.itemView.findViewById<Button >(R .id.upload_video).visibility)
131135      .isEqualTo(View .VISIBLE )
132136
133137    assertThat(viewHolder.itemView.findViewById<Button >(R .id.upload_video).text)
134-       .isEqualTo(parent .context.getString(R .string.upload_video))
138+       .isEqualTo(viewHolder.itemView .context.getString(R .string.upload_video))
135139  }
136140
137141  @Test
@@ -149,13 +153,13 @@ class AttachmentViewHolderFactoryEspressoTest {
149153        answersChangedCallback =  { _, _, _, _ ->  },
150154      )
151155
152-     runOnUI {  viewHolder.bind(questionnaireItemView) } 
156+     viewHolder.bind(questionnaireItemView)
153157
154158    assertThat(viewHolder.itemView.findViewById<Button >(R .id.upload_document).visibility)
155159      .isEqualTo(View .VISIBLE )
156160
157161    assertThat(viewHolder.itemView.findViewById<Button >(R .id.upload_document).text)
158-       .isEqualTo(parent .context.getString(R .string.upload_document))
162+       .isEqualTo(viewHolder.itemView .context.getString(R .string.upload_document))
159163  }
160164
161165  @Test
@@ -177,7 +181,7 @@ class AttachmentViewHolderFactoryEspressoTest {
177181        answersChangedCallback =  { _, _, _, _ ->  },
178182      )
179183
180-     runOnUI {  viewHolder.bind(questionnaireItemView) } 
184+     viewHolder.bind(questionnaireItemView)
181185
182186    assertThat(viewHolder.itemView.findViewById<Button >(R .id.take_photo).visibility)
183187      .isEqualTo(View .VISIBLE )
@@ -186,7 +190,7 @@ class AttachmentViewHolderFactoryEspressoTest {
186190      .isEqualTo(View .VISIBLE )
187191
188192    assertThat(viewHolder.itemView.findViewById<Button >(R .id.upload_file).text)
189-       .isEqualTo(parent .context.getString(R .string.upload_file))
193+       .isEqualTo(viewHolder.itemView .context.getString(R .string.upload_file))
190194  }
191195
192196  @Test
@@ -219,7 +223,7 @@ class AttachmentViewHolderFactoryEspressoTest {
219223        answersChangedCallback =  { _, _, _, _ ->  },
220224      )
221225
222-     runOnUI {  viewHolder.bind(questionnaireItemView) } 
226+     viewHolder.bind(questionnaireItemView)
223227
224228    assertThat(viewHolder.itemView.findViewById<ConstraintLayout >(R .id.photo_preview).visibility)
225229      .isEqualTo(View .VISIBLE )
@@ -257,7 +261,7 @@ class AttachmentViewHolderFactoryEspressoTest {
257261        answersChangedCallback =  { _, _, _, _ ->  },
258262      )
259263
260-     runOnUI {  viewHolder.bind(questionnaireItemView) } 
264+     viewHolder.bind(questionnaireItemView)
261265
262266    assertThat(viewHolder.itemView.findViewById<ConstraintLayout >(R .id.file_preview).visibility)
263267      .isEqualTo(View .VISIBLE )
@@ -296,7 +300,7 @@ class AttachmentViewHolderFactoryEspressoTest {
296300        answersChangedCallback =  { _, _, _, _ ->  },
297301      )
298302
299-     runOnUI {  viewHolder.bind(questionnaireItemView) } 
303+     viewHolder.bind(questionnaireItemView)
300304
301305    assertThat(viewHolder.itemView.findViewById<ConstraintLayout >(R .id.file_preview).visibility)
302306      .isEqualTo(View .VISIBLE )
@@ -335,7 +339,7 @@ class AttachmentViewHolderFactoryEspressoTest {
335339        answersChangedCallback =  { _, _, _, _ ->  },
336340      )
337341
338-     runOnUI {  viewHolder.bind(questionnaireItemView) } 
342+     viewHolder.bind(questionnaireItemView)
339343
340344    assertThat(viewHolder.itemView.findViewById<ConstraintLayout >(R .id.file_preview).visibility)
341345      .isEqualTo(View .VISIBLE )
@@ -363,7 +367,7 @@ class AttachmentViewHolderFactoryEspressoTest {
363367        answersChangedCallback =  { _, _, _, _ ->  },
364368      )
365369
366-     runOnUI {  viewHolder.bind(questionnaireItemView) } 
370+     viewHolder.bind(questionnaireItemView)
367371
368372    assertThat(viewHolder.itemView.findViewById<ConstraintLayout >(R .id.photo_preview).visibility)
369373      .isEqualTo(View .GONE )
@@ -406,7 +410,7 @@ class AttachmentViewHolderFactoryEspressoTest {
406410        answersChangedCallback =  { _, _, _, _ ->  },
407411      )
408412
409-     runOnUI {  viewHolder.bind(questionnaireItem) } 
413+     viewHolder.bind(questionnaireItem)
410414
411415    assertThat(viewHolder.itemView.findViewById<ConstraintLayout >(R .id.photo_preview).visibility)
412416      .isEqualTo(View .VISIBLE )
@@ -428,20 +432,9 @@ class AttachmentViewHolderFactoryEspressoTest {
428432        answersChangedCallback =  { _, _, _, _ ->  },
429433      )
430434
431-     runOnUI {  viewHolder.bind(questionnaireItemWithNullAnswer) } 
435+     viewHolder.bind(questionnaireItemWithNullAnswer)
432436
433437    assertThat(viewHolder.itemView.findViewById<ConstraintLayout >(R .id.photo_preview).visibility)
434438      .isEqualTo(View .GONE )
435439  }
436- 
437-   /* * Method to run code snippet on UI/main thread */ 
438-   private  fun  runOnUI (action :  () ->  Unit ) {
439-     activityScenarioRule.scenario.onActivity { activity ->  action() }
440-   }
441- 
442-   /* * Method to set content view for test activity */ 
443-   private  fun  setTestLayout (view :  View ) {
444-     activityScenarioRule.scenario.onActivity { activity ->  activity.setContentView(view) }
445-     InstrumentationRegistry .getInstrumentation().waitForIdleSync()
446-   }
447440}
0 commit comments