134e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar/* 234e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * Copyright (C) 2017 The Android Open Source Project 334e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * 434e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 534e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * you may not use this file except in compliance with the License. 634e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * You may obtain a copy of the License at 734e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * 834e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 934e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * 1034e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * Unless required by applicable law or agreed to in writing, software 1134e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 1234e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1334e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * See the License for the specific language governing permissions and 1434e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar * limitations under the License. 1534e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar */ 1634e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 1734e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 18bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viverettepackage androidx.room; 1934e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 2034e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 21bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport static androidx.room.InvalidationTracker.ObservedTableTracker.ADD; 22bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport static androidx.room.InvalidationTracker.ObservedTableTracker.NO_OP; 23bdc4c86d3dff74f6634a38e2f7b316b0e823a2c8Alan Viveretteimport static androidx.room.InvalidationTracker.ObservedTableTracker.REMOVE; 2434e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 2534e5031083f735db3a395b0f6aa430880b072d71Yigit Boyarimport static org.hamcrest.CoreMatchers.is; 2634e5031083f735db3a395b0f6aa430880b072d71Yigit Boyarimport static org.hamcrest.CoreMatchers.nullValue; 2734e5031083f735db3a395b0f6aa430880b072d71Yigit Boyarimport static org.hamcrest.MatcherAssert.assertThat; 2834e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 2934e5031083f735db3a395b0f6aa430880b072d71Yigit Boyarimport org.junit.Before; 3034e5031083f735db3a395b0f6aa430880b072d71Yigit Boyarimport org.junit.Test; 3134e5031083f735db3a395b0f6aa430880b072d71Yigit Boyarimport org.junit.runner.RunWith; 3234e5031083f735db3a395b0f6aa430880b072d71Yigit Boyarimport org.junit.runners.JUnit4; 3334e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 3434e5031083f735db3a395b0f6aa430880b072d71Yigit Boyarimport java.util.Arrays; 3534e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 3634e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar@RunWith(JUnit4.class) 3734e5031083f735db3a395b0f6aa430880b072d71Yigit Boyarpublic class ObservedTableTrackerTest { 3834e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar private static final int TABLE_COUNT = 5; 3934e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar private InvalidationTracker.ObservedTableTracker mTracker; 4034e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 4134e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar @Before 4234e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar public void setup() { 4334e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker = new InvalidationTracker.ObservedTableTracker(TABLE_COUNT); 4434e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar } 4534e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 4634e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar @Test 4734e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar public void basicAdd() { 4834e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onAdded(2, 3); 4934e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar assertThat(mTracker.getTablesToSync(), is(createResponse(2, ADD, 3, ADD))); 5034e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar } 5134e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 5234e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar @Test 5334e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar public void basicRemove() { 5434e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar initState(2, 3); 5534e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onRemoved(3); 5634e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar assertThat(mTracker.getTablesToSync(), is(createResponse(3, REMOVE))); 5734e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar } 5834e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 5934e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar @Test 6034e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar public void noChange() { 6134e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar initState(1, 3); 6234e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onAdded(3); 6334e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar assertThat(mTracker.getTablesToSync(), is(nullValue())); 6434e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar } 6534e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 6634e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar @Test 6734e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar public void returnNullUntilSync() { 6834e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar initState(1, 3); 6934e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onAdded(4); 7034e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar assertThat(mTracker.getTablesToSync(), is(createResponse(4, ADD))); 7134e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onAdded(0); 7234e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar assertThat(mTracker.getTablesToSync(), is(nullValue())); 7334e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onSyncCompleted(); 7434e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar assertThat(mTracker.getTablesToSync(), is(createResponse(0, ADD))); 7534e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar } 7634e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 7734e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar @Test 7834e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar public void multipleAdditionsDeletions() { 7934e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar initState(2, 4); 8034e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onAdded(2); 8134e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar assertThat(mTracker.getTablesToSync(), is(nullValue())); 8234e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onAdded(2, 4); 8334e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar assertThat(mTracker.getTablesToSync(), is(nullValue())); 8434e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onRemoved(2); 8534e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar assertThat(mTracker.getTablesToSync(), is(nullValue())); 8634e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onRemoved(2, 4); 8734e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar assertThat(mTracker.getTablesToSync(), is(nullValue())); 8834e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onAdded(1, 3); 8934e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onRemoved(2, 4); 9034e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar assertThat(mTracker.getTablesToSync(), is( 9134e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar createResponse(1, ADD, 2, REMOVE, 3, ADD, 4, REMOVE))); 9234e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar } 9334e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 9434e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar private void initState(int... tableIds) { 9534e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onAdded(tableIds); 9634e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.getTablesToSync(); 9734e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar mTracker.onSyncCompleted(); 9834e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar } 9934e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar 10034e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar private static int[] createResponse(int... tuples) { 10134e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar int[] result = new int[TABLE_COUNT]; 10234e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar Arrays.fill(result, NO_OP); 10334e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar for (int i = 0; i < tuples.length; i += 2) { 10434e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar result[tuples[i]] = tuples[i + 1]; 10534e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar } 10634e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar return result; 10734e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar } 10834e5031083f735db3a395b0f6aa430880b072d71Yigit Boyar} 109