2 * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved.
5 package com
.intellij
.testFramework
.fixtures
.impl
;
7 import com
.intellij
.ide
.startup
.impl
.StartupManagerImpl
;
8 import com
.intellij
.idea
.IdeaTestApplication
;
9 import com
.intellij
.lang
.properties
.PropertiesReferenceManager
;
10 import com
.intellij
.openapi
.actionSystem
.DataConstants
;
11 import com
.intellij
.openapi
.actionSystem
.DataProvider
;
12 import com
.intellij
.openapi
.application
.ApplicationManager
;
13 import com
.intellij
.openapi
.command
.CommandProcessor
;
14 import com
.intellij
.openapi
.editor
.Editor
;
15 import com
.intellij
.openapi
.editor
.EditorFactory
;
16 import com
.intellij
.openapi
.editor
.impl
.EditorFactoryImpl
;
17 import com
.intellij
.openapi
.fileEditor
.FileDocumentManager
;
18 import com
.intellij
.openapi
.fileEditor
.FileEditorManager
;
19 import com
.intellij
.openapi
.module
.Module
;
20 import com
.intellij
.openapi
.module
.ModuleManager
;
21 import com
.intellij
.openapi
.project
.Project
;
22 import com
.intellij
.openapi
.project
.ex
.ProjectManagerEx
;
23 import com
.intellij
.openapi
.startup
.StartupManager
;
24 import com
.intellij
.openapi
.util
.Disposer
;
25 import com
.intellij
.openapi
.util
.EmptyRunnable
;
26 import com
.intellij
.openapi
.vfs
.LocalFileSystem
;
27 import com
.intellij
.psi
.PsiDocumentManager
;
28 import com
.intellij
.psi
.impl
.source
.PostprocessReformattingAspect
;
29 import com
.intellij
.testFramework
.builders
.ModuleFixtureBuilder
;
30 import com
.intellij
.testFramework
.fixtures
.IdeaProjectTestFixture
;
31 import org
.jetbrains
.annotations
.NonNls
;
32 import org
.jetbrains
.annotations
.Nullable
;
35 import java
.util
.ArrayList
;
36 import java
.util
.HashSet
;
37 import java
.util
.List
;
43 class HeavyIdeaTestFixtureImpl
extends BaseFixture
implements IdeaProjectTestFixture
{
45 @NonNls private static final String PROJECT_FILE_PREFIX
= "temp";
46 @NonNls private static final String PROJECT_FILE_SUFFIX
= ".ipr";
48 private Project myProject
;
49 private Set
<File
> myFilesToDelete
= new HashSet
<File
>();
50 private IdeaTestApplication myApplication
;
51 private final List
<ModuleFixtureBuilder
> myModuleFixtureBuilders
= new ArrayList
<ModuleFixtureBuilder
>();
53 protected void addModuleFixtureBuilder(ModuleFixtureBuilder builder
) {
54 myModuleFixtureBuilders
.add(builder
);
57 public void setUp() throws Exception
{
64 protected void setUpProject() throws Exception
{
65 ProjectManagerEx projectManager
= ProjectManagerEx
.getInstanceEx();
67 File projectFile
= File
.createTempFile(PROJECT_FILE_PREFIX
, PROJECT_FILE_SUFFIX
);
68 myFilesToDelete
.add(projectFile
);
70 LocalFileSystem
.getInstance().refreshAndFindFileByIoFile(projectFile
);
71 myProject
= projectManager
.newProject(projectFile
.getPath(), false, false);
73 for (ModuleFixtureBuilder moduleFixtureBuilder
: myModuleFixtureBuilders
) {
74 moduleFixtureBuilder
.getFixture().setUp();
77 PropertiesReferenceManager
.getInstance(myProject
).projectOpened();
79 ((StartupManagerImpl
)StartupManager
.getInstance(myProject
)).runStartupActivities();
80 ((StartupManagerImpl
)StartupManager
.getInstance(myProject
)).runPostStartupActivities();
81 ProjectManagerEx
.getInstanceEx().setCurrentTestProject(myProject
);
85 protected void initApplication() throws Exception
{
86 myApplication
= IdeaTestApplication
.getInstance();
87 myApplication
.setDataProvider(new MyDataProvider());
90 public void tearDown() throws Exception
{
91 ProjectManagerEx
.getInstanceEx().setCurrentTestProject(null);
92 ApplicationManager
.getApplication().runWriteAction(EmptyRunnable
.getInstance()); // Flash posponed formatting if any.
93 FileDocumentManager
.getInstance().saveAllDocuments();
95 doPostponedFormatting(myProject
);
97 Disposer
.dispose(myProject
);
99 for (final File fileToDelete
: myFilesToDelete
) {
100 delete(fileToDelete
);
103 myApplication
.setDataProvider(null);
105 EditorFactory editorFactory
= EditorFactory
.getInstance();
106 final Editor
[] allEditors
= editorFactory
.getAllEditors();
107 ((EditorFactoryImpl
)editorFactory
).validateEditorsAreReleased(getProject());
108 for (Editor editor
: allEditors
) {
109 editorFactory
.releaseEditor(editor
);
111 assert 0 == allEditors
.length
: "There are unrealeased editors";
116 public Project
getProject() {
117 assert myProject
!= null : "setUp() should be called first";
121 public Module
getModule() {
122 return ModuleManager
.getInstance(getProject()).getModules()[0];
125 private static void doPostponedFormatting(final Project project
) {
127 CommandProcessor
.getInstance().runUndoTransparentAction(new Runnable() {
129 ApplicationManager
.getApplication().runWriteAction(new Runnable() {
131 PsiDocumentManager
.getInstance(project
).commitAllDocuments();
132 PostprocessReformattingAspect
.getInstance(project
).doPostponedFormatting();
138 catch (Throwable e
) {
143 private class MyDataProvider
implements DataProvider
{
145 public Object
getData(@NonNls String dataId
) {
146 if (dataId
.equals(DataConstants
.PROJECT
)) {
149 else if (dataId
.equals(DataConstants
.EDITOR
)) {
150 return FileEditorManager
.getInstance(myProject
).getSelectedTextEditor();
158 private static void delete(File file
) {
159 if (file
.isDirectory()) {
160 File
[] files
= file
.listFiles();
161 for (File fileToDelete
: files
) {
162 delete(fileToDelete
);
166 boolean b
= file
.delete();
167 if (!b
&& file
.exists()) {
168 throw new IllegalStateException("Can't delete " + file
.getAbsolutePath());