Files
openide/jvm/jvm-analysis-java-tests/testSrc/com/intellij/codeInspection/tests/java/JavaBlockingMethodInNonBlockingContextInspectionTest.java
Aleksandr Izmailov 1555d664b6 [blocking calls detection] IDEA-310256: handle implicit constructor calls
GitOrigin-RevId: d550a9ad10d014116378fd4800cff7b72b7b51c1
2023-01-12 17:36:33 +00:00

93 lines
4.3 KiB
Java

// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.codeInspection.tests.java;
import com.intellij.codeInspection.blockingCallsDetection.BlockingMethodInNonBlockingContextInspection;
import com.intellij.openapi.application.ex.PathManagerEx;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.JavaModuleExternalPaths;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.psi.codeStyle.JavaCodeStyleSettings;
import com.intellij.testFramework.UsefulTestCase;
import com.intellij.testFramework.builders.JavaModuleFixtureBuilder;
import com.intellij.testFramework.fixtures.*;
import static com.intellij.codeInspection.blockingCallsDetection.BlockingMethodInNonBlockingContextInspection.DEFAULT_BLOCKING_ANNOTATIONS;
import static com.intellij.codeInspection.blockingCallsDetection.BlockingMethodInNonBlockingContextInspection.DEFAULT_NONBLOCKING_ANNOTATIONS;
public class JavaBlockingMethodInNonBlockingContextInspectionTest extends UsefulTestCase {
private CodeInsightTestFixture myFixture;
@Override
protected void tearDown() throws Exception {
try {
myFixture.tearDown();
}
catch (Throwable e) {
addSuppressedException(e);
}
finally {
myFixture = null;
super.tearDown();
}
}
@Override
public void setUp() throws Exception {
super.setUp();
final TestFixtureBuilder<IdeaProjectTestFixture>
projectBuilder = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getName());
myFixture = JavaTestFixtureFactory.getFixtureFactory().createCodeInsightFixture(projectBuilder.getFixture());
final String dataPath = PathManagerEx.getTestDataPath() + "/codeInspection/blockingCallsDetection";
myFixture.setTestDataPath(dataPath);
final JavaModuleFixtureBuilder builder = projectBuilder.addModule(JavaModuleFixtureBuilder.class);
builder.setMockJdkLevel(JavaModuleFixtureBuilder.MockJdkLevel.jdk15);
myFixture.setUp();
Module module = builder.getFixture().getModule();
ModuleRootModificationUtil.updateModel(module, model -> {
String contentUrl = VfsUtilCore.pathToUrl(myFixture.getTempDirPath());
model.addContentEntry(contentUrl).addSourceFolder(contentUrl, false);
final JavaModuleExternalPaths extension = model.getModuleExtension(JavaModuleExternalPaths.class);
extension.setExternalAnnotationUrls(new String[]{VfsUtilCore.pathToUrl(myFixture.getTempDirPath())});
});
Project project = myFixture.getProject();
JavaCodeStyleSettings.getInstance(project).USE_EXTERNAL_ANNOTATIONS = true;
BlockingMethodInNonBlockingContextInspection myInspection = new BlockingMethodInNonBlockingContextInspection();
myInspection.myBlockingAnnotations = DEFAULT_BLOCKING_ANNOTATIONS;
myInspection.myNonBlockingAnnotations = DEFAULT_NONBLOCKING_ANNOTATIONS;
myFixture.enableInspections(myInspection);
}
public void testSimpleAnnotationDetection() {
myFixture.configureByFiles("TestSimpleAnnotationsDetection.java", "Blocking.java", "NonBlocking.java");
myFixture.testHighlighting(true, false, true, "TestSimpleAnnotationsDetection.java");
}
public void testClassAnnotationDetection() {
myFixture.configureByFiles("TestClassAnnotationsDetection.java", "Blocking.java", "NonBlocking.java");
myFixture.testHighlighting(true, false, true, "TestClassAnnotationsDetection.java");
}
public void testExternalBlockingAnnotationDetection() {
myFixture.configureByFiles("TestExternalAnnotationsDetection.java", "Blocking.java", "NonBlocking.java", "annotations.xml");
myFixture.testHighlighting(true, false, true, "TestExternalAnnotationsDetection.java");
}
public void testThrowsTypeDetection() {
myFixture.configureByFiles("TestThrowsTypeDetection.java", "Blocking.java", "NonBlocking.java");
myFixture.testHighlighting(true, false, true, "TestThrowsTypeDetection.java");
}
public void testBlockingConstructor() {
myFixture.configureByFiles("TestBlockingConstructor.java", "Blocking.java", "NonBlocking.java");
myFixture.testHighlighting(true, false, true, "TestBlockingConstructor.java");
}
}