replaced <code></code> with more concise {@code}
[idea/community.git] / python / testSrc / com / jetbrains / python / fixtures / PyInspectionTestCase.java
1 package com.jetbrains.python.fixtures;
2
3 import com.intellij.codeInspection.ex.InspectionProfileImpl;
4 import com.jetbrains.python.inspections.PyInspection;
5 import org.jetbrains.annotations.NotNull;
6
7 /**
8  * Helps you to create inspection tests.
9  * <br/>
10  * For each case
11  * <ol>
12  * <li>Create file {@code testData/inspections/_YOUR_INSPECTION_CLASS_SIMPLE_NAME_/CASE_NAME_CAMEL_CASE.py}</li>
13  * <li>Create method {@code test_YOUR_CASE_NAME_PASCAL_CASE} that runs {@link #doTest()}</li>
14  * <li>Overwrite {@link #isInfo()}, {@link #isWarning()} or {@link #isWeakWarning()} to configure what to check</li>
15  * </ol>
16  *
17  * @author link
18  */
19 public abstract class PyInspectionTestCase extends PyTestCase {
20
21   @NotNull
22   protected abstract Class<? extends PyInspection> getInspectionClass();
23
24   @Override
25   protected void setUp() throws Exception {
26     super.setUp();
27     InspectionProfileImpl.INIT_INSPECTIONS = true;
28   }
29
30   @Override
31   protected void tearDown() throws Exception {
32     InspectionProfileImpl.INIT_INSPECTIONS = false;
33     super.tearDown();
34   }
35
36   /**
37    * Launches test. To be called by test author
38    */
39   protected void doTest() {
40     myFixture.configureByFile(getTestDirectory(true) + ".py");
41     configureInspection();
42   }
43
44   protected void doMultiFileTest() {
45     doMultiFileTest("a.py");
46   }
47   protected void doMultiFileTest(@NotNull String filename) {
48     myFixture.copyDirectoryToProject(getTestDirectory(false), "");
49     myFixture.configureFromTempProjectFile(filename);
50     configureInspection();
51   }
52
53   private void configureInspection() {
54     myFixture.enableInspections(getInspectionClass());
55     myFixture.checkHighlighting(isWarning(), isInfo(), isWeakWarning());
56   }
57
58   protected String getTestDirectory(boolean lowercaseFirstLetter) {
59     return "inspections/" + getInspectionClass().getSimpleName() + "/" + getTestName(lowercaseFirstLetter);
60   }
61
62
63   protected boolean isWeakWarning() {
64     return true;
65   }
66
67   protected boolean isInfo() {
68     return false;
69   }
70
71   protected boolean isWarning() {
72     return true;
73   }
74 }