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

Unified Diff: base/test/android/javatests/src/org/chromium/base/test/params/ParameterizedFrameworkMethod.java

Issue 2568633002: Create Next Gen Parameter Test Framework for JUnit4 (Closed)
Patch Set: rebase Created 3 years, 4 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/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;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698