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

Unified Diff: base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java

Issue 1641513004: Update //base to chromium 9659b08ea5a34f889dc4166217f438095ddc10d2 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 4 years, 11 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: base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java b/base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java
index 2feb83d35c04551c7c88f77d7e5546a3c8d74676..4dde9e5cbfcc4d4fbad3ab91e52fd6c30134a627 100644
--- a/base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java
+++ b/base/test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java
@@ -4,11 +4,24 @@
package org.chromium.base.test.util;
+import android.content.Context;
+
+import junit.framework.Assert;
+
+import org.chromium.base.BaseChromiumApplication;
+import org.chromium.base.CommandLine;
+
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import java.lang.reflect.AnnotatedElement;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
/**
* Provides annotations related to command-line flag handling.
@@ -44,5 +57,48 @@ public final class CommandLineFlags {
String[] value();
}
+ /**
+ * Sets up the CommandLine with the appropriate flags.
+ *
+ * This will add the difference of the sets of flags specified by {@link CommandLineFlags.Add}
+ * and {@link CommandLineFlags.Remove} to the {@link org.chromium.base.CommandLine}. Note that
+ * trying to remove a flag set externally, i.e. by the command-line flags file, will not work.
+ */
+ public static void setUp(Context targetContext, AnnotatedElement element) {
+ Assert.assertNotNull("Unable to get a non-null target context.", targetContext);
+ CommandLine.reset();
+ BaseChromiumApplication.initCommandLine(targetContext);
+ Set<String> flags = getFlags(element);
+ for (String flag : flags) {
+ CommandLine.getInstance().appendSwitch(flag);
+ }
+ }
+
+ private static Set<String> getFlags(AnnotatedElement element) {
+ AnnotatedElement parent = (element instanceof Method)
+ ? ((Method) element).getDeclaringClass()
+ : ((Class) element).getSuperclass();
+ Set<String> flags = (parent == null) ? new HashSet<String>() : getFlags(parent);
+
+ if (element.isAnnotationPresent(CommandLineFlags.Add.class)) {
+ flags.addAll(Arrays.asList(element.getAnnotation(CommandLineFlags.Add.class).value()));
+ }
+
+ if (element.isAnnotationPresent(CommandLineFlags.Remove.class)) {
+ List<String> flagsToRemove =
+ Arrays.asList(element.getAnnotation(CommandLineFlags.Remove.class).value());
+ for (String flagToRemove : flagsToRemove) {
+ // If your test fails here, you have tried to remove a command-line flag via
+ // CommandLineFlags.Remove that was loaded into CommandLine via something other
+ // than CommandLineFlags.Add (probably the command-line flag file).
+ Assert.assertFalse("Unable to remove command-line flag \"" + flagToRemove + "\".",
+ CommandLine.getInstance().hasSwitch(flagToRemove));
+ }
+ flags.removeAll(flagsToRemove);
+ }
+
+ return flags;
+ }
+
private CommandLineFlags() {}
}

Powered by Google App Engine
This is Rietveld 408576698