assertion to prohibit closeProject() call within write action because fireClosing() listeners must have a chance to do something useful (e.g. cancel and wait for VCSInitialization to complete)

+ allow tests to register custom project cleanups
This commit is contained in:
Anton Makeev
2016-07-14 12:11:53 +02:00
parent b75a7e3d72
commit 6db40d73ed
3 changed files with 22 additions and 2 deletions
@@ -21,6 +21,7 @@ import com.intellij.openapi.application.impl.ApplicationImpl;
import com.intellij.openapi.util.Disposer;
import com.intellij.testFramework.LeakHunter;
import com.intellij.testFramework.LightPlatformTestCase;
import com.intellij.testFramework.PlatformTestUtil;
import com.intellij.util.ReflectionUtil;
import com.intellij.util.concurrency.AppExecutorUtil;
import com.intellij.util.concurrency.AppScheduledExecutorService;
@@ -49,8 +50,8 @@ public class _LastInSuiteTest extends TestCase {
throw new RuntimeException(e);
}
// disposes default project too
LightPlatformTestCase.closeAndDeleteProject();
// disposes default projects too
PlatformTestUtil.cleanupAllProjects();
ApplicationImpl application = (ApplicationImpl)ApplicationManager.getApplication();
System.out.println(application.writeActionStatistics());
System.out.println(ActionUtil.ACTION_UPDATE_PAUSES.statistics());
@@ -135,6 +135,10 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
private static LightProjectDescriptor ourProjectDescriptor;
private ThreadTracker myThreadTracker;
static {
PlatformTestUtil.registerProjectCleanup(LightPlatformTestCase::closeAndDeleteProject);
}
/**
* @return Project to be used in tests for example for project components retrieval.
@@ -76,6 +76,7 @@ import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.*;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.jar.JarFile;
@@ -88,6 +89,8 @@ public class PlatformTestUtil {
public static final boolean SKIP_HEADLESS = GraphicsEnvironment.isHeadless();
public static final boolean SKIP_SLOW = Boolean.getBoolean("skip.slow.tests.locally");
private static final List<Runnable> ourProjectCleanups = new CopyOnWriteArrayList<>();
@NotNull
public static String getTestName(@NotNull String name, boolean lowercaseFirstLetter) {
@@ -956,4 +959,16 @@ public class PlatformTestUtil {
});
return refs;
}
public static void registerProjectCleanup(@NotNull Runnable cleanup) {
ourProjectCleanups.add(cleanup);
}
public static void cleanupAllProjects() {
for (Runnable each : ourProjectCleanups) {
each.run();
}
ourProjectCleanups.clear();
}
}