1 /* <lambda>null2 * Copyright (C) 2017 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 package androidx.room 17 18 import androidx.kruth.assertThat 19 import androidx.room.ObservedTableStates.ObserveOp 20 import kotlin.test.BeforeTest 21 import kotlin.test.Test 22 import kotlin.test.assertNull 23 import kotlinx.coroutines.test.runTest 24 25 class ObservedTableStatesTest { 26 private lateinit var tableStates: ObservedTableStates 27 28 @BeforeTest 29 fun setup() { 30 tableStates = ObservedTableStates(TABLE_COUNT) 31 } 32 33 @Test 34 fun basicAdd() = runTest { 35 tableStates.onObserverAdded(intArrayOf(2, 3)) 36 assertThat(tableStates.getTablesToSync()) 37 .isEqualTo(createSyncResult(mapOf(2 to ObserveOp.ADD, 3 to ObserveOp.ADD))) 38 } 39 40 @Test 41 fun basicRemove() = runTest { 42 tableStates.onObserverAdded(intArrayOf(2, 3)) 43 tableStates.getTablesToSync() 44 45 tableStates.onObserverRemoved(intArrayOf(3)) 46 assertThat(tableStates.getTablesToSync()) 47 .isEqualTo(createSyncResult(mapOf(3 to ObserveOp.REMOVE))) 48 } 49 50 @Test 51 fun noChange() = runTest { 52 tableStates.onObserverAdded(intArrayOf(1, 3)) 53 tableStates.getTablesToSync() 54 55 tableStates.onObserverAdded(intArrayOf(3)) 56 assertNull(tableStates.getTablesToSync()) 57 } 58 59 @Test 60 fun addAndDeleteNetMoChange() = runTest { 61 tableStates.onObserverAdded(intArrayOf(1, 3)) 62 tableStates.getTablesToSync() 63 64 tableStates.onObserverRemoved(intArrayOf(1, 3)) 65 tableStates.onObserverAdded(intArrayOf(1, 3)) 66 assertNull(tableStates.getTablesToSync()) 67 } 68 69 @Test 70 fun multipleAdditionsDeletions() = runTest { 71 tableStates.onObserverAdded(intArrayOf(2, 4)) 72 tableStates.getTablesToSync() 73 74 tableStates.onObserverAdded(intArrayOf(2)) 75 assertNull(tableStates.getTablesToSync()) 76 77 tableStates.onObserverAdded(intArrayOf(2, 4)) 78 assertNull(tableStates.getTablesToSync()) 79 80 tableStates.onObserverRemoved(intArrayOf(2)) 81 assertNull(tableStates.getTablesToSync()) 82 83 tableStates.onObserverRemoved(intArrayOf(2, 4)) 84 assertNull(tableStates.getTablesToSync()) 85 86 tableStates.onObserverAdded(intArrayOf(1, 3)) 87 tableStates.onObserverRemoved(intArrayOf(2, 4)) 88 assertThat(tableStates.getTablesToSync()) 89 .isEqualTo( 90 createSyncResult( 91 mapOf( 92 1 to ObserveOp.ADD, 93 2 to ObserveOp.REMOVE, 94 3 to ObserveOp.ADD, 95 4 to ObserveOp.REMOVE 96 ) 97 ) 98 ) 99 } 100 101 companion object { 102 private const val TABLE_COUNT = 5 103 104 private fun createSyncResult(tuples: Map<Int, ObserveOp>): Array<ObserveOp> { 105 return Array(TABLE_COUNT) { i -> tuples[i] ?: ObserveOp.NO_OP } 106 } 107 } 108 } 109