correct way of allowing to mix CoreEnvironment-based tests with regular ones

This commit is contained in:
Dmitry Jemerov
2011-10-21 15:31:45 +02:00
parent faa1580d54
commit 51a97ec4a5
8 changed files with 32 additions and 35 deletions
@@ -15,6 +15,10 @@
*/
package com.intellij.openapi.application;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.Disposer;
import org.jetbrains.annotations.NotNull;
/**
* Provides access to the <code>Application</code>.
*/
@@ -29,4 +33,21 @@ public class ApplicationManager {
public static Application getApplication(){
return ourApplication;
}
private static void setApplication(Application instance) {
ourApplication = instance;
CachedSingletonsRegistry.cleanupCachedFields();
}
public static void setApplication(Application instance, @NotNull Disposable parent) {
final Application old = ourApplication;
Disposer.register(parent, new Disposable() {
public void dispose() {
if (old != null) { // to prevent NPEs in threads still running
setApplication(old);
}
}
});
setApplication(instance);
}
}
@@ -71,6 +71,8 @@ public class CoreEnvironment {
protected final PsiManagerImpl myPsiManager;
public CoreEnvironment(Disposable parentDisposable) {
Extensions.cleanRootArea(parentDisposable);
myFileTypeRegistry = new CoreFileTypeRegistry();
//noinspection AssignmentToStaticFieldFromInstanceMethod
FileTypeRegistry.ourInstanceGetter = new Getter<FileTypeRegistry>() {
@@ -90,9 +92,7 @@ public class CoreEnvironment {
};
myApplication = new MockApplication(parentDisposable);
new ApplicationManager() {{
ourApplication = myApplication;
}};
ApplicationManager.setApplication(myApplication, parentDisposable);
myLocalFileSystem = new CoreLocalFileSystem();
myJarFileSystem = new CoreJarFileSystem();
@@ -15,12 +15,8 @@
*/
package com.intellij.openapi.application.ex;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.CachedSingletonsRegistry;
import com.intellij.openapi.application.impl.ApplicationImpl;
import com.intellij.openapi.util.Disposer;
import com.intellij.ui.Splash;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -42,21 +38,4 @@ public class ApplicationManagerEx extends ApplicationManager {
@Nullable Splash splash) {
new ApplicationImpl(internal, isUnitTestMode, isHeadlessMode, isCommandline, appName, splash);
}
private static void setApplication(Application instance) {
ourApplication = instance;
CachedSingletonsRegistry.cleanupCachedFields();
}
public static void setApplication(Application instance, @NotNull Disposable parent) {
final Application old = ourApplication;
Disposer.register(parent, new Disposable() {
public void dispose() {
if (old != null) { // to prevent NPEs in threads still running
setApplication(old);
}
}
});
setApplication(instance);
}
}
@@ -26,7 +26,6 @@ import com.intellij.idea.StartupUtil;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.*;
import com.intellij.openapi.application.ex.ApplicationEx;
import com.intellij.openapi.application.ex.ApplicationManagerEx;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.components.RoamingType;
import com.intellij.openapi.components.StateStorageException;
@@ -194,7 +193,7 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application
Splash splash) {
super(null);
ApplicationManagerEx.setApplication(this, myLastDisposable); // reset back to null only when all components already disposed
ApplicationManager.setApplication(this, myLastDisposable); // reset back to null only when all components already disposed
getPicoContainer().registerComponentInstance(Application.class, this);
@@ -18,8 +18,8 @@ package com.intellij.ide;
import com.intellij.mock.MockApplication;
import com.intellij.mock.MockProject;
import com.intellij.mock.MockProjectEx;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.ex.ApplicationManagerEx;
import com.intellij.openapi.application.impl.ModalityStateEx;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.BusyObject;
@@ -44,7 +44,7 @@ public class ActivityMonitorTest extends UsefulTestCase {
myCurrentState = ModalityState.NON_MODAL;
final ModalityStateEx any = new ModalityStateEx();
ApplicationManagerEx.setApplication(new MockApplication(getTestRootDisposable()) {
ApplicationManager.setApplication(new MockApplication(getTestRootDisposable()) {
@NotNull
@Override
public ModalityState getCurrentModalityState() {
@@ -55,8 +55,7 @@ public class ActivityMonitorTest extends UsefulTestCase {
public ModalityState getAnyModalityState() {
return any;
}
},getTestRootDisposable());
}, getTestRootDisposable());
myMonitor = new UiActivityMonitorImpl();
disposeOnTearDown(myMonitor);
}
@@ -24,7 +24,6 @@ import com.intellij.openapi.application.Result;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.application.ex.ApplicationEx;
import com.intellij.openapi.application.ex.ApplicationManagerEx;
import com.intellij.openapi.application.impl.ApplicationImpl;
import com.intellij.openapi.util.Disposer;
import org.jetbrains.annotations.Nullable;
@@ -45,7 +44,7 @@ public class IdeaTestApplication extends CommandLineApplication implements Dispo
}
public static synchronized IdeaTestApplication getInstance(@Nullable final String configPath) {
final boolean isForeignApp = !(ApplicationManager.getApplication() instanceof ApplicationImpl);
final boolean isForeignApp = /*!(ApplicationManager.getApplication() instanceof ApplicationImpl);*/ false;
if (ourInstance == null || isForeignApp) {
if (isForeignApp) {
disposeInstance();
@@ -3,6 +3,7 @@ package com.intellij.testFramework;
import com.intellij.mock.MockApplicationEx;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ex.ApplicationManagerEx;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.io.FileUtil;
@@ -28,7 +29,7 @@ public abstract class FlyIdeaTestCase extends TestCase {
return old != null ? old.executeOnPooledThread(action) : super.executeOnPooledThread(action);
}
};
ApplicationManagerEx.setApplication(app, myRootDisposable);
ApplicationManager.setApplication(app, myRootDisposable);
}
public File getTempDir() throws IOException {
@@ -18,7 +18,6 @@ package com.intellij.testFramework;
import com.intellij.mock.MockApplicationEx;
import com.intellij.mock.MockProjectEx;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ex.ApplicationManagerEx;
import com.intellij.openapi.extensions.ExtensionPoint;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.Extensions;
@@ -48,7 +47,7 @@ public abstract class PlatformLiteFixture extends UsefulTestCase {
public void initApplication() {
//if (ApplicationManager.getApplication() instanceof MockApplicationEx) return;
ApplicationManagerEx.setApplication(new MockApplicationEx(getTestRootDisposable()), getTestRootDisposable());
ApplicationManager.setApplication(new MockApplicationEx(getTestRootDisposable()), getTestRootDisposable());
getApplication().registerService(EncodingManager.class, EncodingManagerImpl.class);
}