8057707: TEST library enhancement in lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java
Reviewed-by: iignatyev, vlivanov
--- a/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java Fri Sep 12 20:19:24 2014 +0200
+++ b/jdk/test/java/lang/invoke/MethodHandles/CatchExceptionTest.java Fri Sep 12 22:33:09 2014 +0400
@@ -42,6 +42,7 @@
public class CatchExceptionTest {
private static final List<Class<?>> ARGS_CLASSES;
protected static final int MAX_ARITY = Helper.MAX_ARITY - 1;
+
static {
Class<?> classes[] = {
Object.class,
@@ -52,11 +53,8 @@
double[].class,
String.class,
};
- List<Class<?>> list = new ArrayList<>(MAX_ARITY);
- for (int i = 0; i < MAX_ARITY; ++i) {
- list.add(classes[Helper.RNG.nextInt(classes.length)]);
- }
- ARGS_CLASSES = Collections.unmodifiableList(list);
+ ARGS_CLASSES = Collections.unmodifiableList(
+ Helper.randomClasses(classes, MAX_ARITY));
}
private final TestCase testCase;
@@ -66,7 +64,6 @@
private int dropped;
private MethodHandle thrower;
-
public CatchExceptionTest(TestCase testCase, final boolean isVararg, final int argsCount,
final int catchDrops) {
this.testCase = testCase;
@@ -107,37 +104,7 @@
}
private List<Class<?>> getThrowerParams(boolean isVararg, int argsCount) {
- boolean unmodifiable = true;
- List<Class<?>> classes;
- classes = ARGS_CLASSES.subList(0,
- Math.min(argsCount, (MAX_ARITY / 2) - 1));
- int extra = 0;
- if (argsCount >= MAX_ARITY / 2) {
- classes = new ArrayList<>(classes);
- unmodifiable = false;
- extra = (int) classes.stream().filter(Helper::isDoubleCost).count();
- int i = classes.size();
- while (classes.size() + extra < argsCount) {
- Class<?> aClass = ARGS_CLASSES.get(i);
- if (Helper.isDoubleCost(aClass)) {
- ++extra;
- if (classes.size() + extra >= argsCount) {
- break;
- }
- }
- classes.add(aClass);
- }
- }
- if (isVararg && classes.size() > 0) {
- if (unmodifiable) {
- classes = new ArrayList<>(classes);
- }
- int last = classes.size() - 1;
- Class<?> aClass = classes.get(classes.size() - 1);
- aClass = Array.newInstance(aClass, 2).getClass();
- classes.set(last, aClass);
- }
- return classes;
+ return Helper.getParams(ARGS_CLASSES, isVararg, argsCount);
}
--- a/jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java Fri Sep 12 20:19:24 2014 +0200
+++ b/jdk/test/lib/testlibrary/jsr292/com/oracle/testlibrary/jsr292/Helper.java Fri Sep 12 22:33:09 2014 +0400
@@ -52,7 +52,7 @@
public static final long TEST_LIMIT;
static {
String str = System.getProperty("testLimit");
- TEST_LIMIT = str != null ? Long.parseUnsignedLong(str) : 2_000L;
+ TEST_LIMIT = str != null ? Long.parseUnsignedLong(str) : 2000L;
System.out.printf("-DtestLimit=%d%n", TEST_LIMIT);
}
@@ -116,6 +116,48 @@
return size <= lag ? null : calledLog.get(size - lag - 1);
}
+ public static List<Class<?>> randomClasses(Class<?>[] classes, int size) {
+ List<Class<?>> result = new ArrayList<>(size);
+ for (int i = 0; i < size; ++i) {
+ result.add(classes[RNG.nextInt(classes.length)]);
+ }
+ return result;
+ }
+
+ public static List<Class<?>> getParams(List<Class<?>> classes,
+ boolean isVararg, int argsCount) {
+ boolean unmodifiable = true;
+ List<Class<?>> result = classes.subList(0,
+ Math.min(argsCount, (MAX_ARITY / 2) - 1));
+ int extra = 0;
+ if (argsCount >= MAX_ARITY / 2) {
+ result = new ArrayList<>(result);
+ unmodifiable = false;
+ extra = (int) result.stream().filter(Helper::isDoubleCost).count();
+ int i = result.size();
+ while (result.size() + extra < argsCount) {
+ Class<?> aClass = classes.get(i);
+ if (Helper.isDoubleCost(aClass)) {
+ ++extra;
+ if (result.size() + extra >= argsCount) {
+ break;
+ }
+ }
+ result.add(aClass);
+ }
+ }
+ if (isVararg && result.size() > 0) {
+ if (unmodifiable) {
+ result = new ArrayList<>(result);
+ }
+ int last = result.size() - 1;
+ Class<?> aClass = result.get(last);
+ aClass = Array.newInstance(aClass, 2).getClass();
+ result.set(last, aClass);
+ }
+ return result;
+ }
+
public static MethodHandle addTrailingArgs(MethodHandle target, int nargs,
List<Class<?>> classes) {
int targetLen = target.type().parameterCount();
@@ -230,7 +272,7 @@
return randomArgs(params.toArray(new Class<?>[params.size()]));
}
- private static Object castToWrapper(Object value, Class<?> dst) {
+ public static Object castToWrapper(Object value, Class<?> dst) {
Object wrap = null;
if (value instanceof Number) {
wrap = castToWrapperOrNull(((Number) value).longValue(), dst);
@@ -268,7 +310,7 @@
if (dst == byte.class || dst == Byte.class) {
return (byte) (value);
}
- if (dst == boolean.class || dst == boolean.class) {
+ if (dst == boolean.class || dst == Boolean.class) {
return ((value % 29) & 1) == 0;
}
return null;