35
35
import java .util .Map ;
36
36
import java .util .Set ;
37
37
import java .util .concurrent .TimeoutException ;
38
+ import java .util .stream .Stream ;
38
39
import muzzle .TestClasses ;
39
40
import muzzle .TestClasses .Nested ;
40
41
import org .junit .jupiter .api .BeforeAll ;
41
42
import org .junit .jupiter .api .Test ;
42
43
import org .junit .jupiter .params .ParameterizedTest ;
43
- import org .junit .jupiter .params .provider .CsvSource ;
44
+ import org .junit .jupiter .params .provider .Arguments ;
45
+ import org .junit .jupiter .params .provider .MethodSource ;
44
46
import org .junit .jupiter .params .provider .ValueSource ;
45
47
import org .objectweb .asm .Type ;
46
48
@@ -131,46 +133,49 @@ void muzzleTypePoolCaches() throws Exception {
131
133
assertThat (cl .count ).isEqualTo (countAfterFirstMatch );
132
134
}
133
135
136
+ private static Stream <Arguments > matchingRefProvider () {
137
+ return Stream .of (
138
+ Arguments .of (Nested .B .class , NON_INTERFACE , null ),
139
+ Arguments .of (Nested .B .class , INTERFACE , Mismatch .MissingFlag .class ));
140
+ }
141
+
134
142
@ ParameterizedTest
135
- @ CsvSource ({
136
- "muzzle.TestClasses$Nested$B, NON_INTERFACE, ''" ,
137
- "muzzle.TestClasses$Nested$B, INTERFACE, MissingFlag"
138
- })
139
- void matchingRef (String referenceName , String referenceFlag , String expectedMismatch ) {
140
- Flag flag = "NON_INTERFACE" .equals (referenceFlag ) ? NON_INTERFACE : INTERFACE ;
141
- ClassRef ref = ClassRef .builder (referenceName ).addFlag (flag ).build ();
143
+ @ MethodSource ("matchingRefProvider" )
144
+ void matchingRef (Class <?> referenceClass , Flag referenceFlag , Class <? extends Mismatch > expectedMismatch ) {
145
+ ClassRef ref = ClassRef .builder (referenceClass .getName ()).addFlag (referenceFlag ).build ();
142
146
143
147
List <Mismatch > mismatches =
144
148
createMatcher (Collections .singletonMap (ref .getClassName (), ref ))
145
149
.getMismatchedReferenceSources (this .getClass ().getClassLoader ());
146
150
147
- if (expectedMismatch . isEmpty () ) {
151
+ if (expectedMismatch == null ) {
148
152
assertThat (getMismatchClassSet (mismatches )).isEmpty ();
149
153
} else {
150
- assertThat (getMismatchClassSet (mismatches )).containsExactly (Mismatch . MissingFlag . class );
154
+ assertThat (getMismatchClassSet (mismatches )).containsExactly (expectedMismatch );
151
155
}
152
156
}
153
157
158
+ private static Stream <Arguments > methodMatchProvider () {
159
+ return Stream .of (
160
+ Arguments .of ("method" , "(Ljava/lang/String;)Ljava/lang/String;" , "" , Nested .B .class , null ),
161
+ Arguments .of ("hashCode" , "()I" , "" , Nested .B .class , null ),
162
+ Arguments .of ("someMethod" , "()V" , "" , Nested .SomeInterface .class , null ),
163
+ Arguments .of ("privateStuff" , "()V" , "PRIVATE_OR_HIGHER" , Nested .B .class , null ),
164
+ Arguments .of ("privateStuff" , "()V" , "PROTECTED_OR_HIGHER" , Nested .B2 .class , Mismatch .MissingFlag .class ),
165
+ Arguments .of ("staticMethod" , "()V" , "NON_STATIC" , Nested .B .class , Mismatch .MissingFlag .class ),
166
+ Arguments .of ("missingMethod" , "()V" , "" , Nested .B .class , Mismatch .MissingMethod .class ));
167
+ }
168
+
154
169
@ ParameterizedTest
155
- @ CsvSource ({
156
- "method, (Ljava/lang/String;)Ljava/lang/String;, '', muzzle.TestClasses$Nested$B, ''" ,
157
- "hashCode, ()I, '', muzzle.TestClasses$Nested$B, ''" ,
158
- "someMethod, ()V, '', muzzle.TestClasses$Nested$SomeInterface, ''" ,
159
- "privateStuff, ()V, PRIVATE_OR_HIGHER, muzzle.TestClasses$Nested$B, ''" ,
160
- "privateStuff, ()V, PROTECTED_OR_HIGHER, muzzle.TestClasses$Nested$B2, MissingFlag" ,
161
- "staticMethod, ()V, NON_STATIC, muzzle.TestClasses$Nested$B, MissingFlag" ,
162
- "missingMethod, ()V, '', muzzle.TestClasses$Nested$B, MissingMethod"
163
- })
170
+ @ MethodSource ("methodMatchProvider" )
164
171
void methodMatch (
165
172
String methodName ,
166
173
String methodDesc ,
167
174
String methodFlagsStr ,
168
- String classToCheckName ,
169
- String expectedMismatch )
170
- throws ClassNotFoundException {
175
+ Class <?> classToCheck ,
176
+ Class <? extends Mismatch > expectedMismatch ) {
171
177
Type methodType = Type .getMethodType (methodDesc );
172
178
List <Flag > methodFlags = parseMethodFlags (methodFlagsStr );
173
- Class <?> classToCheck = Class .forName (classToCheckName );
174
179
175
180
ClassRef reference =
176
181
ClassRef .builder (classToCheck .getName ())
@@ -186,34 +191,34 @@ void methodMatch(
186
191
createMatcher (Collections .singletonMap (reference .getClassName (), reference ))
187
192
.getMismatchedReferenceSources (this .getClass ().getClassLoader ());
188
193
189
- if (expectedMismatch . isEmpty () ) {
194
+ if (expectedMismatch == null ) {
190
195
assertThat (getMismatchClassSet (mismatches )).isEmpty ();
191
196
} else {
192
- Class <? extends Mismatch > expectedMismatchClass = getMismatchClass (expectedMismatch );
193
- assertThat (getMismatchClassSet (mismatches )).containsExactly (expectedMismatchClass );
197
+ assertThat (getMismatchClassSet (mismatches )).containsExactly (expectedMismatch );
194
198
}
195
199
}
196
200
201
+ private static Stream <Arguments > fieldMatchProvider () {
202
+ return Stream .of (
203
+ Arguments .of ("missingField" , "Ljava/lang/String;" , "" , Nested .A .class , Mismatch .MissingField .class ),
204
+ Arguments .of ("privateField" , "Ljava/lang/String;" , "" , Nested .A .class , Mismatch .MissingField .class ),
205
+ Arguments .of ("privateField" , "Ljava/lang/Object;" , "PRIVATE_OR_HIGHER" , Nested .A .class , null ),
206
+ Arguments .of ("privateField" , "Ljava/lang/Object;" , "PROTECTED_OR_HIGHER" , Nested .A2 .class , Mismatch .MissingFlag .class ),
207
+ Arguments .of ("protectedField" , "Ljava/lang/Object;" , "STATIC" , Nested .A .class , Mismatch .MissingFlag .class ),
208
+ Arguments .of ("staticB" , "Lmuzzle/TestClasses$Nested$B;" , "STATIC|PROTECTED_OR_HIGHER" , Nested .A .class , null ),
209
+ Arguments .of ("number" , "I" , "PACKAGE_OR_HIGHER" , Nested .Primitives .class , null ),
210
+ Arguments .of ("flag" , "Z" , "PACKAGE_OR_HIGHER" , Nested .Primitives .class , null ));
211
+ }
212
+
197
213
@ ParameterizedTest
198
- @ CsvSource ({
199
- "missingField, Ljava/lang/String;, '', muzzle.TestClasses$Nested$A, MissingField" ,
200
- "privateField, Ljava/lang/String;, '', muzzle.TestClasses$Nested$A, MissingField" ,
201
- "privateField, Ljava/lang/Object;, PRIVATE_OR_HIGHER, muzzle.TestClasses$Nested$A, ''" ,
202
- "privateField, Ljava/lang/Object;, PROTECTED_OR_HIGHER, muzzle.TestClasses$Nested$A2, MissingFlag" ,
203
- "protectedField, Ljava/lang/Object;, STATIC, muzzle.TestClasses$Nested$A, MissingFlag" ,
204
- "staticB, Lmuzzle/TestClasses$Nested$B;, STATIC|PROTECTED_OR_HIGHER, muzzle.TestClasses$Nested$A, ''" ,
205
- "number, I, PACKAGE_OR_HIGHER, muzzle.TestClasses$Nested$Primitives, ''" ,
206
- "flag, Z, PACKAGE_OR_HIGHER, muzzle.TestClasses$Nested$Primitives, ''"
207
- })
214
+ @ MethodSource ("fieldMatchProvider" )
208
215
void fieldMatch (
209
216
String fieldName ,
210
217
String fieldType ,
211
218
String fieldFlagsStr ,
212
- String classToCheckName ,
213
- String expectedMismatch )
214
- throws ClassNotFoundException {
219
+ Class <?> classToCheck ,
220
+ Class <? extends Mismatch > expectedMismatch ) {
215
221
List <Flag > fieldFlags = parseFieldFlags (fieldFlagsStr );
216
- Class <?> classToCheck = Class .forName (classToCheckName );
217
222
218
223
ClassRef reference =
219
224
ClassRef .builder (classToCheck .getName ())
@@ -229,11 +234,10 @@ void fieldMatch(
229
234
createMatcher (Collections .singletonMap (reference .getClassName (), reference ))
230
235
.getMismatchedReferenceSources (this .getClass ().getClassLoader ());
231
236
232
- if (expectedMismatch . isEmpty () ) {
237
+ if (expectedMismatch == null ) {
233
238
assertThat (getMismatchClassSet (mismatches )).isEmpty ();
234
239
} else {
235
- Class <? extends Mismatch > expectedMismatchClass = getMismatchClass (expectedMismatch );
236
- assertThat (getMismatchClassSet (mismatches )).containsExactly (expectedMismatchClass );
240
+ assertThat (getMismatchClassSet (mismatches )).containsExactly (expectedMismatch );
237
241
}
238
242
}
239
243
@@ -392,13 +396,16 @@ void shouldCheckHelperClassWhetherUsedFieldsAreDeclaredInTheSuperClass(String cl
392
396
assertThat (mismatches ).isEmpty ();
393
397
}
394
398
399
+ private static Stream <Arguments > shouldFailHelperClassWhenItUsesFieldsUndeclaredInTheSuperClassProvider () {
400
+ return Stream .of (
401
+ Arguments .of ("io.opentelemetry.instrumentation.Helper" , "differentField" , "Ljava/lang/Integer;" ),
402
+ Arguments .of ("io.opentelemetry.instrumentation.Helper" , "field" , "Lcom/external/DifferentType;" ),
403
+ Arguments .of ("com.external.otel.instrumentation.Helper" , "differentField" , "Ljava/lang/Integer;" ),
404
+ Arguments .of ("com.external.otel.instrumentation.Helper" , "field" , "Lcom/external/DifferentType;" ));
405
+ }
406
+
395
407
@ ParameterizedTest
396
- @ CsvSource ({
397
- "io.opentelemetry.instrumentation.Helper, differentField, Ljava/lang/Integer;" ,
398
- "io.opentelemetry.instrumentation.Helper, field, Lcom/external/DifferentType;" ,
399
- "com.external.otel.instrumentation.Helper, differentField, Ljava/lang/Integer;" ,
400
- "com.external.otel.instrumentation.Helper, field, Lcom/external/DifferentType;"
401
- })
408
+ @ MethodSource ("shouldFailHelperClassWhenItUsesFieldsUndeclaredInTheSuperClassProvider" )
402
409
void shouldFailHelperClassWhenItUsesFieldsUndeclaredInTheSuperClass (
403
410
String className , String fieldName , String fieldType ) {
404
411
ClassRef helper =
@@ -504,17 +511,4 @@ private static List<Flag> parseFieldFlags(String flagsStr) {
504
511
}
505
512
return flags ;
506
513
}
507
-
508
- private static Class <? extends Mismatch > getMismatchClass (String mismatchName ) {
509
- switch (mismatchName ) {
510
- case "MissingFlag" :
511
- return Mismatch .MissingFlag .class ;
512
- case "MissingMethod" :
513
- return Mismatch .MissingMethod .class ;
514
- case "MissingField" :
515
- return Mismatch .MissingField .class ;
516
- default :
517
- throw new IllegalArgumentException ("Unknown mismatch: " + mismatchName );
518
- }
519
- }
520
514
}
0 commit comments