mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
can have multiple test projects open
This commit is contained in:
+1
-1
@@ -37,7 +37,7 @@ public class OrderEntryTest extends DaemonAnalyzerTestCase {
|
||||
VirtualFile projectFile = tempProjectRootDir.findChild("orderEntry.ipr");
|
||||
|
||||
myProject = ProjectManagerEx.getInstanceEx().loadProject(projectFile.getPath());
|
||||
ProjectManagerEx.getInstanceEx().setCurrentTestProject(myProject);
|
||||
ProjectManagerEx.getInstanceEx().openTestProject(myProject);
|
||||
ModuleManagerImpl mm = (ModuleManagerImpl)ModuleManager.getInstance(myProject);
|
||||
mm.projectOpened();
|
||||
setUpJdk();
|
||||
|
||||
@@ -42,7 +42,7 @@ public class GotoImplementationTest extends CodeInsightTestCase {
|
||||
myProject = ProjectManagerEx.getInstanceEx().loadProject(projectFile.getPath());
|
||||
|
||||
simulateProjectOpen();
|
||||
ProjectManagerEx.getInstanceEx().setCurrentTestProject(myProject);
|
||||
ProjectManagerEx.getInstanceEx().openTestProject(myProject);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -80,7 +80,7 @@ public class UpdateCacheTest extends PsiTestCase{
|
||||
|
||||
setUpJdk();
|
||||
|
||||
myProjectManager.setCurrentTestProject(myProject);
|
||||
myProjectManager.openTestProject(myProject);
|
||||
runStartupActivities();
|
||||
}
|
||||
|
||||
@@ -175,7 +175,7 @@ public class UpdateCacheTest extends PsiTestCase{
|
||||
((InjectedLanguageManagerImpl)InjectedLanguageManager.getInstance(getProject())).pushInjectors();
|
||||
setUpModule();
|
||||
setUpJdk();
|
||||
ProjectManagerEx.getInstanceEx().setCurrentTestProject(myProject);
|
||||
ProjectManagerEx.getInstanceEx().openTestProject(myProject);
|
||||
runStartupActivities();
|
||||
PsiTestUtil.addSourceContentToRoots(getModule(), content);
|
||||
|
||||
|
||||
@@ -51,12 +51,10 @@ public abstract class ProjectManagerEx extends ProjectManager {
|
||||
public abstract void blockReloadingProjectOnExternalChanges();
|
||||
public abstract void unblockReloadingProjectOnExternalChanges();
|
||||
|
||||
@Nullable
|
||||
@TestOnly
|
||||
public abstract Project getCurrentTestProject();
|
||||
|
||||
public abstract void openTestProject(@NotNull Project project);
|
||||
@TestOnly
|
||||
public abstract void setCurrentTestProject(@Nullable Project project);
|
||||
public abstract void closeTestProject(@NotNull Project project);
|
||||
|
||||
// returns true on success
|
||||
public abstract boolean closeAndDispose(@NotNull Project project);
|
||||
|
||||
+23
-15
@@ -64,6 +64,7 @@ import com.intellij.util.io.fs.IFile;
|
||||
import com.intellij.util.messages.MessageBus;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import gnu.trove.THashSet;
|
||||
import gnu.trove.TObjectLongHashMap;
|
||||
import org.jdom.Element;
|
||||
import org.jdom.JDOMException;
|
||||
@@ -95,7 +96,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt
|
||||
private Project[] myOpenProjectsArrayCache = {};
|
||||
private final List<ProjectManagerListener> myListeners = ContainerUtil.createEmptyCOWList();
|
||||
|
||||
private Project myCurrentTestProject = null;
|
||||
private final Set<Project> myTestProjects = new THashSet<Project>();
|
||||
|
||||
private final Map<VirtualFile, byte[]> mySavedCopies = new HashMap<VirtualFile, byte[]>();
|
||||
private final TObjectLongHashMap<VirtualFile> mySavedTimestamps = new TObjectLongHashMap<VirtualFile>();
|
||||
@@ -382,10 +383,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt
|
||||
LOG.error("Open projects cache corrupted. Open projects: "+myOpenProjects+"; cache: "+Arrays.asList(myOpenProjectsArrayCache));
|
||||
}
|
||||
if (ApplicationManager.getApplication().isUnitTestMode()) {
|
||||
Project currentTestProject = myCurrentTestProject;
|
||||
if (currentTestProject != null && !currentTestProject.isDisposed()) {
|
||||
return ArrayUtil.append(myOpenProjectsArrayCache, currentTestProject);
|
||||
}
|
||||
return ArrayUtil.mergeArrays(myOpenProjectsArrayCache, myTestProjects.toArray(new Project[myTestProjects.size()]));
|
||||
}
|
||||
return myOpenProjectsArrayCache;
|
||||
}
|
||||
@@ -393,10 +391,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt
|
||||
|
||||
@Override
|
||||
public boolean isProjectOpened(Project project) {
|
||||
if (ApplicationManager.getApplication().isUnitTestMode() && myCurrentTestProject != null) {
|
||||
return project == myCurrentTestProject || myOpenProjects.contains(project);
|
||||
}
|
||||
return myOpenProjects.contains(project);
|
||||
return ApplicationManager.getApplication().isUnitTestMode() && myTestProjects.contains(project) || myOpenProjects.contains(project);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -799,16 +794,29 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCurrentTestProject(@Nullable final Project project) {
|
||||
public void openTestProject(@NotNull final Project project) {
|
||||
assert ApplicationManager.getApplication().isUnitTestMode();
|
||||
myCurrentTestProject = project;
|
||||
myTestProjects.add(project);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public Project getCurrentTestProject() {
|
||||
public void closeTestProject(@NotNull Project project) {
|
||||
assert ApplicationManager.getApplication().isUnitTestMode();
|
||||
return myCurrentTestProject;
|
||||
myTestProjects.remove(project);
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
public void assertTestProjectsClosed() {
|
||||
assert ApplicationManager.getApplication().isUnitTestMode();
|
||||
if (!myTestProjects.isEmpty()) {
|
||||
try {
|
||||
Project project = myTestProjects.iterator().next();
|
||||
throw new AssertionError("Test project is not disposed: " + project);
|
||||
}
|
||||
finally {
|
||||
myTestProjects.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -993,7 +1001,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt
|
||||
myOpenProjects.remove(project);
|
||||
cacheOpenProjects();
|
||||
}
|
||||
myCurrentTestProject = null;
|
||||
myTestProjects.remove(project);
|
||||
|
||||
myChangedProjectFiles.remove(project);
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ import com.intellij.openapi.util.ShutDownTracker;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.openapi.vfs.encoding.EncodingManager;
|
||||
@@ -92,7 +92,6 @@ import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.LocalTimeCounter;
|
||||
import com.intellij.util.containers.CollectionFactory;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import com.intellij.util.indexing.FileBasedIndexImpl;
|
||||
import com.intellij.util.indexing.IndexableFileSet;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
@@ -234,7 +233,7 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
((FileBasedIndexImpl)FileBasedIndex.getInstance()).registerIndexableSet(new IndexableFileSet() {
|
||||
FileBasedIndex.getInstance().registerIndexableSet(new IndexableFileSet() {
|
||||
@Override
|
||||
public boolean isInSet(@NotNull final VirtualFile file) {
|
||||
return ourSourceRoot != null && file.getFileSystem() == ourSourceRoot.getFileSystem() && ourProject.isOpen();
|
||||
@@ -335,7 +334,7 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
|
||||
((ProjectImpl)ourProject).setTemporarilyDisposed(false);
|
||||
|
||||
ProjectManagerEx projectManagerEx = ProjectManagerEx.getInstanceEx();
|
||||
projectManagerEx.setCurrentTestProject(ourProject);
|
||||
projectManagerEx.openTestProject(ourProject);
|
||||
|
||||
((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(getProject())).clearUncommitedDocuments();
|
||||
|
||||
@@ -404,8 +403,7 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
|
||||
catch (Exception e) {
|
||||
|
||||
}
|
||||
assertTrue("open: "+getProject().isOpen()+"; disposed:"+getProject().isDisposed()+"; startup passed:"+ passed+"; testProjectIsOurProject:"+(getProject() == projectManagerEx
|
||||
.getCurrentTestProject())+"; all open projects: "+
|
||||
assertTrue("open: "+getProject().isOpen()+"; disposed:"+getProject().isDisposed()+"; startup passed:"+ passed+"; all open projects: "+
|
||||
Arrays.asList(ProjectManager.getInstance().getOpenProjects()), getProject().isInitialized());
|
||||
|
||||
CodeStyleSettingsManager.getInstance(getProject()).setTemporarySettings(new CodeStyleSettings());
|
||||
@@ -461,7 +459,7 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
|
||||
}
|
||||
}
|
||||
|
||||
public static void doTearDown(final Project project, IdeaTestApplication application, boolean checkForEditors) throws Exception {
|
||||
public static void doTearDown(@NotNull final Project project, IdeaTestApplication application, boolean checkForEditors) throws Exception {
|
||||
DocumentCommitThread.getInstance().clearQueue();
|
||||
CodeStyleSettingsManager.getInstance(project).dropTemporarySettings();
|
||||
checkAllTimersAreDisposed();
|
||||
@@ -526,7 +524,7 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
|
||||
|
||||
TemplateDataLanguageMappings.getInstance(project).cleanupForNextTest();
|
||||
|
||||
ProjectManagerEx.getInstanceEx().setCurrentTestProject(null);
|
||||
ProjectManagerEx.getInstanceEx().closeTestProject(project);
|
||||
application.setDataProvider(null);
|
||||
ourTestCase = null;
|
||||
((PsiManagerImpl)PsiManager.getInstance(project)).cleanupForNextTest();
|
||||
@@ -705,7 +703,7 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
|
||||
ApplicationManager.getApplication().assertWriteAccessAllowed();
|
||||
((ProjectImpl)ourProject).setTemporarilyDisposed(false);
|
||||
final VirtualFile projFile = ((ProjectEx)ourProject).getStateStore().getProjectFile();
|
||||
final File projectFile = projFile == null ? null : VfsUtil.virtualToIoFile(projFile);
|
||||
final File projectFile = projFile == null ? null : VfsUtilCore.virtualToIoFile(projFile);
|
||||
if (!ourProject.isDisposed()) Disposer.dispose(ourProject);
|
||||
|
||||
if (projectFile != null) {
|
||||
|
||||
@@ -44,6 +44,7 @@ import com.intellij.openapi.module.ModuleType;
|
||||
import com.intellij.openapi.module.impl.ModuleManagerImpl;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ex.ProjectManagerEx;
|
||||
import com.intellij.openapi.project.impl.ProjectManagerImpl;
|
||||
import com.intellij.openapi.project.impl.TooManyProjectLeakedException;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.ModifiableRootModel;
|
||||
@@ -180,11 +181,11 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro
|
||||
myThreadTracker = new ThreadTracker();
|
||||
|
||||
setUpProject();
|
||||
ProjectManagerEx.getInstanceEx().setCurrentTestProject(myProject);
|
||||
|
||||
storeSettings();
|
||||
ourTestCase = this;
|
||||
if (myProject != null) {
|
||||
ProjectManagerEx.getInstanceEx().openTestProject(myProject);
|
||||
CodeStyleSettingsManager.getInstance(myProject).setTemporarySettings(new CodeStyleSettings());
|
||||
((InjectedLanguageManagerImpl)InjectedLanguageManager.getInstance(myProject)).pushInjectors();
|
||||
}
|
||||
@@ -212,7 +213,7 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro
|
||||
File projectFile = getIprFile();
|
||||
|
||||
myProject = createProject(projectFile, getClass().getName() + "." + getName());
|
||||
myProjectManager.setCurrentTestProject(myProject);
|
||||
myProjectManager.openTestProject(myProject);
|
||||
LocalFileSystem.getInstance().refreshIoFiles(myFilesToDelete);
|
||||
|
||||
setUpModule();
|
||||
@@ -482,8 +483,9 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro
|
||||
public void run() {
|
||||
Disposer.dispose(myProject);
|
||||
ProjectManagerEx projectManager = ProjectManagerEx.getInstanceEx();
|
||||
if (projectManager != null) {
|
||||
projectManager.setCurrentTestProject(null);
|
||||
if (projectManager instanceof ProjectManagerImpl) {
|
||||
projectManager.closeTestProject(myProject);
|
||||
((ProjectManagerImpl)projectManager).assertTestProjectsClosed();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
+1
-1
@@ -162,7 +162,7 @@ class HeavyIdeaTestFixtureImpl extends BaseFixture implements HeavyIdeaTestFixtu
|
||||
sm.startCacheUpdate();
|
||||
sm.runPostStartupActivities();
|
||||
|
||||
ProjectManagerEx.getInstanceEx().setCurrentTestProject(myProject);
|
||||
ProjectManagerEx.getInstanceEx().openTestProject(myProject);
|
||||
((PsiDocumentManagerImpl)PsiDocumentManager.getInstance(myProject)).clearUncommitedDocuments();
|
||||
}
|
||||
}.execute().throwException();
|
||||
|
||||
Reference in New Issue
Block a user