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