This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-lang.git
The following commit(s) were added to refs/heads/master by this push: new 5d1a551 Fix checkstyle: End files in a new line. 5d1a551 is described below commit 5d1a5517c99067a49b85891f194d09bf00ec1006 Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Wed Jun 17 16:38:47 2020 -0400 Fix checkstyle: End files in a new line. --- .../lang3/function/FailableBooleanSupplier.java | 2 +- .../function/FailableDoubleBinaryOperator.java | 2 +- .../lang3/function/FailableDoubleConsumer.java | 2 +- .../lang3/function/FailableDoubleFunction.java | 2 +- .../lang3/function/FailableDoublePredicate.java | 2 +- .../lang3/function/FailableDoubleSupplier.java | 2 +- .../function/FailableDoubleToIntFunction.java | 2 +- .../function/FailableDoubleToLongFunction.java | 2 +- .../lang3/function/FailableIntBinaryOperator.java | 2 +- .../lang3/function/FailableIntConsumer.java | 2 +- .../lang3/function/FailableIntFunction.java | 2 +- .../lang3/function/FailableIntPredicate.java | 2 +- .../lang3/function/FailableIntSupplier.java | 2 +- .../function/FailableIntToDoubleFunction.java | 2 +- .../lang3/function/FailableIntToLongFunction.java | 2 +- .../lang3/function/FailableLongBinaryOperator.java | 2 +- .../lang3/function/FailableLongConsumer.java | 2 +- .../lang3/function/FailableLongFunction.java | 2 +- .../lang3/function/FailableLongPredicate.java | 2 +- .../lang3/function/FailableLongSupplier.java | 2 +- .../function/FailableLongToDoubleFunction.java | 2 +- .../lang3/function/FailableLongToIntFunction.java | 2 +- .../lang3/function/FailableObjDoubleConsumer.java | 2 +- .../lang3/function/FailableObjIntConsumer.java | 2 +- .../lang3/function/FailableObjLongConsumer.java | 2 +- .../lang3/function/FailableToDoubleBiFunction.java | 2 +- .../lang3/function/FailableToDoubleFunction.java | 2 +- .../lang3/function/FailableToIntBiFunction.java | 2 +- .../lang3/function/FailableToIntFunction.java | 2 +- .../lang3/function/FailableToLongBiFunction.java | 2 +- .../lang3/function/FailableToLongFunction.java | 2 +- .../lang3/function/FailableFunctionsTest.java | 611 +++++++++++++++------ 32 files changed, 475 insertions(+), 198 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/function/FailableBooleanSupplier.java b/src/main/java/org/apache/commons/lang3/function/FailableBooleanSupplier.java index 0deaef5..25870de 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableBooleanSupplier.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableBooleanSupplier.java @@ -35,4 +35,4 @@ public interface FailableBooleanSupplier<T extends Throwable> { * @throws T if the supplier fails */ boolean getAsBoolean() throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableDoubleBinaryOperator.java b/src/main/java/org/apache/commons/lang3/function/FailableDoubleBinaryOperator.java index db58976..1968044 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableDoubleBinaryOperator.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableDoubleBinaryOperator.java @@ -37,4 +37,4 @@ public interface FailableDoubleBinaryOperator<T extends Throwable> { * @throws T if the operation fails */ double applyAsDouble(double left, double right) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableDoubleConsumer.java b/src/main/java/org/apache/commons/lang3/function/FailableDoubleConsumer.java index ade6e0c..63bc40e 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableDoubleConsumer.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableDoubleConsumer.java @@ -35,4 +35,4 @@ public interface FailableDoubleConsumer<T extends Throwable> { * @throws T Thrown when the consumer fails. */ void accept(double value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableDoubleFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableDoubleFunction.java index 156b204..48dec10 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableDoubleFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableDoubleFunction.java @@ -37,4 +37,4 @@ public interface FailableDoubleFunction<R, T extends Throwable> { * @throws T Thrown when the function fails. */ R apply(double input) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableDoublePredicate.java b/src/main/java/org/apache/commons/lang3/function/FailableDoublePredicate.java index fda8786..e4bf163 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableDoublePredicate.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableDoublePredicate.java @@ -36,4 +36,4 @@ public interface FailableDoublePredicate<T extends Throwable> { * @throws T Thrown when the consumer fails. */ boolean test(double value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableDoubleSupplier.java b/src/main/java/org/apache/commons/lang3/function/FailableDoubleSupplier.java index 9fb751b..47ac129 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableDoubleSupplier.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableDoubleSupplier.java @@ -35,4 +35,4 @@ public interface FailableDoubleSupplier<T extends Throwable> { * @throws T if the supplier fails */ double getAsDouble() throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableDoubleToIntFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableDoubleToIntFunction.java index 00db9f3..403400f 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableDoubleToIntFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableDoubleToIntFunction.java @@ -36,4 +36,4 @@ public interface FailableDoubleToIntFunction<T extends Throwable> { * @throws T Thrown when the function fails. */ int applyAsInt(double value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableDoubleToLongFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableDoubleToLongFunction.java index 0eae76c..71cab0e 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableDoubleToLongFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableDoubleToLongFunction.java @@ -36,4 +36,4 @@ public interface FailableDoubleToLongFunction<T extends Throwable> { * @throws T if the operation fails */ int applyAsLong(double value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableIntBinaryOperator.java b/src/main/java/org/apache/commons/lang3/function/FailableIntBinaryOperator.java index 3eaca9d..7e41e54 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableIntBinaryOperator.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableIntBinaryOperator.java @@ -37,4 +37,4 @@ public interface FailableIntBinaryOperator<T extends Throwable> { * @throws T if the operation fails */ int applyAsInt(int left, int right) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableIntConsumer.java b/src/main/java/org/apache/commons/lang3/function/FailableIntConsumer.java index 54e7710..e7ce74c 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableIntConsumer.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableIntConsumer.java @@ -35,4 +35,4 @@ public interface FailableIntConsumer<T extends Throwable> { * @throws T Thrown when the consumer fails. */ void accept(int value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableIntFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableIntFunction.java index 07e35c6..907f098 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableIntFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableIntFunction.java @@ -37,4 +37,4 @@ public interface FailableIntFunction<R, T extends Throwable> { * @throws T Thrown when the function fails. */ R apply(int input) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableIntPredicate.java b/src/main/java/org/apache/commons/lang3/function/FailableIntPredicate.java index 40e3877..3687f9c 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableIntPredicate.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableIntPredicate.java @@ -36,4 +36,4 @@ public interface FailableIntPredicate<T extends Throwable> { * @throws T Thrown when the consumer fails. */ boolean test(int value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableIntSupplier.java b/src/main/java/org/apache/commons/lang3/function/FailableIntSupplier.java index fed9cd2..f1f72e4 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableIntSupplier.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableIntSupplier.java @@ -35,4 +35,4 @@ public interface FailableIntSupplier<T extends Throwable> { * @throws T if the supplier fails */ int getAsInt() throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableIntToDoubleFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableIntToDoubleFunction.java index f0d9164..51a81ac 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableIntToDoubleFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableIntToDoubleFunction.java @@ -36,4 +36,4 @@ public interface FailableIntToDoubleFunction<T extends Throwable> { * @throws T Thrown when the function fails. */ double applyAsDouble(int value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableIntToLongFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableIntToLongFunction.java index f88d5ef..aef8c57 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableIntToLongFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableIntToLongFunction.java @@ -36,4 +36,4 @@ public interface FailableIntToLongFunction<T extends Throwable> { * @throws T Thrown when the function fails. */ long applyAsLong(int value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableLongBinaryOperator.java b/src/main/java/org/apache/commons/lang3/function/FailableLongBinaryOperator.java index e58acf4..6ddf2ab 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableLongBinaryOperator.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableLongBinaryOperator.java @@ -37,4 +37,4 @@ public interface FailableLongBinaryOperator<T extends Throwable> { * @throws T if the operation fails */ long applyAsLong(long left, long right) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableLongConsumer.java b/src/main/java/org/apache/commons/lang3/function/FailableLongConsumer.java index 7eb784f..465112e 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableLongConsumer.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableLongConsumer.java @@ -35,4 +35,4 @@ public interface FailableLongConsumer<T extends Throwable> { * @throws T Thrown when the consumer fails. */ void accept(long object) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableLongFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableLongFunction.java index 904f946..b36b272 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableLongFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableLongFunction.java @@ -37,4 +37,4 @@ public interface FailableLongFunction<R, T extends Throwable> { * @throws T Thrown when the function fails. */ R apply(long input) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableLongPredicate.java b/src/main/java/org/apache/commons/lang3/function/FailableLongPredicate.java index 259b82e..3255082 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableLongPredicate.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableLongPredicate.java @@ -36,4 +36,4 @@ public interface FailableLongPredicate<T extends Throwable> { * @throws T Thrown when the consumer fails. */ boolean test(long value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableLongSupplier.java b/src/main/java/org/apache/commons/lang3/function/FailableLongSupplier.java index 67a1aa4..31d42a2 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableLongSupplier.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableLongSupplier.java @@ -35,4 +35,4 @@ public interface FailableLongSupplier<T extends Throwable> { * @throws T if the supplier fails */ long getAsLong() throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableLongToDoubleFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableLongToDoubleFunction.java index dcd64ec..f83d6a2 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableLongToDoubleFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableLongToDoubleFunction.java @@ -36,4 +36,4 @@ public interface FailableLongToDoubleFunction<T extends Throwable> { * @throws T Thrown when the function fails. */ double applyAsDouble(long value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableLongToIntFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableLongToIntFunction.java index 80cb6ae..825491e 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableLongToIntFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableLongToIntFunction.java @@ -36,4 +36,4 @@ public interface FailableLongToIntFunction<T extends Throwable> { * @throws T Thrown when the function fails. */ int applyAsInt(long value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableObjDoubleConsumer.java b/src/main/java/org/apache/commons/lang3/function/FailableObjDoubleConsumer.java index a18d3f3..70555d5 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableObjDoubleConsumer.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableObjDoubleConsumer.java @@ -37,4 +37,4 @@ public interface FailableObjDoubleConsumer<O, T extends Throwable> { * @throws T Thrown when the consumer fails. */ void accept(O object, double value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableObjIntConsumer.java b/src/main/java/org/apache/commons/lang3/function/FailableObjIntConsumer.java index 21bf5cd..68954a4 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableObjIntConsumer.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableObjIntConsumer.java @@ -37,4 +37,4 @@ public interface FailableObjIntConsumer<O, T extends Throwable> { * @throws T Thrown when the consumer fails. */ void accept(O object, int value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableObjLongConsumer.java b/src/main/java/org/apache/commons/lang3/function/FailableObjLongConsumer.java index 32c4256..a503f5e 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableObjLongConsumer.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableObjLongConsumer.java @@ -37,4 +37,4 @@ public interface FailableObjLongConsumer<O, T extends Throwable> { * @throws T Thrown when the consumer fails. */ void accept(O object, long value) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableToDoubleBiFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableToDoubleBiFunction.java index de932f4..766383b 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableToDoubleBiFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableToDoubleBiFunction.java @@ -39,4 +39,4 @@ public interface FailableToDoubleBiFunction<O1, O2, T extends Throwable> { * @throws T Thrown when the function fails. */ double applyAsDouble(O1 t, O2 u) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableToDoubleFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableToDoubleFunction.java index 1edc934..9e3fedd 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableToDoubleFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableToDoubleFunction.java @@ -37,4 +37,4 @@ public interface FailableToDoubleFunction<I, T extends Throwable> { * @throws T Thrown when the function fails. */ double applyAsDouble(I t) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableToIntBiFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableToIntBiFunction.java index 126a80c..7430a09 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableToIntBiFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableToIntBiFunction.java @@ -39,4 +39,4 @@ public interface FailableToIntBiFunction<O1, O2, T extends Throwable> { * @throws T Thrown when the function fails. */ int applyAsInt(O1 t, O2 u) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableToIntFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableToIntFunction.java index 27c2dae..0fc91ad 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableToIntFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableToIntFunction.java @@ -37,4 +37,4 @@ public interface FailableToIntFunction<I, T extends Throwable> { * @throws T Thrown when the function fails. */ int applyAsInt(I t) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableToLongBiFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableToLongBiFunction.java index dcf2fca..6a34026 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableToLongBiFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableToLongBiFunction.java @@ -39,4 +39,4 @@ public interface FailableToLongBiFunction<O1, O2, T extends Throwable> { * @throws T Thrown when the function fails. */ long applyAsLong(O1 t, O2 u) throws T; -} \ No newline at end of file +} diff --git a/src/main/java/org/apache/commons/lang3/function/FailableToLongFunction.java b/src/main/java/org/apache/commons/lang3/function/FailableToLongFunction.java index 9995411..f46bbcc 100644 --- a/src/main/java/org/apache/commons/lang3/function/FailableToLongFunction.java +++ b/src/main/java/org/apache/commons/lang3/function/FailableToLongFunction.java @@ -37,4 +37,4 @@ public interface FailableToLongFunction<I, T extends Throwable> { * @throws T Thrown when the function fails. */ long applyAsLong(I t) throws T; -} \ No newline at end of file +} diff --git a/src/test/java/org/apache/commons/lang3/function/FailableFunctionsTest.java b/src/test/java/org/apache/commons/lang3/function/FailableFunctionsTest.java index c0ce3af..468c5a4 100644 --- a/src/test/java/org/apache/commons/lang3/function/FailableFunctionsTest.java +++ b/src/test/java/org/apache/commons/lang3/function/FailableFunctionsTest.java @@ -27,8 +27,17 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; import java.io.UncheckedIOException; import java.lang.reflect.UndeclaredThrowableException; +import java.util.concurrent.Callable; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.BiPredicate; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; import org.apache.commons.lang3.Functions; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; /** @@ -66,17 +75,17 @@ public class FailableFunctionsTest { return true; } - static boolean testDouble(double value) throws SomeException { + static boolean testDouble(final double value) throws SomeException { throwOnOdd(); return true; } - static boolean testInt(int value) throws SomeException { + static boolean testInt(final int value) throws SomeException { throwOnOdd(); return true; } - static boolean testLong(long value) throws SomeException { + static boolean testLong(final long value) throws SomeException { throwOnOdd(); return true; } @@ -149,7 +158,7 @@ public class FailableFunctionsTest { test(throwable); } - public Object test(Object input1, Object input2) throws Throwable { + public Object test(final Object input1, final Object input2) throws Throwable { test(throwable); return acceptedObject; } @@ -215,41 +224,41 @@ public class FailableFunctionsTest { return 0; } - public void testDouble(double i) throws Throwable { + public void testDouble(final double i) throws Throwable { test(throwable); acceptedPrimitiveObject1 = (P) ((Double) i); } - public double testDoubleDouble(double i, double j) throws Throwable { + public double testDoubleDouble(final double i, final double j) throws Throwable { test(throwable); acceptedPrimitiveObject1 = (P) ((Double) i); acceptedPrimitiveObject2 = (P) ((Double) j); return 3d; } - public void testInt(int i) throws Throwable { + public void testInt(final int i) throws Throwable { test(throwable); acceptedPrimitiveObject1 = (P) ((Integer) i); } - public void testLong(long i) throws Throwable { + public void testLong(final long i) throws Throwable { test(throwable); acceptedPrimitiveObject1 = (P) ((Long) i); } - public void testObjDouble(T object, double i) throws Throwable { + public void testObjDouble(final T object, final double i) throws Throwable { test(throwable); acceptedObject = object; acceptedPrimitiveObject1 = (P) ((Double) i); } - public void testObjInt(T object, int i) throws Throwable { + public void testObjInt(final T object, final int i) throws Throwable { test(throwable); acceptedObject = object; acceptedPrimitiveObject1 = (P) ((Integer) i); } - public void testObjLong(T object, long i) throws Throwable { + public void testObjLong(final T object, final long i) throws Throwable { test(throwable); acceptedObject = object; acceptedPrimitiveObject1 = (P) ((Long) i); @@ -257,106 +266,151 @@ public class FailableFunctionsTest { } @Test - public void testAcceptDoubleConsumer() { + void testAcceptBiConsumer() { + final IllegalStateException ise = new IllegalStateException(); + final Testable<?, ?> testable = new Testable<>(null); + Throwable e = assertThrows(IllegalStateException.class, () -> Failable.accept(Testable::test, testable, ise)); + assertSame(ise, e); + + final Error error = new OutOfMemoryError(); + e = assertThrows(OutOfMemoryError.class, () -> Failable.accept(Testable::test, testable, error)); + assertSame(error, e); + + final IOException ioe = new IOException("Unknown I/O error"); + testable.setThrowable(ioe); + e = assertThrows(UncheckedIOException.class, () -> Failable.accept(Testable::test, testable, ioe)); + final Throwable t = e.getCause(); + assertNotNull(t); + assertSame(ioe, t); + + testable.setThrowable(null); + Failable.accept(Testable::test, testable, (Throwable) null); + } + + @Test + void testAcceptConsumer() { + final IllegalStateException ise = new IllegalStateException(); + final Testable<?, ?> testable = new Testable<>(ise); + Throwable e = assertThrows(IllegalStateException.class, () -> Failable.accept(Testable::test, testable)); + assertSame(ise, e); + + final Error error = new OutOfMemoryError(); + testable.setThrowable(error); + e = assertThrows(OutOfMemoryError.class, () -> Failable.accept(Testable::test, testable)); + assertSame(error, e); + + final IOException ioe = new IOException("Unknown I/O error"); + testable.setThrowable(ioe); + e = assertThrows(UncheckedIOException.class, () -> Failable.accept(Testable::test, testable)); + final Throwable t = e.getCause(); + assertNotNull(t); + assertSame(ioe, t); + + testable.setThrowable(null); + Failable.accept(Testable::test, testable); + } + + @Test + void testAcceptDoubleConsumer() { final IllegalStateException ise = new IllegalStateException(); final Testable<?, Double> testable = new Testable<>(ise); - Throwable e = assertThrows(IllegalStateException.class, () -> Functions.accept(testable::testDouble, 1d)); + Throwable e = assertThrows(IllegalStateException.class, () -> Failable.accept(testable::testDouble, 1d)); assertSame(ise, e); assertNull(testable.getAcceptedPrimitiveObject1()); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.accept(testable::testDouble, 1d)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.accept(testable::testDouble, 1d)); assertSame(error, e); assertNull(testable.getAcceptedPrimitiveObject1()); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.accept(testable::testDouble, 1d)); + e = assertThrows(UncheckedIOException.class, () -> Failable.accept(testable::testDouble, 1d)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); assertNull(testable.getAcceptedPrimitiveObject1()); testable.setThrowable(null); - Functions.accept(testable::testDouble, 1d); + Failable.accept(testable::testDouble, 1d); assertEquals(1, testable.getAcceptedPrimitiveObject1()); } @Test - public void testAcceptIntConsumer() { + void testAcceptIntConsumer() { final IllegalStateException ise = new IllegalStateException(); final Testable<?, Integer> testable = new Testable<>(ise); - Throwable e = assertThrows(IllegalStateException.class, () -> Functions.accept(testable::testInt, 1)); + Throwable e = assertThrows(IllegalStateException.class, () -> Failable.accept(testable::testInt, 1)); assertSame(ise, e); assertNull(testable.getAcceptedPrimitiveObject1()); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.accept(testable::testInt, 1)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.accept(testable::testInt, 1)); assertSame(error, e); assertNull(testable.getAcceptedPrimitiveObject1()); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.accept(testable::testInt, 1)); + e = assertThrows(UncheckedIOException.class, () -> Failable.accept(testable::testInt, 1)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); assertNull(testable.getAcceptedPrimitiveObject1()); testable.setThrowable(null); - Functions.accept(testable::testInt, 1); + Failable.accept(testable::testInt, 1); assertEquals(1, testable.getAcceptedPrimitiveObject1()); } @Test - public void testAcceptLongConsumer() { + void testAcceptLongConsumer() { final IllegalStateException ise = new IllegalStateException(); final Testable<?, Long> testable = new Testable<>(ise); - Throwable e = assertThrows(IllegalStateException.class, () -> Functions.accept(testable::testLong, 1L)); + Throwable e = assertThrows(IllegalStateException.class, () -> Failable.accept(testable::testLong, 1L)); assertSame(ise, e); assertNull(testable.getAcceptedPrimitiveObject1()); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.accept(testable::testLong, 1L)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.accept(testable::testLong, 1L)); assertSame(error, e); assertNull(testable.getAcceptedPrimitiveObject1()); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.accept(testable::testLong, 1L)); + e = assertThrows(UncheckedIOException.class, () -> Failable.accept(testable::testLong, 1L)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); assertNull(testable.getAcceptedPrimitiveObject1()); testable.setThrowable(null); - Functions.accept(testable::testLong, 1L); + Failable.accept(testable::testLong, 1L); assertEquals(1, testable.getAcceptedPrimitiveObject1()); } @Test - public void testAcceptObjDoubleConsumer() { + void testAcceptObjDoubleConsumer() { final IllegalStateException ise = new IllegalStateException(); final Testable<String, Double> testable = new Testable<>(ise); Throwable e = assertThrows(IllegalStateException.class, - () -> Functions.accept(testable::testObjDouble, "X", 1d)); + () -> Failable.accept(testable::testObjDouble, "X", 1d)); assertSame(ise, e); assertNull(testable.getAcceptedObject()); assertNull(testable.getAcceptedPrimitiveObject1()); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.accept(testable::testObjDouble, "X", 1d)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.accept(testable::testObjDouble, "X", 1d)); assertSame(error, e); assertNull(testable.getAcceptedObject()); assertNull(testable.getAcceptedPrimitiveObject1()); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.accept(testable::testObjDouble, "X", 1d)); + e = assertThrows(UncheckedIOException.class, () -> Failable.accept(testable::testObjDouble, "X", 1d)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); @@ -364,30 +418,30 @@ public class FailableFunctionsTest { assertNull(testable.getAcceptedPrimitiveObject1()); testable.setThrowable(null); - Functions.accept(testable::testObjDouble, "X", 1d); + Failable.accept(testable::testObjDouble, "X", 1d); assertEquals("X", testable.getAcceptedObject()); assertEquals(1d, testable.getAcceptedPrimitiveObject1()); } @Test - public void testAcceptObjIntConsumer() { + void testAcceptObjIntConsumer() { final IllegalStateException ise = new IllegalStateException(); final Testable<String, Integer> testable = new Testable<>(ise); - Throwable e = assertThrows(IllegalStateException.class, () -> Functions.accept(testable::testObjInt, "X", 1)); + Throwable e = assertThrows(IllegalStateException.class, () -> Failable.accept(testable::testObjInt, "X", 1)); assertSame(ise, e); assertNull(testable.getAcceptedObject()); assertNull(testable.getAcceptedPrimitiveObject1()); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.accept(testable::testObjInt, "X", 1)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.accept(testable::testObjInt, "X", 1)); assertSame(error, e); assertNull(testable.getAcceptedObject()); assertNull(testable.getAcceptedPrimitiveObject1()); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.accept(testable::testObjInt, "X", 1)); + e = assertThrows(UncheckedIOException.class, () -> Failable.accept(testable::testObjInt, "X", 1)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); @@ -395,30 +449,30 @@ public class FailableFunctionsTest { assertNull(testable.getAcceptedPrimitiveObject1()); testable.setThrowable(null); - Functions.accept(testable::testObjInt, "X", 1); + Failable.accept(testable::testObjInt, "X", 1); assertEquals("X", testable.getAcceptedObject()); assertEquals(1, testable.getAcceptedPrimitiveObject1()); } @Test - public void testAcceptObjLongConsumer() { + void testAcceptObjLongConsumer() { final IllegalStateException ise = new IllegalStateException(); final Testable<String, Long> testable = new Testable<>(ise); - Throwable e = assertThrows(IllegalStateException.class, () -> Functions.accept(testable::testObjLong, "X", 1L)); + Throwable e = assertThrows(IllegalStateException.class, () -> Failable.accept(testable::testObjLong, "X", 1L)); assertSame(ise, e); assertNull(testable.getAcceptedObject()); assertNull(testable.getAcceptedPrimitiveObject1()); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.accept(testable::testObjLong, "X", 1L)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.accept(testable::testObjLong, "X", 1L)); assertSame(error, e); assertNull(testable.getAcceptedObject()); assertNull(testable.getAcceptedPrimitiveObject1()); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.accept(testable::testObjLong, "X", 1L)); + e = assertThrows(UncheckedIOException.class, () -> Failable.accept(testable::testObjLong, "X", 1L)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); @@ -426,7 +480,7 @@ public class FailableFunctionsTest { assertNull(testable.getAcceptedPrimitiveObject1()); testable.setThrowable(null); - Functions.accept(testable::testObjLong, "X", 1L); + Failable.accept(testable::testObjLong, "X", 1L); assertEquals("X", testable.getAcceptedObject()); assertEquals(1L, testable.getAcceptedPrimitiveObject1()); } @@ -436,20 +490,20 @@ public class FailableFunctionsTest { final IllegalStateException ise = new IllegalStateException(); final Testable<?, ?> testable = new Testable<>(null); Throwable e = assertThrows(IllegalStateException.class, - () -> Functions.apply(Testable::testAsInteger, testable, ise)); + () -> Failable.apply(Testable::testAsInteger, testable, ise)); assertSame(ise, e); final Error error = new OutOfMemoryError(); - e = assertThrows(OutOfMemoryError.class, () -> Functions.apply(Testable::testAsInteger, testable, error)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.apply(Testable::testAsInteger, testable, error)); assertSame(error, e); final IOException ioe = new IOException("Unknown I/O error"); - e = assertThrows(UncheckedIOException.class, () -> Functions.apply(Testable::testAsInteger, testable, ioe)); + e = assertThrows(UncheckedIOException.class, () -> Failable.apply(Testable::testAsInteger, testable, ioe)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); - final Integer i = Functions.apply(Testable::testAsInteger, testable, (Throwable) null); + final Integer i = Failable.apply(Testable::testAsInteger, testable, (Throwable) null); assertNotNull(i); assertEquals(0, i.intValue()); } @@ -458,12 +512,12 @@ public class FailableFunctionsTest { public void testApplyDoubleBinaryOperator() { final IllegalStateException ise = new IllegalStateException(); final Testable<?, Double> testable = new Testable<>(ise); - Throwable e = assertThrows(IllegalStateException.class, - () -> Functions.applyAsDouble(testable::testDoubleDouble, 1d, 2d)); + final Throwable e = assertThrows(IllegalStateException.class, + () -> Failable.applyAsDouble(testable::testDoubleDouble, 1d, 2d)); assertSame(ise, e); final Testable<?, Double> testable2 = new Testable<>(null); - final double i = Functions.applyAsDouble(testable2::testDoubleDouble, 1d, 2d); + final double i = Failable.applyAsDouble(testable2::testDoubleDouble, 1d, 2d); assertEquals(3d, i); } @@ -472,31 +526,74 @@ public class FailableFunctionsTest { final IllegalStateException ise = new IllegalStateException(); final Testable<?, ?> testable = new Testable<>(ise); Throwable e = assertThrows(IllegalStateException.class, - () -> Functions.apply(Testable::testAsInteger, testable)); + () -> Failable.apply(Testable::testAsInteger, testable)); assertSame(ise, e); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.apply(Testable::testAsInteger, testable)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.apply(Testable::testAsInteger, testable)); assertSame(error, e); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.apply(Testable::testAsInteger, testable)); + e = assertThrows(UncheckedIOException.class, () -> Failable.apply(Testable::testAsInteger, testable)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); testable.setThrowable(null); - final Integer i = Functions.apply(Testable::testAsInteger, testable); + final Integer i = Failable.apply(Testable::testAsInteger, testable); assertNotNull(i); assertEquals(0, i.intValue()); } @Test - public void testAsRunnable() { + void testAsCallable() { + FailureOnOddInvocations.invocations = 0; + final FailableCallable<FailureOnOddInvocations, SomeException> failableCallable = FailureOnOddInvocations::new; + final Callable<FailureOnOddInvocations> callable = Failable.asCallable(failableCallable); + final UndeclaredThrowableException e = assertThrows(UndeclaredThrowableException.class, callable::call); + final Throwable cause = e.getCause(); + assertNotNull(cause); + assertTrue(cause instanceof SomeException); + assertEquals("Odd Invocation: 1", cause.getMessage()); + final FailureOnOddInvocations instance; + try { + instance = callable.call(); + } catch (final Exception ex) { + throw Failable.rethrow(ex); + } + assertNotNull(instance); + } + + @Test + void testAsConsumer() { + final IllegalStateException ise = new IllegalStateException(); + final Testable<?, ?> testable = new Testable<>(ise); + final Consumer<Testable<?, ?>> consumer = Failable.asConsumer(Testable::test); + Throwable e = assertThrows(IllegalStateException.class, () -> consumer.accept(testable)); + assertSame(ise, e); + + final Error error = new OutOfMemoryError(); + testable.setThrowable(error); + e = assertThrows(OutOfMemoryError.class, () -> consumer.accept(testable)); + assertSame(error, e); + + final IOException ioe = new IOException("Unknown I/O error"); + testable.setThrowable(ioe); + e = assertThrows(UncheckedIOException.class, () -> consumer.accept(testable)); + final Throwable t = e.getCause(); + assertNotNull(t); + assertSame(ioe, t); + + testable.setThrowable(null); + Failable.accept(Testable::test, testable); + } + + @Test + void testAsRunnable() { FailureOnOddInvocations.invocations = 0; - final Runnable runnable = Functions.asRunnable(FailureOnOddInvocations::new); + final Runnable runnable = Failable.asRunnable(FailureOnOddInvocations::new); final UndeclaredThrowableException e = assertThrows(UndeclaredThrowableException.class, runnable::run); final Throwable cause = e.getCause(); assertNotNull(cause); @@ -508,6 +605,109 @@ public class FailableFunctionsTest { } @Test + public void testAsSupplier() { + FailureOnOddInvocations.invocations = 0; + final FailableSupplier<FailureOnOddInvocations, Throwable> failableSupplier = FailureOnOddInvocations::new; + final Supplier<FailureOnOddInvocations> supplier = Failable.asSupplier(failableSupplier); + final UndeclaredThrowableException e = assertThrows(UndeclaredThrowableException.class, supplier::get); + final Throwable cause = e.getCause(); + assertNotNull(cause); + assertTrue(cause instanceof SomeException); + assertEquals("Odd Invocation: 1", cause.getMessage()); + assertNotNull(supplier.get()); + } + + @Test + void testBiConsumer() { + final IllegalStateException ise = new IllegalStateException(); + final Testable<?, ?> testable = new Testable<>(null); + final FailableBiConsumer<Testable<?, ?>, Throwable, Throwable> failableBiConsumer = (t, th) -> { + t.setThrowable(th); + t.test(); + }; + final BiConsumer<Testable<?, ?>, Throwable> consumer = Failable.asBiConsumer(failableBiConsumer); + Throwable e = assertThrows(IllegalStateException.class, () -> consumer.accept(testable, ise)); + assertSame(ise, e); + + final Error error = new OutOfMemoryError(); + e = assertThrows(OutOfMemoryError.class, () -> consumer.accept(testable, error)); + assertSame(error, e); + + final IOException ioe = new IOException("Unknown I/O error"); + testable.setThrowable(ioe); + e = assertThrows(UncheckedIOException.class, () -> consumer.accept(testable, ioe)); + final Throwable t = e.getCause(); + assertNotNull(t); + assertSame(ioe, t); + + consumer.accept(testable, null); + } + + @Test + public void testBiFunction() { + final IllegalStateException ise = new IllegalStateException(); + final Testable<?, ?> testable = new Testable<>(ise); + final FailableBiFunction<Testable<?, ?>, Throwable, Integer, Throwable> failableBiFunction = (t, th) -> { + t.setThrowable(th); + return Integer.valueOf(t.testAsInteger()); + }; + final BiFunction<Testable<?, ?>, Throwable, Integer> biFunction = Failable.asBiFunction(failableBiFunction); + Throwable e = assertThrows(IllegalStateException.class, () -> biFunction.apply(testable, ise)); + assertSame(ise, e); + + final Error error = new OutOfMemoryError(); + testable.setThrowable(error); + e = assertThrows(OutOfMemoryError.class, () -> biFunction.apply(testable, error)); + assertSame(error, e); + + final IOException ioe = new IOException("Unknown I/O error"); + testable.setThrowable(ioe); + e = assertThrows(UncheckedIOException.class, () -> biFunction.apply(testable, ioe)); + final Throwable t = e.getCause(); + assertNotNull(t); + assertSame(ioe, t); + + assertEquals(0, biFunction.apply(testable, null).intValue()); + } + + @Test + @DisplayName("Test that asPredicate(FailableBiPredicate) is converted to -> BiPredicate ") + public void testBiPredicate() { + FailureOnOddInvocations.invocations = 0; + final FailableBiPredicate<Object, Object, Throwable> failableBiPredicate = (t1, + t2) -> FailureOnOddInvocations.failingBool(); + final BiPredicate<?, ?> predicate = Failable.asBiPredicate(failableBiPredicate); + final UndeclaredThrowableException e = assertThrows(UndeclaredThrowableException.class, + () -> predicate.test(null, null)); + final Throwable cause = e.getCause(); + assertNotNull(cause); + assertTrue(cause instanceof SomeException); + assertEquals("Odd Invocation: 1", cause.getMessage()); + final boolean instance = predicate.test(null, null); + assertNotNull(instance); + } + + @Test + void testCallable() { + FailureOnOddInvocations.invocations = 0; + final UndeclaredThrowableException e = assertThrows(UndeclaredThrowableException.class, + () -> Failable.run(FailureOnOddInvocations::new)); + final Throwable cause = e.getCause(); + assertNotNull(cause); + assertTrue(cause instanceof SomeException); + assertEquals("Odd Invocation: 1", cause.getMessage()); + final FailureOnOddInvocations instance = Failable.call(FailureOnOddInvocations::new); + assertNotNull(instance); + } + + @Test + public void testConstructor() { + // We allow this, which must have been an omission to make the ctor private. + // We could make the ctor private in 4.0. + new Functions(); + } + + @Test public void testDoublePredicate() throws Throwable { FailureOnOddInvocations.invocations = 0; final FailableDoublePredicate<Throwable> failablePredicate = t1 -> FailureOnOddInvocations.testDouble(t1); @@ -516,27 +716,54 @@ public class FailableFunctionsTest { } @Test + public void testFunction() { + final IllegalStateException ise = new IllegalStateException(); + final Testable<?, ?> testable = new Testable<>(ise); + final FailableFunction<Throwable, Integer, Throwable> failableFunction = th -> { + testable.setThrowable(th); + return Integer.valueOf(testable.testAsInteger()); + }; + final Function<Throwable, Integer> function = Failable.asFunction(failableFunction); + Throwable e = assertThrows(IllegalStateException.class, () -> function.apply(ise)); + assertSame(ise, e); + + final Error error = new OutOfMemoryError(); + testable.setThrowable(error); + e = assertThrows(OutOfMemoryError.class, () -> function.apply(error)); + assertSame(error, e); + + final IOException ioe = new IOException("Unknown I/O error"); + testable.setThrowable(ioe); + e = assertThrows(UncheckedIOException.class, () -> function.apply(ioe)); + final Throwable t = e.getCause(); + assertNotNull(t); + assertSame(ioe, t); + + assertEquals(0, function.apply(null).intValue()); + } + + @Test public void testGetAsBooleanSupplier() { final IllegalStateException ise = new IllegalStateException(); final Testable<?, ?> testable = new Testable<>(ise); Throwable e = assertThrows(IllegalStateException.class, - () -> Functions.getAsBoolean(testable::testAsBooleanPrimitive)); + () -> Failable.getAsBoolean(testable::testAsBooleanPrimitive)); assertSame(ise, e); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.getAsBoolean(testable::testAsBooleanPrimitive)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.getAsBoolean(testable::testAsBooleanPrimitive)); assertSame(error, e); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.getAsBoolean(testable::testAsBooleanPrimitive)); + e = assertThrows(UncheckedIOException.class, () -> Failable.getAsBoolean(testable::testAsBooleanPrimitive)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); testable.setThrowable(null); - assertFalse(Functions.getAsBoolean(testable::testAsBooleanPrimitive)); + assertFalse(Failable.getAsBoolean(testable::testAsBooleanPrimitive)); } @Test @@ -544,46 +771,46 @@ public class FailableFunctionsTest { final IllegalStateException ise = new IllegalStateException(); final Testable<?, ?> testable = new Testable<>(ise); Throwable e = assertThrows(IllegalStateException.class, - () -> Functions.getAsDouble(testable::testAsDoublePrimitive)); + () -> Failable.getAsDouble(testable::testAsDoublePrimitive)); assertSame(ise, e); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.getAsDouble(testable::testAsDoublePrimitive)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.getAsDouble(testable::testAsDoublePrimitive)); assertSame(error, e); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.getAsDouble(testable::testAsDoublePrimitive)); + e = assertThrows(UncheckedIOException.class, () -> Failable.getAsDouble(testable::testAsDoublePrimitive)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); testable.setThrowable(null); - assertEquals(0, Functions.getAsDouble(testable::testAsDoublePrimitive)); + assertEquals(0, Failable.getAsDouble(testable::testAsDoublePrimitive)); } @Test public void testGetAsIntSupplier() { final IllegalStateException ise = new IllegalStateException(); final Testable<?, ?> testable = new Testable<>(ise); - Throwable e = assertThrows(IllegalStateException.class, () -> Functions.getAsInt(testable::testAsIntPrimitive)); + Throwable e = assertThrows(IllegalStateException.class, () -> Failable.getAsInt(testable::testAsIntPrimitive)); assertSame(ise, e); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.getAsInt(testable::testAsIntPrimitive)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.getAsInt(testable::testAsIntPrimitive)); assertSame(error, e); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.getAsInt(testable::testAsIntPrimitive)); + e = assertThrows(UncheckedIOException.class, () -> Failable.getAsInt(testable::testAsIntPrimitive)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); testable.setThrowable(null); - final int i = Functions.getAsInt(testable::testAsInteger); + final int i = Failable.getAsInt(testable::testAsInteger); assertEquals(0, i); } @@ -592,23 +819,23 @@ public class FailableFunctionsTest { final IllegalStateException ise = new IllegalStateException(); final Testable<?, ?> testable = new Testable<>(ise); Throwable e = assertThrows(IllegalStateException.class, - () -> Functions.getAsLong(testable::testAsLongPrimitive)); + () -> Failable.getAsLong(testable::testAsLongPrimitive)); assertSame(ise, e); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.getAsLong(testable::testAsLongPrimitive)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.getAsLong(testable::testAsLongPrimitive)); assertSame(error, e); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.getAsLong(testable::testAsLongPrimitive)); + e = assertThrows(UncheckedIOException.class, () -> Failable.getAsLong(testable::testAsLongPrimitive)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); testable.setThrowable(null); - final long i = Functions.getAsLong(testable::testAsLongPrimitive); + final long i = Failable.getAsLong(testable::testAsLongPrimitive); assertEquals(0, i); } @@ -616,12 +843,12 @@ public class FailableFunctionsTest { public void testGetFromSupplier() { FailureOnOddInvocations.invocations = 0; final UndeclaredThrowableException e = assertThrows(UndeclaredThrowableException.class, - () -> Functions.run(FailureOnOddInvocations::new)); + () -> Failable.run(FailureOnOddInvocations::new)); final Throwable cause = e.getCause(); assertNotNull(cause); assertTrue(cause instanceof SomeException); assertEquals("Odd Invocation: 1", cause.getMessage()); - final FailureOnOddInvocations instance = Functions.call(FailureOnOddInvocations::new); + final FailureOnOddInvocations instance = Failable.call(FailureOnOddInvocations::new); assertNotNull(instance); } @@ -629,23 +856,23 @@ public class FailableFunctionsTest { public void testGetSupplier() { final IllegalStateException ise = new IllegalStateException(); final Testable<?, ?> testable = new Testable<>(ise); - Throwable e = assertThrows(IllegalStateException.class, () -> Functions.get(testable::testAsInteger)); + Throwable e = assertThrows(IllegalStateException.class, () -> Failable.get(testable::testAsInteger)); assertSame(ise, e); final Error error = new OutOfMemoryError(); testable.setThrowable(error); - e = assertThrows(OutOfMemoryError.class, () -> Functions.get(testable::testAsInteger)); + e = assertThrows(OutOfMemoryError.class, () -> Failable.get(testable::testAsInteger)); assertSame(error, e); final IOException ioe = new IOException("Unknown I/O error"); testable.setThrowable(ioe); - e = assertThrows(UncheckedIOException.class, () -> Functions.get(testable::testAsInteger)); + e = assertThrows(UncheckedIOException.class, () -> Failable.get(testable::testAsInteger)); final Throwable t = e.getCause(); assertNotNull(t); assertSame(ioe, t); testable.setThrowable(null); - final Integer i = Functions.apply(Testable::testAsInteger, testable); + final Integer i = Failable.apply(Testable::testAsInteger, testable); assertNotNull(i); assertEquals(0, i.intValue()); } @@ -667,17 +894,34 @@ public class FailableFunctionsTest { } @Test - public void testRunnable() { + @DisplayName("Test that asPredicate(FailablePredicate) is converted to -> Predicate ") + public void testPredicate() { + FailureOnOddInvocations.invocations = 0; + final FailablePredicate<Object, Throwable> failablePredicate = t -> FailureOnOddInvocations + .failingBool(); + final Predicate<?> predicate = Failable.asPredicate(failablePredicate); + final UndeclaredThrowableException e = assertThrows(UndeclaredThrowableException.class, + () -> predicate.test(null)); + final Throwable cause = e.getCause(); + assertNotNull(cause); + assertTrue(cause instanceof SomeException); + assertEquals("Odd Invocation: 1", cause.getMessage()); + final boolean instance = predicate.test(null); + assertNotNull(instance); + } + + @Test + void testRunnable() { FailureOnOddInvocations.invocations = 0; final UndeclaredThrowableException e = assertThrows(UndeclaredThrowableException.class, - () -> Functions.run(FailureOnOddInvocations::new)); + () -> Failable.run(FailureOnOddInvocations::new)); final Throwable cause = e.getCause(); assertNotNull(cause); assertTrue(cause instanceof SomeException); assertEquals("Odd Invocation: 1", cause.getMessage()); // Even invocations, should not throw an exception - Functions.run(FailureOnOddInvocations::new); + Failable.run(FailureOnOddInvocations::new); } /** @@ -685,11 +929,11 @@ public class FailableFunctionsTest { * Object and Throwable. */ @Test - public void testThrows_FailableBiConsumer_Object_Throwable() { - new Functions.FailableBiConsumer<Object, Object, Throwable>() { + void testThrows_FailableBiConsumer_Object_Throwable() { + new FailableBiConsumer<Object, Object, Throwable>() { @Override - public void accept(Object object1, Object object2) throws Throwable { + public void accept(final Object object1, final Object object2) throws Throwable { throw new IOException("test"); } }; @@ -700,11 +944,11 @@ public class FailableFunctionsTest { * generic test types. */ @Test - public void testThrows_FailableBiConsumer_String_IOException() { - new Functions.FailableBiConsumer<String, String, IOException>() { + void testThrows_FailableBiConsumer_String_IOException() { + new FailableBiConsumer<String, String, IOException>() { @Override - public void accept(String object1, String object2) throws IOException { + public void accept(final String object1, final String object2) throws IOException { throw new IOException("test"); } @@ -716,11 +960,11 @@ public class FailableFunctionsTest { * Object and Throwable. */ @Test - public void testThrows_FailableBiFunction_Object_Throwable() { - new Functions.FailableBiFunction<Object, Object, Object, Throwable>() { + void testThrows_FailableBiFunction_Object_Throwable() { + new FailableBiFunction<Object, Object, Object, Throwable>() { @Override - public Object apply(Object input1, Object input2) throws Throwable { + public Object apply(final Object input1, final Object input2) throws Throwable { throw new IOException("test"); } }; @@ -731,11 +975,11 @@ public class FailableFunctionsTest { * generic test types. */ @Test - public void testThrows_FailableBiFunction_String_IOException() { - new Functions.FailableBiFunction<String, String, String, IOException>() { + void testThrows_FailableBiFunction_String_IOException() { + new FailableBiFunction<String, String, String, IOException>() { @Override - public String apply(String input1, String input2) throws IOException { + public String apply(final String input1, final String input2) throws IOException { throw new IOException("test"); } }; @@ -746,11 +990,11 @@ public class FailableFunctionsTest { * Object and Throwable. */ @Test - public void testThrows_FailableBiPredicate_Object_Throwable() { - new Functions.FailableBiPredicate<Object, Object, Throwable>() { + void testThrows_FailableBiPredicate_Object_Throwable() { + new FailableBiPredicate<Object, Object, Throwable>() { @Override - public boolean test(Object object1, Object object2) throws Throwable { + public boolean test(final Object object1, final Object object2) throws Throwable { throw new IOException("test"); } }; @@ -761,11 +1005,11 @@ public class FailableFunctionsTest { * generic test types. */ @Test - public void testThrows_FailableBiPredicate_String_IOException() { - new Functions.FailableBiPredicate<String, String, IOException>() { + void testThrows_FailableBiPredicate_String_IOException() { + new FailableBiPredicate<String, String, IOException>() { @Override - public boolean test(String object1, String object2) throws IOException { + public boolean test(final String object1, final String object2) throws IOException { throw new IOException("test"); } }; @@ -801,13 +1045,16 @@ public class FailableFunctionsTest { }; } + /////////////////////////////////////////////// + + /** * Tests that our failable interface is properly defined to throw any exception. using the top level generic types * Object and Throwable. */ @Test - public void testThrows_FailableCallable_Object_Throwable() { - new Functions.FailableCallable<Object, Throwable>() { + void testThrows_FailableCallable_Object_Throwable() { + new FailableCallable<Object, Throwable>() { @Override public Object call() throws Throwable { @@ -821,8 +1068,8 @@ public class FailableFunctionsTest { * generic test types. */ @Test - public void testThrows_FailableCallable_String_IOException() { - new Functions.FailableCallable<String, IOException>() { + void testThrows_FailableCallable_String_IOException() { + new FailableCallable<String, IOException>() { @Override public String call() throws IOException { @@ -836,11 +1083,11 @@ public class FailableFunctionsTest { * Object and Throwable. */ @Test - public void testThrows_FailableConsumer_Object_Throwable() { - new Functions.FailableConsumer<Object, Throwable>() { + void testThrows_FailableConsumer_Object_Throwable() { + new FailableConsumer<Object, Throwable>() { @Override - public void accept(Object object) throws Throwable { + public void accept(final Object object) throws Throwable { throw new IOException("test"); } @@ -852,11 +1099,11 @@ public class FailableFunctionsTest { * generic test types. */ @Test - public void testThrows_FailableConsumer_String_IOException() { - new Functions.FailableConsumer<String, IOException>() { + void testThrows_FailableConsumer_String_IOException() { + new FailableConsumer<String, IOException>() { @Override - public void accept(String object) throws IOException { + public void accept(final String object) throws IOException { throw new IOException("test"); } @@ -872,7 +1119,7 @@ public class FailableFunctionsTest { new FailableDoubleBinaryOperator<Throwable>() { @Override - public double applyAsDouble(double left, double right) throws Throwable { + public double applyAsDouble(final double left, final double right) throws Throwable { throw new IOException("test"); } }; @@ -887,7 +1134,7 @@ public class FailableFunctionsTest { new FailableDoubleBinaryOperator<IOException>() { @Override - public double applyAsDouble(double left, double right) throws IOException { + public double applyAsDouble(final double left, final double right) throws IOException { throw new IOException("test"); } }; @@ -902,7 +1149,7 @@ public class FailableFunctionsTest { new FailableDoubleConsumer<Throwable>() { @Override - public void accept(double value) throws Throwable { + public void accept(final double value) throws Throwable { throw new IOException("test"); } @@ -918,7 +1165,7 @@ public class FailableFunctionsTest { new FailableDoubleConsumer<IOException>() { @Override - public void accept(double value) throws IOException { + public void accept(final double value) throws IOException { throw new IOException("test"); } }; @@ -933,7 +1180,7 @@ public class FailableFunctionsTest { new FailableDoubleFunction<Object, Throwable>() { @Override - public Object apply(double input) throws Throwable { + public Object apply(final double input) throws Throwable { throw new IOException("test"); } }; @@ -948,7 +1195,7 @@ public class FailableFunctionsTest { new FailableDoubleFunction<String, IOException>() { @Override - public String apply(double input) throws IOException { + public String apply(final double input) throws IOException { throw new IOException("test"); } }; @@ -993,7 +1240,7 @@ public class FailableFunctionsTest { new FailableDoubleToIntFunction<Throwable>() { @Override - public int applyAsInt(double value) throws Throwable { + public int applyAsInt(final double value) throws Throwable { throw new IOException("test"); } }; @@ -1008,7 +1255,7 @@ public class FailableFunctionsTest { new FailableDoubleToIntFunction<IOException>() { @Override - public int applyAsInt(double value) throws IOException { + public int applyAsInt(final double value) throws IOException { throw new IOException("test"); } }; @@ -1023,7 +1270,7 @@ public class FailableFunctionsTest { new FailableDoubleToLongFunction<Throwable>() { @Override - public int applyAsLong(double value) throws Throwable { + public int applyAsLong(final double value) throws Throwable { throw new IOException("test"); } }; @@ -1038,7 +1285,7 @@ public class FailableFunctionsTest { new FailableDoubleToLongFunction<IOException>() { @Override - public int applyAsLong(double value) throws IOException { + public int applyAsLong(final double value) throws IOException { throw new IOException("test"); } }; @@ -1050,10 +1297,10 @@ public class FailableFunctionsTest { */ @Test public void testThrows_FailableFunction_Object_Throwable() { - new Functions.FailableFunction<Object, Object, Throwable>() { + new FailableFunction<Object, Object, Throwable>() { @Override - public Object apply(Object input) throws Throwable { + public Object apply(final Object input) throws Throwable { throw new IOException("test"); } }; @@ -1065,10 +1312,10 @@ public class FailableFunctionsTest { */ @Test public void testThrows_FailableFunction_String_IOException() { - new Functions.FailableFunction<String, String, IOException>() { + new FailableFunction<String, String, IOException>() { @Override - public String apply(String input) throws IOException { + public String apply(final String input) throws IOException { throw new IOException("test"); } }; @@ -1083,7 +1330,7 @@ public class FailableFunctionsTest { new FailableIntBinaryOperator<Throwable>() { @Override - public int applyAsInt(int left, int right) throws Throwable { + public int applyAsInt(final int left, final int right) throws Throwable { throw new IOException("test"); } }; @@ -1098,7 +1345,7 @@ public class FailableFunctionsTest { new FailableIntBinaryOperator<IOException>() { @Override - public int applyAsInt(int left, int right) throws IOException { + public int applyAsInt(final int left, final int right) throws IOException { throw new IOException("test"); } }; @@ -1113,7 +1360,7 @@ public class FailableFunctionsTest { new FailableIntConsumer<Throwable>() { @Override - public void accept(int value) throws Throwable { + public void accept(final int value) throws Throwable { throw new IOException("test"); } @@ -1129,7 +1376,7 @@ public class FailableFunctionsTest { new FailableIntConsumer<IOException>() { @Override - public void accept(int value) throws IOException { + public void accept(final int value) throws IOException { throw new IOException("test"); } }; @@ -1144,7 +1391,7 @@ public class FailableFunctionsTest { new FailableIntFunction<Object, Throwable>() { @Override - public Object apply(int input) throws Throwable { + public Object apply(final int input) throws Throwable { throw new IOException("test"); } }; @@ -1159,7 +1406,7 @@ public class FailableFunctionsTest { new FailableIntFunction<String, IOException>() { @Override - public String apply(int input) throws IOException { + public String apply(final int input) throws IOException { throw new IOException("test"); } }; @@ -1204,7 +1451,7 @@ public class FailableFunctionsTest { new FailableIntToDoubleFunction<Throwable>() { @Override - public double applyAsDouble(int value) throws Throwable { + public double applyAsDouble(final int value) throws Throwable { throw new IOException("test"); } }; @@ -1219,7 +1466,7 @@ public class FailableFunctionsTest { new FailableIntToDoubleFunction<IOException>() { @Override - public double applyAsDouble(int value) throws IOException { + public double applyAsDouble(final int value) throws IOException { throw new IOException("test"); } }; @@ -1234,7 +1481,7 @@ public class FailableFunctionsTest { new FailableIntToLongFunction<Throwable>() { @Override - public long applyAsLong(int value) throws Throwable { + public long applyAsLong(final int value) throws Throwable { throw new IOException("test"); } }; @@ -1249,7 +1496,7 @@ public class FailableFunctionsTest { new FailableIntToLongFunction<IOException>() { @Override - public long applyAsLong(int value) throws IOException { + public long applyAsLong(final int value) throws IOException { throw new IOException("test"); } }; @@ -1264,7 +1511,7 @@ public class FailableFunctionsTest { new FailableLongBinaryOperator<Throwable>() { @Override - public long applyAsLong(long left, long right) throws Throwable { + public long applyAsLong(final long left, final long right) throws Throwable { throw new IOException("test"); } }; @@ -1279,7 +1526,7 @@ public class FailableFunctionsTest { new FailableLongBinaryOperator<IOException>() { @Override - public long applyAsLong(long left, long right) throws IOException { + public long applyAsLong(final long left, final long right) throws IOException { throw new IOException("test"); } }; @@ -1294,7 +1541,7 @@ public class FailableFunctionsTest { new FailableLongConsumer<Throwable>() { @Override - public void accept(long object) throws Throwable { + public void accept(final long object) throws Throwable { throw new IOException("test"); } @@ -1310,7 +1557,7 @@ public class FailableFunctionsTest { new FailableLongConsumer<IOException>() { @Override - public void accept(long object) throws IOException { + public void accept(final long object) throws IOException { throw new IOException("test"); } @@ -1326,7 +1573,7 @@ public class FailableFunctionsTest { new FailableLongFunction<Object, Throwable>() { @Override - public Object apply(long input) throws Throwable { + public Object apply(final long input) throws Throwable { throw new IOException("test"); } }; @@ -1341,7 +1588,7 @@ public class FailableFunctionsTest { new FailableLongFunction<String, IOException>() { @Override - public String apply(long input) throws IOException { + public String apply(final long input) throws IOException { throw new IOException("test"); } }; @@ -1386,7 +1633,7 @@ public class FailableFunctionsTest { new FailableLongToDoubleFunction<Throwable>() { @Override - public double applyAsDouble(long value) throws Throwable { + public double applyAsDouble(final long value) throws Throwable { throw new IOException("test"); } }; @@ -1401,7 +1648,7 @@ public class FailableFunctionsTest { new FailableLongToDoubleFunction<IOException>() { @Override - public double applyAsDouble(long value) throws IOException { + public double applyAsDouble(final long value) throws IOException { throw new IOException("test"); } }; @@ -1416,7 +1663,7 @@ public class FailableFunctionsTest { new FailableLongToIntFunction<Throwable>() { @Override - public int applyAsInt(long value) throws Throwable { + public int applyAsInt(final long value) throws Throwable { throw new IOException("test"); } }; @@ -1431,7 +1678,7 @@ public class FailableFunctionsTest { new FailableLongToIntFunction<IOException>() { @Override - public int applyAsInt(long value) throws IOException { + public int applyAsInt(final long value) throws IOException { throw new IOException("test"); } }; @@ -1446,7 +1693,7 @@ public class FailableFunctionsTest { new FailableObjDoubleConsumer<Object, Throwable>() { @Override - public void accept(Object object, double value) throws Throwable { + public void accept(final Object object, final double value) throws Throwable { throw new IOException("test"); } @@ -1462,7 +1709,7 @@ public class FailableFunctionsTest { new FailableObjDoubleConsumer<String, IOException>() { @Override - public void accept(String object, double value) throws IOException { + public void accept(final String object, final double value) throws IOException { throw new IOException("test"); } }; @@ -1477,7 +1724,7 @@ public class FailableFunctionsTest { new FailableObjIntConsumer<Object, Throwable>() { @Override - public void accept(Object object, int value) throws Throwable { + public void accept(final Object object, final int value) throws Throwable { throw new IOException("test"); } @@ -1493,7 +1740,7 @@ public class FailableFunctionsTest { new FailableObjIntConsumer<String, IOException>() { @Override - public void accept(String object, int value) throws IOException { + public void accept(final String object, final int value) throws IOException { throw new IOException("test"); } }; @@ -1508,7 +1755,7 @@ public class FailableFunctionsTest { new FailableObjLongConsumer<Object, Throwable>() { @Override - public void accept(Object object, long value) throws Throwable { + public void accept(final Object object, final long value) throws Throwable { throw new IOException("test"); } @@ -1524,7 +1771,7 @@ public class FailableFunctionsTest { new FailableObjLongConsumer<String, IOException>() { @Override - public void accept(String object, long value) throws IOException { + public void accept(final String object, final long value) throws IOException { throw new IOException("test"); } }; @@ -1536,10 +1783,10 @@ public class FailableFunctionsTest { */ @Test public void testThrows_FailablePredicate_Object_Throwable() { - new Functions.FailablePredicate<Object, Throwable>() { + new FailablePredicate<Object, Throwable>() { @Override - public boolean test(Object object) throws Throwable { + public boolean test(final Object object) throws Throwable { throw new IOException("test"); } }; @@ -1551,10 +1798,10 @@ public class FailableFunctionsTest { */ @Test public void testThrows_FailablePredicate_String_IOException() { - new Functions.FailablePredicate<String, IOException>() { + new FailablePredicate<String, IOException>() { @Override - public boolean test(String object) throws IOException { + public boolean test(final String object) throws IOException { throw new IOException("test"); } }; @@ -1566,7 +1813,7 @@ public class FailableFunctionsTest { */ @Test public void testThrows_FailableRunnable_Object_Throwable() { - new Functions.FailableRunnable<Throwable>() { + new FailableRunnable<Throwable>() { @Override public void run() throws Throwable { @@ -1582,7 +1829,7 @@ public class FailableFunctionsTest { */ @Test public void testThrows_FailableRunnable_String_IOException() { - new Functions.FailableRunnable<IOException>() { + new FailableRunnable<IOException>() { @Override public void run() throws IOException { @@ -1597,7 +1844,7 @@ public class FailableFunctionsTest { */ @Test public void testThrows_FailableSupplier_Object_Throwable() { - new Functions.FailableSupplier<Object, Throwable>() { + new FailableSupplier<Object, Throwable>() { @Override public Object get() throws Throwable { @@ -1612,7 +1859,7 @@ public class FailableFunctionsTest { */ @Test public void testThrows_FailableSupplier_String_IOException() { - new Functions.FailableSupplier<String, IOException>() { + new FailableSupplier<String, IOException>() { @Override public String get() throws IOException { @@ -1630,7 +1877,7 @@ public class FailableFunctionsTest { new FailableToDoubleBiFunction<Object, Object, Throwable>() { @Override - public double applyAsDouble(Object t, Object u) throws Throwable { + public double applyAsDouble(final Object t, final Object u) throws Throwable { throw new IOException("test"); } }; @@ -1645,7 +1892,7 @@ public class FailableFunctionsTest { new FailableToDoubleBiFunction<String, String, IOException>() { @Override - public double applyAsDouble(String t, String u) throws IOException { + public double applyAsDouble(final String t, final String u) throws IOException { throw new IOException("test"); } }; @@ -1660,7 +1907,7 @@ public class FailableFunctionsTest { new FailableToDoubleFunction<Object, Throwable>() { @Override - public double applyAsDouble(Object t) throws Throwable { + public double applyAsDouble(final Object t) throws Throwable { throw new IOException("test"); } }; @@ -1675,7 +1922,7 @@ public class FailableFunctionsTest { new FailableToDoubleFunction<String, IOException>() { @Override - public double applyAsDouble(String t) throws IOException { + public double applyAsDouble(final String t) throws IOException { throw new IOException("test"); } }; @@ -1690,7 +1937,7 @@ public class FailableFunctionsTest { new FailableToIntBiFunction<Object, Object, Throwable>() { @Override - public int applyAsInt(Object t, Object u) throws Throwable { + public int applyAsInt(final Object t, final Object u) throws Throwable { throw new IOException("test"); } }; @@ -1705,7 +1952,7 @@ public class FailableFunctionsTest { new FailableToIntBiFunction<String, String, IOException>() { @Override - public int applyAsInt(String t, String u) throws IOException { + public int applyAsInt(final String t, final String u) throws IOException { throw new IOException("test"); } }; @@ -1720,7 +1967,7 @@ public class FailableFunctionsTest { new FailableToIntFunction<Object, Throwable>() { @Override - public int applyAsInt(Object t) throws Throwable { + public int applyAsInt(final Object t) throws Throwable { throw new IOException("test"); } }; @@ -1735,7 +1982,7 @@ public class FailableFunctionsTest { new FailableToIntFunction<String, IOException>() { @Override - public int applyAsInt(String t) throws IOException { + public int applyAsInt(final String t) throws IOException { throw new IOException("test"); } }; @@ -1750,7 +1997,7 @@ public class FailableFunctionsTest { new FailableToLongBiFunction<Object, Object, Throwable>() { @Override - public long applyAsLong(Object t, Object u) throws Throwable { + public long applyAsLong(final Object t, final Object u) throws Throwable { throw new IOException("test"); } }; @@ -1765,7 +2012,7 @@ public class FailableFunctionsTest { new FailableToLongBiFunction<String, String, IOException>() { @Override - public long applyAsLong(String t, String u) throws IOException { + public long applyAsLong(final String t, final String u) throws IOException { throw new IOException("test"); } }; @@ -1780,7 +2027,7 @@ public class FailableFunctionsTest { new FailableToLongFunction<Object, Throwable>() { @Override - public long applyAsLong(Object t) throws Throwable { + public long applyAsLong(final Object t) throws Throwable { throw new IOException("test"); } }; @@ -1795,10 +2042,40 @@ public class FailableFunctionsTest { new FailableToLongFunction<String, IOException>() { @Override - public long applyAsLong(String t) throws IOException { + public long applyAsLong(final String t) throws IOException { throw new IOException("test"); } }; } + @Test + public void testTryWithResources() { + final CloseableObject co = new CloseableObject(); + final FailableConsumer<Throwable, ? extends Throwable> consumer = co::run; + final IllegalStateException ise = new IllegalStateException(); + Throwable e = assertThrows(IllegalStateException.class, + () -> Failable.tryWithResources(() -> consumer.accept(ise), co::close)); + assertSame(ise, e); + + assertTrue(co.isClosed()); + co.reset(); + final Error error = new OutOfMemoryError(); + e = assertThrows(OutOfMemoryError.class, + () -> Failable.tryWithResources(() -> consumer.accept(error), co::close)); + assertSame(error, e); + + assertTrue(co.isClosed()); + co.reset(); + final IOException ioe = new IOException("Unknown I/O error"); + final UncheckedIOException uioe = assertThrows(UncheckedIOException.class, + () -> Failable.tryWithResources(() -> consumer.accept(ioe), co::close)); + final IOException cause = uioe.getCause(); + assertSame(ioe, cause); + + assertTrue(co.isClosed()); + co.reset(); + Failable.tryWithResources(() -> consumer.accept(null), co::close); + assertTrue(co.isClosed()); + } + }