Make Settings robotest work with tot Robolectric
Bug: 116278591 Test: make -j RunSettingsRoboTests Change-Id: I32cb2fcf6094675f79d2fc24702ef6298a9691e4
This commit is contained in:
@@ -25,7 +25,6 @@ import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
@@ -41,6 +40,7 @@ import android.os.StrictMode;
|
||||
import android.provider.Settings;
|
||||
import android.provider.SettingsSlicesContract;
|
||||
import android.util.ArraySet;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
|
||||
import androidx.slice.Slice;
|
||||
import androidx.slice.SliceProvider;
|
||||
@@ -54,18 +54,26 @@ import com.android.settings.notification.ZenModeSliceBuilder;
|
||||
import com.android.settings.testutils.DatabaseTestUtils;
|
||||
import com.android.settings.testutils.FakeToggleController;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
|
||||
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
|
||||
import com.android.settings.testutils.shadow.ShadowThreadUtils;
|
||||
import com.android.settings.testutils.shadow.ShadowUserManager;
|
||||
import com.android.settings.testutils.shadow.ShadowUtils;
|
||||
import com.android.settings.wifi.WifiSlice;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
import org.robolectric.annotation.Resetter;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowAccessibilityManager;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
@@ -81,7 +89,9 @@ import java.util.Set;
|
||||
* TODO Investigate using ShadowContentResolver.registerProviderInternal(String, ContentProvider)
|
||||
*/
|
||||
@RunWith(SettingsRobolectricTestRunner.class)
|
||||
@Config(shadows = ShadowThreadUtils.class)
|
||||
@Config(shadows = {ShadowUserManager.class, ShadowThreadUtils.class, ShadowUtils.class,
|
||||
SlicesDatabaseAccessorTest.ShadowApplicationPackageManager.class,
|
||||
ShadowBluetoothAdapter.class, ShadowLockPatternUtils.class})
|
||||
public class SettingsSliceProviderTest {
|
||||
|
||||
private static final String KEY = "KEY";
|
||||
@@ -97,7 +107,7 @@ public class SettingsSliceProviderTest {
|
||||
|
||||
private Context mContext;
|
||||
private SettingsSliceProvider mProvider;
|
||||
private SQLiteDatabase mDb;
|
||||
@Mock
|
||||
private SliceManager mManager;
|
||||
|
||||
private static final List<Uri> SPECIAL_CASE_PLATFORM_URIS = Arrays.asList(
|
||||
@@ -113,7 +123,13 @@ public class SettingsSliceProviderTest {
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
// Register the fake a11y Service
|
||||
ShadowAccessibilityManager shadowAccessibilityManager = Shadow.extract(
|
||||
RuntimeEnvironment.application.getSystemService(AccessibilityManager.class));
|
||||
shadowAccessibilityManager.setInstalledAccessibilityServiceList(new ArrayList<>());
|
||||
|
||||
mProvider = spy(new SettingsSliceProvider());
|
||||
ShadowStrictMode.reset();
|
||||
mProvider.mSliceWeakDataCache = new HashMap<>();
|
||||
@@ -122,10 +138,9 @@ public class SettingsSliceProviderTest {
|
||||
mProvider.mCustomSliceManager = spy(new CustomSliceManager(mContext));
|
||||
when(mProvider.getContext()).thenReturn(mContext);
|
||||
|
||||
mDb = SlicesDatabaseHelper.getInstance(mContext).getWritableDatabase();
|
||||
SlicesDatabaseHelper.getInstance(mContext).setIndexedState();
|
||||
mManager = mock(SliceManager.class);
|
||||
when(mContext.getSystemService(SliceManager.class)).thenReturn(mManager);
|
||||
|
||||
doReturn(mManager).when(mContext).getSystemService(SliceManager.class);
|
||||
when(mManager.getPinnedSlices()).thenReturn(Collections.emptyList());
|
||||
|
||||
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
|
||||
@@ -562,7 +577,7 @@ public class SettingsSliceProviderTest {
|
||||
}
|
||||
|
||||
private void insertSpecialCase(String key, boolean isPlatformSlice) {
|
||||
ContentValues values = new ContentValues();
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.KEY, key);
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.TITLE, TITLE);
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.SUMMARY, "s");
|
||||
@@ -572,8 +587,15 @@ public class SettingsSliceProviderTest {
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, PREF_CONTROLLER);
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.PLATFORM_SLICE, isPlatformSlice);
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.SLICE_TYPE, SliceData.SliceType.INTENT);
|
||||
|
||||
mDb.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
|
||||
final SQLiteDatabase db = SlicesDatabaseHelper.getInstance(mContext).getWritableDatabase();
|
||||
db.beginTransaction();
|
||||
try {
|
||||
db.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
|
||||
db.setTransactionSuccessful();
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
db.close();
|
||||
}
|
||||
|
||||
private static SliceData getDummyData() {
|
||||
@@ -589,7 +611,7 @@ public class SettingsSliceProviderTest {
|
||||
.build();
|
||||
}
|
||||
|
||||
@Implements(value = StrictMode.class, inheritImplementationMethods = true)
|
||||
@Implements(value = StrictMode.class)
|
||||
public static class ShadowStrictMode {
|
||||
|
||||
private static int sSetThreadPolicyCount;
|
||||
|
||||
@@ -21,6 +21,8 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.spy;
|
||||
|
||||
import android.app.ApplicationPackageManager;
|
||||
import android.content.ComponentName;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
@@ -33,6 +35,10 @@ import com.android.settings.testutils.DatabaseTestUtils;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
import com.android.settings.testutils.FakeIndexProvider;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
|
||||
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
|
||||
import com.android.settings.testutils.shadow.ShadowUserManager;
|
||||
import com.android.settings.testutils.shadow.ShadowUtils;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
@@ -40,6 +46,8 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.robolectric.annotation.Implementation;
|
||||
import org.robolectric.annotation.Implements;
|
||||
import org.robolectric.shadow.api.Shadow;
|
||||
import org.robolectric.shadows.ShadowAccessibilityManager;
|
||||
|
||||
@@ -49,6 +57,9 @@ import java.util.Locale;
|
||||
|
||||
|
||||
@RunWith(SettingsRobolectricTestRunner.class)
|
||||
@Config(shadows = {ShadowUserManager.class, ShadowUtils.class,
|
||||
SlicesDatabaseAccessorTest.ShadowApplicationPackageManager.class,
|
||||
ShadowBluetoothAdapter.class, ShadowLockPatternUtils.class})
|
||||
public class SlicesDatabaseAccessorTest {
|
||||
|
||||
private final String FAKE_TITLE = "title";
|
||||
@@ -66,6 +77,7 @@ public class SlicesDatabaseAccessorTest {
|
||||
@Before
|
||||
public void setUp() {
|
||||
mContext = RuntimeEnvironment.application;
|
||||
ShadowUserManager.getShadow().setIsAdminUser(true);
|
||||
mAccessor = spy(new SlicesDatabaseAccessor(mContext));
|
||||
mDb = SlicesDatabaseHelper.getInstance(mContext).getWritableDatabase();
|
||||
SlicesDatabaseHelper.getInstance(mContext).setIndexedState();
|
||||
@@ -78,6 +90,7 @@ public class SlicesDatabaseAccessorTest {
|
||||
|
||||
@After
|
||||
public void cleanUp() {
|
||||
ShadowUserManager.getShadow().reset();
|
||||
DatabaseTestUtils.clearDb(mContext);
|
||||
}
|
||||
|
||||
@@ -258,4 +271,14 @@ public class SlicesDatabaseAccessorTest {
|
||||
|
||||
mDb.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
|
||||
}
|
||||
|
||||
@Implements(ApplicationPackageManager.class)
|
||||
public static class ShadowApplicationPackageManager extends
|
||||
org.robolectric.shadows.ShadowApplicationPackageManager {
|
||||
|
||||
@Implementation
|
||||
protected ComponentName getInstantAppResolverSettingsComponent() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,13 +60,11 @@ public class SlicesIndexerTest {
|
||||
|
||||
private SlicesIndexer mManager;
|
||||
|
||||
private SQLiteDatabase mDb;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mManager = spy(new SlicesIndexer(mContext));
|
||||
mDb = SlicesDatabaseHelper.getInstance(mContext).getWritableDatabase();
|
||||
}
|
||||
|
||||
@After
|
||||
@@ -84,11 +82,16 @@ public class SlicesIndexerTest {
|
||||
// Attempt indexing - should not do anything.
|
||||
mManager.run();
|
||||
|
||||
Cursor cursor = mDb.rawQuery("SELECT * FROM slices_index", null);
|
||||
cursor.moveToFirst();
|
||||
assertThat(cursor.getCount()).isEqualTo(1);
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.KEY))).isEqualTo(newKey);
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.TITLE))).isEqualTo(newTitle);
|
||||
final SQLiteDatabase db = SlicesDatabaseHelper.getInstance(mContext).getWritableDatabase();
|
||||
try (final Cursor cursor = db.rawQuery("SELECT * FROM slices_index", null)) {
|
||||
cursor.moveToFirst();
|
||||
assertThat(cursor.getCount()).isEqualTo(1);
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.KEY))).isEqualTo(newKey);
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.TITLE)))
|
||||
.isEqualTo(newTitle);
|
||||
} finally {
|
||||
db.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -109,33 +112,43 @@ public class SlicesIndexerTest {
|
||||
|
||||
mManager.run();
|
||||
|
||||
final Cursor cursor = mDb.rawQuery("SELECT * FROM slices_index", null);
|
||||
assertThat(cursor.getCount()).isEqualTo(sliceData.size());
|
||||
final SQLiteDatabase db = SlicesDatabaseHelper.getInstance(mContext).getWritableDatabase();
|
||||
try (final Cursor cursor = db.rawQuery("SELECT * FROM slices_index", null)) {
|
||||
assertThat(cursor.getCount()).isEqualTo(sliceData.size());
|
||||
|
||||
cursor.moveToFirst();
|
||||
for (int i = 0; i < sliceData.size(); i++) {
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.KEY))).isEqualTo(
|
||||
KEYS[i]);
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.TITLE))).isEqualTo(
|
||||
TITLES[i]);
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.FRAGMENT))).isEqualTo(
|
||||
FRAGMENT_NAME);
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.SCREENTITLE))).isEqualTo(
|
||||
SCREEN_TITLE);
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.KEYWORDS))).isEqualTo(
|
||||
KEYWORDS);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.ICON_RESOURCE))).isEqualTo(
|
||||
ICON);
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.CONTROLLER))).isEqualTo(
|
||||
PREF_CONTROLLER);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.PLATFORM_SLICE))).isEqualTo(
|
||||
1 /* true */);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.SLICE_TYPE))).isEqualTo(
|
||||
SLICE_TYPE);
|
||||
assertThat(cursor.getInt(
|
||||
cursor.getColumnIndex(IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE))).isEqualTo(
|
||||
1 /* true */);
|
||||
cursor.moveToNext();
|
||||
cursor.moveToFirst();
|
||||
for (int i = 0; i < sliceData.size(); i++) {
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.KEY)))
|
||||
.isEqualTo(KEYS[i]);
|
||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.TITLE)))
|
||||
.isEqualTo(TITLES[i]);
|
||||
assertThat(
|
||||
cursor.getString(cursor.getColumnIndex(IndexColumns.FRAGMENT)))
|
||||
.isEqualTo(FRAGMENT_NAME);
|
||||
assertThat(cursor.getString(
|
||||
cursor.getColumnIndex(IndexColumns.SCREENTITLE))).isEqualTo(SCREEN_TITLE);
|
||||
assertThat(
|
||||
cursor.getString(cursor.getColumnIndex(IndexColumns.KEYWORDS)))
|
||||
.isEqualTo(KEYWORDS);
|
||||
assertThat(
|
||||
cursor.getInt(cursor.getColumnIndex(IndexColumns.ICON_RESOURCE)))
|
||||
.isEqualTo(ICON);
|
||||
assertThat(
|
||||
cursor.getString(cursor.getColumnIndex(IndexColumns.CONTROLLER)))
|
||||
.isEqualTo(PREF_CONTROLLER);
|
||||
assertThat(cursor.getInt(
|
||||
cursor.getColumnIndex(IndexColumns.PLATFORM_SLICE)))
|
||||
.isEqualTo(1 /* true */);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.SLICE_TYPE)))
|
||||
.isEqualTo(SLICE_TYPE);
|
||||
assertThat(cursor.getInt(
|
||||
cursor.getColumnIndex(
|
||||
IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE)))
|
||||
.isEqualTo(1 /* true */);
|
||||
cursor.moveToNext();
|
||||
}
|
||||
} finally {
|
||||
db.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,8 +156,15 @@ public class SlicesIndexerTest {
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(IndexColumns.KEY, key);
|
||||
values.put(IndexColumns.TITLE, title);
|
||||
|
||||
mDb.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
|
||||
final SQLiteDatabase db = SlicesDatabaseHelper.getInstance(mContext).getWritableDatabase();
|
||||
db.beginTransaction();
|
||||
try {
|
||||
db.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
|
||||
db.setTransactionSuccessful();
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
}
|
||||
db.close();
|
||||
}
|
||||
|
||||
private List<SliceData> getDummyIndexableData() {
|
||||
|
||||
Reference in New Issue
Block a user