View Javadoc
1   package io.atlassian.fugue.extensions.step;
2   
3   import io.atlassian.fugue.Try;
4   import io.atlassian.fugue.Unit;
5   import org.junit.Test;
6   
7   import java.util.function.Supplier;
8   
9   import static io.atlassian.fugue.Try.failure;
10  import static io.atlassian.fugue.Try.successful;
11  import static io.atlassian.fugue.Unit.Unit;
12  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysFalse;
13  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysFalse2;
14  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysFalse3;
15  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysFalse4;
16  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysFalse5;
17  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysFalse6;
18  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysTrue;
19  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysTrue2;
20  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysTrue3;
21  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysTrue4;
22  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysTrue5;
23  import static io.atlassian.fugue.extensions.step.TestUtils.alwaysTrue6;
24  import static io.atlassian.fugue.hamcrest.TryMatchers.isFailure;
25  import static io.atlassian.fugue.hamcrest.TryMatchers.isSuccessful;
26  import static org.hamcrest.CoreMatchers.is;
27  import static org.junit.Assert.assertThat;
28  
29  public class TestTrySteps {
30  
31    private static final String STRING = "123456";
32    private static final String STRING_UPPERED = "QWERTY";
33    private static final String STRING_LOWERED = "qwerty";
34    private static final Long LONG = 123456L;
35    private static final Long LONGLONG = 123456123456L;
36    private static final Exception exceptionFilter = new Exception();
37    private static final Exception exception1 = new Exception();
38    private static final Exception exception2 = new Exception();
39    private static final Exception exception3 = new Exception();
40    private static final Exception exception4 = new Exception();
41    private static final Exception exception5 = new Exception();
42    private static final Exception exception6 = new Exception();
43    private static final Supplier<Exception> exceptionFilterFunction = () -> exceptionFilter;
44  
45    @Test public void test_1_step_success() {
46      Try<Long> stepped = Steps.begin(successful(STRING)).yield(Long::new);
47  
48      assertThat(stepped, isSuccessful(is(LONG)));
49    }
50  
51    @Test public void test_1_step_failure() {
52      Try<Unit> stepped = Steps.begin(failure(exception1)).yield(value1 -> Unit());
53  
54      assertThat(stepped, isFailure(is(exception1)));
55    }
56  
57    @Test public void test_1_step_filter_success() {
58      Try<Long> stepped = Steps.begin(successful(STRING)).filter(alwaysTrue(), exceptionFilterFunction).yield(Long::new);
59  
60      assertThat(stepped, isSuccessful(is(LONG)));
61    }
62  
63    @Test public void test_1_step_filter_failure() {
64      Try<Long> stepped = Steps.begin(successful(STRING)).filter(alwaysFalse(), exceptionFilterFunction).yield(Long::new);
65  
66      assertThat(stepped, isFailure(is(exceptionFilter)));
67    }
68  
69    @Test public void test_2_step_success_functor() {
70      Try<Long> stepped = Steps.begin(successful(STRING)).then((firstValue) -> successful(STRING)).yield((value1, value2) -> new Long(value1 + value2));
71  
72      assertThat(stepped, isSuccessful(is(LONGLONG)));
73    }
74  
75    @Test public void test_2_step_success_supplier() {
76      Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).yield((value1, value2) -> new Long(value1 + value2));
77  
78      assertThat(stepped, isSuccessful(is(LONGLONG)));
79    }
80  
81    @Test public void test_2_step_failure_functor() {
82      Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> failure(exception2)).yield((value1, value2) -> new Long(value1));
83  
84      assertThat(stepped, isFailure(is(exception2)));
85    }
86  
87    @Test public void test_2_step_failure_supplier() {
88      Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> failure(exception2)).yield((value1, value2) -> new Long(value1));
89  
90      assertThat(stepped, isFailure(is(exception2)));
91    }
92  
93    @Test public void test_2_step_failure_1() {
94      Try<Long> stepped = Steps.begin(failure(exception1)).then(() -> successful(9)).yield((value1, value2) -> new Long(value2));
95  
96      assertThat(stepped, isFailure(is(exception1)));
97    }
98  
99    @Test public void test_2_step_filter_success() {
100     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(LONG)).filter(alwaysTrue2(), exceptionFilterFunction)
101       .yield((v1, v2) -> v2);
102 
103     assertThat(stepped, isSuccessful(is(LONG)));
104   }
105 
106   @Test public void test_2_step_filter_failure() {
107     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(LONG)).filter(alwaysFalse2(), exceptionFilterFunction)
108       .yield((v1, v2) -> v2);
109 
110     assertThat(stepped, isFailure(is(exceptionFilter)));
111   }
112 
113   @Test public void test_2_step_filter_failure_1() {
114     Try<Long> stepped = Steps.begin(successful(STRING)).filter(alwaysFalse(), exceptionFilterFunction).then(() -> successful(STRING))
115       .yield((value1, value2) -> new Long(value1 + value2));
116 
117     assertThat(stepped, isFailure(is(exceptionFilter)));
118   }
119 
120   @Test public void test_3_step_success_functor() {
121     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((v1, v2) -> successful(88))
122       .yield((value1, value2, value3) -> new Long(value1 + value2));
123 
124     assertThat(stepped, isSuccessful(is(LONGLONG)));
125   }
126 
127   @Test public void test_3_step_success_supplier() {
128     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(88))
129       .yield((value1, value2, value3) -> new Long(value1 + value2));
130 
131     assertThat(stepped, isSuccessful(is(LONGLONG)));
132   }
133 
134   @Test public void test_3_step_failure_functor() {
135     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((v1, v2) -> failure(exception3))
136       .yield((value1, value2, value3) -> new Long(value1));
137 
138     assertThat(stepped, isFailure(is(exception3)));
139   }
140 
141   @Test public void test_3_step_failure_supplier() {
142     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> failure(exception3))
143       .yield((value1, value2, value3) -> new Long(value1));
144 
145     assertThat(stepped, isFailure(is(exception3)));
146   }
147 
148   @Test public void test_3_step_failure_1() {
149     Try<Long> stepped = Steps.begin(failure(exception1)).then(() -> successful(STRING)).then((v1, v2) -> successful(LONG))
150       .yield((value1, value2, value3) -> value3);
151 
152     assertThat(stepped, isFailure(is(exception1)));
153   }
154 
155   @Test public void test_3_step_failure_2() {
156     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> failure(exception2)).then((v1, v2) -> successful(LONG))
157       .yield((value1, value2, value3) -> new Long(value1));
158 
159     assertThat(stepped, isFailure(is(exception2)));
160   }
161 
162   @Test public void test_3_step_filter_success() {
163     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(LONG)).then(() -> successful(STRING_LOWERED))
164       .filter(alwaysTrue3(), exceptionFilterFunction).yield((v1, v2, v3) -> v2);
165 
166     assertThat(stepped, isSuccessful(is(LONG)));
167   }
168 
169   @Test public void test_3_step_filter_failure() {
170     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(LONG)).then(() -> successful(STRING_LOWERED))
171       .filter(alwaysFalse3(), exceptionFilterFunction).yield((v1, v2, v3) -> v2);
172 
173     assertThat(stepped, isFailure(is(exceptionFilter)));
174   }
175 
176   @Test public void test_3_step_filter_failure_1() {
177     Try<Long> stepped = Steps.begin(successful(STRING)).filter(alwaysFalse(), exceptionFilterFunction).then(() -> successful(LONG))
178       .then(() -> successful(STRING_LOWERED)).yield((v1, v2, v3) -> v2);
179 
180     assertThat(stepped, isFailure(is(exceptionFilter)));
181   }
182 
183   @Test public void test_3_step_filter_failure_2() {
184     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(LONG)).filter(alwaysFalse2(), exceptionFilterFunction)
185       .then(() -> successful(STRING_LOWERED)).filter(alwaysFalse3(), exceptionFilterFunction).yield((v1, v2, v3) -> v2);
186 
187     assertThat(stepped, isFailure(is(exceptionFilter)));
188   }
189 
190   @Test public void test_4_step_success_functor() {
191     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((first, second) -> successful(first + second))
192       .then((v1, v2, v3) -> successful(STRING)).yield((value1, value2, value3, value4) -> new Long(value3));
193 
194     assertThat(stepped, isSuccessful(is(LONGLONG)));
195   }
196 
197   @Test public void test_4_step_success_supplier() {
198     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
199       .then(() -> successful(STRING)).yield((value1, value2, value3, value4) -> new Long(value3));
200 
201     assertThat(stepped, isSuccessful(is(LONGLONG)));
202   }
203 
204   @Test public void test_4_step_failure_functor() {
205     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((s, s2) -> successful(STRING))
206       .then((s, s2, s3) -> failure(exception4)).yield((value1, value2, value3, value4) -> new Long(value1));
207 
208     assertThat(stepped, isFailure(is(exception4)));
209   }
210 
211   @Test public void test_4_step_failure_supplier() {
212     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING)).then(() -> failure(exception4))
213       .yield((value1, value2, value3, value4) -> new Long(value1));
214 
215     assertThat(stepped, isFailure(is(exception4)));
216   }
217 
218   @Test public void test_4_step_failure_1() {
219     Try<Long> stepped = Steps.begin(failure(exception1)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
220       .then(() -> successful(STRING)).yield((value1, value2, value3, value4) -> new Long(value3));
221 
222     assertThat(stepped, isFailure(is(exception1)));
223   }
224 
225   @Test public void test_4_step_failure_2() {
226     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> failure(exception2)).then(() -> successful(STRING + STRING))
227       .then(() -> successful(STRING)).yield((value1, value2, value3, value4) -> new Long(value3));
228 
229     assertThat(stepped, isFailure(is(exception2)));
230   }
231 
232   @Test public void test_4_step_failure_3() {
233     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> failure(exception3)).then(() -> successful(STRING))
234       .yield((value1, value2, value3, value4) -> new Long(value4));
235 
236     assertThat(stepped, isFailure(is(exception3)));
237   }
238 
239   @Test public void test_4_step_filter_success() {
240     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(LONG)).then(() -> successful(STRING_LOWERED))
241       .then(() -> successful(true)).filter(alwaysTrue4(), exceptionFilterFunction).yield((v1, v2, v3, v4) -> v2);
242 
243     assertThat(stepped, isSuccessful(is(LONG)));
244   }
245 
246   @Test public void test_4_step_filter_failure() {
247     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(LONG)).then(() -> successful(STRING_LOWERED))
248       .then(() -> successful(true)).filter(alwaysFalse4(), exceptionFilterFunction).yield((v1, v2, v3, v4) -> v2);
249 
250     assertThat(stepped, isFailure(is(exceptionFilter)));
251   }
252 
253   @Test public void test_4_step_filter_failure_1() {
254     Try<Long> stepped = Steps.begin(successful(STRING)).filter(alwaysFalse(), exceptionFilterFunction).then(() -> successful(LONG))
255       .then(() -> successful(STRING_LOWERED)).then(() -> successful(true)).yield((v1, v2, v3, v4) -> v2);
256 
257     assertThat(stepped, isFailure(is(exceptionFilter)));
258   }
259 
260   @Test public void test_4_step_filter_failure_2() {
261     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(LONG)).filter(alwaysFalse2(), exceptionFilterFunction)
262       .then(() -> successful(STRING_LOWERED)).then(() -> successful(true)).yield((v1, v2, v3, v4) -> v2);
263 
264     assertThat(stepped, isFailure(is(exceptionFilter)));
265   }
266 
267   @Test public void test_4_step_filter_failure_3() {
268     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(LONG)).then(() -> successful(STRING_LOWERED))
269       .filter(alwaysFalse3(), exceptionFilterFunction).then(() -> successful(true)).yield((v1, v2, v3, v4) -> v2);
270 
271     assertThat(stepped, isFailure(is(exceptionFilter)));
272   }
273 
274   @Test public void test_5_step_success_functor() {
275     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((first, second) -> successful(first + second))
276       .then((v1, v2, v3) -> successful(STRING)).then((v1, v2, v3, v4) -> successful(STRING))
277       .yield((value1, value2, value3, value4, value5) -> new Long(value3));
278 
279     assertThat(stepped, isSuccessful(is(LONGLONG)));
280   }
281 
282   @Test public void test_5_step_success_supplier() {
283     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
284       .then(() -> successful(STRING)).then(() -> successful(STRING)).yield((value1, value2, value3, value4, value5) -> new Long(value3));
285 
286     assertThat(stepped, isSuccessful(is(LONGLONG)));
287   }
288 
289   @Test public void test_5_step_failure_functor() {
290     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((first, second) -> successful(first + second))
291       .then((v1, v2, v3) -> successful(STRING)).then((v1, v2, v3, v4) -> failure(exception5))
292       .yield((value1, value2, value3, value4, value5) -> new Long(value3));
293 
294     assertThat(stepped, isFailure(is(exception5)));
295   }
296 
297   @Test public void test_5_step_failure_supplier() {
298     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
299       .then(() -> successful(STRING)).then(() -> failure(exception5)).yield((value1, value2, value3, value4, value5) -> new Long(value3));
300 
301     assertThat(stepped, isFailure(is(exception5)));
302   }
303 
304   @Test public void test_5_step_failure_1() {
305     Try<Long> stepped = Steps.begin(failure(exception1)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
306       .then(() -> successful(STRING)).then(() -> successful(STRING_LOWERED)).yield((value1, value2, value3, value4, value5) -> new Long(value3));
307 
308     assertThat(stepped, isFailure(is(exception1)));
309   }
310 
311   @Test public void test_5_step_failure_2() {
312     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> failure(exception2)).then(() -> successful(STRING + STRING))
313       .then(() -> successful(STRING)).then(() -> successful(STRING_LOWERED)).yield((value1, value2, value3, value4, value5) -> new Long(value3));
314 
315     assertThat(stepped, isFailure(is(exception2)));
316   }
317 
318   @Test public void test_5_step_failure_3() {
319     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> failure(exception3)).then(() -> successful(STRING))
320       .then(() -> successful(STRING_LOWERED)).yield((value1, value2, value3, value4, value5) -> new Long(value2));
321 
322     assertThat(stepped, isFailure(is(exception3)));
323   }
324 
325   @Test public void test_5_step_failure_4() {
326     Try<Long> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
327       .then(() -> failure(exception4)).then(() -> successful(STRING_LOWERED)).yield((value1, value2, value3, value4, value5) -> new Long(value3));
328 
329     assertThat(stepped, isFailure(is(exception4)));
330   }
331 
332   @Test public void test_5_step_filter_success() {
333     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((first, second) -> successful(first + second))
334       .then((v1, v2, v3) -> successful(STRING)).then((v1, v2, v3, v4) -> successful(STRING)).filter(alwaysTrue5(), exceptionFilterFunction)
335       .yield((value1, value2, value3, value4, value5) -> new Long(value3));
336 
337     assertThat(stepped, isSuccessful(is(LONGLONG)));
338   }
339 
340   @Test public void test_5_step_filter_failure() {
341     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((first, second) -> successful(first + second))
342       .then((v1, v2, v3) -> successful(STRING)).then((v1, v2, v3, v4) -> successful(STRING)).filter(alwaysFalse5(), exceptionFilterFunction)
343       .yield((value1, value2, value3, value4, value5) -> new Long(value3));
344 
345     assertThat(stepped, isFailure(is(exceptionFilter)));
346   }
347 
348   @Test public void test_5_step_filter_failure_1() {
349     Try<Long> stepped = Steps.begin(successful(STRING)).filter(alwaysFalse(), exceptionFilterFunction).then(v -> successful(STRING))
350       .then((first, second) -> successful(first + second)).then((v1, v2, v3) -> successful(STRING)).then((v1, v2, v3, v4) -> successful(STRING))
351       .yield((value1, value2, value3, value4, value5) -> new Long(value3));
352 
353     assertThat(stepped, isFailure(is(exceptionFilter)));
354   }
355 
356   @Test public void test_5_step_filter_failure_2() {
357     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).filter(alwaysFalse2(), exceptionFilterFunction)
358       .then((first, second) -> successful(first + second)).then((v1, v2, v3) -> successful(STRING)).then((v1, v2, v3, v4) -> successful(STRING))
359       .yield((value1, value2, value3, value4, value5) -> new Long(value3));
360 
361     assertThat(stepped, isFailure(is(exceptionFilter)));
362   }
363 
364   @Test public void test_5_step_filter_failure_3() {
365     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((first, second) -> successful(first + second))
366       .filter(alwaysFalse3(), exceptionFilterFunction).then((v1, v2, v3) -> successful(STRING)).then((v1, v2, v3, v4) -> successful(STRING))
367       .yield((value1, value2, value3, value4, value5) -> new Long(value3));
368 
369     assertThat(stepped, isFailure(is(exceptionFilter)));
370   }
371 
372   @Test public void test_5_step_filter_failure_4() {
373     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((first, second) -> successful(first + second))
374       .then((v1, v2, v3) -> successful(STRING)).filter(alwaysFalse4(), exceptionFilterFunction).then((v1, v2, v3, v4) -> successful(STRING))
375       .yield((value1, value2, value3, value4, value5) -> new Long(value3));
376 
377     assertThat(stepped, isFailure(is(exceptionFilter)));
378   }
379 
380   @Test public void test_6_step_success_functor() {
381     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((first, second) -> successful(first + second))
382       .then((v1, v2, v3) -> successful(STRING)).then((v1, v2, v3, v4) -> successful(STRING_UPPERED))
383       .then((first, second, third, fourth, fifth) -> successful(STRING_LOWERED))
384       .yield((value1, value2, value3, value4, value5, value6) -> new Long(value3));
385 
386     assertThat(stepped, isSuccessful(is(LONGLONG)));
387   }
388 
389   @Test public void test_6_step_success_supplier() {
390     Try<String> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
391       .then(() -> successful(STRING)).then(() -> successful(STRING_UPPERED)).then(() -> successful(STRING_LOWERED))
392       .yield((value1, value2, value3, value4, value5, value6) -> value6);
393 
394     assertThat(stepped, isSuccessful(is(STRING_LOWERED)));
395   }
396 
397   @Test public void test_6_step_failure_functor() {
398     Try<Long> stepped = Steps.begin(successful(STRING)).then(v -> successful(STRING)).then((first, second) -> successful(first + second))
399       .then((v1, v2, v3) -> successful(STRING)).then((v1, v2, v3, v4) -> successful(STRING_UPPERED))
400       .then((first, second, third, fourth, fifth) -> failure(exception6)).yield((value1, value2, value3, value4, value5, value6) -> new Long(value3));
401 
402     assertThat(stepped, isFailure(is(exception6)));
403   }
404 
405   @Test public void test_6_step_failure_supplier() {
406     Try<String> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
407       .then(() -> successful(STRING)).then(() -> successful(STRING_UPPERED)).then(() -> failure(exception6))
408       .yield((value1, value2, value3, value4, value5, value6) -> value5);
409 
410     assertThat(stepped, isFailure(is(exception6)));
411   }
412 
413   @Test public void test_6_step_failure_1() {
414     Try<String> stepped = Steps.begin(failure(exception1)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
415       .then(() -> successful(STRING)).then(() -> successful(STRING_UPPERED)).then(() -> successful(STRING_LOWERED))
416       .yield((value1, value2, value3, value4, value5, value6) -> value6);
417 
418     assertThat(stepped, isFailure(is(exception1)));
419   }
420 
421   @Test public void test_6_step_failure_2() {
422     Try<String> stepped = Steps.begin(successful(LONG)).then(() -> failure(exception2)).then(() -> successful(STRING + STRING))
423       .then(() -> successful(STRING)).then(() -> successful(STRING_UPPERED)).then(() -> successful(STRING_LOWERED))
424       .yield((value1, value2, value3, value4, value5, value6) -> value6);
425 
426     assertThat(stepped, isFailure(is(exception2)));
427   }
428 
429   @Test public void test_6_step_failure_3() {
430     Try<String> stepped = Steps.begin(successful(LONG)).then(() -> successful(STRING)).then(() -> failure(exception3)).then(() -> successful(STRING))
431       .then(() -> successful(STRING_UPPERED)).then(() -> successful(STRING_LOWERED))
432       .yield((value1, value2, value3, value4, value5, value6) -> value6);
433 
434     assertThat(stepped, isFailure(is(exception3)));
435   }
436 
437   @Test public void test_6_step_failure_4() {
438     Try<String> stepped = Steps.begin(successful(LONG)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
439       .then(() -> failure(exception4)).then(() -> successful(STRING_UPPERED)).then(() -> successful(STRING_LOWERED))
440       .yield((value1, value2, value3, value4, value5, value6) -> value6);
441 
442     assertThat(stepped, isFailure(is(exception4)));
443   }
444 
445   @Test public void test_6_step_failure_5() {
446     Try<String> stepped = Steps.begin(successful(LONG)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
447       .then(() -> successful(STRING)).then(() -> failure(exception5)).then(() -> successful(STRING_LOWERED))
448       .yield((value1, value2, value3, value4, value5, value6) -> value6);
449 
450     assertThat(stepped, isFailure(is(exception5)));
451   }
452 
453   @Test public void test_6_step_filter_success() {
454     Try<String> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
455       .then(() -> successful(STRING)).then(() -> successful(STRING_UPPERED)).then(() -> successful(STRING_LOWERED))
456       .filter(alwaysTrue6(), exceptionFilterFunction).yield((value1, value2, value3, value4, value5, value6) -> value6);
457 
458     assertThat(stepped, isSuccessful(is(STRING_LOWERED)));
459   }
460 
461   @Test public void test_6_step_filter_failure() {
462     Try<String> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
463       .then(() -> successful(STRING)).then(() -> successful(STRING_UPPERED)).then(() -> successful(STRING_LOWERED))
464       .filter(alwaysFalse6(), exceptionFilterFunction).yield((value1, value2, value3, value4, value5, value6) -> value6);
465 
466     assertThat(stepped, isFailure(is(exceptionFilter)));
467   }
468 
469   @Test public void test_6_step_filter_failure_1() {
470     Try<String> stepped = Steps.begin(successful(STRING)).filter(alwaysFalse(), exceptionFilterFunction).then(() -> successful(STRING))
471       .then(() -> successful(STRING + STRING)).then(() -> successful(STRING)).then(() -> successful(STRING_UPPERED))
472       .then(() -> successful(STRING_LOWERED)).yield((value1, value2, value3, value4, value5, value6) -> value6);
473 
474     assertThat(stepped, isFailure(is(exceptionFilter)));
475   }
476 
477   @Test public void test_6_step_filter_failure_2() {
478     Try<String> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).filter(alwaysFalse2(), exceptionFilterFunction)
479       .then(() -> successful(STRING + STRING)).then(() -> successful(STRING)).then(() -> successful(STRING_UPPERED))
480       .then(() -> successful(STRING_LOWERED)).yield((value1, value2, value3, value4, value5, value6) -> value6);
481 
482     assertThat(stepped, isFailure(is(exceptionFilter)));
483   }
484 
485   @Test public void test_6_step_filter_failure_3() {
486     Try<String> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
487       .filter(alwaysFalse3(), exceptionFilterFunction).then(() -> successful(STRING)).then(() -> successful(STRING_UPPERED))
488       .then(() -> successful(STRING_LOWERED)).yield((value1, value2, value3, value4, value5, value6) -> value6);
489 
490     assertThat(stepped, isFailure(is(exceptionFilter)));
491   }
492 
493   @Test public void test_6_step_filter_failure_4() {
494     Try<String> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
495       .then(() -> successful(STRING)).filter(alwaysFalse4(), exceptionFilterFunction).then(() -> successful(STRING_UPPERED))
496       .then(() -> successful(STRING_LOWERED)).yield((value1, value2, value3, value4, value5, value6) -> value6);
497 
498     assertThat(stepped, isFailure(is(exceptionFilter)));
499   }
500 
501   @Test public void test_6_step_filter_failure_5() {
502     Try<String> stepped = Steps.begin(successful(STRING)).then(() -> successful(STRING)).then(() -> successful(STRING + STRING))
503       .then(() -> successful(STRING)).then(() -> successful(STRING_UPPERED)).filter(alwaysFalse5(), exceptionFilterFunction)
504       .then(() -> successful(STRING_LOWERED)).yield((value1, value2, value3, value4, value5, value6) -> value6);
505 
506     assertThat(stepped, isFailure(is(exceptionFilter)));
507   }
508 
509 }