From 852461767adb3ce7efe73ee1767f45442d70cb1b Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 17 Jun 2013 18:12:45 +0400 Subject: [PATCH] junit: start ignored tests recursively (IDEA-98867) --- .../intellij/junit4/JUnit4TestRunnerUtil.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestRunnerUtil.java b/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestRunnerUtil.java index bcbd62b0c169..b56056955983 100644 --- a/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestRunnerUtil.java +++ b/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestRunnerUtil.java @@ -120,8 +120,8 @@ public class JUnit4TestRunnerUtil { if (clazzAnnotation == null) { //do not override external runners try { final Method method = clazz.getMethod(methodName, null); - if (method != null && notForked && method.getAnnotation(Ignore.class) != null) { //override ignored case only - final Request classRequest = createIgnoreIgnoredClassRequest(clazz); + if (method != null && notForked && (method.getAnnotation(Ignore.class) != null || clazz.getAnnotation(Ignore.class) != null)) { //override ignored case only + final Request classRequest = createIgnoreIgnoredClassRequest(clazz, true); final Filter ignoredTestFilter = Filter.matchMethodDescription(Description.createTestDescription(clazz, methodName)); return classRequest.filterWith(new Filter() { public boolean shouldRun(Description description) { @@ -167,7 +167,7 @@ public class JUnit4TestRunnerUtil { final Class clazz = (Class)result.get(0); try { if (clazz.getAnnotation(Ignore.class) != null) { //override ignored case only - return createIgnoreIgnoredClassRequest(clazz); + return createIgnoreIgnoredClassRequest(clazz, false); } } catch (ClassNotFoundException e) { @@ -178,12 +178,12 @@ public class JUnit4TestRunnerUtil { return Request.classes(getArrayOfClasses(result)); } - private static Request createIgnoreIgnoredClassRequest(final Class clazz) throws ClassNotFoundException { + private static Request createIgnoreIgnoredClassRequest(final Class clazz, final boolean recursively) throws ClassNotFoundException { Class.forName("org.junit.runners.BlockJUnit4ClassRunner"); //ignore IgnoreIgnored for junit4.4 and < return new ClassRequest(clazz) { public Runner getRunner() { try { - return new IgnoreIgnoredTestJUnit4ClassRunner(clazz); + return new IgnoreIgnoredTestJUnit4ClassRunner(clazz, recursively); } catch (Exception ignored) { //return super runner @@ -245,11 +245,18 @@ public class JUnit4TestRunnerUtil { private static class IgnoreIgnoredTestJUnit4ClassRunner extends BlockJUnit4ClassRunner { - public IgnoreIgnoredTestJUnit4ClassRunner(Class clazz) throws Exception { + private final boolean myRecursively; + + public IgnoreIgnoredTestJUnit4ClassRunner(Class clazz, boolean recursively) throws Exception { super(clazz); + myRecursively = recursively; } protected void runChild(FrameworkMethod method, RunNotifier notifier) { + if (!myRecursively){ + super.runChild(method, notifier); + return; + } final Description description = describeChild(method); final EachTestNotifier eachNotifier = new EachTestNotifier(notifier, description); eachNotifier.fireTestStarted();