diff --git a/its/autoscan/src/test/resources/autoscan/diffs/diff_S2699.json b/its/autoscan/src/test/resources/autoscan/diffs/diff_S2699.json index ce6b9db1c45..998602e4cec 100644 --- a/its/autoscan/src/test/resources/autoscan/diffs/diff_S2699.json +++ b/its/autoscan/src/test/resources/autoscan/diffs/diff_S2699.json @@ -1,6 +1,6 @@ { "ruleKey": "S2699", "hasTruePositives": true, - "falseNegatives": 157, + "falseNegatives": 158, "falsePositives": 1 } diff --git a/java-checks-test-sources/default/pom.xml b/java-checks-test-sources/default/pom.xml index dded3d0343a..8da45f87738 100644 --- a/java-checks-test-sources/default/pom.xml +++ b/java-checks-test-sources/default/pom.xml @@ -1016,6 +1016,12 @@ junit-platform-suite provided + + org.approvej + core + 1.6.0 + test + diff --git a/java-checks-test-sources/default/src/test/java/checks/tests/AssertionsInTestsCheck/ApproveJ.java b/java-checks-test-sources/default/src/test/java/checks/tests/AssertionsInTestsCheck/ApproveJ.java new file mode 100644 index 00000000000..e7e0987e600 --- /dev/null +++ b/java-checks-test-sources/default/src/test/java/checks/tests/AssertionsInTestsCheck/ApproveJ.java @@ -0,0 +1,32 @@ +package checks.tests.AssertionsInTestsCheck; + +import java.time.LocalDate; +import org.junit.jupiter.api.Test; + +import static org.approvej.ApprovalBuilder.approve; +import static org.approvej.print.MultiLineStringPrintFormat.multiLineString; + +class ApproveJTest { + + @Test + void contains_no_assertions() { // Noncompliant + } + + public String hello() {return "hello";} + + @Test + void approve_string() { + String result = hello(); + approve(result) + .byFile(); + } + + public record Person(String name, LocalDate birthDate) {} + + @Test + void approve_person() { + Person jane = new Person("Jane Doe", LocalDate.of(1990, 1, 1)); + approve(jane).named("jane").printedAs(multiLineString()).byFile(); + } + +} diff --git a/java-checks/src/main/java/org/sonar/java/checks/helpers/UnitTestUtils.java b/java-checks/src/main/java/org/sonar/java/checks/helpers/UnitTestUtils.java index c3df052ded2..cc1444a8e2c 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/helpers/UnitTestUtils.java +++ b/java-checks/src/main/java/org/sonar/java/checks/helpers/UnitTestUtils.java @@ -41,7 +41,7 @@ public final class UnitTestUtils { private static final String ORG_JUNIT_TEST = "org.junit.Test"; public static final Pattern ASSERTION_METHODS_PATTERN = Pattern.compile( - "(assert|verify|fail|should|check|expect|validate|andExpect).*" + + "(assert|verify|fail|should|check|expect|validate|andExpect|approve).*" + // Eclipse Vert.x with JUnit 5 (VertxTestContext) "|laxCheckpoint|succeedingThenComplete"); private static final Pattern TEST_METHODS_PATTERN = Pattern.compile("test.*|.*Test"); diff --git a/java-checks/src/test/java/org/sonar/java/checks/tests/AssertionsInTestsCheckTest.java b/java-checks/src/test/java/org/sonar/java/checks/tests/AssertionsInTestsCheckTest.java index 590363b3eda..e54a82a2b61 100644 --- a/java-checks/src/test/java/org/sonar/java/checks/tests/AssertionsInTestsCheckTest.java +++ b/java-checks/src/test/java/org/sonar/java/checks/tests/AssertionsInTestsCheckTest.java @@ -64,6 +64,7 @@ void setup() { "JMockit", "Awaitility", "AssertJ", + "ApproveJ", "Custom" }) void test(String framework) { diff --git a/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S2699.html b/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S2699.html index 19832c2b2aa..b567b1b2a32 100644 --- a/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S2699.html +++ b/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S2699.html @@ -3,6 +3,7 @@

Why is this an issue?

code under test.

This rule raises an exception when no assertions from any of the following known frameworks are found in a test: