11/* 
2-  * Copyright 2023  Google LLC 
2+  * Copyright 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. 
1414 * limitations under the License. 
1515 */  
1616
17- package  com.google.android.fhir.datacapture.views.factories  
17+ package  com.google.android.fhir.datacapture.test.views  
1818
19- import  android.view.View 
2019import  android.widget.FrameLayout 
2120import  android.widget.TextView 
21+ import  androidx.compose.ui.test.assertIsNotDisplayed 
22+ import  androidx.compose.ui.test.junit4.createEmptyComposeRule 
23+ import  androidx.compose.ui.test.onNodeWithTag 
24+ import  androidx.test.ext.junit.rules.ActivityScenarioRule 
25+ import  androidx.test.ext.junit.runners.AndroidJUnit4 
26+ import  androidx.test.platform.app.InstrumentationRegistry 
2227import  com.google.android.fhir.datacapture.R 
28+ import  com.google.android.fhir.datacapture.test.TestActivity 
2329import  com.google.android.fhir.datacapture.validation.NotValidated 
2430import  com.google.android.fhir.datacapture.views.QuestionnaireViewItem 
31+ import  com.google.android.fhir.datacapture.views.compose.ERROR_TEXT_AT_HEADER_TEST_TAG 
32+ import  com.google.android.fhir.datacapture.views.factories.DisplayViewHolderFactory 
33+ import  com.google.android.fhir.datacapture.views.factories.QuestionnaireItemViewHolder 
2534import  com.google.common.truth.Truth.assertThat 
2635import  org.hl7.fhir.r4.model.Questionnaire 
2736import  org.hl7.fhir.r4.model.QuestionnaireResponse 
37+ import  org.junit.Before 
38+ import  org.junit.Rule 
2839import  org.junit.Test 
2940import  org.junit.runner.RunWith 
30- import  org.robolectric.RobolectricTestRunner 
31- import  org.robolectric.RuntimeEnvironment 
3241
33- @RunWith(RobolectricTestRunner ::class )
42+ @RunWith(AndroidJUnit4 ::class )
3443class  DisplayViewHolderFactoryTest  {
35-   private  val  parent = 
36-     FrameLayout (
37-       RuntimeEnvironment .getApplication().apply  {
38-         setTheme(com.google.android.material.R .style.Theme_Material3_DayNight )
39-       },
40-     )
41-   private  val  viewHolder =  DisplayViewHolderFactory .create(parent)
44+   @get:Rule
45+   val  activityScenarioRule:  ActivityScenarioRule <TestActivity > = 
46+     ActivityScenarioRule (TestActivity ::class .java)
47+ 
48+   @get:Rule val  composeTestRule =  createEmptyComposeRule()
49+ 
50+   private  lateinit  var  viewHolder:  QuestionnaireItemViewHolder 
51+ 
52+   @Before
53+   fun  setUp () {
54+     activityScenarioRule.scenario.onActivity { activity -> 
55+       viewHolder =  DisplayViewHolderFactory .create(FrameLayout (activity))
56+       activity.setContentView(viewHolder.itemView)
57+     }
58+ 
59+     InstrumentationRegistry .getInstrumentation().waitForIdleSync()
60+   }
4261
4362  @Test
4463  fun  shouldSetQuestionHeader () {
@@ -51,12 +70,15 @@ class DisplayViewHolderFactoryTest {
5170      ),
5271    )
5372
73+     //  Synchronize
74+     composeTestRule.waitForIdle()
75+ 
5476    assertThat(viewHolder.itemView.findViewById<TextView >(R .id.question).text.toString())
5577      .isEqualTo(" Display" 
5678  }
5779
5880  @Test
59-   fun  `hides error textview in the header` 
81+   fun  hidesErrorTextviewInTheHeader () {
6082    viewHolder.bind(
6183      QuestionnaireViewItem (
6284        Questionnaire .QuestionnaireItemComponent (),
@@ -65,8 +87,9 @@ class DisplayViewHolderFactoryTest {
6587        answersChangedCallback =  { _, _, _, _ ->  },
6688      ),
6789    )
68- 
69-     assertThat(viewHolder.itemView.findViewById<TextView >(R .id.error_text_at_header).visibility)
70-       .isEqualTo(View .GONE )
90+     composeTestRule
91+       .onNodeWithTag(ERROR_TEXT_AT_HEADER_TEST_TAG )
92+       .assertIsNotDisplayed()
93+       .assertDoesNotExist()
7194  }
7295}
0 commit comments