diff --git a/pom.xml b/pom.xml
index fa0c7e9..c6df47a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -136,6 +136,12 @@
test
+
+ org.reflections
+ reflections
+ 0.10.2
+ test
+
diff --git a/src/main/java/fr/greencodeinitiative/java/JavaCheckRegistrar.java b/src/main/java/fr/greencodeinitiative/java/JavaCheckRegistrar.java
index f4ef343..50ada18 100644
--- a/src/main/java/fr/greencodeinitiative/java/JavaCheckRegistrar.java
+++ b/src/main/java/fr/greencodeinitiative/java/JavaCheckRegistrar.java
@@ -47,7 +47,7 @@
*/
@SonarLintSide
public class JavaCheckRegistrar implements CheckRegistrar {
- private static final List> ANNOTATED_RULE_CLASSES = List.of(
+ static final List> ANNOTATED_RULE_CLASSES = List.of(
ArrayCopyCheck.class,
IncrementCheck.class,
AvoidUsageOfStaticCollections.class,
diff --git a/src/test/java/fr/greencodeinitiative/java/JavaCheckRegistrarTest.java b/src/test/java/fr/greencodeinitiative/java/JavaCheckRegistrarTest.java
index 02270ca..09655b6 100644
--- a/src/test/java/fr/greencodeinitiative/java/JavaCheckRegistrarTest.java
+++ b/src/test/java/fr/greencodeinitiative/java/JavaCheckRegistrarTest.java
@@ -17,7 +17,11 @@
*/
package fr.greencodeinitiative.java;
+import java.util.Set;
+
import org.junit.jupiter.api.Test;
+import org.reflections.Reflections;
+import org.sonar.check.Rule;
import org.sonar.plugins.java.api.CheckRegistrar;
import static org.assertj.core.api.Assertions.assertThat;
@@ -30,10 +34,14 @@ void checkNumberRules() {
final JavaCheckRegistrar registrar = new JavaCheckRegistrar();
registrar.register(context);
-
- assertThat(context.checkClasses()).hasSize(15);
+ assertThat(context.checkClasses())
+ .describedAs("All implemented rules must be registered into " + JavaCheckRegistrar.class)
+ .containsExactlyInAnyOrder(getDefinedRules().toArray(new Class[0]));
assertThat(context.testCheckClasses()).isEmpty();
-
}
+ static Set> getDefinedRules() {
+ Reflections r = new Reflections(JavaCheckRegistrar.class.getPackageName() + ".checks");
+ return r.getTypesAnnotatedWith(Rule.class);
+ }
}
diff --git a/src/test/java/fr/greencodeinitiative/java/JavaRulesDefinitionTest.java b/src/test/java/fr/greencodeinitiative/java/JavaRulesDefinitionTest.java
index ad1b536..ee6dff5 100644
--- a/src/test/java/fr/greencodeinitiative/java/JavaRulesDefinitionTest.java
+++ b/src/test/java/fr/greencodeinitiative/java/JavaRulesDefinitionTest.java
@@ -28,6 +28,7 @@
import org.sonar.api.server.rule.RulesDefinition.Rule;
import org.sonar.api.utils.Version;
+import static fr.greencodeinitiative.java.JavaCheckRegistrar.ANNOTATED_RULE_CLASSES;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -36,8 +37,6 @@ class JavaRulesDefinitionTest {
private RulesDefinition.Repository repository;
- private int rulesSize;
-
@BeforeEach
void init() {
final SonarRuntime sonarRuntime = mock(SonarRuntime.class);
@@ -46,7 +45,6 @@ void init() {
RulesDefinition.Context context = new RulesDefinition.Context();
rulesDefinition.define(context);
repository = context.repository(rulesDefinition.repositoryKey());
- rulesSize = 15;
}
@Test
@@ -55,12 +53,11 @@ void testMetadata() {
assertThat(repository.name()).isEqualTo("ecoCode");
assertThat(repository.language()).isEqualTo("java");
assertThat(repository.key()).isEqualTo("ecocode-java");
- assertThat(repository.rules()).hasSize(rulesSize);
}
@Test
void testRegistredRules() {
- assertThat(repository.rules()).hasSize(rulesSize);
+ assertThat(repository.rules()).hasSize(ANNOTATED_RULE_CLASSES.size());
}
@Test