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() {} |
} |