diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-07 16:54:29 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-07 16:54:29 +0000 |
commit | e8dc1d97cd08ef197dcded3ab6085113817f7f2a (patch) | |
tree | 0f4d08540c8e5fa16bcd0c99cd413fe815560e4b /base/test/android/javatests/src/org/chromium/base/test/params/MethodParamAnnotationRule.java | |
parent | b4233fd961752b80d42ae68e8b42acfb3e99be57 (diff) | |
parent | 0d51dc717edd4d97116b47bc156e83b8fa193d3d (diff) | |
download | libchrome-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.java | 62 |
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()); + } + } + }; + } +} |