Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3033)

Unified Diff: chrome/android/junit/src/org/chromium/chrome/browser/Features.java

Issue 2723003010: 📰 Throw when unregistered feature is queried in tests (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/junit/src/org/chromium/chrome/browser/Features.java
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/EnableFeatures.java b/chrome/android/junit/src/org/chromium/chrome/browser/Features.java
similarity index 50%
rename from chrome/android/junit/src/org/chromium/chrome/browser/EnableFeatures.java
rename to chrome/android/junit/src/org/chromium/chrome/browser/Features.java
index a1344931264634fd8e6d2afe2839ae0d1a941f93..b0d052374a617d28aff02c7cd532c704f22b79eb 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/EnableFeatures.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/Features.java
@@ -11,54 +11,65 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.HashMap;
+import java.util.Map;
/**
* Annotation used to set Feature flags during JUnit tests. To have an effect, the associated
* {@link Processor} rule needs to be registered on the test class.
*
+ * Use {@link Features.Register} to specify the features to register and whether they should be
+ * enabled.
+ *
* Sample code:
*
* <pre>
* public class Test {
* &#64;Rule
- * public EnableFeatures.Processor processor = new EnableFeatures.Processor();
+ * public Features.Processor processor = new Features.Processor();
*
- * &#64;EnableFeatures(ChromeFeatureList.NTP_SNIPPETS_OFFLINE_BADGE)
+ * &#64;Features(&#64;Features.Register(ChromeFeatureList.NTP_SNIPPETS_OFFLINE_BADGE))
* public void testFoo() { ... }
* }
* </pre>
+ * // TODO(dgn): Use repeatable annotations (Requires Java 8 / Android N SDK)
*/
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
-public @interface EnableFeatures {
+public @interface Features {
+ Register[] value();
- String[] value();
+ @interface Register {
+ String value();
+ boolean enabled() default true;
+ }
/**
- * Add this rule to tests to activate the {@link EnableFeatures} annotations and choose flags
+ * Add this rule to tests to activate the {@link Features} annotations and choose flags
* to enable, or get rid of exceptions when the production code tries to check for enabled
* features.
*/
- public static class Processor extends AnnotationProcessor<EnableFeatures> {
+ class Processor extends AnnotationProcessor<Features> {
public Processor() {
- super(EnableFeatures.class);
+ super(Features.class);
}
@Override
protected void before() throws Throwable {
- Set<String> enabledFeatures = new HashSet<>();
- String[] values = getAnnotation().value();
- enabledFeatures.addAll(Arrays.asList(values));
- ChromeFeatureList.setTestEnabledFeatures(enabledFeatures);
+ Map<String, Boolean> registeredFeatures = new HashMap<>();
+ Register[] values = getAnnotation().value();
+
+ for (Register featureState : values) {
+ registeredFeatures.put(featureState.value(), featureState.enabled());
+ }
+
+ ChromeFeatureList.setTestFeatures(registeredFeatures);
}
@Override
protected void after() {
- ChromeFeatureList.setTestEnabledFeatures(null);
+ ChromeFeatureList.setTestFeatures(null);
}
}
-}
+ }

Powered by Google App Engine
This is Rietveld 408576698