move test breadcrumbs fetching to CodeInsightTestFixture

This commit is contained in:
Valentin Fondaratov
2017-05-25 14:48:44 +03:00
parent 70dd823ca4
commit e01380eb34
3 changed files with 38 additions and 38 deletions
@@ -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<Object> 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<Crumb> getBreadcrumbsAtCaret();
void saveText(@NotNull VirtualFile file, @NotNull String text);
}
@@ -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<Crumb> 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<Crumb> 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();
@@ -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<Crumb> 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<Crumb> 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;
}
}