Index: base/test/android/javatests/src/org/chromium/base/test/params/ParameterizedFrameworkMethod.java |
diff --git a/base/test/android/javatests/src/org/chromium/base/test/params/ParameterizedFrameworkMethod.java b/base/test/android/javatests/src/org/chromium/base/test/params/ParameterizedFrameworkMethod.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f3333b5720dfe4e6830f5c6679f45d2ef81fc522 |
--- /dev/null |
+++ b/base/test/android/javatests/src/org/chromium/base/test/params/ParameterizedFrameworkMethod.java |
@@ -0,0 +1,94 @@ |
+// Copyright 2017 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.params; |
+ |
+import org.junit.runners.model.FrameworkMethod; |
+ |
+import java.lang.annotation.Annotation; |
+import java.lang.reflect.Method; |
+import java.util.ArrayList; |
+import java.util.Collection; |
+import java.util.List; |
+ |
+/** |
+ * Custom FrameworkMethod that includes a {@code ParameterSet} that |
+ * represents the parameters for this test method |
+ */ |
+public class ParameterizedFrameworkMethod extends FrameworkMethod { |
+ private ParameterSet mParameterSet; |
+ private String mName; |
+ |
+ public ParameterizedFrameworkMethod( |
+ Method method, ParameterSet parameterSet, String classParameterSetName) { |
+ super(method); |
+ mParameterSet = parameterSet; |
+ String postFix = ""; |
+ if (classParameterSetName != null && !classParameterSetName.isEmpty()) { |
+ postFix += "_" + classParameterSetName; |
+ } |
+ if (parameterSet != null && !parameterSet.getName().isEmpty()) { |
+ postFix += "_" + parameterSet.getName(); |
+ } |
+ mName = postFix.isEmpty() ? method.getName() : method.getName() + "_" + postFix; |
+ } |
+ |
+ @Override |
+ public String getName() { |
+ return mName; |
+ } |
+ |
+ @Override |
+ public Object invokeExplosively(Object target, Object... params) throws Throwable { |
+ if (mParameterSet != null) { |
+ return super.invokeExplosively(target, mParameterSet.getValues().toArray()); |
+ } |
+ return super.invokeExplosively(target, params); |
+ } |
+ |
+ static List<FrameworkMethod> wrapAllFrameworkMethods( |
+ Collection<FrameworkMethod> frameworkMethods, String classParameterSetName) { |
+ List<FrameworkMethod> results = new ArrayList<>(); |
+ for (FrameworkMethod frameworkMethod : frameworkMethods) { |
+ results.add(new ParameterizedFrameworkMethod( |
+ frameworkMethod.getMethod(), null, classParameterSetName)); |
+ } |
+ return results; |
+ } |
+ |
+ @Override |
+ public boolean equals(Object obj) { |
+ if (obj instanceof ParameterizedFrameworkMethod) { |
+ ParameterizedFrameworkMethod method = (ParameterizedFrameworkMethod) obj; |
+ return super.equals(obj) && method.getParameterSet().equals(getParameterSet()) |
+ && method.getName().equals(getName()); |
+ } |
+ return false; |
+ } |
+ |
+ /** |
+ * Override hashCode method to distinguish two ParameterizedFrameworkmethod with same |
+ * Method object. |
+ */ |
+ @Override |
+ public int hashCode() { |
+ int result = 17; |
+ result = 31 * result + super.hashCode(); |
+ result = 31 * result + getName().hashCode(); |
+ if (getParameterSet() != null) { |
+ result = 31 * result + getParameterSet().hashCode(); |
+ } |
+ return result; |
+ } |
+ |
+ Annotation[] getTestAnnotations() { |
+ // TODO(yolandyan): add annotation from the ParameterSet, enable |
+ // test writing to add SkipCheck for an individual parameter |
+ return getMethod().getAnnotations(); |
+ } |
+ |
+ public ParameterSet getParameterSet() { |
+ return mParameterSet; |
+ } |
+} |