OSDN Git Service

Code inspector test clean up.
authorFan Zhang <zhfan@google.com>
Mon, 15 May 2017 21:55:47 +0000 (14:55 -0700)
committerFan Zhang <zhfan@google.com>
Mon, 15 May 2017 21:56:18 +0000 (14:56 -0700)
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

tests/robotests/assets/grandfather_not_implementing_index_provider
tests/robotests/assets/grandfather_not_implementing_indexable
tests/robotests/assets/grandfather_not_in_search_index_provider_registry
tests/robotests/assets/grandfather_not_sharing_pref_controllers_with_search_provider
tests/robotests/src/com/android/settings/core/codeinspection/CodeInspector.java
tests/robotests/src/com/android/settings/core/instrumentation/InstrumentableFragmentCodeInspector.java
tests/robotests/src/com/android/settings/search/SearchIndexProviderCodeInspector.java

index 2421cbb..e21b76c 100644 (file)
@@ -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
index 544b2c7..47711b0 100644 (file)
@@ -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
index 8184d2c..1712f19 100644 (file)
@@ -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
index a957ce4..91046fe 100644 (file)
@@ -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<String> 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())) {
index ed4e50c..4455549 100644 (file)
@@ -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);
     }
 }
index 972bca1..4730e41 100644 (file)
@@ -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) {