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;
|
package org.jetbrains.kotlin.test;
|
||||||
|
|
||||||
import com.intellij.openapi.application.Application;
|
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
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 {
|
public abstract class KotlinTestWithEnvironment extends KotlinTestWithEnvironmentManagement {
|
||||||
private KotlinCoreEnvironment environment;
|
private KotlinCoreEnvironment environment;
|
||||||
private Application application;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
application = ApplicationManager.getApplication();
|
|
||||||
|
|
||||||
super.setUp();
|
super.setUp();
|
||||||
environment = createEnvironment();
|
environment = createEnvironment();
|
||||||
}
|
}
|
||||||
@@ -42,23 +34,6 @@ public abstract class KotlinTestWithEnvironment extends KotlinTestWithEnvironmen
|
|||||||
removeEnvironment();
|
removeEnvironment();
|
||||||
environment = null;
|
environment = null;
|
||||||
super.tearDown();
|
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;
|
protected abstract KotlinCoreEnvironment createEnvironment() throws Exception;
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
package org.jetbrains.kotlin.test.testFramework;
|
package org.jetbrains.kotlin.test.testFramework;
|
||||||
|
|
||||||
import com.intellij.openapi.Disposable;
|
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.application.impl.ApplicationInfoImpl;
|
||||||
import com.intellij.openapi.util.Comparing;
|
import com.intellij.openapi.util.Comparing;
|
||||||
import com.intellij.openapi.util.Disposer;
|
import com.intellij.openapi.util.Disposer;
|
||||||
@@ -36,6 +38,7 @@ import junit.framework.TestCase;
|
|||||||
import org.jetbrains.annotations.Contract;
|
import org.jetbrains.annotations.Contract;
|
||||||
import org.jetbrains.annotations.NonNls;
|
import org.jetbrains.annotations.NonNls;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
|
|
||||||
import java.io.File;
|
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_SETUP_COST_MILLIS = new HashMap<String, Long>();
|
||||||
private static final Map<String, Long> TOTAL_TEARDOWN_COST_MILLIS = new HashMap<String, Long>();
|
private static final Map<String, Long> TOTAL_TEARDOWN_COST_MILLIS = new HashMap<String, Long>();
|
||||||
|
|
||||||
|
private Application application;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
protected final Disposable myTestRootDisposable = new Disposable() {
|
protected final Disposable myTestRootDisposable = new Disposable() {
|
||||||
@Override
|
@Override
|
||||||
@@ -81,6 +86,8 @@ public abstract class KtUsefulTestCase extends TestCase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
|
application = ApplicationManager.getApplication();
|
||||||
|
|
||||||
super.setUp();
|
super.setUp();
|
||||||
|
|
||||||
String testName = FileUtil.sanitizeFileName(getTestName(true));
|
String testName = FileUtil.sanitizeFileName(getTestName(true));
|
||||||
@@ -121,6 +128,23 @@ public abstract class KtUsefulTestCase extends TestCase {
|
|||||||
|
|
||||||
UIUtil.removeLeakingAppleListeners();
|
UIUtil.removeLeakingAppleListeners();
|
||||||
super.tearDown();
|
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() {
|
private boolean hasTmpFilesToKeep() {
|
||||||
|
|||||||
Reference in New Issue
Block a user