Fix flaky TextClassifierSettingsTest. We used to override and read DeviceConfig directly, but it is temporary and will be override after the testing emulator syncs. With this change, we always override/read a fake DeviceConfig. Bug: 191844721 Bug: 204903521 Change-Id: I06021adc2e075c1745e1027fda85235d61957702 (cherry picked from commit 5c9980a957e85c74e6577f5ebe300a4a5039b742)
diff --git a/java/tests/instrumentation/src/com/android/textclassifier/common/TextClassifierSettingsTest.java b/java/tests/instrumentation/src/com/android/textclassifier/common/TextClassifierSettingsTest.java index 21d6943..8072d72 100644 --- a/java/tests/instrumentation/src/com/android/textclassifier/common/TextClassifierSettingsTest.java +++ b/java/tests/instrumentation/src/com/android/textclassifier/common/TextClassifierSettingsTest.java
@@ -18,12 +18,11 @@ import static com.google.common.truth.Truth.assertThat; -import android.provider.DeviceConfig; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import androidx.test.platform.app.InstrumentationRegistry; +import com.android.textclassifier.testing.TestingDeviceConfig; import com.google.common.collect.ImmutableMap; -import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; import org.junit.After; @@ -157,26 +156,11 @@ private static void assertSettings( Map<String, String> keyValueMap, Consumer<TextClassifierSettings> settingsConsumer) { - HashMap<String, String> keyOriginalValueMap = new HashMap<>(); + TestingDeviceConfig deviceConfig = new TestingDeviceConfig(); + TextClassifierSettings settings = new TextClassifierSettings(deviceConfig); for (String key : keyValueMap.keySet()) { - keyOriginalValueMap.put( - key, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_TEXTCLASSIFIER, key)); + deviceConfig.setConfig(key, keyValueMap.get(key)); } - TextClassifierSettings settings = new TextClassifierSettings(); - try { - for (String key : keyValueMap.keySet()) { - setDeviceConfig(key, keyValueMap.get(key)); - } - settingsConsumer.accept(settings); - } finally { - for (String key : keyValueMap.keySet()) { - setDeviceConfig(key, keyOriginalValueMap.get(key)); - } - } - } - - private static void setDeviceConfig(String key, String value) { - DeviceConfig.setProperty( - DeviceConfig.NAMESPACE_TEXTCLASSIFIER, key, value, /* makeDefault */ false); + settingsConsumer.accept(settings); } }
diff --git a/java/tests/instrumentation/src/com/android/textclassifier/testing/TestingDeviceConfig.java b/java/tests/instrumentation/src/com/android/textclassifier/testing/TestingDeviceConfig.java index 670e3d0..bdc422e 100644 --- a/java/tests/instrumentation/src/com/android/textclassifier/testing/TestingDeviceConfig.java +++ b/java/tests/instrumentation/src/com/android/textclassifier/testing/TestingDeviceConfig.java
@@ -25,42 +25,64 @@ /** A fake DeviceConfig implementation for testing purpose. */ public final class TestingDeviceConfig implements TextClassifierSettings.IDeviceConfig { - private final HashMap<String, String> strConfigs; - private final HashMap<String, Boolean> boolConfigs; + private final HashMap<String, String> configs; public TestingDeviceConfig() { - this.strConfigs = new HashMap<>(); - this.boolConfigs = new HashMap<>(); + this.configs = new HashMap<>(); } public void setConfig(String key, String value) { - strConfigs.put(key, value); + configs.put(key, value); } public void setConfig(String key, boolean value) { - boolConfigs.put(key, value); + configs.put(key, Boolean.toString(value)); + } + + public void setConfig(String key, int value) { + configs.put(key, Integer.toString(value)); + } + + public void setConfig(String key, float value) { + configs.put(key, Float.toString(value)); + } + + public void setConfig(String key, long value) { + configs.put(key, Long.toString(value)); } @Override public Properties getProperties(@NonNull String namespace, @NonNull String... names) { Properties.Builder builder = new Properties.Builder(namespace); - for (String key : strConfigs.keySet()) { - builder.setString(key, strConfigs.get(key)); - } - for (String key : boolConfigs.keySet()) { - builder.setBoolean(key, boolConfigs.get(key)); + for (String key : configs.keySet()) { + builder.setString(key, configs.get(key)); } return builder.build(); } @Override public boolean getBoolean(@NonNull String namespace, @NonNull String name, boolean defaultValue) { - return boolConfigs.containsKey(name) ? boolConfigs.get(name) : defaultValue; + return configs.containsKey(name) ? Boolean.parseBoolean(configs.get(name)) : defaultValue; } @Override public String getString( @NonNull String namespace, @NonNull String name, @Nullable String defaultValue) { - return strConfigs.containsKey(name) ? strConfigs.get(name) : defaultValue; + return configs.containsKey(name) ? configs.get(name) : defaultValue; + } + + @Override + public int getInt(@NonNull String namespace, @NonNull String name, int defaultValue) { + return configs.containsKey(name) ? Integer.parseInt(configs.get(name)) : defaultValue; + } + + @Override + public float getFloat(@NonNull String namespace, @NonNull String name, float defaultValue) { + return configs.containsKey(name) ? Float.parseFloat(configs.get(name)) : defaultValue; + } + + @Override + public long getLong(@NonNull String namespace, @NonNull String name, long defaultValue) { + return configs.containsKey(name) ? Long.parseLong(configs.get(name)) : defaultValue; } }