mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-21 20:54:49 +07:00
147 lines
5.3 KiB
Java
147 lines
5.3 KiB
Java
/*
|
|
* Copyright 2000-2009 JetBrains s.r.o.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package com.intellij.codeInsight.daemon;
|
|
|
|
import com.intellij.codeHighlighting.Pass;
|
|
import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl;
|
|
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
|
|
import com.intellij.injected.editor.EditorWindow;
|
|
import com.intellij.lang.annotation.HighlightSeverity;
|
|
import com.intellij.openapi.command.CommandProcessor;
|
|
import com.intellij.openapi.editor.Editor;
|
|
import com.intellij.openapi.vfs.VirtualFileFilter;
|
|
import com.intellij.psi.PsiDocumentManager;
|
|
import com.intellij.psi.PsiFile;
|
|
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
|
|
import com.intellij.testFramework.ExpectedHighlightingData;
|
|
import com.intellij.testFramework.FileTreeAccessFilter;
|
|
import com.intellij.testFramework.HighlightTestInfo;
|
|
import com.intellij.testFramework.LightCodeInsightTestCase;
|
|
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
|
|
import com.intellij.util.ArrayUtil;
|
|
import org.jetbrains.annotations.NonNls;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
import java.util.Collection;
|
|
import java.util.List;
|
|
|
|
public abstract class LightDaemonAnalyzerTestCase extends LightCodeInsightTestCase {
|
|
private final FileTreeAccessFilter myJavaFilesFilter = new FileTreeAccessFilter();
|
|
|
|
@Override
|
|
protected void setUp() throws Exception {
|
|
super.setUp();
|
|
((DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(getProject())).prepareForTest();
|
|
DaemonCodeAnalyzerSettings.getInstance().setImportHintEnabled(false);
|
|
}
|
|
|
|
@Override
|
|
protected void tearDown() throws Exception {
|
|
((DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(getProject())).cleanupAfterTest(!isLight(getProject()));
|
|
super.tearDown();
|
|
}
|
|
|
|
@Override
|
|
protected void runTest() throws Throwable {
|
|
final Throwable[] throwable = {null};
|
|
CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
doRunTest();
|
|
}
|
|
catch (Throwable t) {
|
|
throwable[0] = t;
|
|
}
|
|
}
|
|
}, "", null);
|
|
if (throwable[0] != null) {
|
|
throw throwable[0];
|
|
}
|
|
}
|
|
|
|
protected void doTest(@NonNls String filePath, boolean checkWarnings, boolean checkInfos) throws Exception {
|
|
configureByFile(filePath);
|
|
doTestConfiguredFile(checkWarnings, checkInfos, filePath);
|
|
}
|
|
|
|
protected void doTestConfiguredFile(boolean checkWarnings, boolean checkInfos, String filePath) {
|
|
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
|
|
|
|
ExpectedHighlightingData data = new ExpectedHighlightingData(getEditor().getDocument(),checkWarnings, checkInfos);
|
|
checkHighlighting(data, composeLocalPath(filePath));
|
|
}
|
|
|
|
@Nullable
|
|
private String composeLocalPath(String filePath) {
|
|
return filePath != null ? getTestDataPath() + "/" + filePath : null;
|
|
}
|
|
|
|
private void checkHighlighting(ExpectedHighlightingData data, String filePath) {
|
|
data.init();
|
|
|
|
PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
|
|
getFile().getText(); //to load text
|
|
myJavaFilesFilter.allowTreeAccessForFile(getVFile());
|
|
getJavaFacade().setAssertOnFileLoadingFilter(myJavaFilesFilter); // check repository work
|
|
|
|
Collection<HighlightInfo> infos = doHighlighting();
|
|
|
|
getJavaFacade().setAssertOnFileLoadingFilter(VirtualFileFilter.NONE);
|
|
|
|
data.checkResult(infos, getEditor().getDocument().getText(), filePath);
|
|
}
|
|
|
|
protected HighlightTestInfo testFile(@NonNls @NotNull String filePath) {
|
|
return new HighlightTestInfo(getTestRootDisposable(), filePath){
|
|
@Override
|
|
public HighlightTestInfo doTest() throws Exception {
|
|
String path = assertOneElement(filePaths);
|
|
configureByFile(path);
|
|
ExpectedHighlightingData data = new ExpectedHighlightingData(myEditor.getDocument(), checkWarnings, checkWeakWarnings, checkInfos, myFile);
|
|
if (checkSymbolNames) data.checkSymbolNames();
|
|
|
|
checkHighlighting(data, composeLocalPath(path));
|
|
return this;
|
|
}
|
|
};
|
|
}
|
|
|
|
@NotNull
|
|
protected List<HighlightInfo> doHighlighting() {
|
|
PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
|
|
|
|
int[] toIgnore = doFolding() ? ArrayUtil.EMPTY_INT_ARRAY : new int[]{Pass.UPDATE_FOLDING};
|
|
Editor editor = getEditor();
|
|
PsiFile file = getFile();
|
|
if (editor instanceof EditorWindow) {
|
|
editor = ((EditorWindow)editor).getDelegate();
|
|
file = InjectedLanguageUtil.getTopLevelFile(file);
|
|
}
|
|
|
|
return CodeInsightTestFixtureImpl.instantiateAndRun(file, editor, toIgnore, false);
|
|
}
|
|
|
|
protected List<HighlightInfo> doHighlighting(HighlightSeverity minSeverity) {
|
|
return DaemonAnalyzerTestCase.filter(doHighlighting(), minSeverity);
|
|
}
|
|
|
|
protected boolean doFolding() {
|
|
return false;
|
|
}
|
|
}
|