-
-
Notifications
You must be signed in to change notification settings - Fork 683
/
IterableAssert_filteredOnAssertions_ThrowingConsumer_Test.java
137 lines (125 loc) · 6.61 KB
/
IterableAssert_filteredOnAssertions_ThrowingConsumer_Test.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
* Copyright 2012-2022 the original author or authors.
*/
package org.assertj.core.api.iterable;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
import static org.assertj.core.api.BDDAssertions.then;
import static org.assertj.core.api.BDDAssertions.thenIllegalArgumentException;
import static org.assertj.core.presentation.UnicodeRepresentation.UNICODE_REPRESENTATION;
import static org.assertj.core.util.Sets.newHashSet;
import static org.assertj.core.util.ThrowingConsumerFactory.throwingConsumer;
import org.assertj.core.api.IterableAssert;
import org.assertj.core.api.ThrowingConsumer;
import org.assertj.core.data.TolkienCharacter;
import org.assertj.core.data.TolkienCharacterAssert;
import org.assertj.core.data.TolkienCharacterAssertFactory;
import org.assertj.core.test.CaseInsensitiveStringComparator;
import org.assertj.core.test.Employee;
import org.junit.jupiter.api.Test;
class IterableAssert_filteredOnAssertions_ThrowingConsumer_Test extends IterableAssert_filtered_baseTest {
private static final ThrowingConsumer<? super TolkienCharacter> nameStartingWithFro = hobbit -> assertThat(hobbit.getName()).startsWith("Fro");
@Test
void should_rethrow_throwables_as_runtime_exceptions() {
// GIVEN
Throwable exception = new Throwable("boom!");
// WHEN
Throwable throwable = catchThrowable(() -> assertThat(employees).filteredOnAssertions(throwingConsumer(exception)));
// THEN
then(throwable).isInstanceOf(RuntimeException.class)
.hasCauseReference(exception);
}
@Test
void should_propagate_RuntimeException_as_is() {
// GIVEN
RuntimeException runtimeException = new RuntimeException("boom!");
// WHEN
Throwable throwable = catchThrowable(() -> assertThat(employees).filteredOnAssertions(throwingConsumer(runtimeException)));
// THEN
then(throwable).isSameAs(runtimeException);
}
@Test
void should_filter_iterable_under_test_verifying_given_assertions() {
// GIVEN
ThrowingConsumer<? super Employee> old = employee -> assertThat(employee.getAge()).isGreaterThan(100);
// WHEN/THEN
then(employees).filteredOnAssertions(old)
.containsOnly(yoda, obiwan);
then(newHashSet(employees)).filteredOnAssertions(old)
.containsOnly(yoda, obiwan);
}
@Test
void should_fail_if_given_consumer_is_null() {
// GIVEN
ThrowingConsumer<? super Employee> consumer = null;
// WHEN/THEN
thenIllegalArgumentException().isThrownBy(() -> assertThat(employees).filteredOnAssertions(consumer))
.withMessage("The element assertions should not be null");
}
@Test
void should_honor_AssertFactory_strongly_typed_navigation_assertions() {
// GIVEN
Iterable<TolkienCharacter> hobbits = hobbits();
TolkienCharacterAssertFactory tolkienCharacterAssertFactory = new TolkienCharacterAssertFactory();
// THEN
assertThat(hobbits, tolkienCharacterAssertFactory).filteredOnAssertions(nameStartingWithFro)
.first()
.hasAge(33);
assertThat(hobbits, tolkienCharacterAssertFactory).filteredOnAssertions(nameStartingWithFro)
.last()
.hasAge(33);
assertThat(hobbits, tolkienCharacterAssertFactory).filteredOnAssertions(nameStartingWithFro)
.element(0)
.hasAge(33);
assertThat(hobbits, tolkienCharacterAssertFactory).filteredOnAssertions(nameStartingWithFro)
.elements(0)
.first()
.hasAge(33);
}
@Test
void should_honor_ClassBased_strongly_typed_navigation_assertions() {
// GIVEN
Iterable<TolkienCharacter> hobbits = hobbits();
// THEN
assertThat(hobbits, TolkienCharacterAssert.class).filteredOnAssertions(nameStartingWithFro)
.first()
.hasAge(33);
assertThat(hobbits, TolkienCharacterAssert.class).filteredOnAssertions(nameStartingWithFro)
.last()
.hasAge(33);
assertThat(hobbits, TolkienCharacterAssert.class).filteredOnAssertions(nameStartingWithFro)
.elements(0)
.first()
.hasAge(33);
assertThat(hobbits, TolkienCharacterAssert.class).filteredOnAssertions(nameStartingWithFro)
.element(0)
.hasAge(33);
}
@Test
void should_keep_assertion_state() {
// GIVEN
Iterable<String> names = asList("John", "Doe", "Jane", "Doe");
ThrowingConsumer<? super String> fourCharsWord = string -> assertThat(string.length()).isEqualTo(4);
// WHEN
IterableAssert<String> assertion = assertThat(names).as("test description")
.withFailMessage("error message")
.withRepresentation(UNICODE_REPRESENTATION)
.usingElementComparator(CaseInsensitiveStringComparator.instance)
.filteredOnAssertions(fourCharsWord)
.containsExactly("JOHN", "JANE");
// THEN
assertThat(assertion.descriptionText()).isEqualTo("test description");
assertThat(assertion.info.representation()).isEqualTo(UNICODE_REPRESENTATION);
assertThat(assertion.info.overridingErrorMessage()).isEqualTo("error message");
}
}