Skip to content

Commit db7302b

Browse files
committed
improve test class detection in nullability rules
1 parent 47173d1 commit db7302b

File tree

3 files changed

+61
-2
lines changed

3 files changed

+61
-2
lines changed

archrules-nullability/src/archRules/java/com/netflix/nebula/archrules/nullability/HaveNoTests.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ public HaveNoTests() {
1111
@Override
1212
public boolean test(JavaClass javaClass) {
1313
return javaClass.getMembers().stream()
14-
.noneMatch(it -> it.isAnnotatedWith("org.junit.jupiter.api.Test"));
14+
.noneMatch(it -> it.isMetaAnnotatedWith("org.junit.platform.commons.annotation.Testable"));
15+
}
16+
17+
public static HaveNoTests haveNoTests() {
18+
return new HaveNoTests();
1519
}
1620
}

archrules-nullability/src/archRules/java/com/netflix/nebula/archrules/nullability/NebulaNullabilityArchRules.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.HashMap;
1111
import java.util.Map;
1212

13+
import static com.netflix.nebula.archrules.nullability.HaveNoTests.haveNoTests;
1314
import static com.tngtech.archunit.lang.conditions.ArchConditions.fullyQualifiedName;
1415

1516
public class NebulaNullabilityArchRules implements ArchRulesService {
@@ -18,7 +19,7 @@ public class NebulaNullabilityArchRules implements ArchRulesService {
1819
.areTopLevelClasses()
1920
.and().arePublic()
2021
.and().containAnyMembersThat(HasModifiers.Predicates.modifier(JavaModifier.PUBLIC))
21-
.and(new HaveNoTests())
22+
.and(haveNoTests())
2223
.and().areNotAnnotatedWith("kotlin.Metadata")
2324
.should().beAnnotatedWith("org.jspecify.annotations.NullMarked")
2425
.allowEmptyShould(true)
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.netflix.nebula.archrules.nullability;
2+
3+
import com.tngtech.archunit.core.domain.JavaClass;
4+
import com.tngtech.archunit.core.importer.ClassFileImporter;
5+
import org.junit.jupiter.api.Test;
6+
import org.junit.jupiter.params.ParameterizedTest;
7+
import org.junit.jupiter.params.provider.ValueSource;
8+
9+
import static com.netflix.nebula.archrules.nullability.HaveNoTests.haveNoTests;
10+
import static org.assertj.core.api.Assertions.assertThat;
11+
12+
class HaveNoTestsTest {
13+
@Test
14+
public void test_jupiter_test() {
15+
JavaClass codeToTest = new ClassFileImporter().importClass(UsesJupiterTest.class);
16+
HaveNoTests instance = haveNoTests();
17+
assertThat(instance.test(codeToTest)).isFalse();
18+
}
19+
20+
@Test
21+
public void test_jupiter_parameterized_test() {
22+
JavaClass codeToTest = new ClassFileImporter().importClass(UsesJupiterParameterizedTest.class);
23+
HaveNoTests instance = haveNoTests();
24+
assertThat(instance.test(codeToTest)).isFalse();
25+
}
26+
27+
@Test
28+
public void test_nothing() {
29+
JavaClass codeToTest = new ClassFileImporter().importClass(UsesNothing.class);
30+
HaveNoTests instance = haveNoTests();
31+
assertThat(instance.test(codeToTest)).isTrue();
32+
}
33+
34+
static class UsesJupiterTest {
35+
@Test
36+
void test() {
37+
38+
}
39+
}
40+
41+
static class UsesJupiterParameterizedTest {
42+
@ParameterizedTest
43+
@ValueSource(strings = {"a", "b"})
44+
void test(String param) {
45+
46+
}
47+
}
48+
49+
static class UsesNothing {
50+
void test() {
51+
52+
}
53+
}
54+
}

0 commit comments

Comments
 (0)