IDEADEV-21222
[fedora-idea.git] / source / com / intellij / testFramework / fixtures / impl / HeavyIdeaTestFixtureImpl.java
blob0cbd514c5abbb0a80e6f20d9051f27fc3e34bd49
1 /*
2 * Copyright (c) 2000-2006 JetBrains s.r.o. All Rights Reserved.
3 */
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;
34 import java.io.File;
35 import java.util.ArrayList;
36 import java.util.HashSet;
37 import java.util.List;
38 import java.util.Set;
40 /**
41 * @author mike
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 {
58 super.setUp();
60 initApplication();
61 setUpProject();
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";
113 super.tearDown();
116 public Project getProject() {
117 assert myProject != null : "setUp() should be called first";
118 return myProject;
121 public Module getModule() {
122 return ModuleManager.getInstance(getProject()).getModules()[0];
125 private static void doPostponedFormatting(final Project project) {
126 try {
127 CommandProcessor.getInstance().runUndoTransparentAction(new Runnable() {
128 public void run() {
129 ApplicationManager.getApplication().runWriteAction(new Runnable() {
130 public void run() {
131 PsiDocumentManager.getInstance(project).commitAllDocuments();
132 PostprocessReformattingAspect.getInstance(project).doPostponedFormatting();
138 catch (Throwable e) {
139 // Way to go...
143 private class MyDataProvider implements DataProvider {
144 @Nullable
145 public Object getData(@NonNls String dataId) {
146 if (dataId.equals(DataConstants.PROJECT)) {
147 return myProject;
149 else if (dataId.equals(DataConstants.EDITOR)) {
150 return FileEditorManager.getInstance(myProject).getSelectedTextEditor();
152 else {
153 return null;
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());