From 2d882edbb6d746fb6031facab307b5eb898e38a3 Mon Sep 17 00:00:00 2001 From: h1alexbel Date: Mon, 11 Sep 2023 09:58:32 +0300 Subject: [PATCH] #1175 all --- .../org/cactoos/scalar/ThrowsOnFalse.java | 80 +++++++++++++++++++ .../org/cactoos/scalar/ThrowsOnFalseTest.java | 72 +++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 src/main/java/org/cactoos/scalar/ThrowsOnFalse.java create mode 100644 src/test/java/org/cactoos/scalar/ThrowsOnFalseTest.java diff --git a/src/main/java/org/cactoos/scalar/ThrowsOnFalse.java b/src/main/java/org/cactoos/scalar/ThrowsOnFalse.java new file mode 100644 index 000000000..057a0f6e4 --- /dev/null +++ b/src/main/java/org/cactoos/scalar/ThrowsOnFalse.java @@ -0,0 +1,80 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2017-2022 Yegor Bugayenko + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package org.cactoos.scalar; + +import org.cactoos.Scalar; + +/** + * Throws an exception on false expression. + * + * @since 0.56.0 + */ +public final class ThrowsOnFalse implements Scalar { + + /** + * Logical statement. + */ + private final Scalar scalar; + + /** + * Exception to throw. + */ + private final Scalar exception; + + /** + * Ctor. + * @param sclr Scalar + * @param message Error Message + */ + public ThrowsOnFalse( + final Scalar sclr, + final String message + ) { + this( + sclr, () -> new IllegalArgumentException(message) + ); + } + + /** + * Ctor. + * @param sclr Scalar + * @param exc Exception + */ + public ThrowsOnFalse( + final Scalar sclr, + final Scalar exc + ) { + this.scalar = sclr; + this.exception = exc; + } + + @Override + public Boolean value() throws Exception { + if (!this.scalar.value()) { + throw this.exception.value(); + } + return true; + } +} diff --git a/src/test/java/org/cactoos/scalar/ThrowsOnFalseTest.java b/src/test/java/org/cactoos/scalar/ThrowsOnFalseTest.java new file mode 100644 index 000000000..1e86c562a --- /dev/null +++ b/src/test/java/org/cactoos/scalar/ThrowsOnFalseTest.java @@ -0,0 +1,72 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2017-2022 Yegor Bugayenko + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package org.cactoos.scalar; + +import org.hamcrest.core.IsEqual; +import org.junit.Test; +import org.llorllale.cactoos.matchers.Assertion; +import org.llorllale.cactoos.matchers.Throws; + +/** + * Test suite for {@link ThrowsOnFalse}. + * + * @since 0.56.0 + */ +public final class ThrowsOnFalseTest { + + @Test + public void throwsOnFalse() throws Exception { + final String message = "test message"; + new Assertion<>( + "Throws an exception", + () -> new ThrowsOnFalse( + () -> false, message + ).value(), + new Throws<>(message, IllegalArgumentException.class) + ).affirm(); + } + + @Test + public void throwsSuppliedExceptionOnFalse() throws Exception { + final String message = "illegal state"; + new Assertion<>( + "Throws supplied exception", + () -> new ThrowsOnFalse( + () -> false, + () -> new IllegalStateException(message) + ).value(), + new Throws<>(message, IllegalStateException.class) + ).affirm(); + } + + @Test + public void returnsTrueOnTrue() throws Exception { + new Assertion<>( + "Must return true on true statement", + new ThrowsOnFalse(() -> true, "test").value(), + new IsEqual<>(true) + ).affirm(); + } +}