Skip to content

Commit 610dd3f

Browse files
SONARJAVA-5873 Fix the assertion counts in S5961 (#5409)
1 parent ae54d53 commit 610dd3f

2 files changed

Lines changed: 39 additions & 8 deletions

File tree

java-checks-test-sources/default/src/test/java/checks/tests/TooManyAssertionsCheckCustom2.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package checks.tests;
22

3+
import org.assertj.core.api.Assertions;
34
import org.junit.jupiter.api.Test;
45
import rx.Observable;
56

7+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
68
import static org.junit.Assert.assertEquals;
79

810
public class TooManyAssertionsCheckCustom2 {
@@ -37,6 +39,35 @@ void test3() { // Noncompliant {{Refactor this method to reduce the number of as
3739
// ^^^^^^^^^^^^^^<
3840
}
3941

42+
@Test
43+
void test4() { // Compliant, chained assertions only count as a single instance
44+
var trueCondition = true;
45+
var falseCondition = false;
46+
47+
assertThat(trueCondition).isTrue().as("true").isTrue().describedAs("isTrue").isTrue();
48+
assertThat(falseCondition).isFalse().as("false").isFalse().describedAs("isFalse").isFalse();
49+
}
50+
51+
@Test
52+
void test5() { // Compliant, chained assertions only count as a single instance
53+
var myObject = new Object();
54+
55+
Assertions.assertThat(myObject).as("someObject").isNotNull().withFailMessage("fail").isNotNull().overridingErrorMessage("error").isInstanceOf(Object.class);
56+
}
57+
58+
@Test
59+
void test6() { // Noncompliant {{Refactor this method to reduce the number of assertions from 3 to less than 2.}}
60+
// ^^^^^
61+
var myObject = new Object();
62+
63+
assertThat(myObject).as("description").isNotNull().describedAs("description").isNotNull();
64+
// ^^^^^^^^^^^^^^^^^^^^<
65+
assertThat(myObject).describedAs("description").isNotNull();
66+
// ^^^^^^^^^^^^^^^^^^^^<
67+
assertThat(myObject).withFailMessage("failure").describedAs("someObject").isNotNull();
68+
// ^^^^^^^^^^^^^^^^^^^^<
69+
}
70+
4071
void customAssert() {
4172
assertEquals(2, f(2));
4273
assertEquals(3, f(1));

java-checks/src/main/java/org/sonar/java/checks/tests/TooManyAssertionsCheck.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,15 @@ private class AssertionsCounterVisitor extends BaseTreeVisitor {
111111
@Override
112112
public void visitMethodInvocation(MethodInvocationTree mit) {
113113
super.visitMethodInvocation(mit);
114-
if (isAssertion(methodName(mit), mit.methodSymbol())) {
115-
ExpressionTree methodSelect = mit.methodSelect();
116-
if (methodSelect.is(Tree.Kind.MEMBER_SELECT)) {
117-
ExpressionTree expression = ((MemberSelectExpressionTree) methodSelect).expression();
118-
if (assertions.contains(expression) || chainedAssertions.contains(expression)) {
119-
chainedAssertions.add(mit);
120-
return;
121-
}
114+
ExpressionTree methodSelect = mit.methodSelect();
115+
if (methodSelect.is(Tree.Kind.MEMBER_SELECT)) {
116+
ExpressionTree expression = ((MemberSelectExpressionTree) methodSelect).expression();
117+
if (assertions.contains(expression) || chainedAssertions.contains(expression)) {
118+
chainedAssertions.add(mit);
119+
return;
122120
}
121+
}
122+
if (isAssertion(methodName(mit), mit.methodSymbol())) {
123123
assertions.add(mit);
124124
}
125125
}

0 commit comments

Comments
 (0)