1 /* 2 * 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 17 package com.android.settings.slices; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.mockito.Mockito.doReturn; 22 import static org.mockito.Mockito.spy; 23 24 import android.content.ContentValues; 25 import android.content.Context; 26 import android.database.Cursor; 27 import android.database.sqlite.SQLiteDatabase; 28 29 import com.android.settings.slices.SlicesDatabaseHelper.IndexColumns; 30 import com.android.settings.testutils.DatabaseTestUtils; 31 32 import org.junit.After; 33 import org.junit.Before; 34 import org.junit.Test; 35 import org.junit.runner.RunWith; 36 import org.robolectric.RobolectricTestRunner; 37 import org.robolectric.RuntimeEnvironment; 38 39 import java.util.Locale; 40 41 @RunWith(RobolectricTestRunner.class) 42 public class SlicesDatabaseHelperTest { 43 44 private Context mContext; 45 private SlicesDatabaseHelper mSlicesDatabaseHelper; 46 private SQLiteDatabase mDatabase; 47 48 @Before setUp()49 public void setUp() { 50 mContext = RuntimeEnvironment.application; 51 mSlicesDatabaseHelper = spy(SlicesDatabaseHelper.getInstance(mContext)); 52 mDatabase = mSlicesDatabaseHelper.getWritableDatabase(); 53 } 54 55 @After cleanUp()56 public void cleanUp() { 57 DatabaseTestUtils.clearDb(mContext); 58 mDatabase.close(); 59 } 60 61 @Test testDatabaseSchema()62 public void testDatabaseSchema() { 63 Cursor cursor = mDatabase.rawQuery("SELECT * FROM slices_index", null); 64 String[] columnNames = cursor.getColumnNames(); 65 66 String[] expectedNames = { 67 IndexColumns.KEY, 68 IndexColumns.SLICE_URI, 69 IndexColumns.TITLE, 70 IndexColumns.SUMMARY, 71 IndexColumns.SCREENTITLE, 72 IndexColumns.KEYWORDS, 73 IndexColumns.ICON_RESOURCE, 74 IndexColumns.FRAGMENT, 75 IndexColumns.CONTROLLER, 76 IndexColumns.SLICE_TYPE, 77 IndexColumns.UNAVAILABLE_SLICE_SUBTITLE, 78 IndexColumns.PUBLIC_SLICE 79 }; 80 81 assertThat(columnNames).isEqualTo(expectedNames); 82 } 83 84 @Test testUpgrade_dropsOldData()85 public void testUpgrade_dropsOldData() { 86 ContentValues mockValues = getMockRow(); 87 88 mDatabase.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, mockValues); 89 Cursor baseline = mDatabase.rawQuery("SELECT * FROM slices_index", null); 90 assertThat(baseline.getCount()).isEqualTo(1); 91 92 mSlicesDatabaseHelper.onUpgrade(mDatabase, 0, 1); 93 94 Cursor newCursor = mDatabase.rawQuery("SELECT * FROM slices_index", null); 95 assertThat(newCursor.getCount()).isEqualTo(0); 96 } 97 98 @Test testIndexState_buildAndLocaleSet()99 public void testIndexState_buildAndLocaleSet() { 100 mSlicesDatabaseHelper.reconstruct(mDatabase); 101 102 boolean baseState = mSlicesDatabaseHelper.isSliceDataIndexed(); 103 assertThat(baseState).isFalse(); 104 105 mSlicesDatabaseHelper.setIndexedState(); 106 boolean indexedState = mSlicesDatabaseHelper.isSliceDataIndexed(); 107 assertThat(indexedState).isTrue(); 108 } 109 110 @Test testLocaleChanges_newIndexingState()111 public void testLocaleChanges_newIndexingState() { 112 mSlicesDatabaseHelper.reconstruct(mDatabase); 113 mSlicesDatabaseHelper.setIndexedState(); 114 115 Locale.setDefault(new Locale("ca")); 116 117 assertThat(mSlicesDatabaseHelper.isSliceDataIndexed()).isFalse(); 118 } 119 120 @Test testBuildFingerprintChanges_newIndexingState()121 public void testBuildFingerprintChanges_newIndexingState() { 122 mSlicesDatabaseHelper.reconstruct(mDatabase); 123 mSlicesDatabaseHelper.setIndexedState(); 124 doReturn("newBuild").when(mSlicesDatabaseHelper).getBuildTag(); 125 126 assertThat(mSlicesDatabaseHelper.isSliceDataIndexed()).isFalse(); 127 } 128 getMockRow()129 private ContentValues getMockRow() { 130 final ContentValues values = new ContentValues(); 131 values.put(IndexColumns.KEY, "key"); 132 values.put(IndexColumns.TITLE, "title"); 133 values.put(IndexColumns.SUMMARY, "summary"); 134 values.put(IndexColumns.ICON_RESOURCE, 99); 135 values.put(IndexColumns.FRAGMENT, "fragmentClassName"); 136 values.put(IndexColumns.CONTROLLER, "preferenceController"); 137 138 return values; 139 } 140 }