Fix broken tests and add tests for ThemeManagerTest
Change-Id: I12769a3385cdcbe71f2e216a405509477b427eca
diff --git a/robolectric_tests/src/com/android/customization/model/theme/ThemeManagerTest.java b/robolectric_tests/src/com/android/customization/model/theme/ThemeManagerTest.java
index 0a17b5b..6f1f95e 100644
--- a/robolectric_tests/src/com/android/customization/model/theme/ThemeManagerTest.java
+++ b/robolectric_tests/src/com/android/customization/model/theme/ThemeManagerTest.java
@@ -26,25 +26,28 @@
import static com.android.customization.model.ResourceConstants.SYSUI_PACKAGE;
import static com.android.customization.model.ResourceConstants.THEME_SETTING;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertTrue;
-import static org.junit.Assert.assertFalse;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.provider.Settings;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
+import com.android.customization.model.CustomizationManager.OptionsFetchedListener;
import com.android.customization.model.CustomizationManager.Callback;
+import com.android.customization.model.theme.custom.CustomTheme;
import com.android.customization.module.ThemesUserEventLogger;
import com.android.customization.testutils.OverlayManagerMocks;
-import com.android.customization.testutils.Wait;
import com.android.wallpaper.module.WallpaperSetter;
+import org.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -60,6 +63,7 @@
@Mock OverlayManagerCompat mMockOm;
@Mock WallpaperSetter mMockWallpaperSetter;
@Mock ThemesUserEventLogger mThemesUserEventLogger;
+ @Mock ThemeBundleProvider mThemeBundleProvider;
private OverlayManagerMocks mMockOmHelper;
private ThemeManager mThemeManager;
private FragmentActivity mActivity;
@@ -71,9 +75,8 @@
mActivity = spy(activity);
mMockOmHelper = new OverlayManagerMocks();
mMockOmHelper.setUpMock(mMockOm);
- ThemeBundleProvider provider = mock(ThemeBundleProvider.class);
- mThemeManager = new ThemeManager(
- provider, activity, mMockWallpaperSetter, mMockOm, mThemesUserEventLogger);
+ mThemeManager = new ThemeManager(mThemeBundleProvider, activity, mMockWallpaperSetter,
+ mMockOm, mThemesUserEventLogger);
}
@After
@@ -82,7 +85,7 @@
}
@Test
- public void testApply_DefaultTheme() {
+ public void apply_WithDefaultTheme_StoresEmptyJsonString() {
mMockOmHelper.addOverlay("test.package.name_color", ANDROID_PACKAGE,
OVERLAY_CATEGORY_COLOR, true, 0);
mMockOmHelper.addOverlay("test.package.name_font", ANDROID_PACKAGE,
@@ -102,13 +105,94 @@
applyTheme(defaultTheme);
- assertEquals("Secure Setting should be emtpy after applying default theme",
- "",
+ assertEquals("Secure Setting should be empty JSON string after applying default theme",
+ new JSONObject().toString(),
Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING));
}
@Test
- public void testApply_NonDefault() {
+ public void apply_WithOverlayTheme_StoresSerializedPackagesWithTimestamp() {
+ ThemeBundle theme = getOverlayTheme();
+ final String serializedPackagesWithTimestamp = theme.getSerializedPackagesWithTimestamp();
+
+ theme = spy(theme);
+ // Makes it return the fixed serializedPackagesWithTimestamp to test. Since we will get
+ // fresh time every time, it's hard to compare for testing.
+ when(theme.getSerializedPackagesWithTimestamp())
+ .thenReturn(serializedPackagesWithTimestamp);
+
+ applyTheme(theme);
+
+ assertEquals("Secure Setting should be the overlay packages after applying theme",
+ serializedPackagesWithTimestamp,
+ Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING));
+ }
+
+ @Test
+ public void isAvailable_ThemeBundleProviderAndOverlayManagerAreAvailable_ReturnsTrue() {
+ when(mThemeBundleProvider.isAvailable()).thenReturn(true);
+ when(mMockOm.isAvailable()).thenReturn(true);
+
+ assertTrue(mThemeManager.isAvailable());
+ }
+
+ @Test
+ public void isAvailable_ThemeBundleProviderOrOverlayManagerIsAvailable_ReturnsFalse() {
+ when(mThemeBundleProvider.isAvailable()).thenReturn(false);
+ when(mMockOm.isAvailable()).thenReturn(true);
+ assertFalse(mThemeManager.isAvailable());
+
+ when(mThemeBundleProvider.isAvailable()).thenReturn(true);
+ when(mMockOm.isAvailable()).thenReturn(false);
+ assertFalse(mThemeManager.isAvailable());
+ }
+
+ @Test
+ public void fetchOptions_ThemeBundleProviderFetches() {
+ OptionsFetchedListener listener = mock(OptionsFetchedListener.class);
+
+ mThemeManager.fetchOptions(listener, false);
+
+ verify(mThemeBundleProvider).fetch(listener, false);
+ }
+
+ @Test
+ public void removeCustomTheme_ThemeBundleProviderRemovesCustomTheme() {
+ CustomTheme customTheme = mock(CustomTheme.class);
+ mThemeManager.removeCustomTheme(customTheme);
+
+ verify(mThemeBundleProvider).removeCustomTheme(customTheme);
+ }
+
+ @Test
+ public void findThemeByPackages_ThemeBundleProviderFindsEquivalent() {
+ CustomTheme theme = mock(CustomTheme.class);
+ mThemeManager.findThemeByPackages(theme);
+
+ verify(mThemeBundleProvider).findEquivalent(theme);
+ }
+
+ @Test
+ public void storeEmptyTheme_SettingsSecureStoresEmptyTheme() {
+ mThemeManager.storeEmptyTheme();
+
+ assertEquals(
+ new JSONObject().toString(),
+ Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING));
+ }
+
+ @Test
+ public void getStoredOverlays_GetsFromSettingsSecureWithExpectedName() {
+ ThemeBundle theme = getOverlayTheme();
+
+ applyTheme(theme);
+
+ assertEquals(
+ Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING),
+ mThemeManager.getStoredOverlays());
+ }
+
+ private ThemeBundle getOverlayTheme() {
final String bundleColorPackage = "test.package.name_color";
final String bundleFontPackage = "test.package.name_font";
final String otherPackage = "other.package.name_font";
@@ -120,16 +204,10 @@
mMockOmHelper.addOverlay(otherPackage, ANDROID_PACKAGE,
OVERLAY_CATEGORY_FONT, false, 0);
- ThemeBundle theme = new ThemeBundle.Builder()
+ return new ThemeBundle.Builder()
.addOverlayPackage(OVERLAY_CATEGORY_COLOR, bundleColorPackage)
.addOverlayPackage(OVERLAY_CATEGORY_FONT, bundleFontPackage)
.build(mActivity);
-
- applyTheme(theme);
-
- assertEquals("Secure Setting was not properly set after applying theme",
- theme.getSerializedPackages(),
- Settings.Secure.getString(mActivity.getContentResolver(), THEME_SETTING));
}
private void applyTheme(ThemeBundle theme) {