/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.java.rule.junit;
import java.util.List;
import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration;
public class TestClassWithoutTestCasesRule extends AbstractJUnitRule {
@Override
public Object visit(ASTClassOrInterfaceDeclaration node, Object data) {
if (node.isAbstract() || node.isInterface() || node.isNested()) {
return data;
}
List<ASTMethodDeclaration> m = node.findDescendantsOfType(ASTMethodDeclaration.class);
boolean testsFound = false;
if (m != null) {
for (ASTMethodDeclaration md : m) {
if (!isInInnerClassOrInterface(md) && isJUnitMethod(md, data)) {
testsFound = true;
}
}
}
if (!testsFound) {
addViolation(data, node);
}
return data;
}
private boolean isInInnerClassOrInterface(ASTMethodDeclaration md) {
ASTClassOrInterfaceDeclaration p = md.getFirstParentOfType(ASTClassOrInterfaceDeclaration.class);
return p != null && p.isNested();
}
}