From 5fafe1e0a8be97347009917fd593a3a03267edd1 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 8 Aug 2013 14:32:02 +0400 Subject: [PATCH] run inject automatically in CodeInsightFixture --- .../impl/CodeInsightTestFixtureImpl.java | 89 ++++++++++++++----- .../lang/xpath/xslt/XsltBasicTest.java | 6 +- .../lang/xpath/xslt/XsltResolveTest.java | 4 +- .../util/xml/stubs/DomStubBuilderTest.java | 5 +- .../intellij/util/xml/stubs/DomStubTest.java | 8 +- 5 files changed, 79 insertions(+), 33 deletions(-) diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 31c7afcb8a93..32abf992a046 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -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 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(); + } + } } diff --git a/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltBasicTest.java b/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltBasicTest.java index e053411c15c4..7070314550e1 100644 --- a/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltBasicTest.java +++ b/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltBasicTest.java @@ -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()); diff --git a/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltResolveTest.java b/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltResolveTest.java index 08f6041879b4..0c9eb2560f4b 100644 --- a/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltResolveTest.java +++ b/plugins/xpath/xpath-lang/test/org/intellij/lang/xpath/xslt/XsltResolveTest.java @@ -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()); diff --git a/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubBuilderTest.java b/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubBuilderTest.java index faca1b68ff9b..e5d15d5a9fd9 100644 --- a/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubBuilderTest.java +++ b/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubBuilderTest.java @@ -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(); diff --git a/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubTest.java b/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubTest.java index 73b975d1a8cc..54983ba62ad1 100644 --- a/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubTest.java +++ b/xml/dom-tests/tests/com/intellij/util/xml/stubs/DomStubTest.java @@ -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);