summaryrefslogtreecommitdiff
path: root/base/test/android/javatests/src/org/chromium/base/test/params/MethodParamAnnotationRule.java
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-10-07 16:54:29 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-10-07 16:54:29 +0000
commite8dc1d97cd08ef197dcded3ab6085113817f7f2a (patch)
tree0f4d08540c8e5fa16bcd0c99cd413fe815560e4b /base/test/android/javatests/src/org/chromium/base/test/params/MethodParamAnnotationRule.java
parentb4233fd961752b80d42ae68e8b42acfb3e99be57 (diff)
parent0d51dc717edd4d97116b47bc156e83b8fa193d3d (diff)
downloadlibchrome-e8dc1d97cd08ef197dcded3ab6085113817f7f2a.tar.gz
Snap for 7803083 from 0d51dc717edd4d97116b47bc156e83b8fa193d3d to mainline-tzdata2-release
Change-Id: I3b7204a704e7e1d0caac8bc7ea40e3b86def3032
Diffstat (limited to 'base/test/android/javatests/src/org/chromium/base/test/params/MethodParamAnnotationRule.java')
-rw-r--r--base/test/android/javatests/src/org/chromium/base/test/params/MethodParamAnnotationRule.java62
1 files changed, 62 insertions, 0 deletions
diff --git a/base/test/android/javatests/src/org/chromium/base/test/params/MethodParamAnnotationRule.java b/base/test/android/javatests/src/org/chromium/base/test/params/MethodParamAnnotationRule.java
new file mode 100644
index 0000000000..2986b96c08
--- /dev/null
+++ b/base/test/android/javatests/src/org/chromium/base/test/params/MethodParamAnnotationRule.java
@@ -0,0 +1,62 @@
+// 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.Statement;
+
+import org.chromium.base.test.params.ParameterAnnotations.UseMethodParameterAfter;
+import org.chromium.base.test.params.ParameterAnnotations.UseMethodParameterBefore;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Processes {@link UseMethodParameterBefore} and {@link UseMethodParameterAfter} annotations to run
+ * the corresponding methods. To use, add an instance to the test class and annotate it with
+ * {@code @}{@link org.junit.Rule Rule}.
+ */
+public class MethodParamAnnotationRule extends MethodParamRule {
+ @Override
+ protected Statement applyParameterAndValues(final Statement base, Object target,
+ Class<? extends ParameterProvider> parameterProvider, List<Object> values) {
+ final List<Method> beforeMethods = new ArrayList<>();
+ final List<Method> afterMethods = new ArrayList<>();
+ for (Method m : target.getClass().getDeclaredMethods()) {
+ if (!m.getReturnType().equals(Void.TYPE)) continue;
+ if (!Modifier.isPublic(m.getModifiers())) continue;
+
+ UseMethodParameterBefore beforeAnnotation =
+ m.getAnnotation(UseMethodParameterBefore.class);
+ if (beforeAnnotation != null && beforeAnnotation.value().equals(parameterProvider)) {
+ beforeMethods.add(m);
+ }
+
+ UseMethodParameterAfter afterAnnotation =
+ m.getAnnotation(UseMethodParameterAfter.class);
+ if (afterAnnotation != null && afterAnnotation.value().equals(parameterProvider)) {
+ afterMethods.add(m);
+ }
+ }
+
+ if (beforeMethods.isEmpty() && afterMethods.isEmpty()) return base;
+
+ return new Statement() {
+ @Override
+ public void evaluate() throws Throwable {
+ for (Method m : beforeMethods) {
+ m.invoke(target, values.toArray());
+ }
+
+ base.evaluate();
+
+ for (Method m : afterMethods) {
+ m.invoke(target, values.toArray());
+ }
+ }
+ };
+ }
+}