From 911d516e7bfb52de149faa8b34ed8351e1bf6739 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 16 Jun 2017 09:08:29 +0200 Subject: [PATCH] PsiTestUtil.checkStubsMatchText --- .../AbstractApplyAndRevertTestCase.java | 45 ------------------- .../ApplyRandomIntentionsTest.java | 3 +- .../CompletionConsistencyTest.java | 3 +- .../intellij/testFramework/PsiTestUtil.java | 39 +++++++++++++++- 4 files changed, 42 insertions(+), 48 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/java/propertyBased/AbstractApplyAndRevertTestCase.java b/java/java-tests/testSrc/com/intellij/java/propertyBased/AbstractApplyAndRevertTestCase.java index 03015538dfd3..32a40b2e723d 100644 --- a/java/java-tests/testSrc/com/intellij/java/propertyBased/AbstractApplyAndRevertTestCase.java +++ b/java/java-tests/testSrc/com/intellij/java/propertyBased/AbstractApplyAndRevertTestCase.java @@ -37,20 +37,13 @@ import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiFileFactory; -import com.intellij.psi.impl.DebugUtil; -import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.psi.search.FilenameIndex; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.stubs.StubTree; import com.intellij.testFramework.CompilerTester; import com.intellij.testFramework.PlatformTestCase; import com.intellij.testFramework.TestDataProvider; import com.intellij.testFramework.UsefulTestCase; import com.intellij.util.containers.ContainerUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import slowCheck.Generator; import java.io.File; @@ -164,42 +157,4 @@ public abstract class AbstractApplyAndRevertTestCase extends PlatformTestCase { .collect(Collectors.toList()); } - protected void checkPsiWellFormed(PsiFile file) { - PsiFile copy = PsiFileFactory.getInstance(myProject).createFileFromText(file.getName(), file.getLanguage(), file.getText()); - assertEquals(DebugUtil.psiTreeToString(copy, false), DebugUtil.psiTreeToString(file, false)); - - Document document = file.getViewProvider().getDocument(); - if (!PsiDocumentManager.getInstance(myProject).isCommitted(document)) { - PsiDocumentManager.getInstance(myProject).commitDocument(document); - checkPsiWellFormed(file); - } - } - - protected static void checkStubPsiWellFormed(@NotNull PsiFile file) { - Project project = file.getProject(); - - StubTree tree = getStubTree(file); - StubTree copyTree = getStubTree( - PsiFileFactory.getInstance(project).createFileFromText(file.getName(), file.getLanguage(), file.getText())); - if (tree == null || copyTree == null) return; - - assertEquals(DebugUtil.stubTreeToString(copyTree.getRoot()), DebugUtil.stubTreeToString(tree.getRoot())); - - Document document = file.getViewProvider().getDocument(); - assert document != null; - if (!PsiDocumentManager.getInstance(project).isCommitted(document)) { - PsiDocumentManager.getInstance(project).commitDocument(document); - checkStubPsiWellFormed(file); - } - } - - @Nullable - private static StubTree getStubTree(PsiFile file) { - if (!(file instanceof PsiFileImpl)) return null; - if (((PsiFileImpl)file).getElementTypeForStubBuilder() == null) return null; - - StubTree tree = ((PsiFileImpl)file).getStubTree(); - return tree != null ? tree : ((PsiFileImpl)file).calcStubTree(); - } - } diff --git a/java/java-tests/testSrc/com/intellij/java/propertyBased/ApplyRandomIntentionsTest.java b/java/java-tests/testSrc/com/intellij/java/propertyBased/ApplyRandomIntentionsTest.java index 6b37d3ded72f..31f979ab775c 100644 --- a/java/java-tests/testSrc/com/intellij/java/propertyBased/ApplyRandomIntentionsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/propertyBased/ApplyRandomIntentionsTest.java @@ -24,6 +24,7 @@ import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.testFramework.PsiTestUtil; import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl; import com.intellij.util.SystemProperties; import com.intellij.util.containers.ContainerUtil; @@ -147,7 +148,7 @@ public class ApplyRandomIntentionsTest extends AbstractApplyAndRevertTestCase { assertFalse("Document is left blocked by PSI", documentManager.isDocumentBlockedByPsi(document)); checkNoForeignDocuments(document, documentManager.getUncommittedDocuments()); checkNoForeignDocuments(document, FileDocumentManager.getInstance().getUnsavedDocuments()); - checkStubPsiWellFormed(psiFile); + PsiTestUtil.checkStubsMatchText(psiFile); if (psiFile.textMatches(currentFileText)) { fail("No change was performed: " + currentFileText); } diff --git a/java/java-tests/testSrc/com/intellij/java/propertyBased/CompletionConsistencyTest.java b/java/java-tests/testSrc/com/intellij/java/propertyBased/CompletionConsistencyTest.java index a5ee874cd8a3..d0f41882a0fd 100644 --- a/java/java-tests/testSrc/com/intellij/java/propertyBased/CompletionConsistencyTest.java +++ b/java/java-tests/testSrc/com/intellij/java/propertyBased/CompletionConsistencyTest.java @@ -29,6 +29,7 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.testFramework.PsiTestUtil; import com.intellij.util.SystemProperties; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; @@ -94,7 +95,7 @@ public class CompletionConsistencyTest extends AbstractApplyAndRevertTestCase { try { performCompletion(editor, i == 0, invocation, leaf); - checkStubPsiWellFormed(psiFile); + PsiTestUtil.checkStubsMatchText(psiFile); } finally { LookupManager.getInstance(myProject).hideActiveLookup(); diff --git a/platform/testFramework/src/com/intellij/testFramework/PsiTestUtil.java b/platform/testFramework/src/com/intellij/testFramework/PsiTestUtil.java index 50f5c6b04007..781d7135a3da 100644 --- a/platform/testFramework/src/com/intellij/testFramework/PsiTestUtil.java +++ b/platform/testFramework/src/com/intellij/testFramework/PsiTestUtil.java @@ -15,8 +15,12 @@ */ package com.intellij.testFramework; -import com.intellij.openapi.application.*; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.Result; +import com.intellij.openapi.application.RunResult; +import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.editor.Document; import com.intellij.openapi.module.ModifiableModuleModel; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; @@ -37,6 +41,8 @@ import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileFactory; import com.intellij.psi.impl.DebugUtil; +import com.intellij.psi.impl.source.PsiFileImpl; +import com.intellij.psi.stubs.StubTree; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Contract; @@ -395,4 +401,35 @@ public class PsiTestUtil { sdkModificator.commitChanges(); return clone; } + + public static void checkStubsMatchText(@NotNull PsiFile file) { + Project project = file.getProject(); + + StubTree tree = getStubTree(file); + StubTree copyTree = getStubTree( + PsiFileFactory.getInstance(project).createFileFromText(file.getName(), file.getLanguage(), file.getText())); + if (tree == null || copyTree == null) return; + + String fromText = DebugUtil.stubTreeToString(copyTree.getRoot()); + String fromPsi = DebugUtil.stubTreeToString(tree.getRoot()); + if (!fromText.equals(fromPsi)) { + Assert.assertEquals("Re-created from text:\n" + fromText, "Stubs from PSI structure:\n" + fromPsi); + } + + Document document = file.getViewProvider().getDocument(); + assert document != null; + if (!PsiDocumentManager.getInstance(project).isCommitted(document)) { + PsiDocumentManager.getInstance(project).commitDocument(document); + checkStubsMatchText(file); + } + } + + @Nullable + private static StubTree getStubTree(PsiFile file) { + if (!(file instanceof PsiFileImpl)) return null; + if (((PsiFileImpl)file).getElementTypeForStubBuilder() == null) return null; + + StubTree tree = ((PsiFileImpl)file).getStubTree(); + return tree != null ? tree : ((PsiFileImpl)file).calcStubTree(); + } } \ No newline at end of file