From b8890f447c3621cb16cb21e636b2a5397722c9ec Mon Sep 17 00:00:00 2001 From: Peter Gafert Date: Sun, 28 Jul 2019 20:23:13 +0200 Subject: [PATCH] Add DescribedPredicate.allElements to be consistent with the existing DescribedPredicate.anyElementThat Signed-off-by: Peter Gafert --- .../archunit/base/DescribedPredicate.java | 23 ++++++++++++++++ .../archunit/base/DescribedPredicateTest.java | 27 ++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/archunit/src/main/java/com/tngtech/archunit/base/DescribedPredicate.java b/archunit/src/main/java/com/tngtech/archunit/base/DescribedPredicate.java index fc503f0be9..29c84a384e 100644 --- a/archunit/src/main/java/com/tngtech/archunit/base/DescribedPredicate.java +++ b/archunit/src/main/java/com/tngtech/archunit/base/DescribedPredicate.java @@ -148,6 +148,10 @@ public static DescribedPredicate> anyElementThat(final Described return new AnyElementPredicate<>(predicate); } + public static DescribedPredicate> allElements(final DescribedPredicate predicate) { + return new AllElementsPredicate<>(predicate); + } + private static class AsPredicate extends DescribedPredicate { private final DescribedPredicate current; @@ -326,4 +330,23 @@ public boolean apply(Iterable iterable) { return false; } } + + private static class AllElementsPredicate extends DescribedPredicate> { + private final DescribedPredicate predicate; + + AllElementsPredicate(DescribedPredicate predicate) { + super("all elements " + predicate.getDescription()); + this.predicate = predicate; + } + + @Override + public boolean apply(Iterable iterable) { + for (T javaClass : iterable) { + if (!predicate.apply(javaClass)) { + return false; + } + } + return true; + } + } } diff --git a/archunit/src/test/java/com/tngtech/archunit/base/DescribedPredicateTest.java b/archunit/src/test/java/com/tngtech/archunit/base/DescribedPredicateTest.java index 1ae693752d..744e0d31d1 100644 --- a/archunit/src/test/java/com/tngtech/archunit/base/DescribedPredicateTest.java +++ b/archunit/src/test/java/com/tngtech/archunit/base/DescribedPredicateTest.java @@ -1,13 +1,17 @@ package com.tngtech.archunit.base; +import com.google.common.collect.ImmutableList; import com.tngtech.java.junit.dataprovider.DataProvider; import com.tngtech.java.junit.dataprovider.DataProviderRunner; import com.tngtech.java.junit.dataprovider.UseDataProvider; import org.junit.Test; import org.junit.runner.RunWith; +import static com.tngtech.archunit.base.DescribedPredicate.allElements; import static com.tngtech.archunit.base.DescribedPredicate.alwaysFalse; import static com.tngtech.archunit.base.DescribedPredicate.alwaysTrue; +import static com.tngtech.archunit.base.DescribedPredicate.anyElementThat; +import static com.tngtech.archunit.base.DescribedPredicate.describe; import static com.tngtech.archunit.base.DescribedPredicate.doNot; import static com.tngtech.archunit.base.DescribedPredicate.doesNot; import static com.tngtech.archunit.base.DescribedPredicate.equalTo; @@ -16,7 +20,6 @@ import static com.tngtech.archunit.base.DescribedPredicate.lessThan; import static com.tngtech.archunit.base.DescribedPredicate.lessThanOrEqualTo; import static com.tngtech.archunit.base.DescribedPredicate.not; -import static com.tngtech.archunit.base.DescribedPredicate.describe; import static com.tngtech.archunit.testutil.Assertions.assertThat; import static com.tngtech.java.junit.dataprovider.DataProviders.$; import static com.tngtech.java.junit.dataprovider.DataProviders.$$; @@ -178,6 +181,28 @@ public void onResultOf_works() { assertThat(equalTo(5).onResultOf(constant(6))).rejects(new Object()); } + @Test + public void anyElementThat_works() { + assertThat(anyElementThat(equalTo(5))) + .hasDescription("any element that equal to '5'") + .accepts(ImmutableList.of(5)) + .accepts(ImmutableList.of(-1, 0, 5, 6)) + .accepts(ImmutableList.of(-1, 0, 5, 5, 6)) + .rejects(ImmutableList.of(-1, 0, 6)) + .rejects(ImmutableList.of()); + } + + @Test + public void allElements_works() { + assertThat(allElements(equalTo(5))) + .hasDescription("all elements equal to '5'") + .accepts(ImmutableList.of(5)) + .accepts(ImmutableList.of(5, 5, 5)) + .rejects(ImmutableList.of(5, 5, 6)) + .rejects(ImmutableList.of(-1, 0, 5, 6)) + .accepts(ImmutableList.of()); + } + private Function constant(final int integer) { return new Function() { @Override