Skip to content

Commit d66d740

Browse files
committed
add haveDependenciesThat condition to ArchConditions
Signed-off-by: John Burns <wakingrufus@gmail.com>
1 parent f4b5bd8 commit d66d740

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

archunit/src/main/java/com/tngtech/archunit/lang/conditions/ArchConditions.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,14 @@ public static ArchCondition<JavaClass> dependOnClassesThat(DescribedPredicate<?
314314
GET_DIRECT_DEPENDENCIES_FROM_SELF);
315315
}
316316

317+
@PublicAPI(usage = ACCESS)
318+
public static ArchCondition<JavaClass> haveDependenciesThat(DescribedPredicate<? super Dependency> predicate) {
319+
return new AnyDependencyCondition(
320+
"have dependencies that " + predicate.getDescription(),
321+
predicate,
322+
GET_DIRECT_DEPENDENCIES_FROM_SELF);
323+
}
324+
317325
@PublicAPI(usage = ACCESS)
318326
public static ArchCondition<JavaClass> transitivelyDependOnClassesThat(DescribedPredicate<? super JavaClass> predicate) {
319327
return new TransitiveDependencyCondition(predicate);

archunit/src/test/java/com/tngtech/archunit/lang/conditions/ArchConditionsTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@
3636
import static com.tngtech.archunit.lang.conditions.ArchConditions.containAnyElementThat;
3737
import static com.tngtech.archunit.lang.conditions.ArchConditions.containOnlyElementsThat;
3838
import static com.tngtech.archunit.lang.conditions.ArchConditions.declareThrowableOfType;
39+
import static com.tngtech.archunit.lang.conditions.ArchConditions.dependOnClassesThat;
3940
import static com.tngtech.archunit.lang.conditions.ArchConditions.have;
41+
import static com.tngtech.archunit.lang.conditions.ArchConditions.haveDependenciesThat;
4042
import static com.tngtech.archunit.lang.conditions.ArchConditions.never;
4143
import static com.tngtech.archunit.lang.conditions.ArchConditions.not;
4244
import static com.tngtech.archunit.lang.conditions.ArchConditions.onlyBeAccessedByAnyPackage;
@@ -164,6 +166,38 @@ public void only_have_dependents_where() {
164166
.containNoViolation();
165167
}
166168

169+
@Test
170+
public void depend_on_classes_that() {
171+
JavaClasses classes = importClasses(CallingClass.class, SomeClass.class);
172+
JavaClass callingClass = classes.get(CallingClass.class);
173+
174+
assertThat(dependOnClassesThat(alwaysFalse()))
175+
.checking(callingClass)
176+
.haveAtLeastOneViolationMessageMatching(String.format(".*%s.*%s.*",
177+
quote(CallingClass.class.getName()), quote(SomeClass.class.getName())));
178+
179+
assertThat(dependOnClassesThat(DescribedPredicate.<JavaClass>alwaysTrue().as("custom")))
180+
.hasDescription("depend on classes that custom")
181+
.checking(callingClass)
182+
.containNoViolation();
183+
}
184+
185+
@Test
186+
public void have_dependencies_that() {
187+
JavaClasses classes = importClasses(CallingClass.class, SomeClass.class);
188+
JavaClass callingClass = classes.get(CallingClass.class);
189+
190+
assertThat(haveDependenciesThat(alwaysFalse()))
191+
.checking(callingClass)
192+
.haveAtLeastOneViolationMessageMatching(String.format(".*%s.*%s.*",
193+
quote(CallingClass.class.getName()), quote(SomeClass.class.getName())));
194+
195+
assertThat(haveDependenciesThat(DescribedPredicate.<Dependency>alwaysTrue().as("custom")))
196+
.hasDescription("have dependencies that custom")
197+
.checking(callingClass)
198+
.containNoViolation();
199+
}
200+
167201
@Test
168202
public void declare_throwable_of_type() {
169203
class Failure {

0 commit comments

Comments
 (0)