From 38d3f4f67fff538c8f08899faa3b71bfe519255a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fournier?= Date: Thu, 23 Mar 2017 18:34:39 +0100 Subject: [PATCH] Cleaned up one method --- .../JUnitTestsShouldIncludeAssertRule.java | 192 +++++++++--------- 1 file changed, 94 insertions(+), 98 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/junit/JUnitTestsShouldIncludeAssertRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/junit/JUnitTestsShouldIncludeAssertRule.java index c3ce9b7280..f0e7d35442 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/junit/JUnitTestsShouldIncludeAssertRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/junit/JUnitTestsShouldIncludeAssertRule.java @@ -1,98 +1,94 @@ -/** - * 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.ast.Node; -import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration; -import net.sourceforge.pmd.lang.java.ast.ASTMemberValuePair; -import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; -import net.sourceforge.pmd.lang.java.ast.ASTName; -import net.sourceforge.pmd.lang.java.ast.ASTNormalAnnotation; -import net.sourceforge.pmd.lang.java.ast.ASTPrimaryExpression; -import net.sourceforge.pmd.lang.java.ast.ASTPrimaryPrefix; -import net.sourceforge.pmd.lang.java.ast.ASTStatementExpression; - -public class JUnitTestsShouldIncludeAssertRule extends AbstractJUnitRule { - - @Override - public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { - if (node.isInterface()) { - return data; - } - return super.visit(node, data); - } - - @Override - public Object visit(ASTMethodDeclaration method, Object data) { - if (isJUnitMethod(method, data)) { - if (!containsAssert(method.getBlock(), false) && !containsExpect(method.jjtGetParent())) { - addViolation(data, method); - } - } - return data; - } - - private boolean containsAssert(Node n, boolean assertFound) { - if (!assertFound) { - if (n instanceof ASTStatementExpression) { - if (isAssertOrFailStatement((ASTStatementExpression) n)) { - return true; - } - } - if (!assertFound) { - for (int i = 0; i < n.jjtGetNumChildren() && !assertFound; i++) { - Node c = n.jjtGetChild(i); - if (containsAssert(c, assertFound)) { - return true; - } - } - } - } - return false; - } - - /** - * Tells if the node contains a Test annotation with an expected exception. - */ - private boolean containsExpect(Node methodParent) { - List annotations = methodParent.findDescendantsOfType(ASTNormalAnnotation.class); - for (ASTNormalAnnotation annotation : annotations) { - ASTName name = annotation.getFirstChildOfType(ASTName.class); - if (name != null - && ("Test".equals(name.getImage()) || name.getType() != null && name.getType().equals(JUNIT4_CLASS))) { - List memberValues = annotation.findDescendantsOfType(ASTMemberValuePair.class); - for (ASTMemberValuePair pair : memberValues) { - if ("expected".equals(pair.getImage())) { - return true; - } - } - } - } - return false; - } - - /** - * Tells if the expression is an assert statement or not. - */ - private boolean isAssertOrFailStatement(ASTStatementExpression expression) { - if (expression != null && expression.jjtGetNumChildren() > 0 - && expression.jjtGetChild(0) instanceof ASTPrimaryExpression) { - ASTPrimaryExpression pe = (ASTPrimaryExpression) expression.jjtGetChild(0); - if (pe.jjtGetNumChildren() > 0 && pe.jjtGetChild(0) instanceof ASTPrimaryPrefix) { - ASTPrimaryPrefix pp = (ASTPrimaryPrefix) pe.jjtGetChild(0); - if (pp.jjtGetNumChildren() > 0 && pp.jjtGetChild(0) instanceof ASTName) { - String img = ((ASTName) pp.jjtGetChild(0)).getImage(); - if (img != null - && (img.startsWith("assert") || img.startsWith("fail") || img.startsWith("Assert.assert") || img - .startsWith("Assert.fail"))) { - return true; - } - } - } - } - return false; - } -} +/** + * 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.ast.Node; +import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration; +import net.sourceforge.pmd.lang.java.ast.ASTMemberValuePair; +import net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration; +import net.sourceforge.pmd.lang.java.ast.ASTName; +import net.sourceforge.pmd.lang.java.ast.ASTNormalAnnotation; +import net.sourceforge.pmd.lang.java.ast.ASTPrimaryExpression; +import net.sourceforge.pmd.lang.java.ast.ASTStatementExpression; + +public class JUnitTestsShouldIncludeAssertRule extends AbstractJUnitRule { + + @Override + public Object visit(ASTClassOrInterfaceDeclaration node, Object data) { + if (node.isInterface()) { + return data; + } + return super.visit(node, data); + } + + @Override + public Object visit(ASTMethodDeclaration method, Object data) { + if (isJUnitMethod(method, data)) { + if (!containsAssert(method.getBlock(), false) && !containsExpect(method.jjtGetParent())) { + addViolation(data, method); + } + } + return data; + } + + private boolean containsAssert(Node n, boolean assertFound) { + if (!assertFound) { + if (n instanceof ASTStatementExpression) { + if (isAssertOrFailStatement((ASTStatementExpression) n)) { + return true; + } + } + if (!assertFound) { + for (int i = 0; i < n.jjtGetNumChildren() && !assertFound; i++) { + Node c = n.jjtGetChild(i); + if (containsAssert(c, assertFound)) { + return true; + } + } + } + } + return false; + } + + /** + * Tells if the node contains a Test annotation with an expected exception. + */ + private boolean containsExpect(Node methodParent) { + List annotations = methodParent.findDescendantsOfType(ASTNormalAnnotation.class); + for (ASTNormalAnnotation annotation : annotations) { + ASTName name = annotation.getFirstChildOfType(ASTName.class); + if (name != null && ("Test".equals(name.getImage()) + || name.getType() != null && name.getType().equals(JUNIT4_CLASS))) { + List memberValues = annotation.findDescendantsOfType(ASTMemberValuePair.class); + for (ASTMemberValuePair pair : memberValues) { + if ("expected".equals(pair.getImage())) { + return true; + } + } + } + } + return false; + } + + /** + * Tells if the expression is an assert statement or not. + */ + private boolean isAssertOrFailStatement(ASTStatementExpression expression) { + if (expression != null) { + ASTPrimaryExpression pe = expression.getFirstChildOfType(ASTPrimaryExpression.class); + if (pe != null) { + String img = pe.jjtGetChild(0).jjtGetChild(0).getImage(); + if (img != null && (img.startsWith("assert") || img.startsWith("fail") + || img.startsWith("Assert.assert") || img.startsWith("Assert.fail"))) { + return true; + } + } + } + return false; + } +} +