Skip to content

Commit 26b57c4

Browse files
authored
adding allOf validation and test cases (#438)
1 parent e74f8da commit 26b57c4

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

src/main/java/am/ik/yavi/constraint/CollectionConstraint.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import static am.ik.yavi.core.NullAs.VALID;
3030
import static am.ik.yavi.core.ViolationMessage.Default.COLLECTION_CONTAINS;
3131
import static am.ik.yavi.core.ViolationMessage.Default.COLLECTION_UNIQUE;
32+
import static am.ik.yavi.core.ViolationMessage.Default.COLLECTION_CONTAINS_ALL;
3233

3334
public class CollectionConstraint<T, L extends Collection<E>, E>
3435
extends ContainerConstraintBase<T, L, CollectionConstraint<T, L, E>> {
@@ -69,6 +70,23 @@ public CollectionConstraint<T, L, E> unique() {
6970
return this;
7071
}
7172

73+
public CollectionConstraint<T, L, E> containsAll(Collection<? extends E> values) {
74+
this.predicates().add(ConstraintPredicate.withViolatedValue(collection -> {
75+
final Set<E> missingValues = new HashSet<>(values);
76+
77+
if (collection instanceof Set) {
78+
missingValues.removeAll(collection);
79+
}
80+
else {
81+
missingValues.removeAll(new HashSet<>(collection));
82+
}
83+
84+
return missingValues.isEmpty() ? Optional.empty() : Optional.of(new ViolatedValue(missingValues));
85+
}, COLLECTION_CONTAINS_ALL, () -> new Object[] { values.toString() }, VALID));
86+
87+
return this;
88+
}
89+
7290
@Override
7391
protected ToIntFunction<L> size() {
7492
return Collection::size;

src/main/java/am/ik/yavi/core/ViolationMessage.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ enum Default implements ViolationMessage {
9494
BYTE_SIZE_FIXED_SIZE("byteSize.fixedSize", "The byte size of \"{0}\" must be {1}. The given size is {2}"), //
9595
COLLECTION_CONTAINS("collection.contains", "\"{0}\" must contain {1}"), //
9696
COLLECTION_UNIQUE("collection.unique", "\"{0}\" must be unique. {1} is/are duplicated."), //
97+
COLLECTION_CONTAINS_ALL("collection.containsAll",
98+
"\"{0}\" must be have of all of the following values: {1}, missing values: {2}"), //
9799
MAP_CONTAINS_VALUE("map.containsValue", "\"{0}\" must contain value {1}"), //
98100
MAP_CONTAINS_KEY("map.containsKey", "\"{0}\" must contain key {1}"), //
99101
ARRAY_CONTAINS("array.contains", "\"{0}\" must contain {1}"), //

src/test/java/am/ik/yavi/constraint/CollectionConstraintTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,33 @@ void unique() {
8686
assertThat(predicate.test(Arrays.asList("a", "b", "c", "b"))).isFalse();
8787
}
8888

89+
@Test
90+
void containsAll() {
91+
List<String> mustVisitCities = Arrays.asList("a", "b", "c");
92+
Predicate<List<String>> predicate = retrievePredicate(c -> c.containsAll(mustVisitCities));
93+
94+
List<String> visitingCities = Arrays.asList("a", "b", "c", "d");
95+
assertThat(predicate.test(visitingCities)).isTrue();
96+
97+
visitingCities = Arrays.asList("a", "b", "c");
98+
assertThat(predicate.test(visitingCities)).isTrue();
99+
100+
visitingCities = Arrays.asList("a", "b");
101+
assertThat(predicate.test(visitingCities)).isFalse();
102+
103+
visitingCities = Arrays.asList("a");
104+
assertThat(predicate.test(visitingCities)).isFalse();
105+
106+
visitingCities = Arrays.asList();
107+
assertThat(predicate.test(visitingCities)).isFalse();
108+
109+
visitingCities = Arrays.asList("a", "b", "d");
110+
assertThat(predicate.test(visitingCities)).isFalse();
111+
112+
visitingCities = Arrays.asList("x", "y");
113+
assertThat(predicate.test(visitingCities)).isFalse();
114+
}
115+
89116
private static Predicate<List<String>> retrievePredicate(
90117
Function<CollectionConstraint<List<String>, List<String>, String>, CollectionConstraint<List<String>, List<String>, String>> constraint) {
91118
return constraint.apply(new CollectionConstraint<>()).predicates().peekFirst().predicate();

0 commit comments

Comments
 (0)