4
4
5
5
package at.bitfire.davdroid.settings
6
6
7
+ import at.bitfire.davdroid.TestUtils.getOrAwaitValue
7
8
import dagger.hilt.android.testing.HiltAndroidRule
8
9
import dagger.hilt.android.testing.HiltAndroidTest
10
+ import kotlinx.coroutines.CompletableDeferred
11
+ import kotlinx.coroutines.Dispatchers
12
+ import kotlinx.coroutines.runBlocking
13
+ import org.junit.After
9
14
import org.junit.Assert.assertEquals
10
15
import org.junit.Assert.assertFalse
16
+ import org.junit.Assert.assertNull
17
+ import org.junit.Assert.assertTrue
11
18
import org.junit.Before
12
19
import org.junit.Rule
13
20
import org.junit.Test
@@ -16,6 +23,12 @@ import javax.inject.Inject
16
23
@HiltAndroidTest
17
24
class SettingsManagerTest {
18
25
26
+ companion object {
27
+ /* * Use this setting to test SettingsManager methods. Will be removed after every test run. */
28
+ const val SETTING_TEST = " test"
29
+ }
30
+
31
+
19
32
@get:Rule
20
33
val hiltRule = HiltAndroidRule (this )
21
34
@@ -26,16 +39,58 @@ class SettingsManagerTest {
26
39
hiltRule.inject()
27
40
}
28
41
42
+ @After
43
+ fun removeTestSetting () {
44
+ settingsManager.remove(SETTING_TEST )
45
+ }
46
+
29
47
30
48
@Test
31
- fun testContainsKey_NotExisting () {
49
+ fun test_containsKey_NotExisting () {
32
50
assertFalse(settingsManager.containsKey(" notExisting" ))
33
51
}
34
52
35
53
@Test
36
- fun testContainsKey_Existing () {
54
+ fun test_containsKey_Existing () {
37
55
// provided by DefaultsProvider
38
56
assertEquals(Settings .PROXY_TYPE_SYSTEM , settingsManager.getInt(Settings .PROXY_TYPE ))
39
57
}
40
58
59
+
60
+ @Test
61
+ fun test_getBooleanLive_getValue () = runBlocking(Dispatchers .Main ) { // observeForever can't be run in background thread
62
+ val live = settingsManager.getBooleanLive(SETTING_TEST )
63
+ assertNull(live.value)
64
+
65
+ // set value
66
+ settingsManager.putBoolean(SETTING_TEST , true )
67
+ assertTrue(live.getOrAwaitValue()!! )
68
+
69
+ // set another value
70
+ live.value = false
71
+ assertFalse(live.getOrAwaitValue()!! )
72
+ }
73
+
74
+
75
+ @Test
76
+ fun test_ObserverCalledWhenValueChanges () {
77
+ val value = CompletableDeferred <Int >()
78
+ val observer = SettingsManager .OnChangeListener {
79
+ value.complete(settingsManager.getInt(SETTING_TEST ))
80
+ }
81
+
82
+ try {
83
+ settingsManager.addOnChangeListener(observer)
84
+ settingsManager.putInt(SETTING_TEST , 123 )
85
+
86
+ runBlocking {
87
+ // wait until observer is called
88
+ assertEquals(123 , value.await())
89
+ }
90
+
91
+ } finally {
92
+ settingsManager.removeOnChangeListener(observer)
93
+ }
94
+ }
95
+
41
96
}
0 commit comments