2
2
3
3
import java .lang .reflect .Array ;
4
4
import java .lang .reflect .Field ;
5
- import java .lang .reflect .Modifier ;
6
5
import java .util .ArrayList ;
6
+ import java .util .Collection ;
7
7
import java .util .List ;
8
8
9
9
import org .junit .experimental .theories .DataPoint ;
10
10
import org .junit .experimental .theories .DataPoints ;
11
11
import org .junit .experimental .theories .ParameterSignature ;
12
12
import org .junit .experimental .theories .ParameterSupplier ;
13
13
import org .junit .experimental .theories .PotentialAssignment ;
14
+ import org .junit .runners .model .FrameworkField ;
14
15
import org .junit .runners .model .FrameworkMethod ;
15
16
import org .junit .runners .model .TestClass ;
16
17
@@ -45,8 +46,8 @@ public Object getValue() throws CouldNotGenerateValueException {
45
46
public String getDescription () throws CouldNotGenerateValueException {
46
47
return fMethod .getName ();
47
48
}
48
- }
49
-
49
+ }
50
+
50
51
private final TestClass fClass ;
51
52
52
53
/**
@@ -60,16 +61,16 @@ public AllMembersSupplier(TestClass type) {
60
61
public List <PotentialAssignment > getValueSources (ParameterSignature sig ) {
61
62
List <PotentialAssignment > list = new ArrayList <PotentialAssignment >();
62
63
63
- addFields (sig , list );
64
+ addSinglePointFields (sig , list );
65
+ addMultiPointFields (sig , list );
64
66
addSinglePointMethods (sig , list );
65
67
addMultiPointMethods (sig , list );
66
68
67
69
return list ;
68
70
}
69
71
70
72
private void addMultiPointMethods (ParameterSignature sig , List <PotentialAssignment > list ) {
71
- for (FrameworkMethod dataPointsMethod : fClass
72
- .getAnnotatedMethods (DataPoints .class )) {
73
+ for (FrameworkMethod dataPointsMethod : getDataPointsMethods (sig )) {
73
74
try {
74
75
addMultiPointArrayValues (sig , dataPointsMethod .getName (), list , dataPointsMethod .invokeExplosively (null ));
75
76
} catch (Throwable e ) {
@@ -80,33 +81,35 @@ private void addMultiPointMethods(ParameterSignature sig, List<PotentialAssignme
80
81
81
82
private void addSinglePointMethods (ParameterSignature sig ,
82
83
List <PotentialAssignment > list ) {
83
- for (FrameworkMethod dataPointMethod : fClass
84
- .getAnnotatedMethods (DataPoint .class )) {
84
+ for (FrameworkMethod dataPointMethod : getSingleDataPointMethods (sig )) {
85
85
if (sig .canAcceptType (dataPointMethod .getType ())) {
86
86
list .add (new MethodParameterValue (dataPointMethod ));
87
87
}
88
88
}
89
89
}
90
-
91
- private void addFields (ParameterSignature sig ,
90
+
91
+ private void addMultiPointFields (ParameterSignature sig ,
92
92
List <PotentialAssignment > list ) {
93
- for (final Field field : fClass .getJavaClass ().getFields ()) {
94
- if (Modifier .isStatic (field .getModifiers ())) {
95
- Class <?> type = field .getType ();
96
- if (sig .canAcceptArrayType (type )
97
- && field .getAnnotation (DataPoints .class ) != null ) {
98
- try {
99
- addArrayValues (field .getName (), list , getStaticFieldValue (field ));
100
- } catch (Throwable e ) {
101
- // ignore and move on
102
- }
103
- } else if (sig .canAcceptType (type )
104
- && field .getAnnotation (DataPoint .class ) != null ) {
105
- list .add (PotentialAssignment
106
- .forValue (field .getName (), getStaticFieldValue (field )));
93
+ for (final Field field : getDataPointsFields (sig )) {
94
+ Class <?> type = field .getType ();
95
+ if (sig .canAcceptArrayType (type )) {
96
+ try {
97
+ addArrayValues (field .getName (), list , getStaticFieldValue (field ));
98
+ } catch (Throwable e ) {
99
+ // ignore and move on
107
100
}
108
101
}
109
102
}
103
+ }
104
+
105
+ private void addSinglePointFields (ParameterSignature sig ,
106
+ List <PotentialAssignment > list ) {
107
+ for (final Field field : getSingleDataPointFields (sig )) {
108
+ Class <?> type = field .getType ();
109
+ if (sig .canAcceptType (type )) {
110
+ list .add (PotentialAssignment .forValue (field .getName (), getStaticFieldValue (field )));
111
+ }
112
+ }
110
113
}
111
114
112
115
private void addArrayValues (String name , List <PotentialAssignment > list , Object array ) {
@@ -136,4 +139,35 @@ private Object getStaticFieldValue(final Field field) {
136
139
"unexpected: getFields returned an inaccessible field" );
137
140
}
138
141
}
142
+
143
+ protected Collection <FrameworkMethod > getDataPointsMethods (ParameterSignature sig ) {
144
+ return fClass .getAnnotatedMethods (DataPoints .class );
145
+ }
146
+
147
+ protected Collection <Field > getSingleDataPointFields (ParameterSignature sig ) {
148
+ List <FrameworkField > fields = fClass .getAnnotatedFields (DataPoint .class );
149
+ Collection <Field > validFields = new ArrayList <Field >();
150
+
151
+ for (FrameworkField frameworkField : fields ) {
152
+ validFields .add (frameworkField .getField ());
153
+ }
154
+
155
+ return validFields ;
156
+ }
157
+
158
+ protected Collection <Field > getDataPointsFields (ParameterSignature sig ) {
159
+ List <FrameworkField > fields = fClass .getAnnotatedFields (DataPoints .class );
160
+ Collection <Field > validFields = new ArrayList <Field >();
161
+
162
+ for (FrameworkField frameworkField : fields ) {
163
+ validFields .add (frameworkField .getField ());
164
+ }
165
+
166
+ return validFields ;
167
+ }
168
+
169
+ protected Collection <FrameworkMethod > getSingleDataPointMethods (ParameterSignature sig ) {
170
+ return fClass .getAnnotatedMethods (DataPoint .class );
171
+ }
172
+
139
173
}
0 commit comments