提交 e93e6ad0 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Fix TestCrashAPI failures on Java 9

上级 0f86c620
...@@ -11,6 +11,7 @@ import java.io.StringWriter; ...@@ -11,6 +11,7 @@ import java.io.StringWriter;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.sql.BatchUpdateException; import java.sql.BatchUpdateException;
import java.sql.Blob; import java.sql.Blob;
import java.sql.CallableStatement; import java.sql.CallableStatement;
...@@ -370,6 +371,10 @@ public class TestCrashAPI extends TestBase implements Runnable { ...@@ -370,6 +371,10 @@ public class TestCrashAPI extends TestBase implements Runnable {
} }
private Object callRandom(int seed, int id, int objectId, Object o, Method m) { private Object callRandom(int seed, int id, int objectId, Object o, Method m) {
// TODO m.isDefault() can be used on Java 8
boolean isDefault =
(m.getModifiers() & (Modifier.ABSTRACT | Modifier.PUBLIC | Modifier.STATIC)) == Modifier.PUBLIC
&& m.getDeclaringClass().isInterface();
Class<?>[] paramClasses = m.getParameterTypes(); Class<?>[] paramClasses = m.getParameterTypes();
Object[] params = new Object[paramClasses.length]; Object[] params = new Object[paramClasses.length];
for (int i = 0; i < params.length; i++) { for (int i = 0; i < params.length; i++) {
...@@ -385,7 +390,7 @@ public class TestCrashAPI extends TestBase implements Runnable { ...@@ -385,7 +390,7 @@ public class TestCrashAPI extends TestBase implements Runnable {
TestBase.logError("error", e); TestBase.logError("error", e);
} catch (InvocationTargetException e) { } catch (InvocationTargetException e) {
Throwable t = e.getTargetException(); Throwable t = e.getTargetException();
printIfBad(seed, id, objectId, t); printIfBad(seed, id, objectId, t, isDefault);
} }
if (result == null) { if (result == null) {
return null; return null;
...@@ -398,6 +403,10 @@ public class TestCrashAPI extends TestBase implements Runnable { ...@@ -398,6 +403,10 @@ public class TestCrashAPI extends TestBase implements Runnable {
} }
private void printIfBad(int seed, int id, int objectId, Throwable t) { private void printIfBad(int seed, int id, int objectId, Throwable t) {
printIfBad(seed, id, objectId, t, false);
}
private void printIfBad(int seed, int id, int objectId, Throwable t, boolean isDefault) {
if (t instanceof BatchUpdateException) { if (t instanceof BatchUpdateException) {
// do nothing // do nothing
} else if (t.getClass().getName().contains("SQLClientInfoException")) { } else if (t.getClass().getName().contains("SQLClientInfoException")) {
...@@ -421,6 +430,8 @@ public class TestCrashAPI extends TestBase implements Runnable { ...@@ -421,6 +430,8 @@ public class TestCrashAPI extends TestBase implements Runnable {
// General error [HY000] // General error [HY000]
printError(seed, id, s); printError(seed, id, s);
} }
} else if (isDefault && t instanceof NullPointerException) {
// do nothing, default methods may throw this exception
} else { } else {
printError(seed, id, t); printError(seed, id, t);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论