From 49fbe04b4d96ab90d5c058cc87c19b6bec22f08a Mon Sep 17 00:00:00 2001 From: greg Date: Tue, 21 Apr 2009 19:57:18 +0400 Subject: [PATCH] test highlighting in multiple files --- .../impl/JavaCodeInsightTestFixtureImpl.java | 4 +- .../fixtures/CodeInsightTestFixture.java | 6 +++ .../fixtures/impl/CodeInsightTestFixtureImpl.java | 57 ++++++++++++++++++++-- 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/source/com/intellij/testFramework/fixtures/impl/JavaCodeInsightTestFixtureImpl.java b/source/com/intellij/testFramework/fixtures/impl/JavaCodeInsightTestFixtureImpl.java index d5b74451f3..82ab41366b 100644 --- a/source/com/intellij/testFramework/fixtures/impl/JavaCodeInsightTestFixtureImpl.java +++ b/source/com/intellij/testFramework/fixtures/impl/JavaCodeInsightTestFixtureImpl.java @@ -3,6 +3,7 @@ package com.intellij.testFramework.fixtures.impl; import com.intellij.psi.*; import com.intellij.testFramework.fixtures.IdeaProjectTestFixture; import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture; +import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -24,7 +25,8 @@ public class JavaCodeInsightTestFixtureImpl extends CodeInsightTestFixtureImpl i public PsiClass addClass(@NotNull @NonNls final String classText) throws IOException { assertInitialized(); final PsiClass psiClass = addClass(getTempDirPath(), classText); - myAddedClasses.add(psiClass.getContainingFile().getVirtualFile()); + final VirtualFile file = psiClass.getContainingFile().getVirtualFile(); + allowTreeAccessForFile(file); return psiClass; } diff --git a/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java b/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java index 29acaff1ee..c0e9ef8906 100644 --- a/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java +++ b/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java @@ -112,6 +112,10 @@ public interface CodeInsightTestFixture extends IdeaProjectTestFixture { */ long testHighlighting(boolean checkWarnings, boolean checkInfos, boolean checkWeakWarnings, @NonNls String... filePaths) throws Throwable; + long testHighlightingAllFiles(boolean checkWarnings, boolean checkInfos, boolean checkWeakWarnings, @NonNls String... filePaths) throws Throwable; + + long testHighlightingAllFiles(boolean checkWarnings, boolean checkInfos, boolean checkWeakWarnings, @NonNls VirtualFile... files) throws Throwable; + /** * Check highlighting of file already loaded by configure* methods * @param checkWarnings @@ -306,4 +310,6 @@ public interface CodeInsightTestFixture extends IdeaProjectTestFixture { List getLookupElementStrings(); void renameElementAtCaret(String newName) throws Throwable; + + void allowTreeAccessForFile(VirtualFile file); } diff --git a/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 6c758bbba2..4bf0bfd698 100644 --- a/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -238,7 +238,6 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig final boolean checkInfos, final boolean checkWeakWarnings, final String... filePaths) throws Throwable { - final Ref duration = new Ref(); new WriteCommandAction.Simple(myProjectFixture.getProject()) { @@ -250,6 +249,49 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig return duration.get().longValue(); } + public long testHighlightingAllFiles(final boolean checkWarnings, + final boolean checkInfos, + final boolean checkWeakWarnings, + @NonNls final String... filePaths) throws Throwable { + final ArrayList files = new ArrayList(); + for (String path : filePaths) { + files.add(copyFileToProject(path)); + } + return testHighlightingAllFiles(checkWarnings, checkInfos, checkWeakWarnings, files.toArray(new VirtualFile[files.size()])); + } + + public long testHighlightingAllFiles(final boolean checkWarnings, + final boolean checkInfos, + final boolean checkWeakWarnings, + @NonNls final VirtualFile... files) throws Throwable { + final Ref duration = new Ref(); + new WriteCommandAction.Simple(myProjectFixture.getProject()) { + + protected void run() throws Throwable { + collectAndCheckHighlightings(checkWarnings, checkInfos, checkWeakWarnings, duration, files); + } + }.execute().throwException(); + return duration.get().longValue(); + } + + private void collectAndCheckHighlightings(final boolean checkWarnings, final boolean checkInfos, final boolean checkWeakWarnings, final Ref duration, + final VirtualFile[] files) { + final List> datas = ContainerUtil.map2List(files, new Function>() { + public Trinity fun(final VirtualFile file) { + final PsiFile psiFile = myPsiManager.findFile(file); + assertNotNull(psiFile); + final Document document = PsiDocumentManager.getInstance(getProject()).getDocument(psiFile); + assertNotNull(document); + return Trinity.create(psiFile, createEditor(file), new ExpectedHighlightingData(document, checkWarnings, checkWeakWarnings, checkInfos, psiFile)); + } + }); + for (Trinity trinity : datas) { + myEditor = trinity.second; + myFile = trinity.first; + collectAndCheckHighlightings(trinity.third, duration); + } + } + public long checkHighlighting(final boolean checkWarnings, final boolean checkInfos, final boolean checkWeakWarnings) throws Throwable { final Ref duration = new Ref(); new WriteCommandAction.Simple(myProjectFixture.getProject()) { @@ -909,9 +951,13 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig private void collectAndCheckHighlightings(boolean checkWarnings, boolean checkInfos, boolean checkWeakWarnings, Ref duration) throws Exception { - final Project project = getProject(); ExpectedHighlightingData data = new ExpectedHighlightingData(myEditor.getDocument(), checkWarnings, checkWeakWarnings, checkInfos, myFile); + collectAndCheckHighlightings(data, duration); + } + + private void collectAndCheckHighlightings(final ExpectedHighlightingData data, final Ref duration) { + final Project project = getProject(); PsiDocumentManager.getInstance(project).commitAllDocuments(); ((PsiFileImpl)myFile).calcTreeElement(); //to load text @@ -932,7 +978,8 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig final long start = System.currentTimeMillis(); // ProfilingUtil.startCPUProfiling(); Collection infos = doHighlighting(); - duration.set(System.currentTimeMillis() - start); + final long elapsed = System.currentTimeMillis() - start; + duration.set(duration.isNull()? elapsed : duration.get().longValue() + elapsed); // ProfilingUtil.captureCPUSnapshot("testing"); ((PsiManagerImpl)PsiManager.getInstance(project)).setAssertOnFileLoadingFilter(VirtualFileFilter.NONE); @@ -1039,6 +1086,10 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig return result; } + public void allowTreeAccessForFile(final VirtualFile file) { + myAddedClasses.add(file); + } + static class SelectionAndCaretMarkupLoader { final String newFileText; final RangeMarker caretMarker; -- 2.11.4.GIT