From 8b7e6aa7beb9d0be4fdeacface6fa0d9d77d597f Mon Sep 17 00:00:00 2001 From: Andrew Smirnov Date: Wed, 8 Jan 2025 20:05:39 +0300 Subject: [PATCH] #3793 fix Expect --- .../src/main/java/org/eolang/Expect.java | 18 ++++-- .../java/org/eolang/ExpectFailureInMust.java | 57 +++++++++++++++++++ .../java/org/eolang/ExpectFailureInThat.java | 55 ++++++++++++++++++ .../src/test/java/org/eolang/ExpectTest.java | 2 +- 4 files changed, 127 insertions(+), 5 deletions(-) create mode 100644 eo-runtime/src/main/java/org/eolang/ExpectFailureInMust.java create mode 100644 eo-runtime/src/main/java/org/eolang/ExpectFailureInThat.java diff --git a/eo-runtime/src/main/java/org/eolang/Expect.java b/eo-runtime/src/main/java/org/eolang/Expect.java index 9fd311f68d..61c4ec3237 100644 --- a/eo-runtime/src/main/java/org/eolang/Expect.java +++ b/eo-runtime/src/main/java/org/eolang/Expect.java @@ -81,7 +81,13 @@ public static Expect at(final Phi phi, final String attr) { public Expect that(final Function fun) { return new Expect<>( this.subject, - () -> fun.apply(this.sup.get()) + () -> { + try { + return fun.apply(this.sup.get()); + } catch (ExFailure ex) { + throw new ExpectFailureInThat(ex.getMessage(), ex); + } + } ); } @@ -96,11 +102,16 @@ public Expect otherwise(final String message) { () -> { try { return this.sup.get(); - } catch (final ExFailure ex) { + } catch (final ExpectFailureInMust ex) { throw new ExFailure( String.format("%s %s %s", this.subject, ex.getMessage(), message), ex ); + } catch (final ExpectFailureInThat ex) { + throw new ExFailure( + message, + ex + ); } } ); @@ -117,7 +128,7 @@ public Expect must(final Function fun) { () -> { final T ret = this.sup.get(); if (!fun.apply(ret)) { - throw new ExFailure( + throw new ExpectFailureInMust( String.format("(%s)", ret) ); } @@ -134,5 +145,4 @@ public Expect must(final Function fun) { public T it() { return this.sup.get(); } - } diff --git a/eo-runtime/src/main/java/org/eolang/ExpectFailureInMust.java b/eo-runtime/src/main/java/org/eolang/ExpectFailureInMust.java new file mode 100644 index 0000000000..f2f37cb3fb --- /dev/null +++ b/eo-runtime/src/main/java/org/eolang/ExpectFailureInMust.java @@ -0,0 +1,57 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2025 Objectionary.com + * + * 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.eolang; + +/** + * Expect exception. + * + * @since 0.51 + */ +class ExpectFailureInMust extends ExFailure { + + /** + * Serialization identifier. + */ + private static final long serialVersionUID = 597748325437012615L; + + /** + * Ctor. + * @param cause Exception cause + * @param args Arguments for {@link String#format(String, Object...)} + */ + public ExpectFailureInMust(final String cause, final Object... args) { + super(String.format(cause, args)); + } + + /** + * Ctor. + * @param cause Exception cause + * @param root Cause exception + */ + public ExpectFailureInMust(final String cause, final Throwable root) { + super(cause, root); + } +} + diff --git a/eo-runtime/src/main/java/org/eolang/ExpectFailureInThat.java b/eo-runtime/src/main/java/org/eolang/ExpectFailureInThat.java new file mode 100644 index 0000000000..cd7f473a9d --- /dev/null +++ b/eo-runtime/src/main/java/org/eolang/ExpectFailureInThat.java @@ -0,0 +1,55 @@ +package org.eolang;/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2025 Objectionary.com + * + * 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. + */ + +/** + * Expect exception. + * + * @since 0.51 + */ +class ExpectFailureInThat extends ExFailure { + + /** + * Serialization identifier. + */ + private static final long serialVersionUID = 597748358437012215L; + + /** + * Ctor. + * @param cause Exception cause + * @param args Arguments for {@link String#format(String, Object...)} + */ + public ExpectFailureInThat(final String cause, final Object... args) { + super(String.format(cause, args)); + } + + /** + * Ctor. + * @param cause Exception cause + * @param root Cause exception + */ + public ExpectFailureInThat(final String cause, final Throwable root) { + super(cause, root); + } +} + diff --git a/eo-runtime/src/test/java/org/eolang/ExpectTest.java b/eo-runtime/src/test/java/org/eolang/ExpectTest.java index 75d29ed95f..e00bf7827e 100644 --- a/eo-runtime/src/test/java/org/eolang/ExpectTest.java +++ b/eo-runtime/src/test/java/org/eolang/ExpectTest.java @@ -133,7 +133,7 @@ void failsWithCorrectTraceWithExFailureInThat() { }) .otherwise("something went wrong") .it(), - "fails on check integer" + "fails on 'that'" ).getMessage(), Matchers.equalTo("something went wrong") );