junit convention inspections should work in Groovy

This commit is contained in:
peter
2011-12-23 12:32:37 +01:00
parent 3a1337ba62
commit 74ccb5094e
9 changed files with 47 additions and 12 deletions
@@ -234,7 +234,7 @@ public class ExpectedHighlightingData {
final Set<String> markers = highlightingTypes.keySet();
final String typesRx = "(?:" + StringUtil.join(markers, ")|(?:") + ")";
final String openingTagRx = "<(" + typesRx + ")" +
"(?:\\s+descr=\"((?:[^\"\\\\]|\\\\\"|\\\\\\\\\"|\\\\\\[|\\\\\\])*)\")?" +
"(?:\\s+descr=\"((?:[^\"]|\\\\\"|\\\\\\\\\"|\\\\\\[|\\\\\\])*)\")?" +
"(?:\\s+type=\"([0-9A-Z_]+)\")?" +
"(?:\\s+foreground=\"([0-9xa-f]+)\")?" +
"(?:\\s+background=\"([0-9xa-f]+)\")?" +
@@ -1292,11 +1292,11 @@
key="junit4.test.method.in.class.extending.junit3.testcase.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.junit.issues" enabledByDefault="true" level="WARNING"
implementationClass="com.siyeh.ig.junit.JUnit4AnnotatedMethodInJUnit3TestCaseInspection"/>
<localInspection language="JAVA" shortName="JUnitAbstractTestClassNamingConvention" bundle="com.siyeh.InspectionGadgetsBundle"
<localInspection shortName="JUnitAbstractTestClassNamingConvention" bundle="com.siyeh.InspectionGadgetsBundle"
key="junit.abstract.test.class.naming.convention.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.junit.JUnitAbstractTestClassNamingConventionInspection"/>
<localInspection language="JAVA" shortName="JUnitTestClassNamingConvention" bundle="com.siyeh.InspectionGadgetsBundle"
<localInspection shortName="JUnitTestClassNamingConvention" bundle="com.siyeh.InspectionGadgetsBundle"
key="junit.test.class.naming.convention.display.name" groupBundle="messages.InspectionsBundle"
groupKey="group.names.junit.issues" enabledByDefault="false" level="WARNING"
implementationClass="com.siyeh.ig.junit.JUnitTestClassNamingConventionInspection"/>
@@ -78,7 +78,7 @@ public abstract class BaseInspectionVisitor extends JavaElementVisitor {
protected final void registerClassError(@NotNull PsiClass aClass,
Object... infos) {
final PsiElement nameIdentifier;
PsiElement nameIdentifier;
if (aClass instanceof PsiEnumConstantInitializer) {
final PsiEnumConstantInitializer enumConstantInitializer =
(PsiEnumConstantInitializer)aClass;
@@ -93,7 +93,10 @@ public abstract class BaseInspectionVisitor extends JavaElementVisitor {
else {
nameIdentifier = aClass.getNameIdentifier();
}
if (nameIdentifier == null) {
if (nameIdentifier != null && !nameIdentifier.isPhysical()) {
nameIdentifier = nameIdentifier.getNavigationElement();
}
if (nameIdentifier == null || !nameIdentifier.isPhysical()) {
registerError(aClass.getContainingFile(), infos);
}
else {
@@ -16,6 +16,7 @@
package com.siyeh.ig.junit;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiTypeParameter;
import com.intellij.psi.util.InheritanceUtil;
@@ -89,7 +90,13 @@ public class JUnitAbstractTestClassNamingConventionInspection
private class NamingConventionsVisitor extends BaseInspectionVisitor {
@Override
public void visitClass(@NotNull PsiClass aClass) {
public void visitElement(PsiElement element) {
if (!(element instanceof PsiClass)) {
super.visitElement(element);
return;
}
PsiClass aClass = (PsiClass)element;
if (aClass.isInterface() || aClass.isEnum() ||
aClass.isAnnotationType()) {
return;
@@ -15,10 +15,7 @@
*/
package com.siyeh.ig.junit;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiTypeParameter;
import com.intellij.psi.*;
import com.intellij.psi.util.InheritanceUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspectionVisitor;
@@ -89,9 +86,14 @@ public class JUnitTestClassNamingConventionInspection
}
private class NamingConventionsVisitor extends BaseInspectionVisitor {
@Override
public void visitClass(@NotNull PsiClass aClass) {
public void visitElement(PsiElement element) {
if (!(element instanceof PsiClass)) {
super.visitElement(element);
return;
}
PsiClass aClass = (PsiClass)element;
if (aClass.isInterface() || aClass.isEnum() ||
aClass.isAnnotationType()) {
return;
+1
View File
@@ -31,6 +31,7 @@
<orderEntry type="module" module-name="IntelliLang-xml" scope="TEST" />
<orderEntry type="module" module-name="jps-builders" />
<orderEntry type="module" module-name="spellchecker" />
<orderEntry type="module" module-name="InspectionGadgetsPlugin" scope="TEST" />
</component>
</module>
@@ -20,6 +20,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.light.LightIdentifier;
import org.jetbrains.annotations.NotNull;
/**
* @author ven
@@ -32,6 +33,12 @@ public class JavaIdentifier extends LightIdentifier {
myElement = element;
}
@NotNull
@Override
public PsiElement getNavigationElement() {
return myElement;
}
@Override
public boolean isValid() {
return myElement.isValid();
@@ -28,6 +28,8 @@ import com.intellij.testFramework.IdeaTestUtil
import com.intellij.testFramework.LightProjectDescriptor
import com.intellij.testFramework.fixtures.DefaultLightProjectDescriptor
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
import com.siyeh.ig.junit.JUnitAbstractTestClassNamingConventionInspection
import com.siyeh.ig.junit.JUnitTestClassNamingConventionInspection
import org.jetbrains.annotations.NotNull
import org.jetbrains.plugins.groovy.codeInspection.assignment.GroovyAssignabilityCheckInspection
import org.jetbrains.plugins.groovy.codeInspection.assignment.GroovyResultOfAssignmentUsedInspection
@@ -557,4 +559,9 @@ class A {
myFixture.enableInspections(GroovyAssignabilityCheckInspection)
myFixture.checkHighlighting(true, false, false);
}
public void testJUnitConvention() {
myFixture.addClass("package junit.framework; public class TestCase {}")
doTest(new JUnitTestClassNamingConventionInspection(), new JUnitAbstractTestClassNamingConventionInspection())
}
}
@@ -0,0 +1,8 @@
import junit.framework.TestCase
class SpecialGoodTest extends TestCase {
class <warning descr="JUnit test class name 'MyVeryInner' doesn't match regex '[A-Z][A-Za-z\d]*Test'">MyVeryInner</warning> extends SpecialGoodTest {}
}
class <warning descr="JUnit test class name 'SpecialBad' doesn't match regex '[A-Z][A-Za-z\d]*Test'">SpecialBad</warning> extends TestCase { }
abstract class <warning descr="Abstract JUnit test class name 'SpecialAbstract' doesn't match regex '[A-Z][A-Za-z\d]*TestCase'">SpecialAbstract</warning> extends TestCase { }
abstract class SpecialAbstractTestCase extends TestCase { }