1
1
/*
2
- * Copyright 2023 Google LLC
2
+ * Copyright 2025 Google LLC
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
14
14
* limitations under the License.
15
15
*/
16
16
17
- package com.google.android.fhir.datacapture.views.factories
17
+ package com.google.android.fhir.datacapture.test.views
18
18
19
- import android.view.View
20
19
import android.widget.FrameLayout
21
20
import 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
22
27
import com.google.android.fhir.datacapture.R
28
+ import com.google.android.fhir.datacapture.test.TestActivity
23
29
import com.google.android.fhir.datacapture.validation.NotValidated
24
30
import 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
25
34
import com.google.common.truth.Truth.assertThat
26
35
import org.hl7.fhir.r4.model.Questionnaire
27
36
import org.hl7.fhir.r4.model.QuestionnaireResponse
37
+ import org.junit.Before
38
+ import org.junit.Rule
28
39
import org.junit.Test
29
40
import org.junit.runner.RunWith
30
- import org.robolectric.RobolectricTestRunner
31
- import org.robolectric.RuntimeEnvironment
32
41
33
- @RunWith(RobolectricTestRunner ::class )
42
+ @RunWith(AndroidJUnit4 ::class )
34
43
class 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
+ }
42
61
43
62
@Test
44
63
fun shouldSetQuestionHeader () {
@@ -51,12 +70,15 @@ class DisplayViewHolderFactoryTest {
51
70
),
52
71
)
53
72
73
+ // Synchronize
74
+ composeTestRule.waitForIdle()
75
+
54
76
assertThat(viewHolder.itemView.findViewById<TextView >(R .id.question).text.toString())
55
77
.isEqualTo(" Display" )
56
78
}
57
79
58
80
@Test
59
- fun `hides error textview in the header` () {
81
+ fun hidesErrorTextviewInTheHeader () {
60
82
viewHolder.bind(
61
83
QuestionnaireViewItem (
62
84
Questionnaire .QuestionnaireItemComponent (),
@@ -65,8 +87,9 @@ class DisplayViewHolderFactoryTest {
65
87
answersChangedCallback = { _, _, _, _ -> },
66
88
),
67
89
)
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()
71
94
}
72
95
}
0 commit comments