diff --git a/archunit/src/main/java/com/tngtech/archunit/lang/conditions/ArchConditions.java b/archunit/src/main/java/com/tngtech/archunit/lang/conditions/ArchConditions.java index 690af2ed95..2513816677 100644 --- a/archunit/src/main/java/com/tngtech/archunit/lang/conditions/ArchConditions.java +++ b/archunit/src/main/java/com/tngtech/archunit/lang/conditions/ArchConditions.java @@ -314,6 +314,14 @@ public static ArchCondition dependOnClassesThat(DescribedPredicate haveAnyDependenciesThat(DescribedPredicate predicate) { + return new AnyDependencyCondition( + "have any dependencies that " + predicate.getDescription(), + predicate, + GET_DIRECT_DEPENDENCIES_FROM_SELF); + } + @PublicAPI(usage = ACCESS) public static ArchCondition transitivelyDependOnClassesThat(DescribedPredicate predicate) { return new TransitiveDependencyCondition(predicate); diff --git a/archunit/src/test/java/com/tngtech/archunit/lang/conditions/ArchConditionsTest.java b/archunit/src/test/java/com/tngtech/archunit/lang/conditions/ArchConditionsTest.java index 145eda2cb3..f5f92ee5c9 100644 --- a/archunit/src/test/java/com/tngtech/archunit/lang/conditions/ArchConditionsTest.java +++ b/archunit/src/test/java/com/tngtech/archunit/lang/conditions/ArchConditionsTest.java @@ -36,7 +36,9 @@ import static com.tngtech.archunit.lang.conditions.ArchConditions.containAnyElementThat; import static com.tngtech.archunit.lang.conditions.ArchConditions.containOnlyElementsThat; import static com.tngtech.archunit.lang.conditions.ArchConditions.declareThrowableOfType; +import static com.tngtech.archunit.lang.conditions.ArchConditions.dependOnClassesThat; import static com.tngtech.archunit.lang.conditions.ArchConditions.have; +import static com.tngtech.archunit.lang.conditions.ArchConditions.haveAnyDependenciesThat; import static com.tngtech.archunit.lang.conditions.ArchConditions.never; import static com.tngtech.archunit.lang.conditions.ArchConditions.not; import static com.tngtech.archunit.lang.conditions.ArchConditions.onlyBeAccessedByAnyPackage; @@ -164,6 +166,38 @@ public void only_have_dependents_where() { .containNoViolation(); } + @Test + public void depend_on_classes_that() { + JavaClasses classes = importClasses(CallingClass.class, SomeClass.class); + JavaClass callingClass = classes.get(CallingClass.class); + + assertThat(dependOnClassesThat(alwaysFalse())) + .checking(callingClass) + .haveAtLeastOneViolationMessageMatching(String.format(".*%s.*%s.*", + quote(CallingClass.class.getName()), quote(SomeClass.class.getName()))); + + assertThat(dependOnClassesThat(DescribedPredicate.alwaysTrue().as("custom"))) + .hasDescription("depend on classes that custom") + .checking(callingClass) + .containNoViolation(); + } + + @Test + public void have_any_dependencies_that() { + JavaClasses classes = importClasses(CallingClass.class, SomeClass.class); + JavaClass callingClass = classes.get(CallingClass.class); + + assertThat(haveAnyDependenciesThat(alwaysFalse())) + .checking(callingClass) + .haveAtLeastOneViolationMessageMatching(String.format(".*%s.*%s.*", + quote(CallingClass.class.getName()), quote(SomeClass.class.getName()))); + + assertThat(haveAnyDependenciesThat(DescribedPredicate.alwaysTrue().as("custom"))) + .hasDescription("have dependencies that custom") + .checking(callingClass) + .containNoViolation(); + } + @Test public void declare_throwable_of_type() { class Failure {