run inject automatically in CodeInsightFixture

This commit is contained in:
Alexey Kudravtsev
2013-08-08 17:38:22 +04:00
parent 5eedfe73e9
commit 5fafe1e0a8
5 changed files with 79 additions and 33 deletions
@@ -49,6 +49,8 @@ import com.intellij.ide.startup.StartupManagerEx;
import com.intellij.ide.startup.impl.StartupManagerImpl;
import com.intellij.ide.structureView.StructureViewBuilder;
import com.intellij.ide.structureView.newStructureView.StructureViewComponent;
import com.intellij.injected.editor.DocumentWindow;
import com.intellij.injected.editor.EditorWindow;
import com.intellij.internal.DumpLookupElementWeights;
import com.intellij.lang.LanguageStructureViewBuilder;
import com.intellij.openapi.Disposable;
@@ -81,10 +83,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.*;
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.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileFilter;
import com.intellij.openapi.vfs.*;
import com.intellij.profile.codeInspection.InspectionProfileManager;
import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
import com.intellij.psi.*;
@@ -348,7 +347,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
for (String path : filePaths) {
files.add(copyFileToProject(path));
}
return testHighlightingAllFiles(checkWarnings, checkInfos, checkWeakWarnings, VfsUtil.toVirtualFileArray(files));
return testHighlightingAllFiles(checkWarnings, checkInfos, checkWeakWarnings, VfsUtilCore.toVirtualFileArray(files));
}
@Override
@@ -525,7 +524,13 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
@NotNull
public List<IntentionAction> getAvailableIntentions() {
doHighlighting();
return getAvailableIntentions(myEditor, myFile);
PsiFile file = getFile();
Editor editor = getEditor();
if (editor instanceof EditorWindow) {
editor = ((EditorWindow)editor).getDelegate();
file = InjectedLanguageUtil.getTopLevelFile(file);
}
return getAvailableIntentions(editor, file);
}
@Override
@@ -1034,7 +1039,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
protected void run(Result result) throws Throwable {
PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
EditorUtil.fillVirtualSpaceUntilCaret(myEditor);
checkResult("TEXT", stripTrailingSpaces, SelectionAndCaretMarkupLoader.fromText(text, getProject()), myFile.getText());
checkResult("TEXT", stripTrailingSpaces, SelectionAndCaretMarkupLoader.fromText(text, getProject()), getHostFile().getText());
}
}.execute();
}
@@ -1051,7 +1056,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
@Override
protected void run() throws Exception {
checkResultByFile(expectedFile, myFile, ignoreTrailingWhitespaces);
checkResultByFile(expectedFile, getHostFile(), ignoreTrailingWhitespaces);
}
}.execute().throwException();
}
@@ -1358,6 +1363,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
module.getMessageBus().syncPublisher(FacetManager.FACETS_TOPIC).facetConfigurationChanged(facet);
}
}
setupEditorForInjectedLanguage();
}
}.execute().throwException();
@@ -1365,6 +1371,15 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
return myFile;
}
private void setupEditorForInjectedLanguage() {
Editor editor = InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(myEditor, myFile);
if (editor instanceof EditorWindow) {
myFile = ((EditorWindow)editor).getInjectedFile();
myEditor = editor;
}
}
@Override
public VirtualFile findFileInTempDir(final String filePath) {
if (myTempDirFixture instanceof LightTempDirTestFixtureImpl) {
@@ -1390,16 +1405,21 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
private long collectAndCheckHighlightings(boolean checkWarnings, boolean checkInfos, boolean checkWeakWarnings)
throws Exception {
ExpectedHighlightingData data =
new ExpectedHighlightingData(myEditor.getDocument(), checkWarnings, checkWeakWarnings, checkInfos, myFile);
new ExpectedHighlightingData(myEditor.getDocument(), checkWarnings, checkWeakWarnings, checkInfos, getHostFile());
data.init();
return collectAndCheckHighlightings(data);
}
private long collectAndCheckHighlightings(final ExpectedHighlightingData data) {
private PsiFile getHostFile() {
return InjectedLanguageUtil.getTopLevelFile(myFile);
}
private long collectAndCheckHighlightings(@NotNull ExpectedHighlightingData data) {
final Project project = getProject();
PsiDocumentManager.getInstance(project).commitAllDocuments();
FileElement hardRefToFileElement = ((PsiFileImpl)myFile).calcTreeElement();//to load text
PsiFileImpl file = (PsiFileImpl)getHostFile();
FileElement hardRefToFileElement = file.calcTreeElement();//to load text
//to initialize caches
if (!DumbService.isDumb(project)) {
@@ -1421,7 +1441,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
}
final long elapsed = System.currentTimeMillis() - start;
data.checkResult(infos, myEditor.getDocument().getText());
data.checkResult(infos, file.getText());
hardRefToFileElement.hashCode(); // use it so gc won't collect it
return elapsed;
}
@@ -1454,7 +1474,13 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
final Project project = getProject();
PsiDocumentManager.getInstance(project).commitAllDocuments();
return instantiateAndRun(getFile(), getEditor(), ArrayUtil.EMPTY_INT_ARRAY, myAllowDirt);
PsiFile file = getFile();
Editor editor = getEditor();
if (editor instanceof EditorWindow) {
editor = ((EditorWindow)editor).getDelegate();
file = InjectedLanguageUtil.getTopLevelFile(file);
}
return instantiateAndRun(file, editor, ArrayUtil.EMPTY_INT_ARRAY, myAllowDirt);
}
@NotNull
@@ -1580,7 +1606,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
static SelectionAndCaretMarkupLoader fromFile(VirtualFile file, Project project) {
final String text;
try {
text = VfsUtil.loadText(file);
text = VfsUtilCore.loadText(file);
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -1661,6 +1687,12 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
String actualText) {
assertInitialized();
Project project = getProject();
PsiFile file = getFile();
Editor editor = getEditor();
if (editor instanceof EditorWindow) {
editor = ((EditorWindow)editor).getDelegate();
file = InjectedLanguageUtil.getTopLevelFile(file);
}
project.getComponent(PostprocessReformattingAspect.class).doPostponedFormatting();
if (stripTrailingSpaces) {
@@ -1689,10 +1721,11 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
final int tabSize = CodeStyleSettingsManager.getSettings(getProject()).getIndentOptions(StdFileTypes.JAVA).TAB_SIZE;
int caretLine = StringUtil.offsetToLineNumber(loader.newFileText, loader.caretMarker.getStartOffset());
int caretCol = EditorUtil.calcColumnNumber(null, loader.newFileText, StringUtil.lineColToOffset(loader.newFileText, caretLine, 0), loader.caretMarker.getStartOffset(), tabSize);
int caretCol = EditorUtil.calcColumnNumber(null, loader.newFileText, StringUtil.lineColToOffset(loader.newFileText, caretLine, 0),
loader.caretMarker.getStartOffset(), tabSize);
final int actualLine = myEditor.getCaretModel().getLogicalPosition().line;
final int actualCol = myEditor.getCaretModel().getLogicalPosition().column;
final int actualLine = editor.getCaretModel().getLogicalPosition().line;
final int actualCol = editor.getCaretModel().getLogicalPosition().column;
boolean caretPositionEquals = caretLine == actualLine && caretCol == actualCol;
Assert.assertTrue("Caret position in " + expectedFile + " differs. Expected " + genCaretPositionPresentation(caretLine, caretCol) +
". Actual " + genCaretPositionPresentation(actualLine, actualCol), caretPositionEquals);
@@ -1707,15 +1740,15 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
int selectionStart;
int selectionEnd;
if (myEditor.getSelectionModel().hasBlockSelection()) {
int[] starts = myEditor.getSelectionModel().getBlockSelectionStarts();
int[] ends = myEditor.getSelectionModel().getBlockSelectionEnds();
if (editor.getSelectionModel().hasBlockSelection()) {
int[] starts = editor.getSelectionModel().getBlockSelectionStarts();
int[] ends = editor.getSelectionModel().getBlockSelectionEnds();
selectionStart = starts[starts.length-1];
selectionEnd = ends[ends.length-1];
}
else {
selectionStart = myEditor.getSelectionModel().getSelectionStart();
selectionEnd = myEditor.getSelectionModel().getSelectionEnd();
selectionStart = editor.getSelectionModel().getSelectionStart();
selectionEnd = editor.getSelectionModel().getSelectionEnd();
}
final int selStartLineActual = StringUtil.offsetToLineNumber(loader.newFileText, selectionStart);
@@ -1733,8 +1766,8 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
". Actual " + genSelectionPresentation(selStartLineActual, selStartColActual, selEndLineActual, selEndColActual),
selectionEquals);
}
else if (myEditor != null) {
Assert.assertTrue("has no selection in " + expectedFile, !myEditor.getSelectionModel().hasSelection());
else if (editor != null) {
Assert.assertTrue("has no selection in " + expectedFile, !editor.getSelectionModel().hasSelection());
}
}
@@ -1900,4 +1933,12 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig
return (LookupImpl)LookupManager.getActiveLookup(myEditor);
}
protected void bringRealEditorBack() {
PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
if (myEditor instanceof EditorWindow) {
Document document = ((DocumentWindow)myEditor.getDocument()).getDelegate();
myFile = PsiDocumentManager.getInstance(getProject()).getPsiFile(document);
myEditor = ((EditorWindow)myEditor).getDelegate();
}
}
}
@@ -15,9 +15,11 @@
*/
package org.intellij.lang.xpath.xslt;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.impl.PsiFileEx;
import com.intellij.psi.xml.XmlFile;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import org.intellij.lang.xpath.TestBase;
import org.intellij.lang.xpath.xslt.impl.XsltChecker;
@@ -91,7 +93,9 @@ public class XsltBasicTest extends TestBase {
private void configure() throws Throwable {
final String fileName = getTestFileName();
myFixture.configureByFile(fileName.replaceAll("_.*$", "") + ".xsl");
String path = fileName.replaceAll("_.*$", "") + ".xsl";
final VirtualFile file = myFixture.copyFileToProject(path);
((CodeInsightTestFixtureImpl)myFixture).openFileInEditor(file);
if (fileName.endsWith("_Loaded")) {
((XmlFile)myFixture.getFile()).getDocument();
assertTrue(((PsiFileEx)myFixture.getFile()).isContentsLoaded());
@@ -15,7 +15,6 @@
*/
package org.intellij.lang.xpath.xslt;
import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiPolyVariantReference;
import com.intellij.psi.PsiReference;
@@ -126,8 +125,7 @@ public class XsltResolveTest extends TestBase {
private PsiReference findInjectedReferenceAtCaret(String... moreFiles) throws Throwable {
configure(moreFiles);
final InjectedLanguageManager manager = InjectedLanguageManager.getInstance(myFixture.getProject());
final PsiElement e = manager.findInjectedElementAt(myFixture.getFile(), myFixture.getEditor().getCaretModel().getOffset());
final PsiElement e = myFixture.getFile().findElementAt(myFixture.getEditor().getCaretModel().getOffset());
assertNotNull(e);
final PsiReference reference = e.getContainingFile().findReferenceAt(e.getTextOffset());
@@ -3,6 +3,7 @@ package com.intellij.util.xml.stubs;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.PsiManagerEx;
import com.intellij.psi.stubs.ObjectStubTree;
import com.intellij.psi.stubs.StubTreeLoader;
import com.intellij.testFramework.PlatformTestUtil;
@@ -54,7 +55,9 @@ public class DomStubBuilderTest extends DomStubTest {
}
public void testNullTag() throws Exception {
PsiFile psiFile = myFixture.configureByFile("nullTag.xml");
VirtualFile virtualFile = myFixture.copyFileToProject("nullTag.xml");
assertNotNull(virtualFile);
PsiFile psiFile = ((PsiManagerEx)getPsiManager()).getFileManager().findFile(virtualFile);
StubTreeLoader loader = StubTreeLoader.getInstance();
VirtualFile file = psiFile.getVirtualFile();
@@ -18,6 +18,7 @@ package com.intellij.util.xml.stubs;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.DebugUtil;
import com.intellij.psi.impl.PsiManagerEx;
import com.intellij.psi.impl.PsiManagerImpl;
import com.intellij.psi.stubs.ObjectStubTree;
import com.intellij.psi.stubs.StubTreeLoader;
@@ -28,7 +29,6 @@ import com.intellij.util.xml.DomElement;
import com.intellij.util.xml.DomFileDescription;
import com.intellij.util.xml.DomFileElement;
import com.intellij.util.xml.DomManager;
import com.intellij.util.xml.impl.DomApplicationComponent;
import com.intellij.util.xml.impl.DomManagerImpl;
import com.intellij.util.xml.stubs.model.Foo;
@@ -93,10 +93,10 @@ public abstract class DomStubTest extends LightCodeInsightFixtureTestCase {
}
protected XmlFile prepareFile(String path) {
XmlFile file = (XmlFile)myFixture.configureByFile(path);
assertFalse(file.getNode().isParsed());
VirtualFile virtualFile = file.getVirtualFile();
VirtualFile virtualFile = myFixture.copyFileToProject(path);
assertNotNull(virtualFile);
XmlFile file = (XmlFile)((PsiManagerEx)getPsiManager()).getFileManager().findFile(virtualFile);
assertFalse(file.getNode().isParsed());
ObjectStubTree tree = StubTreeLoader.getInstance().readOrBuild(getProject(), virtualFile, file);
assertNotNull(tree);