Index: base/test/android/javatests/src/org/chromium/base/test/util/parameter/Parameter.java |
diff --git a/base/test/android/javatests/src/org/chromium/base/test/util/parameter/Parameter.java b/base/test/android/javatests/src/org/chromium/base/test/util/parameter/Parameter.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5559a56615b809affa7b54fae75a1929041373d2 |
--- /dev/null |
+++ b/base/test/android/javatests/src/org/chromium/base/test/util/parameter/Parameter.java |
@@ -0,0 +1,154 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.base.test.util.parameter; |
+ |
+import junit.framework.TestCase; |
+ |
+import java.lang.reflect.AnnotatedElement; |
+import java.util.ArrayList; |
+import java.util.Collections; |
+import java.util.List; |
+ |
+/** |
+ * The annotation for an individual parameter in a {@link ParameterizedTest}. |
+ * |
+ * Contains all annotations required to run tests ParameterizedTests. |
+ */ |
+public @interface Parameter { |
+ String tag(); |
+ Argument[] arguments() default {}; |
+ |
+ /** |
+ * The annotation for an individual argument in a {@link Parameter}. |
+ */ |
+ @interface Argument { |
+ String name(); |
+ String stringVar() default Parameter.ArgumentDefault.STRING; |
+ String[] stringArray() default {}; |
+ int intVar() default Parameter.ArgumentDefault.INT; |
+ int[] intArray() default {}; |
+ } |
+ |
+ /** |
+ * Default values for {@link Parameter.Argument}s. |
+ * |
+ * TODO (crbug.com/520232): Move to within {@link Parameter.Argument} and rename to Default |
+ * when fixed. |
+ */ |
+ final class ArgumentDefault { |
+ public static final String STRING = ""; |
+ public static final int INT = 0; |
+ } |
+ |
+ /** |
+ * The tool to read Parameter related annotations. |
+ */ |
+ class Reader { |
+ private AnnotatedElement mAnnotatedElement; |
+ private ParameterizedTest mParameterizedTest; |
+ |
+ public Reader(TestCase testCase) { |
+ try { |
+ mAnnotatedElement = testCase.getClass().getMethod(testCase.getName()); |
+ } catch (NoSuchMethodException e) { |
+ // ignore |
+ } |
+ } |
+ |
+ /** |
+ * Gets the {@link ParameterizedTest}s for the current test. |
+ * |
+ * @return a list of all the {@link ParameterizedTest}s for the current test. |
+ */ |
+ public List<ParameterizedTest> getParameterizedTests() { |
+ List<ParameterizedTest> parameterizedTests = new ArrayList<>(); |
+ if (mAnnotatedElement.isAnnotationPresent(ParameterizedTest.Set.class)) { |
+ Collections.addAll(parameterizedTests, getParameterizedTestSet().tests()); |
+ } else if (mAnnotatedElement.isAnnotationPresent(ParameterizedTest.class)) { |
+ parameterizedTests.add(getParameterizedTest()); |
+ } |
+ return parameterizedTests; |
+ } |
+ |
+ |
+ /** |
+ * Gets the {@link ParameterizedTest} annotation of the current test. |
+ * |
+ * @return a {@link ParameterizedTest} of the current test's parameters. |
+ */ |
+ private ParameterizedTest getParameterizedTest() { |
+ return mAnnotatedElement.getAnnotation(ParameterizedTest.class); |
+ } |
+ |
+ /** |
+ * Gets the {@link ParameterizedTest.Set} annotation of the current test. |
+ * |
+ * @return a {@link ParameterizedTest.Set} of the current test's parameters. |
+ */ |
+ private ParameterizedTest.Set getParameterizedTestSet() { |
+ return mAnnotatedElement.getAnnotation(ParameterizedTest.Set.class); |
+ } |
+ |
+ public boolean isParameterizedTest() { |
+ return mAnnotatedElement.isAnnotationPresent(ParameterizedTest.class) |
+ || mAnnotatedElement.isAnnotationPresent(ParameterizedTest.Set.class); |
+ } |
+ |
+ public void setCurrentParameterizedTest(ParameterizedTest parameterizedTest) { |
+ mParameterizedTest = parameterizedTest; |
+ } |
+ |
+ /** |
+ * Gets a {@link Parameter} object for a given target parameter. |
+ * |
+ * @param targetParameter the name of the {@link Parameter} to get in the current |
+ * parameterized test. |
+ * @return the {@link Parameter} for a given {@link ParameterizedTest} with the |
+ * targetParameter as its tag if it exists, otherwise returns null. |
+ */ |
+ public Parameter getParameter(String targetParameter) { |
+ if (mParameterizedTest == null || targetParameter == null) { |
+ return null; |
+ } |
+ for (Parameter parameter : mParameterizedTest.parameters()) { |
+ if (targetParameter.equals(parameter.tag())) { |
+ return parameter; |
+ } |
+ } |
+ return null; |
+ } |
+ |
+ /** |
+ * Gets the {@link Parameter.Argument} for a given {@link Parameter}. |
+ * |
+ * @param targetParameter the name of the {@link Parameter} to search for when looking for |
+ * a {@link Parameter.Argument}. |
+ * @param targetArgument the name of the {@link Parameter.Argument} to look for in the |
+ * target {@link Parameter}. |
+ * @return the {@link Parameter.Argument} for a given {@link ParameterizedTest} for the |
+ * {@link Parameter} with the tag matching targetParameter and the argument name being |
+ * targetArgument if it exists, otherwise returns null. |
+ */ |
+ public Parameter.Argument getParameterArgument(String targetParameter, |
+ String targetArgument) { |
+ Parameter parameter = getParameter(targetParameter); |
+ return (parameter == null) ? null : getParameterArgument(parameter, targetArgument); |
+ } |
+ |
+ public static Parameter.Argument getParameterArgument(Parameter parameter, |
+ String targetArgument) { |
+ if (targetArgument == null) { |
+ return null; |
+ } |
+ for (Parameter.Argument argument : parameter.arguments()) { |
+ if (targetArgument.equals(argument.name())) { |
+ return argument; |
+ } |
+ } |
+ return null; |
+ } |
+ } |
+} |
+ |