diff --git a/plugins/junit/src/com/intellij/execution/junit/TestObject.java b/plugins/junit/src/com/intellij/execution/junit/TestObject.java index 2c961d7dee5d..20b49de72b75 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestObject.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestObject.java @@ -472,7 +472,7 @@ public abstract class TestObject implements JavaCommandLine { myJavaParameters.getProgramParametersList().add("@" + myTempFile.getAbsolutePath()); } - final Map> perModule = forkPerModule() ? new HashMap>() : null; + final Map> perModule = forkPerModule() ? new TreeMap>() : null; final PrintWriter writer = new PrintWriter(myTempFile, "UTF-8"); try { writer.println(packageName); @@ -483,7 +483,6 @@ public abstract class TestObject implements JavaCommandLine { LOG.error("invalid element " + element); return; } - testNames.add(name); if (perModule != null && element instanceof PsiElement) { final Module module = ModuleUtilCore.findModuleForPsiElement((PsiElement)element); @@ -496,9 +495,18 @@ public abstract class TestObject implements JavaCommandLine { } list.add(name); } + } else { + testNames.add(name); } } - Collections.sort(testNames); //sort tests in FQN order + if (perModule != null) { + for (List perModuleClasses : perModule.values()) { + Collections.sort(perModuleClasses); + testNames.addAll(perModuleClasses); + } + } else { + Collections.sort(testNames); //sort tests in FQN order + } for (String testName : testNames) { writer.println(testName); } @@ -515,7 +523,6 @@ public abstract class TestObject implements JavaCommandLine { wWriter.println(workingDir); final List classNames = perModule.get(workingDir); wWriter.println(classNames.size()); - Collections.sort(classNames); for (String className : classNames) { wWriter.println(className); } diff --git a/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitForkedStarter.java b/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitForkedStarter.java index d0f9096bf738..82566ea29d97 100644 --- a/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitForkedStarter.java +++ b/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitForkedStarter.java @@ -16,10 +16,8 @@ package com.intellij.rt.execution.junit; import com.intellij.rt.execution.junit.segments.SegmentedOutputStream; -import org.junit.runner.Description; import java.io.*; -import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; @@ -113,16 +111,19 @@ public class JUnitForkedStarter { final FileOutputStream writer = new FileOutputStream(tempFile); - String className = null; + String firstName = null; try { final int classNamesSize = Integer.parseInt(perDirReader.readLine()); writer.write((packageName + ", working directory: \'" + workingDir + "\'\n").getBytes("UTF-8")); //instead of package name for (int i = 0; i < classNamesSize; i++) { - className = perDirReader.readLine(); + String className = perDirReader.readLine(); if (className == null) { System.err.println("Class name is expected. Working dir: " + workingDir); return -1; } + if (firstName == null) { + firstName = className; + } writer.write((className + "\n").getBytes("UTF-8")); } } @@ -130,8 +131,7 @@ public class JUnitForkedStarter { writer.close(); } - final Object rootDescriptor = findByClassName(testRunner, className, description); - + final Object rootDescriptor = findByClassName(testRunner, firstName, description); final int childResult; final File dir = new File(workingDir); if (forkMode.equals("none")) {