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