From 1fde620000f80634862f1764dc66042473ec0fe6 Mon Sep 17 00:00:00 2001 From: Ragnar Englund Date: Sat, 6 Apr 2024 11:58:06 +0200 Subject: [PATCH] tests pass --- .../main/scala/io/github/ragazoor/IO.scala | 2 +- .../scala/io/github/ragazoor/IOSpec.scala | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/result/src/main/scala/io/github/ragazoor/IO.scala b/result/src/main/scala/io/github/ragazoor/IO.scala index 9c46646..2320b2a 100644 --- a/result/src/main/scala/io/github/ragazoor/IO.scala +++ b/result/src/main/scala/io/github/ragazoor/IO.scala @@ -31,7 +31,7 @@ sealed trait IO[+E <: Throwable, +A] extends Awaitable[A] { def mapError[E2 <: Throwable](f: E => E2)(implicit ec: ExecutionContext): IO[E2, A] = { var isFutureFatal = isFatal val transformedFuture = self.toFuture.transform { - case Failure(e) if NonFatal(e) || !isFatal => Failure(f(e.asInstanceOf[E])) + case Failure(e) if NonFatal(e) && !isFatal => Failure(f(e.asInstanceOf[E])) case Failure(e) if !NonFatal(e) || isFatal => isFutureFatal = true Failure(e) diff --git a/result/src/test/scala/io/github/ragazoor/IOSpec.scala b/result/src/test/scala/io/github/ragazoor/IOSpec.scala index 3b64e00..3c9faa9 100644 --- a/result/src/test/scala/io/github/ragazoor/IOSpec.scala +++ b/result/src/test/scala/io/github/ragazoor/IOSpec.scala @@ -190,20 +190,21 @@ class IOSpec extends FunSuite { .map(result => assert(result == 2)) } - test("IO mapError cannot catch fatal errors") { val result = for { _ <- IO.fatal(new RuntimeException("Test message")) } yield assert(false) result - .mapError(MyError.apply) - .catchSome { case _: MyError => - IO.successful(assert(false)) - } - .toFuture - .recover { - case _: RuntimeException => assert(true) - } + .mapError(MyError.apply) + .catchSome { case _: MyError => + IO.successful(assert(false)) + } + .toFuture + .recover { + case _: RuntimeException => assert(true) + case e => assert(e.getMessage == "Test message") + } + } }