diff --git a/compiler/tests/org/jetbrains/jet/JUnit3RunnerWithInners.java b/compiler/tests/org/jetbrains/jet/JUnit3RunnerWithInners.java index c220036c2a8..8464f207c4a 100644 --- a/compiler/tests/org/jetbrains/jet/JUnit3RunnerWithInners.java +++ b/compiler/tests/org/jetbrains/jet/JUnit3RunnerWithInners.java @@ -16,13 +16,10 @@ package org.jetbrains.jet; -import com.google.common.collect.Lists; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestResult; import junit.framework.TestSuite; -import kotlin.Function1; -import kotlin.KotlinPackage; import org.junit.internal.MethodSorter; import org.junit.internal.runners.JUnit38ClassRunner; import org.junit.runner.Description; @@ -121,22 +118,31 @@ public class JUnit3RunnerWithInners extends Runner implements Filterable, Sortab } } else { - List classes = Lists.newArrayList(); - classes.add(klass); - classes.addAll(unprocessedInnerClasses); + assert unprocessedInnerClasses.size() == innerClasses.size() : + String.format("Some inner classes left unprocessed during creating runner for %s: %s", + klass.getCanonicalName(), unprocessedInnerClasses); - List filtered = KotlinPackage.filter(classes, new Function1() { - @Override - public Boolean invoke(Class aClass) { - boolean hasInnerClasses = aClass.getDeclaredClasses().length > 0; - return !hasInnerClasses || hasTestMethods(aClass); - } - }); - - return new TestSuite(filtered.toArray(new Class[filtered.size()])); + return createTreeTestSuite(klass); } } + private static Test createTreeTestSuite(Class root) { + Set classes = new LinkedHashSet(collectDeclaredClasses(root, true)); + Map classSuites = new HashMap(); + + for (Class aClass : classes) { + classSuites.put(aClass, hasTestMethods(aClass) ? new TestSuite(aClass) : new TestSuite(aClass.getCanonicalName())); + } + + for (Class aClass : classes) { + if (aClass.getEnclosingClass() != null && classes.contains(aClass.getEnclosingClass())) { + classSuites.get(aClass.getEnclosingClass()).addTest(classSuites.get(aClass)); + } + } + + return classSuites.get(root); + } + private static Set unprocessedClasses(Collection classes) { Set result = new LinkedHashSet(); for (Class aClass : classes) {