Skip to content

Commit 0c06478

Browse files
authored
Merge pull request #49 from green-code-initiative/feature/add-rule-declaration-test
Add test to ensure all Rules are registered
2 parents 4b849b5 + 7bad352 commit 0c06478

File tree

4 files changed

+20
-9
lines changed

4 files changed

+20
-9
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,12 @@
136136
<scope>test</scope>
137137
</dependency>
138138

139+
<dependency>
140+
<groupId>org.reflections</groupId>
141+
<artifactId>reflections</artifactId>
142+
<version>0.10.2</version>
143+
<scope>test</scope>
144+
</dependency>
139145
</dependencies>
140146

141147
<build>

src/main/java/fr/greencodeinitiative/java/JavaCheckRegistrar.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
*/
4848
@SonarLintSide
4949
public class JavaCheckRegistrar implements CheckRegistrar {
50-
private static final List<Class<? extends JavaCheck>> ANNOTATED_RULE_CLASSES = List.of(
50+
static final List<Class<? extends JavaCheck>> ANNOTATED_RULE_CLASSES = List.of(
5151
ArrayCopyCheck.class,
5252
IncrementCheck.class,
5353
AvoidUsageOfStaticCollections.class,

src/test/java/fr/greencodeinitiative/java/JavaCheckRegistrarTest.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@
1717
*/
1818
package fr.greencodeinitiative.java;
1919

20+
import java.util.Set;
21+
2022
import org.junit.jupiter.api.Test;
23+
import org.reflections.Reflections;
24+
import org.sonar.check.Rule;
2125
import org.sonar.plugins.java.api.CheckRegistrar;
2226

2327
import static org.assertj.core.api.Assertions.assertThat;
@@ -30,10 +34,14 @@ void checkNumberRules() {
3034

3135
final JavaCheckRegistrar registrar = new JavaCheckRegistrar();
3236
registrar.register(context);
33-
34-
assertThat(context.checkClasses()).hasSize(15);
37+
assertThat(context.checkClasses())
38+
.describedAs("All implemented rules must be registered into " + JavaCheckRegistrar.class)
39+
.containsExactlyInAnyOrder(getDefinedRules().toArray(new Class[0]));
3540
assertThat(context.testCheckClasses()).isEmpty();
36-
3741
}
3842

43+
static Set<Class<?>> getDefinedRules() {
44+
Reflections r = new Reflections(JavaCheckRegistrar.class.getPackageName() + ".checks");
45+
return r.getTypesAnnotatedWith(Rule.class);
46+
}
3947
}

src/test/java/fr/greencodeinitiative/java/JavaRulesDefinitionTest.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.sonar.api.server.rule.RulesDefinition.Rule;
2929
import org.sonar.api.utils.Version;
3030

31+
import static fr.greencodeinitiative.java.JavaCheckRegistrar.ANNOTATED_RULE_CLASSES;
3132
import static org.assertj.core.api.Assertions.assertThat;
3233
import static org.mockito.Mockito.doReturn;
3334
import static org.mockito.Mockito.mock;
@@ -36,8 +37,6 @@ class JavaRulesDefinitionTest {
3637

3738
private RulesDefinition.Repository repository;
3839

39-
private int rulesSize;
40-
4140
@BeforeEach
4241
void init() {
4342
final SonarRuntime sonarRuntime = mock(SonarRuntime.class);
@@ -46,7 +45,6 @@ void init() {
4645
RulesDefinition.Context context = new RulesDefinition.Context();
4746
rulesDefinition.define(context);
4847
repository = context.repository(rulesDefinition.repositoryKey());
49-
rulesSize = 15;
5048
}
5149

5250
@Test
@@ -55,12 +53,11 @@ void testMetadata() {
5553
assertThat(repository.name()).isEqualTo("ecoCode");
5654
assertThat(repository.language()).isEqualTo("java");
5755
assertThat(repository.key()).isEqualTo("ecocode-java");
58-
assertThat(repository.rules()).hasSize(rulesSize);
5956
}
6057

6158
@Test
6259
void testRegistredRules() {
63-
assertThat(repository.rules()).hasSize(rulesSize);
60+
assertThat(repository.rules()).hasSize(ANNOTATED_RULE_CLASSES.size());
6461
}
6562

6663
@Test

0 commit comments

Comments
 (0)