1 /*
2  * Copyright 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.room
18 
19 import androidx.lifecycle.LiveData
20 import java.util.concurrent.Callable
21 import org.hamcrest.CoreMatchers.`is`
22 import org.hamcrest.MatcherAssert.assertThat
23 import org.junit.Before
24 import org.junit.Test
25 import org.junit.runner.RunWith
26 import org.junit.runners.JUnit4
27 import org.mockito.Mockito
28 
29 @RunWith(JUnit4::class)
30 class InvalidationLiveDataContainerTest {
31     private lateinit var container: InvalidationLiveDataContainer
32 
33     @Before
initnull34     fun init() {
35         container = InvalidationLiveDataContainer(Mockito.mock(RoomDatabase::class.java))
36     }
37 
38     @Test
addnull39     fun add() {
40         val liveData = createLiveData()
41         assertThat(container.liveDataSet, `is`(emptySet()))
42         container.onActive(liveData)
43         assertThat(container.liveDataSet, `is`(setOf(liveData)))
44     }
45 
46     @Test
add_twicenull47     fun add_twice() {
48         val liveData = createLiveData()
49         container.onActive(liveData)
50         container.onActive(liveData)
51         assertThat(container.liveDataSet, `is`(setOf(liveData)))
52     }
53 
54     @Test
removenull55     fun remove() {
56         val liveData = createLiveData()
57         container.onActive(liveData)
58         container.onInactive(liveData)
59         assertThat(container.liveDataSet, `is`(emptySet()))
60     }
61 
62     @Test
remove_twicenull63     fun remove_twice() {
64         val liveData = createLiveData()
65         container.onActive(liveData)
66         container.onInactive(liveData)
67         container.onInactive(liveData)
68         assertThat(container.liveDataSet, `is`(emptySet()))
69     }
70 
71     @Test
addRemoveMultiplenull72     fun addRemoveMultiple() {
73         val ld1 = createLiveData()
74         val ld2 = createLiveData()
75         assertThat(container.liveDataSet, `is`(emptySet()))
76         container.onActive(ld1)
77         container.onActive(ld2)
78         assertThat(container.liveDataSet, `is`(setOf(ld1, ld2)))
79         container.onInactive(ld1)
80         assertThat(container.liveDataSet, `is`(setOf(ld2)))
81         container.onInactive(ld1) // intentional
82         assertThat(container.liveDataSet, `is`(setOf(ld2)))
83         container.onActive(ld1)
84         assertThat(container.liveDataSet, `is`(setOf(ld1, ld2)))
85         container.onActive(ld1) // intentional
86         assertThat(container.liveDataSet, `is`(setOf(ld1, ld2)))
87         container.onInactive(ld2)
88         assertThat(container.liveDataSet, `is`(setOf(ld1)))
89         container.onInactive(ld1)
90         assertThat(container.liveDataSet, `is`(emptySet()))
91         container.onActive(ld1)
92         assertThat(container.liveDataSet, `is`(setOf(ld1)))
93         container.onActive(ld2)
94         assertThat(container.liveDataSet, `is`(setOf(ld1, ld2)))
95     }
96 
createLiveDatanull97     private fun createLiveData(): LiveData<Any> {
98         return container.create(arrayOf("a", "b"), false, createComputeFunction())
99     }
100 
createComputeFunctionnull101     private fun <T> createComputeFunction(): Callable<T> {
102         return Callable<T> { null }
103     }
104 }
105