trait CompleteLastly extends AnyRef
Trait that provides a complete
-lastly
construct, which ensures
cleanup code in lastly
is executed whether the code passed to complete
completes abruptly with an exception or successfully results in a Future
,
FutureOutcome
, or other type with an
implicit Futuristic
instance.
This trait is mixed into ScalaTest's async testing styles, to make it easy to ensure
cleanup code will execute whether code that produces a "futuristic" value (any type F
for which a Futuristic[F]
instance is implicitly available). ScalaTest provides
implicit Futuristic
instances for Future[T]
for any type T
and FutureOutcome
.
If the future-producing code passed to complete
throws an
exception, the cleanup code passed to lastly
will be executed immediately, and the same exception will
be rethrown, unless the code passed to lastly
also completes abruptly with an exception. In that case,
complete
-lastly
will complete abruptly with the exception thrown by the code passed to
lastly
(this mimics the behavior of finally
).
Otherwise, if the code passed to complete
successfully returns a Future
(or other "futuristic" type),
complete
-lastly
will register the cleanup code to be performed once the future completes and return a new future that will complete
once the original future completes and the subsequent cleanup code has completed execution. The future returned by
complete
-lastly
will have the same result as the original future passed to complete
,
unless the cleanup code throws an exception. If the cleanup code passed to lastly
throws
an exception, the future returned by lastly
will fail with that exception.
The complete
-lastly
syntax is intended to be used to ensure cleanup code is executed
in async testing styles like try
-finally
is used in traditional testing styles.
Here's an example of complete
-lastly
used in withFixture
in an async testing style:
// Your implementation override def withFixture(test: NoArgAsyncTest) = { // Perform setup here complete { super.withFixture(test) // Invoke the test function } lastly { // Perform cleanup here } }
- Source
- CompleteLastly.scala
- Alphabetic
- By Inheritance
- CompleteLastly
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- class ResultOfCompleteInvocation[T] extends AnyRef
Class that provides the
lastly
method of thecomplete
-lastly
syntax.
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- def complete[T](completeBlock: => T)(implicit futuristic: Futuristic[T]): ResultOfCompleteInvocation[T]
Registers a block of code that produces any "futuristic" type (any type
F
for which an implicitFuturistic[F]
instance is implicitly available), returning an object that offers alastly
method.Registers a block of code that produces any "futuristic" type (any type
F
for which an implicitFuturistic[F]
instance is implicitly available), returning an object that offers alastly
method.See the main documentation for trait
CompleteLastly
for more detail.- completeBlock
cleanup code to execute whether the code passed to
complete
throws an exception or succesfully returns a futuristic value.
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()