From e01380eb343f9cfda60225fddd26635cd9d29160 Mon Sep 17 00:00:00 2001 From: Valentin Fondaratov Date: Thu, 25 May 2017 14:03:02 +0300 Subject: [PATCH] move test breadcrumbs fetching to CodeInsightTestFixture --- .../fixtures/CodeInsightTestFixture.java | 8 ++++ .../impl/CodeInsightTestFixtureImpl.java | 28 +++++++++++++ .../yaml/breadcrumbs/YAMLBreadcrumbsTest.java | 40 +------------------ 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java index fb0c476546b2..a4e4cb754a1f 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java @@ -43,6 +43,7 @@ import com.intellij.testFramework.EditorTestUtil; import com.intellij.testFramework.ExpectedHighlightingData; import com.intellij.testFramework.HighlightTestInfo; import com.intellij.testFramework.TestDataFile; +import com.intellij.ui.components.breadcrumbs.Crumb; import com.intellij.usageView.UsageInfo; import com.intellij.util.Consumer; import org.intellij.lang.annotations.MagicConstant; @@ -592,5 +593,12 @@ public interface CodeInsightTestFixture extends IdeaProjectTestFixture { @NotNull List getGotoClassResults(@NotNull String pattern, boolean searchEverywhere, @Nullable PsiElement contextForSorting); + /** + * Get breadcrumbs to be generated for the current cursor position in the loaded file + * @return a list of the breadcrumbs in the order from the topmost element crumb to the deepest + */ + @NotNull + List getBreadcrumbsAtCaret(); + void saveText(@NotNull VirtualFile file, @NotNull String text); } \ No newline at end of file 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 104418041f87..dd3fd78053ae 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -56,6 +56,7 @@ import com.intellij.ide.util.gotoByName.GotoClassModel2; import com.intellij.injected.editor.DocumentWindow; import com.intellij.injected.editor.EditorWindow; import com.intellij.internal.DumpLookupElementWeights; +import com.intellij.lang.Language; import com.intellij.lang.LanguageStructureViewBuilder; import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.mock.MockProgressIndicator; @@ -115,6 +116,8 @@ import com.intellij.rt.execution.junit.FileComparisonFailure; import com.intellij.testFramework.*; import com.intellij.testFramework.fixtures.*; import com.intellij.testFramework.utils.inlays.InlayHintsChecker; +import com.intellij.ui.breadcrumbs.BreadcrumbsProvider; +import com.intellij.ui.components.breadcrumbs.Crumb; import com.intellij.usageView.UsageInfo; import com.intellij.util.*; import com.intellij.util.containers.ContainerUtil; @@ -1779,6 +1782,31 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig return results; } + @NotNull + @Override + public List getBreadcrumbsAtCaret() { + PsiElement element = getFile().findElementAt(getCaretOffset()); + if (element == null) { + return Collections.emptyList(); + } + final Language language = element.getContainingFile().getLanguage(); + + final BreadcrumbsProvider provider = ContainerUtil.find(BreadcrumbsProvider.EP_NAME.getExtensions(), + p -> Arrays.asList(p.getLanguages()).contains(language)); + if (provider == null) { + return Collections.emptyList(); + } + + List result = new ArrayList<>(); + while (element != null) { + if (provider.acceptElement(element)) { + result.add(new Crumb.Impl(provider.getElementIcon(element), provider.getElementInfo(element), provider.getElementTooltip(element))); + } + element = provider.getParent(element); + } + return ContainerUtil.reverse(result); + } + @NotNull private ChooseByNameBase getMockChooseByNamePopup(@Nullable PsiElement contextForSorting) { final Project project = getProject(); diff --git a/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java b/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java index f937cb248b8b..3889f1bac9be 100644 --- a/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java +++ b/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java @@ -15,22 +15,11 @@ */ package org.jetbrains.yaml.breadcrumbs; -import com.intellij.lang.Language; import com.intellij.openapi.editor.Caret; import com.intellij.openapi.editor.CaretModel; -import com.intellij.psi.PsiElement; -import com.intellij.testFramework.fixtures.CodeInsightTestFixture; import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase; -import com.intellij.ui.breadcrumbs.BreadcrumbsProvider; -import com.intellij.ui.components.breadcrumbs.Crumb; -import com.intellij.util.containers.ContainerUtil; -import org.jetbrains.annotations.NotNull; import org.jetbrains.yaml.YAMLFileType; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; import java.util.stream.Collectors; public class YAMLBreadcrumbsTest extends LightPlatformCodeInsightFixtureTestCase { @@ -80,38 +69,13 @@ public class YAMLBreadcrumbsTest extends LightPlatformCodeInsightFixtureTestCase .collect(Collectors.toList()).stream() .map((offset) -> { caretModel.moveToOffset(offset); - return getBreadcrumbs(myFixture).stream() + return myFixture.getBreadcrumbsAtCaret().stream() .map(crumb -> "[" + crumb.getText() + ";" + crumb.getTooltip() + "]") - .reduce((left, right) -> right + left).orElse("[]"); + .reduce((left, right) -> left + right).orElse("[]"); }) .reduce((left, right) -> left + "\n------\n" + right).orElse(""); assertSameLines(OUTPUT, result); } - // TODO move this method and class to platform when breadcrumbs are moved there, too - @NotNull - private static List getBreadcrumbs(@NotNull CodeInsightTestFixture fixture) { - PsiElement element = fixture.getFile().findElementAt(fixture.getCaretOffset()); - if (element == null) { - return Collections.emptyList(); - } - final Language language = element.getContainingFile().getLanguage(); - - final BreadcrumbsProvider provider = ContainerUtil.find(BreadcrumbsProvider.EP_NAME.getExtensions(), - (p) -> Arrays.asList(p.getLanguages()).contains(language)); - if (provider == null) { - return Collections.emptyList(); - } - - List result = new ArrayList<>(); - while (element != null) { - if (provider.acceptElement(element)) { - result.add(new Crumb.Impl(provider.getElementIcon(element), provider.getElementInfo(element), provider.getElementTooltip(element))); - } - element = provider.getParent(element); - } - return result; - } - }