50119953fad176b7922b5643933014c06f44118e
[idea/community.git] / platform / testFramework / src / com / intellij / testFramework / fixtures / LightPlatformCodeInsightFixtureTestCase.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.testFramework.fixtures;
17
18 import com.intellij.lang.Language;
19 import com.intellij.openapi.application.PathManager;
20 import com.intellij.openapi.application.Result;
21 import com.intellij.openapi.command.WriteCommandAction;
22 import com.intellij.openapi.fileTypes.FileType;
23 import com.intellij.openapi.module.Module;
24 import com.intellij.openapi.project.Project;
25 import com.intellij.psi.PsiFile;
26 import com.intellij.psi.PsiFileFactory;
27 import com.intellij.psi.PsiManager;
28 import com.intellij.testFramework.LightProjectDescriptor;
29 import com.intellij.testFramework.PlatformTestUtil;
30 import com.intellij.testFramework.UsefulTestCase;
31 import com.intellij.testFramework.fixtures.impl.LightTempDirTestFixtureImpl;
32 import org.jetbrains.annotations.NonNls;
33 import org.jetbrains.annotations.NotNull;
34
35 import java.io.File;
36
37 /**
38  * @author peter
39  */
40 @SuppressWarnings("JUnitTestCaseWithNonTrivialConstructors")
41 public abstract class LightPlatformCodeInsightFixtureTestCase extends UsefulTestCase {
42
43   public LightPlatformCodeInsightFixtureTestCase() { }
44
45   /** @deprecated call {@link #LightPlatformCodeInsightFixtureTestCase()} instead (to be removed in IDEA 16) */
46   protected LightPlatformCodeInsightFixtureTestCase(boolean autodetect) { }
47
48   protected CodeInsightTestFixture myFixture;
49   protected Module myModule;
50
51   @Override
52   protected void setUp() throws Exception {
53     super.setUp();
54
55     IdeaTestFixtureFactory factory = IdeaTestFixtureFactory.getFixtureFactory();
56     TestFixtureBuilder<IdeaProjectTestFixture> fixtureBuilder = factory.createLightFixtureBuilder(getProjectDescriptor());
57     final IdeaProjectTestFixture fixture = fixtureBuilder.getFixture();
58     myFixture = IdeaTestFixtureFactory.getFixtureFactory().createCodeInsightFixture(fixture, new LightTempDirTestFixtureImpl(true));
59
60     myFixture.setUp();
61     myFixture.setTestDataPath(getTestDataPath());
62
63     myModule = myFixture.getModule();
64   }
65
66   @Override
67   protected void tearDown() throws Exception {
68     try {
69       myFixture.tearDown();
70     }
71     finally {
72       myFixture = null;
73       myModule = null;
74
75       super.tearDown();
76     }
77   }
78
79   /**
80    * Return relative path to the test data.
81    *
82    * @return relative path to the test data.
83    */
84   @NonNls
85   protected String getBasePath() {
86     return "";
87   }
88
89
90   protected LightProjectDescriptor getProjectDescriptor() {
91     return null;
92   }
93
94    /**
95     * Return absolute path to the test data. Not intended to be overridden in tests written as part of the IntelliJ IDEA codebase;
96     * must be overridden in plugins which use the test framework.
97     *
98     * @return absolute path to the test data.
99     */
100    @NonNls
101    protected String getTestDataPath() {
102      String path = isCommunity() ? PlatformTestUtil.getCommunityPath() : PathManager.getHomePath();
103      return path.replace(File.separatorChar, '/') + getBasePath();
104    }
105
106    protected boolean isCommunity() {
107      return false;
108    }
109
110   @Override
111   protected void runTest() throws Throwable {
112     if (isWriteActionRequired()) {
113       new WriteCommandAction(getProject()) {
114         @Override
115         protected void run(@NotNull Result result) throws Throwable {
116           doRunTests();
117         }
118       }.execute();
119     }
120     else doRunTests();
121   }
122
123   protected boolean isWriteActionRequired() {
124     return false;
125   }
126
127   protected void doRunTests() throws Throwable {
128     super.runTest();
129   }
130
131   protected Project getProject() {
132     return myFixture.getProject();
133   }
134
135   protected PsiManager getPsiManager() {
136     return PsiManager.getInstance(getProject());
137   }
138
139   protected PsiFile createLightFile(final FileType fileType, final String text) {
140     return PsiFileFactory.getInstance(getProject()).createFileFromText("a." + fileType.getDefaultExtension(), fileType, text);
141   }
142
143   public PsiFile createLightFile(final String fileName, final Language language, final String text) {
144     return PsiFileFactory.getInstance(getProject()).createFileFromText(fileName, language, text, false, true);
145   }
146
147 }