Clean application after test in compiler tests
It's disposed after Disposer.dispose(myTestRootDisposable) in tearDown and mixing compiler tests with non-compiler tests may ruin classes initialization with "com.intellij.util.IncorrectOperationException: Sorry but parent: com.intellij.mock.MockApplicationEx@52439591 has already been disposed" (cherry picked from commit f3badb6)
This commit is contained in:
committed by
Nikolay Krasko
parent
1c0be7f0ba
commit
520e187e46
@@ -16,23 +16,15 @@
|
||||
|
||||
package org.jetbrains.kotlin.test;
|
||||
|
||||
import com.intellij.openapi.application.Application;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
public abstract class KotlinTestWithEnvironment extends KotlinTestWithEnvironmentManagement {
|
||||
private KotlinCoreEnvironment environment;
|
||||
private Application application;
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
application = ApplicationManager.getApplication();
|
||||
|
||||
super.setUp();
|
||||
environment = createEnvironment();
|
||||
}
|
||||
@@ -42,23 +34,6 @@ public abstract class KotlinTestWithEnvironment extends KotlinTestWithEnvironmen
|
||||
removeEnvironment();
|
||||
environment = null;
|
||||
super.tearDown();
|
||||
|
||||
if (application == null) {
|
||||
resetApplicationToNull();
|
||||
}
|
||||
|
||||
application = null;
|
||||
}
|
||||
|
||||
protected void resetApplicationToNull() {
|
||||
try {
|
||||
Field ourApplicationField = ApplicationManager.class.getDeclaredField("ourApplication");
|
||||
ourApplicationField.setAccessible(true);
|
||||
ourApplicationField.set(null, null);
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw ExceptionUtilsKt.rethrow(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract KotlinCoreEnvironment createEnvironment() throws Exception;
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
package org.jetbrains.kotlin.test.testFramework;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.Application;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.impl.ApplicationInfoImpl;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
@@ -36,6 +38,7 @@ import junit.framework.TestCase;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
||||
import org.junit.Assert;
|
||||
|
||||
import java.io.File;
|
||||
@@ -55,6 +58,8 @@ public abstract class KtUsefulTestCase extends TestCase {
|
||||
private static final Map<String, Long> TOTAL_SETUP_COST_MILLIS = new HashMap<String, Long>();
|
||||
private static final Map<String, Long> TOTAL_TEARDOWN_COST_MILLIS = new HashMap<String, Long>();
|
||||
|
||||
private Application application;
|
||||
|
||||
@NotNull
|
||||
protected final Disposable myTestRootDisposable = new Disposable() {
|
||||
@Override
|
||||
@@ -81,6 +86,8 @@ public abstract class KtUsefulTestCase extends TestCase {
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
application = ApplicationManager.getApplication();
|
||||
|
||||
super.setUp();
|
||||
|
||||
String testName = FileUtil.sanitizeFileName(getTestName(true));
|
||||
@@ -121,6 +128,23 @@ public abstract class KtUsefulTestCase extends TestCase {
|
||||
|
||||
UIUtil.removeLeakingAppleListeners();
|
||||
super.tearDown();
|
||||
|
||||
if (application == null) {
|
||||
resetApplicationToNull();
|
||||
}
|
||||
|
||||
application = null;
|
||||
}
|
||||
|
||||
protected void resetApplicationToNull() {
|
||||
try {
|
||||
Field ourApplicationField = ApplicationManager.class.getDeclaredField("ourApplication");
|
||||
ourApplicationField.setAccessible(true);
|
||||
ourApplicationField.set(null, null);
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw ExceptionUtilsKt.rethrow(e);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasTmpFilesToKeep() {
|
||||
|
||||
Reference in New Issue
Block a user