1 4 package net.sourceforge.pmd.rules.junit; 5 6 import net.sourceforge.pmd.AbstractRule; 7 import net.sourceforge.pmd.ast.ASTArguments; 8 import net.sourceforge.pmd.ast.ASTName; 9 import net.sourceforge.pmd.ast.ASTPrimaryExpression; 10 import net.sourceforge.pmd.ast.ASTPrimaryPrefix; 11 12 import java.util.ArrayList ; 13 import java.util.Iterator ; 14 import java.util.List ; 15 16 public class JUnitAssertionsShouldIncludeMessage extends AbstractRule { 17 18 private static class AssertionCall { 19 public int args; 20 public String name; 21 22 public AssertionCall(int args, String name) { 23 this.args = args; 24 this.name = name; 25 } 26 } 27 28 private List checks = new ArrayList (); 29 30 public JUnitAssertionsShouldIncludeMessage() { 31 checks.add(new AssertionCall(2, "assertEquals")); 32 checks.add(new AssertionCall(1, "assertTrue")); 33 checks.add(new AssertionCall(1, "assertNull")); 34 checks.add(new AssertionCall(2, "assertSame")); 35 checks.add(new AssertionCall(1, "assertNotNull")); 36 checks.add(new AssertionCall(1, "assertFalse")); 37 } 38 39 public Object visit(ASTArguments node, Object data) { 40 for (Iterator i = checks.iterator(); i.hasNext();) { 41 AssertionCall call = (AssertionCall) i.next(); 42 check(data, node, call.args, call.name); 43 } 44 return super.visit(node, data); 45 } 46 47 private void check(Object ctx, ASTArguments node, int args, String targetMethodName) { 48 if (node.getArgumentCount() == args && node.jjtGetParent().jjtGetParent() instanceof ASTPrimaryExpression) { 49 ASTPrimaryExpression primary = (ASTPrimaryExpression) node.jjtGetParent().jjtGetParent(); 50 if (primary.jjtGetChild(0) instanceof ASTPrimaryPrefix && primary.jjtGetChild(0).jjtGetNumChildren() > 0 && primary.jjtGetChild(0).jjtGetChild(0) instanceof ASTName) { 51 ASTName name = (ASTName) primary.jjtGetChild(0).jjtGetChild(0); 52 if (name.hasImageEqualTo(targetMethodName)) { 53 addViolation(ctx, name); 54 } 55 } 56 } 57 } 58 } 59 | Popular Tags |