From 51449262db6b77be9b635c137cb133ac9bee4a64 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 15 May 2017 14:55:47 -0700 Subject: [PATCH] Code inspector test clean up. Make sure code inspector tests fail if the grandfather list contains things that no longer exists in code Change-Id: Ib114909959040275a9d9aebd81ecbe3d96d3af03 Test: make RunSettingsRoboTests -j40 Fix: 37686032 --- .../grandfather_not_implementing_index_provider | 2 -- .../grandfather_not_implementing_indexable | 14 -------------- ...father_not_in_search_index_provider_registry | 1 - ...haring_pref_controllers_with_search_provider | 3 --- .../core/codeinspection/CodeInspector.java | 13 +++++++++++++ .../InstrumentableFragmentCodeInspector.java | 6 +++++- .../SearchIndexProviderCodeInspector.java | 17 +++++++++++++---- 7 files changed, 31 insertions(+), 25 deletions(-) diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider index 2421cbbb76d..e21b76cf780 100644 --- a/tests/robotests/assets/grandfather_not_implementing_index_provider +++ b/tests/robotests/assets/grandfather_not_implementing_index_provider @@ -1,9 +1,7 @@ com.android.settings.bluetooth.DevicePickerFragment -com.android.settings.language.LanguageAndRegionSettings com.android.settings.notification.ZenModePrioritySettings com.android.settings.accounts.AccountDetailDashboardFragment com.android.settings.fuelgauge.PowerUsageAnomalyDetails -com.android.settings.fuelgauge.PowerUsageDetail com.android.settings.fuelgauge.AdvancedPowerUsageDetail com.android.settings.deviceinfo.StorageProfileFragment com.android.settings.wifi.details.WifiNetworkDetailsFragment diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable index 544b2c7cbdd..47711b03441 100644 --- a/tests/robotests/assets/grandfather_not_implementing_indexable +++ b/tests/robotests/assets/grandfather_not_implementing_indexable @@ -18,16 +18,12 @@ com.android.settings.fingerprint.FingerprintSettings$FingerprintSettingsFragment com.android.settings.applications.ProcessStatsDetail com.android.settings.wifi.WifiInfo com.android.settings.applications.VrListenerSettings -com.android.settings.nfc.PaymentSettings -com.android.settings.inputmethod.VirtualKeyboardFragment -com.android.settings.bluetooth.DevicePickerFragment com.android.settings.inputmethod.UserDictionaryList com.android.settings.deviceinfo.Status com.android.settings.datausage.DataSaverSummary com.android.settings.notification.ChannelNotificationSettings com.android.settings.datausage.AppDataUsage com.android.settings.accessibility.FontSizePreferenceFragmentForSetupWizard -com.android.settings.inputmethod.PhysicalKeyboardFragment com.android.settings.applications.ManageDomainUrls com.android.settings.applications.WriteSettingsDetails com.android.settings.location.LocationSettings @@ -35,14 +31,12 @@ com.android.settings.applications.ProcessStatsSummary com.android.settings.users.RestrictedProfileSettings com.android.settings.accounts.ChooseAccountActivity com.android.settings.accounts.ManagedProfileSettings -com.android.settings.notification.ZenModeAutomationSettings com.android.settings.accessibility.ToggleAutoclickPreferenceFragment com.android.settings.applications.AppLaunchSettings com.android.settings.fuelgauge.BatterySaverSettings com.android.settings.location.ScanningSettings com.android.settings.tts.TextToSpeechSettings com.android.settings.applications.ProcessStatsUi -com.android.settings.fuelgauge.PowerUsageDetail com.android.settings.notification.ZenModeScheduleRuleSettings com.android.settings.datausage.BillingCycleSettings com.android.settings.notification.NotificationStation @@ -52,18 +46,13 @@ com.android.settings.accessibility.ToggleSelectToSpeakPreferenceFragmentForSetup com.android.settings.accounts.AccountSyncSettings com.android.settings.notification.RedactionInterstitial$RedactionInterstitialFragment com.android.settings.inputmethod.InputMethodAndSubtypeEnabler -com.android.settings.inputmethod.AvailableVirtualKeyboardFragment com.android.settings.applications.DrawOverlayDetails -com.android.settings.tts.TtsEngineSettingsFragment com.android.settings.backup.ToggleBackupSettingFragment com.android.settings.users.UserDetailsSettings com.android.settings.datausage.UnrestrictedDataAccess com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragmentForSetupWizard com.android.settings.fuelgauge.BatteryHistoryDetail -com.android.settings.fuelgauge.PowerUsageSummary com.android.settings.applications.RunningServices -com.android.settings.wifi.p2p.WifiP2pSettings -com.android.settings.applications.assistant.ManageAssist com.android.settings.applications.ConfirmConvertToFbe com.android.settings.deviceinfo.PublicVolumeSettings com.android.settings.applications.InstalledAppDetails @@ -77,15 +66,12 @@ com.android.settings.deviceinfo.PrivateVolumeUnmount com.android.settings.deletionhelper.AutomaticStorageManagerSettings com.android.settings.notification.ZenAccessSettings com.android.settings.accessibility.ToggleFontSizePreferenceFragment -com.android.settings.accessibility.ToggleGlobalGesturePreferenceFragment -com.android.settings.wifi.ConfigureWifiSettings com.android.settings.applications.PremiumSmsAccess com.android.settings.applications.UsageAccessDetails com.android.settings.applications.AppStorageSettings com.android.settings.notification.NotificationAccessSettings com.android.settings.notification.ZenModeSettings com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment -com.android.settings.applications.ConvertToFbe com.android.settings.localepicker.LocaleListEditor com.android.settings.qstile.DevelopmentTileConfigActivity$DevelopmentTileConfigFragment com.android.settings.applications.ExternalSourcesDetails diff --git a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry index a95fc0b6537..948b14ad70c 100644 --- a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry +++ b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry @@ -1,2 +1 @@ com.android.settings.display.ScreenZoomPreferenceFragmentForSetupWizard -com.android.settings.print.PrintServiceSettingsFragment diff --git a/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider b/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider index 8184d2cfe77..1712f1938ac 100644 --- a/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider +++ b/tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider @@ -1,5 +1,2 @@ -com.android.settings.language.LanguageAndInputSettings -com.android.settings.enterprise.EnterprisePrivacySettings com.android.settings.applications.AdvancedAppSettings com.android.settings.fuelgauge.PowerUsageSummary -com.android.settings.inputmethod.InputMethodAndLanguageSettings diff --git a/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspector.java b/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspector.java index a957ce497a0..91046fe51d0 100644 --- a/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspector.java +++ b/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspector.java @@ -24,6 +24,8 @@ import java.io.InputStreamReader; import java.lang.reflect.Modifier; import java.util.List; +import static com.google.common.truth.Truth.assertWithMessage; + /** * Inspector takes a list of class objects and perform static code analysis in its {@link #run()} * method. @@ -46,6 +48,17 @@ public abstract class CodeInspector { */ public abstract void run(); + protected void assertNoObsoleteInGrandfatherList(String listName, List list) { + final StringBuilder obsoleteGrandfatherItems = new StringBuilder( + listName + " contains item that should not be grandfathered.\n"); + for (String c : list) { + obsoleteGrandfatherItems.append(c).append("\n"); + } + assertWithMessage(obsoleteGrandfatherItems.toString()) + .that(list) + .isEmpty(); + } + protected boolean isConcreteSettingsClass(Class clazz) { // Abstract classes if (Modifier.isAbstract(clazz.getModifiers())) { diff --git a/tests/robotests/src/com/android/settings/core/instrumentation/InstrumentableFragmentCodeInspector.java b/tests/robotests/src/com/android/settings/core/instrumentation/InstrumentableFragmentCodeInspector.java index ed4e50c7b72..4455549db12 100644 --- a/tests/robotests/src/com/android/settings/core/instrumentation/InstrumentableFragmentCodeInspector.java +++ b/tests/robotests/src/com/android/settings/core/instrumentation/InstrumentableFragmentCodeInspector.java @@ -51,9 +51,11 @@ public class InstrumentableFragmentCodeInspector extends CodeInspector { } final String className = clazz.getName(); // If it's a fragment, it must also be instrumentable. + final boolean whitelisted = + grandfather_notImplementingInstrumentable.remove(className); if (Fragment.class.isAssignableFrom(clazz) && !Instrumentable.class.isAssignableFrom(clazz) - && !grandfather_notImplementingInstrumentable.contains(className)) { + && !whitelisted) { broken.add(className); } } @@ -65,5 +67,7 @@ public class InstrumentableFragmentCodeInspector extends CodeInspector { assertWithMessage(sb.toString()) .that(broken.isEmpty()) .isTrue(); + assertNoObsoleteInGrandfatherList("grandfather_not_implementing_instrumentable", + grandfather_notImplementingInstrumentable); } } diff --git a/tests/robotests/src/com/android/settings/search/SearchIndexProviderCodeInspector.java b/tests/robotests/src/com/android/settings/search/SearchIndexProviderCodeInspector.java index 972bca182ac..4730e413e31 100644 --- a/tests/robotests/src/com/android/settings/search/SearchIndexProviderCodeInspector.java +++ b/tests/robotests/src/com/android/settings/search/SearchIndexProviderCodeInspector.java @@ -91,7 +91,7 @@ public class SearchIndexProviderCodeInspector extends CodeInspector { // If it's a SettingsPreferenceFragment, it must also be Indexable. final boolean implementsIndexable = Indexable.class.isAssignableFrom(clazz); if (!implementsIndexable) { - if (!notImplementingIndexableGrandfatherList.contains(className)) { + if (!notImplementingIndexableGrandfatherList.remove(className)) { notImplementingIndexable.add(className); } continue; @@ -99,7 +99,7 @@ public class SearchIndexProviderCodeInspector extends CodeInspector { final boolean hasSearchIndexProvider = hasSearchIndexProvider(clazz); // If it implements Indexable, it must also implement the index provider field. if (!hasSearchIndexProvider) { - if (!notImplementingIndexProviderGrandfatherList.contains(className)) { + if (!notImplementingIndexProviderGrandfatherList.remove(className)) { notImplementingIndexProvider.add(className); } continue; @@ -109,14 +109,14 @@ public class SearchIndexProviderCodeInspector extends CodeInspector { final boolean isSharingPrefControllers = DashboardFragmentSearchIndexProviderInspector .isSharingPreferenceControllers(clazz); if (!isSharingPrefControllers) { - if (!notSharingPrefControllersGrandfatherList.contains(className)) { + if (!notSharingPrefControllersGrandfatherList.remove(className)) { notSharingPreferenceControllers.add(className); } continue; } // Must be in SearchProviderRegistry if (SearchIndexableResources.getResourceByName(className) == null) { - if (!notInSearchIndexableRegistryGrandfatherList.contains(className)) { + if (!notInSearchIndexableRegistryGrandfatherList.remove(className)) { notInSearchProviderRegistry.add(className); } continue; @@ -145,6 +145,15 @@ public class SearchIndexProviderCodeInspector extends CodeInspector { assertWithMessage(notInProviderRegistryError) .that(notInSearchProviderRegistry) .isEmpty(); + assertNoObsoleteInGrandfatherList("grandfather_not_implementing_indexable", + notImplementingIndexableGrandfatherList); + assertNoObsoleteInGrandfatherList("grandfather_not_implementing_index_provider", + notImplementingIndexProviderGrandfatherList); + assertNoObsoleteInGrandfatherList("grandfather_not_in_search_index_provider_registry", + notInSearchIndexableRegistryGrandfatherList); + assertNoObsoleteInGrandfatherList( + "grandfather_not_sharing_pref_controllers_with_search_provider", + notSharingPrefControllersGrandfatherList); } private boolean hasSearchIndexProvider(Class clazz) {