This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 1fe0d84086f81fb28a559f306434e50468c897b0 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Thu Mar 21 13:38:10 2019 +0700 MAILBOX-388 Add runnable -> function util --- .../org/apache/james/util/FunctionalUtils.java | 7 ++++++ .../org/apache/james/util/FunctionalUtilsTest.java | 28 +++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/server/container/util/src/main/java/org/apache/james/util/FunctionalUtils.java b/server/container/util/src/main/java/org/apache/james/util/FunctionalUtils.java index 54c8305..651f8ba 100644 --- a/server/container/util/src/main/java/org/apache/james/util/FunctionalUtils.java +++ b/server/container/util/src/main/java/org/apache/james/util/FunctionalUtils.java @@ -31,6 +31,13 @@ public class FunctionalUtils { }; } + public static <T> UnaryOperator<T> identityWithSideEffect(Runnable runnable) { + return argument -> { + runnable.run(); + return argument; + }; + } + public static <T> Predicate<T> toPredicate(Function<T, Boolean> function) { return value -> function.apply(value); } diff --git a/server/container/util/src/test/java/org/apache/james/util/FunctionalUtilsTest.java b/server/container/util/src/test/java/org/apache/james/util/FunctionalUtilsTest.java index 2147ef4..6c736b0 100644 --- a/server/container/util/src/test/java/org/apache/james/util/FunctionalUtilsTest.java +++ b/server/container/util/src/test/java/org/apache/james/util/FunctionalUtilsTest.java @@ -32,15 +32,41 @@ class FunctionalUtilsTest { @Nested class ToFunction { @Test - void shouldCallConsumerAndReturnTheGivenParameter() { + void toFunctionShouldReturnTheGivenParameter() { Counter counter = new Counter(26); Consumer<Integer> consumer = counter::increment; Function<Integer, Integer> function = FunctionalUtils.toFunction(consumer); assertThat(function.apply(16)).isEqualTo(16); + } + + @Test + void toFunctionShouldCallConsumer() { + Counter counter = new Counter(26); + Consumer<Integer> consumer = counter::increment; + FunctionalUtils.toFunction(consumer).apply(16); + assertThat(counter.getCounter()).isEqualTo(42); } + @Test + void identityWithSideEffectShouldReturnTheGivenParameterForRunnable() { + Counter counter = new Counter(26); + Runnable runnable = () -> counter.increment(1); + Function<Integer, Integer> function = FunctionalUtils.identityWithSideEffect(runnable); + + assertThat(function.apply(16)).isEqualTo(16); + } + + @Test + void identityWithSideEffectShouldCallRunnable() { + Counter counter = new Counter(26); + Runnable runnable = () -> counter.increment(1); + FunctionalUtils.identityWithSideEffect(runnable).apply(23); + + assertThat(counter.getCounter()).isEqualTo(27); + } + private class Counter { private Integer counter; --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org