[java] Refactor JUnit specific rules that use ancestor axis

This commit is contained in:
Andreas Dangel
2020-03-29 19:43:19 +02:00
parent 3e932de647
commit 4c712d467d
3 changed files with 48 additions and 55 deletions

View File

@ -1436,13 +1436,7 @@ This rule detects JUnit assertions in object equality. These assertions should b
<property name="xpath">
<value>
<![CDATA[
//PrimaryExpression[
PrimaryPrefix/Name[@Image = 'assertTrue']
][
PrimarySuffix/Arguments/ArgumentList/Expression/PrimaryExpression/PrimaryPrefix/Name
[ends-with(@Image, '.equals')]
]
[ancestor::ClassOrInterfaceDeclaration[
//ClassOrInterfaceDeclaration[
pmd-java:typeIs('junit.framework.TestCase')
or .//MarkerAnnotation/Name[
pmd-java:typeIs('org.junit.Test')
@ -1453,6 +1447,11 @@ This rule detects JUnit assertions in object equality. These assertions should b
or pmd-java:typeIs('org.junit.jupiter.params.ParameterizedTest')
]
]
//PrimaryExpression[
PrimaryPrefix/Name[@Image = 'assertTrue']
][
PrimarySuffix/Arguments/ArgumentList/Expression/PrimaryExpression/PrimaryPrefix/Name
[ends-with(@Image, '.equals')]
]
]]>
</value>
@ -1488,14 +1487,7 @@ more specific methods, like assertNull, assertNotNull.
<property name="xpath">
<value>
<![CDATA[
//PrimaryExpression[
PrimaryPrefix/Name[@Image = 'assertTrue' or @Image = 'assertFalse']
][
PrimarySuffix/Arguments/ArgumentList[
Expression/EqualityExpression/PrimaryExpression/PrimaryPrefix/Literal/NullLiteral
]
]
[ancestor::ClassOrInterfaceDeclaration[
//ClassOrInterfaceDeclaration[
pmd-java:typeIs('junit.framework.TestCase')
or .//MarkerAnnotation/Name[
pmd-java:typeIs('org.junit.Test')
@ -1506,6 +1498,12 @@ more specific methods, like assertNull, assertNotNull.
or pmd-java:typeIs('org.junit.jupiter.params.ParameterizedTest')
]
]
//PrimaryExpression[
PrimaryPrefix/Name[@Image = 'assertTrue' or @Image = 'assertFalse']
][
PrimarySuffix/Arguments/ArgumentList[
Expression/EqualityExpression/PrimaryExpression/PrimaryPrefix/Literal/NullLiteral
]
]
]]>
</value>
@ -1543,14 +1541,7 @@ by more specific methods, like assertSame, assertNotSame.
<property name="xpath">
<value>
<![CDATA[
//PrimaryExpression[
PrimaryPrefix/Name[@Image = 'assertTrue' or @Image = 'assertFalse']
]
[
PrimarySuffix/Arguments/ArgumentList/Expression/EqualityExpression
[count(.//NullLiteral) = 0]
]
[ancestor::ClassOrInterfaceDeclaration[
//ClassOrInterfaceDeclaration[
pmd-java:typeIs('junit.framework.TestCase')
or .//MarkerAnnotation/Name[
pmd-java:typeIs('org.junit.Test')
@ -1561,6 +1552,12 @@ by more specific methods, like assertSame, assertNotSame.
or pmd-java:typeIs('org.junit.jupiter.params.ParameterizedTest')
]
]
//PrimaryExpression[
PrimaryPrefix/Name[@Image = 'assertTrue' or @Image = 'assertFalse']
]
[
PrimarySuffix/Arguments/ArgumentList/Expression/EqualityExpression
[count(.//NullLiteral) = 0]
]
]]>
</value>

View File

@ -1265,14 +1265,7 @@ as:
<property name="xpath">
<value>
<![CDATA[
//StatementExpression
[
.//Name[@Image='assertTrue' or @Image='assertFalse']
and
PrimaryExpression/PrimarySuffix/Arguments/ArgumentList/Expression/UnaryExpressionNotPlusMinus[@Image='!']
/PrimaryExpression/PrimaryPrefix
]
[ancestor::ClassOrInterfaceDeclaration[
//ClassOrInterfaceDeclaration[
pmd-java:typeIs('junit.framework.TestCase')
or .//MarkerAnnotation/Name[
pmd-java:typeIs('org.junit.Test')
@ -1283,6 +1276,12 @@ as:
or pmd-java:typeIs('org.junit.jupiter.params.ParameterizedTest')
]
]
//StatementExpression
[
.//Name[@Image='assertTrue' or @Image='assertFalse']
and
PrimaryExpression/PrimarySuffix/Arguments/ArgumentList/Expression/UnaryExpressionNotPlusMinus[@Image='!']
/PrimaryExpression/PrimaryPrefix
]
]]>
</value>

View File

@ -2196,12 +2196,7 @@ Some JUnit framework methods are easy to misspell.
<property name="xpath">
<value>
<![CDATA[
//MethodDeclaration[(not(@Name = 'setUp')
and translate(@Name, 'SETuP', 'setUp') = 'setUp')
or (not(@Name = 'tearDown')
and translate(@Name, 'TEARdOWN', 'tearDown') = 'tearDown')]
[@Arity = 0]
[ancestor::ClassOrInterfaceDeclaration[
//ClassOrInterfaceDeclaration[
pmd-java:typeIs('junit.framework.TestCase')
or .//MarkerAnnotation/Name[
pmd-java:typeIs('org.junit.Test')
@ -2212,7 +2207,11 @@ Some JUnit framework methods are easy to misspell.
or pmd-java:typeIs('org.junit.jupiter.params.ParameterizedTest')
]
]
]
//MethodDeclaration[(not(@Name = 'setUp')
and translate(@Name, 'SETuP', 'setUp') = 'setUp')
or (not(@Name = 'tearDown')
and translate(@Name, 'TEARdOWN', 'tearDown') = 'tearDown')]
[@Arity = 0]
]]>
</value>
</property>
@ -2245,10 +2244,7 @@ The suite() method in a JUnit test needs to be both public and static.
<property name="xpath">
<value>
<![CDATA[
//MethodDeclaration[not(@Static= true()) or not(@Public= true())]
[@Name='suite']
[@Arity = 0]
[ancestor::ClassOrInterfaceDeclaration[
//ClassOrInterfaceDeclaration[
pmd-java:typeIs('junit.framework.TestCase')
or .//MarkerAnnotation/Name[
pmd-java:typeIs('org.junit.Test')
@ -2259,7 +2255,9 @@ The suite() method in a JUnit test needs to be both public and static.
or pmd-java:typeIs('org.junit.jupiter.params.ParameterizedTest')
]
]
]
//MethodDeclaration[not(@Static= true()) or not(@Public= true())]
[@Name='suite']
[@Arity = 0]
]]>
</value>
</property>
@ -3279,18 +3277,7 @@ an error, use the fail() method and provide an indication message of why it did.
<property name="xpath">
<value>
<![CDATA[
//StatementExpression
[
PrimaryExpression/PrimaryPrefix/Name[@Image='assertTrue' or @Image='assertFalse']
and
PrimaryExpression/PrimarySuffix/Arguments/ArgumentList/Expression[
PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral
or
UnaryExpressionNotPlusMinus[@Image='!']
/PrimaryExpression/PrimaryPrefix[Literal/BooleanLiteral or Name[count(../../*)=1]]
]
]
[ancestor::ClassOrInterfaceDeclaration[
//ClassOrInterfaceDeclaration[
pmd-java:typeIs('junit.framework.TestCase')
or .//MarkerAnnotation/Name[
pmd-java:typeIs('org.junit.Test')
@ -3301,6 +3288,16 @@ an error, use the fail() method and provide an indication message of why it did.
or pmd-java:typeIs('org.junit.jupiter.params.ParameterizedTest')
]
]
//StatementExpression
[
PrimaryExpression/PrimaryPrefix/Name[@Image='assertTrue' or @Image='assertFalse']
and
PrimaryExpression/PrimarySuffix/Arguments/ArgumentList/Expression[
PrimaryExpression/PrimaryPrefix/Literal/BooleanLiteral
or
UnaryExpressionNotPlusMinus[@Image='!']
/PrimaryExpression/PrimaryPrefix[Literal/BooleanLiteral or Name[count(../../*)=1]]
]
]
]]>
</value>