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