mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-04 23:39:07 +07:00
198 lines
6.6 KiB
Java
198 lines
6.6 KiB
Java
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
|
package com.intellij.testIntergration;
|
|
|
|
import com.intellij.openapi.application.ApplicationManager;
|
|
import com.intellij.openapi.command.CommandProcessor;
|
|
import com.intellij.openapi.roots.ModuleRootModificationUtil;
|
|
import com.intellij.openapi.vfs.VirtualFile;
|
|
import com.intellij.project.IntelliJProjectConfiguration;
|
|
import com.intellij.psi.*;
|
|
import com.intellij.psi.util.PsiTreeUtil;
|
|
import com.intellij.testFramework.IndexingTestUtil;
|
|
import com.intellij.testFramework.JavaPsiTestCase;
|
|
import com.intellij.testFramework.PsiTestUtil;
|
|
import com.intellij.testIntegration.TestFinderHelper;
|
|
import com.intellij.util.IncorrectOperationException;
|
|
|
|
public class TestFinderHelperTest extends JavaPsiTestCase {
|
|
private VirtualFile myContentRootDir;
|
|
|
|
@Override
|
|
protected void setUp() throws Exception {
|
|
super.setUp();
|
|
|
|
myContentRootDir = getTempDir().createVirtualDir();
|
|
PsiTestUtil.addSourceRoot(myModule, myContentRootDir);
|
|
IntelliJProjectConfiguration.LibraryRoots junit4Library = IntelliJProjectConfiguration.getProjectLibrary("JUnit4");
|
|
ModuleRootModificationUtil.addModuleLibrary(myModule, "JUnit4", junit4Library.getClassesUrls(), junit4Library.getSourcesUrls());
|
|
IndexingTestUtil.waitUntilIndexesAreReady(getProject());
|
|
}
|
|
|
|
public void testNoTestsForClass() {
|
|
PsiClass c = createClass("Foo");
|
|
assertSameElements(TestFinderHelper.findTestsForClass(c));
|
|
}
|
|
|
|
public void testNoClassesForTest() {
|
|
PsiClass t = createTest("FooTest");
|
|
assertEmpty(TestFinderHelper.findClassesForTest(t));
|
|
}
|
|
|
|
public void testIsTest() {
|
|
assertFalse(TestFinderHelper.isTest(createClass("Foo")));
|
|
assertTrue(TestFinderHelper.isTest(createTest("FooTest")));
|
|
assertTrue(TestFinderHelper.isTest(createTest("XXX")));
|
|
}
|
|
|
|
public void testSimpleCase() {
|
|
PsiClass c = createClass("Foo");
|
|
PsiClass t = createTest("FooTest");
|
|
|
|
assertSameElements(TestFinderHelper.findTestsForClass(c), t);
|
|
assertSameElements(TestFinderHelper.findClassesForTest(t), c);
|
|
}
|
|
|
|
public void testImplicitClass() throws Exception {
|
|
PsiFile file = createFile("Main.java", "void main() { }");
|
|
PsiClass c = PsiTreeUtil.getChildOfType(file, PsiImplicitClass.class);
|
|
PsiClass t = createTest("MainTest");
|
|
|
|
assertSameElements(TestFinderHelper.findTestsForClass(c), t);
|
|
assertSameElements(TestFinderHelper.findClassesForTest(t), c);
|
|
}
|
|
|
|
public void testIgnoreCase() {
|
|
PsiClass c = createClass("FOo");
|
|
PsiClass t = createTest("FooTest");
|
|
|
|
assertSameElements(TestFinderHelper.findTestsForClass(c), t);
|
|
}
|
|
|
|
public void testFromClassInners() {
|
|
PsiClass c = createClass("Foo");
|
|
PsiClass t = createTest("FooTest");
|
|
|
|
PsiMethod cm = addMethod(c);
|
|
PsiMethod tm = addMethod(t);
|
|
|
|
assertSameElements(TestFinderHelper.findTestsForClass(cm), t);
|
|
assertSameElements(TestFinderHelper.findClassesForTest(tm), c);
|
|
|
|
assertFalse(TestFinderHelper.isTest(cm));
|
|
assertTrue(TestFinderHelper.isTest(tm));
|
|
}
|
|
|
|
public void testVariousTestNaming() {
|
|
PsiClass c = createClass("Foo");
|
|
|
|
PsiClass[] tests = new PsiClass[] {
|
|
createTest("FooTestCase"),
|
|
createTest("FooFixture"),
|
|
createTest("FooAbc"),
|
|
createTest("TestFoo"),
|
|
createTest("TestCaseFoo"),
|
|
createTest("FixtureFoo"),
|
|
createTest("AbcFoo"),
|
|
createTest("AbcFooAbc")};
|
|
|
|
assertSameElements(TestFinderHelper.findTestsForClass(c), tests);
|
|
for (PsiClass each : tests) {
|
|
assertSameElements(TestFinderHelper.findClassesForTest(each), c);
|
|
}
|
|
}
|
|
|
|
public void testVariousClassNaming() {
|
|
PsiClass t = createTest("FooBarBaz");
|
|
|
|
PsiClass[] classes = new PsiClass[] {
|
|
createClass("Foo"),
|
|
createClass("Bar"),
|
|
createClass("Baz"),
|
|
createClass("FooBar"),
|
|
createClass("BarBaz")};
|
|
|
|
// not to find classes:
|
|
createClass("FooBaz"); // adjacent-words only
|
|
createClass("ooBar"); // start with word
|
|
createClass("az"); // whole word
|
|
|
|
assertSameElements(TestFinderHelper.findClassesForTest(t), classes);
|
|
for (PsiClass each : classes) {
|
|
assertSameElements(TestFinderHelper.findTestsForClass(each), t);
|
|
}
|
|
}
|
|
|
|
public void testSortingFoundTestsByRelevance() {
|
|
PsiClass c = createClass("FooBar");
|
|
|
|
PsiClass[] tests = new PsiClass[] {
|
|
createTest("FooBarBaz"),
|
|
createTest("BazFooBar"),
|
|
createTest("FooBarBazBaz"),
|
|
createTest("BazFooBarBaz"),
|
|
createTest("BazBazFooBar")};
|
|
|
|
assertSameElements(TestFinderHelper.findTestsForClass(c), tests);
|
|
}
|
|
|
|
public void testSortingFoundClassesByRelevance() {
|
|
PsiClass t = createTest("FooBarBaz");
|
|
|
|
PsiClass[] classes = new PsiClass[] {
|
|
createClass("BarBaz"),
|
|
createClass("FooBar"),
|
|
createClass("Bar"),
|
|
createClass("Baz"),
|
|
createClass("Foo")};
|
|
|
|
assertOrderedEquals(TestFinderHelper.findClassesForTest(t), classes);
|
|
}
|
|
|
|
private PsiClass createClass(String name) throws IncorrectOperationException {
|
|
PsiDirectory directory = myPsiManager.findDirectory(myContentRootDir);
|
|
assertNotNull(directory);
|
|
return JavaDirectoryService.getInstance().createClass(directory, name);
|
|
}
|
|
|
|
private PsiClass createTest(String name) throws IncorrectOperationException {
|
|
final PsiClass result = createClass(name);
|
|
|
|
CommandProcessor.getInstance().executeCommand(myProject, () -> ApplicationManager.getApplication().runWriteAction(() -> {
|
|
try {
|
|
PsiAnnotation annotation = getPsiFactory().createAnnotationFromText("@org.junit.runner.RunWith", result);
|
|
PsiModifierList modifiers = result.getModifierList();
|
|
assertNotNull(modifiers);
|
|
PsiElement first = modifiers.getFirstChild();
|
|
if (first == null) {
|
|
modifiers.add(annotation);
|
|
}
|
|
else {
|
|
modifiers.addBefore(annotation, first);
|
|
}
|
|
}
|
|
catch (IncorrectOperationException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}), null, null);
|
|
|
|
return result;
|
|
}
|
|
|
|
private PsiMethod addMethod(final PsiClass c) throws IncorrectOperationException {
|
|
final PsiMethod[] method = new PsiMethod[1];
|
|
CommandProcessor.getInstance().executeCommand(myProject, () -> ApplicationManager.getApplication().runWriteAction(() -> {
|
|
try {
|
|
method[0] = (PsiMethod)c.add(getPsiFactory().createMethod("foo", PsiTypes.voidType()));
|
|
}
|
|
catch (IncorrectOperationException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}), null, null);
|
|
return method[0];
|
|
}
|
|
|
|
private PsiElementFactory getPsiFactory() {
|
|
return JavaPsiFacade.getInstance(myProject).getElementFactory();
|
|
}
|
|
}
|