• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.base.test.params;
6 
7 import org.junit.runners.model.FrameworkMethod;
8 
9 import java.lang.annotation.Annotation;
10 import java.lang.reflect.Method;
11 import java.util.ArrayList;
12 import java.util.Collection;
13 import java.util.List;
14 
15 /**
16  * Custom FrameworkMethod that includes a {@code ParameterSet} that
17  * represents the parameters for this test method
18  */
19 public class ParameterizedFrameworkMethod extends FrameworkMethod {
20     private ParameterSet mParameterSet;
21     private String mName;
22 
ParameterizedFrameworkMethod( Method method, ParameterSet parameterSet, String classParameterSetName)23     public ParameterizedFrameworkMethod(
24             Method method, ParameterSet parameterSet, String classParameterSetName) {
25         super(method);
26         mParameterSet = parameterSet;
27         String postFix = "";
28         if (classParameterSetName != null && !classParameterSetName.isEmpty()) {
29             postFix += "_" + classParameterSetName;
30         }
31         if (parameterSet != null && !parameterSet.getName().isEmpty()) {
32             postFix += "_" + parameterSet.getName();
33         }
34         mName = postFix.isEmpty() ? method.getName() : method.getName() + "_" + postFix;
35     }
36 
37     @Override
getName()38     public String getName() {
39         return mName;
40     }
41 
42     @Override
invokeExplosively(Object target, Object... params)43     public Object invokeExplosively(Object target, Object... params) throws Throwable {
44         if (mParameterSet != null) {
45             return super.invokeExplosively(target, mParameterSet.getValues().toArray());
46         }
47         return super.invokeExplosively(target, params);
48     }
49 
wrapAllFrameworkMethods( Collection<FrameworkMethod> frameworkMethods, String classParameterSetName)50     static List<FrameworkMethod> wrapAllFrameworkMethods(
51             Collection<FrameworkMethod> frameworkMethods, String classParameterSetName) {
52         List<FrameworkMethod> results = new ArrayList<>();
53         for (FrameworkMethod frameworkMethod : frameworkMethods) {
54             results.add(new ParameterizedFrameworkMethod(
55                     frameworkMethod.getMethod(), null, classParameterSetName));
56         }
57         return results;
58     }
59 
60     @Override
equals(Object obj)61     public boolean equals(Object obj) {
62         if (obj instanceof ParameterizedFrameworkMethod) {
63             ParameterizedFrameworkMethod method = (ParameterizedFrameworkMethod) obj;
64             return super.equals(obj) && method.getParameterSet().equals(getParameterSet())
65                     && method.getName().equals(getName());
66         }
67         return false;
68     }
69 
70     /**
71      * Override hashCode method to distinguish two ParameterizedFrameworkmethod with same
72      * Method object.
73      */
74     @Override
hashCode()75     public int hashCode() {
76         int result = 17;
77         result = 31 * result + super.hashCode();
78         result = 31 * result + getName().hashCode();
79         if (getParameterSet() != null) {
80             result = 31 * result + getParameterSet().hashCode();
81         }
82         return result;
83     }
84 
getTestAnnotations()85     Annotation[] getTestAnnotations() {
86         // TODO(yolandyan): add annotation from the ParameterSet, enable
87         // test writing to add SkipCheck for an individual parameter
88         return getMethod().getAnnotations();
89     }
90 
getParameterSet()91     public ParameterSet getParameterSet() {
92         return mParameterSet;
93     }
94 }
95