Skip to content

Commit a232a12

Browse files
committed
Use delay instead of pure in Resource
In case exceptions are thrown
1 parent 22f8ae9 commit a232a12

File tree

1 file changed

+14
-12
lines changed
  • library/testUtil/src/main/scala/japgolly/scalajs/react/test/internal

1 file changed

+14
-12
lines changed

library/testUtil/src/main/scala/japgolly/scalajs/react/test/internal/Resource.scala

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,18 @@ package japgolly.scalajs.react.test.internal
22

33
import japgolly.scalajs.react.util.Effect
44

5-
/**
6-
* Managed resource.
5+
/** Managed resource.
76
*
87
* @since 3.0.0
98
*/
109
class Resource[F[_]: Effect, A](private val acquire: F[A], private val release: A => F[Unit]) {
1110
private val F = implicitly[Effect[F]]
1211

13-
def use[B](f: A => F[B]): F[B] =
12+
def use[B](f: A => F[B]): F[B] =
1413
F.flatMap(acquire)(a => F.finallyRun(f(a), release(a)))
1514

16-
def use_[B](f: A => B): F[B] =
17-
use(a => F.pure(f(a)))
15+
def use_[B](f: A => B): F[B] =
16+
use(a => F.delay(f(a)))
1817

1918
def flatMap[B](f: A => Resource[F, B]): Resource[F, B] = {
2019
var aOpt: Option[A] = None
@@ -23,11 +22,11 @@ class Resource[F[_]: Effect, A](private val acquire: F[A], private val release:
2322
Resource.make(
2423
F.flatMap(acquire){ a =>
2524
aOpt = Some(a)
26-
val other: Resource[F, B] = f(a)
25+
val other: Resource[F, B] = f(a)
2726
bReleaseOpt = Some(other.release)
2827
other.acquire
2928
},
30-
b =>
29+
b =>
3130
(aOpt, bReleaseOpt) match {
3231
case (Some(a), Some(bRelease)) => F.finallyRun(bRelease(b), release(a))
3332
case _ => F.throwException(new IllegalStateException("Resource.flatMap: release attempted without acquire being invoked") )
@@ -36,19 +35,22 @@ class Resource[F[_]: Effect, A](private val acquire: F[A], private val release:
3635
}
3736

3837
def map[B](f: A => B): Resource[F, B] =
39-
flatMap(a => Resource.pure(f(a)))
38+
flatMap(a => Resource.delay(f(a)))
4039
}
4140

4241
object Resource {
43-
@inline def make[F[_]: Effect, A](acquire: F[A], release: A => F[Unit]): Resource[F, A] =
42+
@inline def make[F[_]: Effect, A](acquire: F[A], release: A => F[Unit]): Resource[F, A] =
4443
new Resource(acquire, release)
45-
46-
@inline def make_[F[_]: Effect, A](acquire: => A, release: A => F[Unit]): Resource[F, A] =
44+
45+
@inline def make_[F[_]: Effect, A](acquire: => A, release: A => F[Unit]): Resource[F, A] =
4746
make(Effect[F].delay(acquire), release)
4847

49-
@inline def eval[F[_]: Effect, A](a: F[A]): Resource[F, A] =
48+
@inline def eval[F[_]: Effect, A](a: F[A]): Resource[F, A] =
5049
Resource.make(a, _ => Effect[F].unit)
5150

51+
@inline def delay[F[_]: Effect, A](a: => A): Resource[F, A] =
52+
Resource.eval(Effect[F].delay(a))
53+
5254
@inline def pure[F[_]: Effect, A](a: A): Resource[F, A] =
5355
Resource.eval(Effect[F].pure(a))
5456

0 commit comments

Comments
 (0)