final class StatefulStatus extends Status with Serializable
Status implementation that can change its state over time.
A StatefulStatus
begins its life in a successful state, and will remain successful unless setFailed
is called.
Once setFailed
is called, the status will remain at failed. The setFailed
method can be called multiple times (even
though invoking it once is sufficient to permanently set the status to failed), but only up until setCompleted
has been called.
After setCompleted
has been called, any invocation of setFailed
will be greeted with an IllegalStateException
.
Instances of this class are thread safe.
- Source
- Status.scala
- Alphabetic
- By Inheritance
- StatefulStatus
- Serializable
- Status
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new StatefulStatus()
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[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
-
def
isCompleted: Boolean
Non-blocking call that returns
true
ifsetCompleted
has been invoked on this instance,false
otherwise.Non-blocking call that returns
true
ifsetCompleted
has been invoked on this instance,false
otherwise.- returns
true
if the test or suite run is already completed,false
otherwise.
- Definition Classes
- StatefulStatus → Status
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
-
def
setCompleted(): Unit
Sets the status to completed.
Sets the status to completed.
This method may be invoked repeatedly, even though invoking it once is sufficient to set the state of the
Status
to completed.TODO: Specify that this method invokes the callbacks on the invoking thread after it releases the lock such that the Status has completed.
-
def
setFailed(): Unit
Sets the status to failed without changing the completion status.
Sets the status to failed without changing the completion status.
This method may be invoked repeatedly, even though invoking it once is sufficient to set the state of the
Status
to failed, but only up untilsetCompleted
has been called. OncesetCompleted
has been called, invoking this method will result in a thrownIllegalStateException
.- Exceptions thrown
IllegalStateException
if this method is invoked on this instance aftersetCompleted
has been invoked on this instance.
-
def
setFailedWith(ex: Throwable): Unit
Sets the status to failed with an unreported exception, without changing the completion status.
Sets the status to failed with an unreported exception, without changing the completion status.
This method may be invoked repeatedly, even though invoking it once is sufficient to set the state of the
Status
to failed, but only up untilsetCompleted
has been called. OncesetCompleted
has been called, invoking this method will result in a thrownIllegalStateException
. Also, only the first exception passed will be reported as the unreported exception. Any exceptions passed via subsequent invocations ofsetFailedWith
after the first will have their stack traces printed to standard output.- ex
an unreported exception
- Exceptions thrown
IllegalStateException
if this method is invoked on this instance aftersetCompleted
has been invoked on this instance.
-
def
succeeds(): Boolean
Blocking call that waits until completion, as indicated by an invocation of
setCompleted
on this instance, then returnsfalse
ifsetFailed
was called on this instance, else returnstrue
.Blocking call that waits until completion, as indicated by an invocation of
setCompleted
on this instance, then returnsfalse
ifsetFailed
was called on this instance, else returnstrue
.- returns
true
if no tests failed and no suites aborted,false
otherwise
- Definition Classes
- StatefulStatus → Status
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
final
def
thenRun(f: ⇒ Status): Status
Registers a
Status
-producing by-name function to execute after thisStatus
completes, returning aStatus
that mirrors theStatus
returned by the by-name.Registers a
Status
-producing by-name function to execute after thisStatus
completes, returning aStatus
that mirrors theStatus
returned by the by-name.The
Status
returned by this method will complete when the status produced by theStatus
produced by the passed-by name completes. The returnedStatus
will complete with the samesucceeds
andunreportedException
values. But unlike theStatus
produced by the by-name, the returnedStatus
will be available immediately.If the by-name function passed to this method completes abruptly with a non-run-aborting exception, that exception will be caught and installed as the
unreportedException
on theStatus
returned by this method. TheStatus
returned by this method will then complete. The thread that attempted to evaluate the by-name function will be allowed to continue (i.e.
, the non-run-aborting exception will not be rethrown on that thread).If the by-name function passed to this method completes abruptly with a run-aborting exception, such as
StackOverflowError
, that exception will be caught and a newjava.util.concurrent.ExecutionException
that contains the run-aborting exception as its cause will be installed as theunreportedException
on theStatus
returned by this method. TheStatus
returned by this method will then complete. The original run-aborting exception will then be rethrown on the thread that attempted to evaluate the by-name function.If an unreported exception is installed on this
Status
, the passed by-name function will not be executed. Instead, the same unreported exception will be installed on theStatus
returned by this method.Internally, ScalaTest uses this method in async styles to ensure that by default, each subsequent test in an async-style suite begins execution only after the previous test has completed. This method is not used if
ParallelTestExection
is mixed into an async style. Instead, tests are allowed to begin execution concurrently.- returns
a
Status
that represents the status of executing the by-name function passed to this method.
- Definition Classes
- Status
-
final
def
toFuture: Future[Boolean]
Converts this
Status
to aFuture[Boolean]
whereSuccess(true)
means no tests failed and suites aborted,Success(false)
, means at least one test failed or one suite aborted and any thrown exception was was reported to theReporter
via a ScalaTest event,Failure(unreportedException)
means an exception,unreportedException
, was thrown that was not reported to theReporter
via a ScalaTest event.Converts this
Status
to aFuture[Boolean]
whereSuccess(true)
means no tests failed and suites aborted,Success(false)
, means at least one test failed or one suite aborted and any thrown exception was was reported to theReporter
via a ScalaTest event,Failure(unreportedException)
means an exception,unreportedException
, was thrown that was not reported to theReporter
via a ScalaTest event.- returns
a
Future[Boolean]
representing thisStatus
.
- Definition Classes
- Status
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
def
unreportedException: Option[Throwable]
An exception that was thrown during the activity represented by this
Status
that was not reported via a ScalaTest event fired to theReporter
.An exception that was thrown during the activity represented by this
Status
that was not reported via a ScalaTest event fired to theReporter
.When a test executes, "non-run-aborting" thrown exceptions are reported by events fired to the reporter. A
TestPendingException
is reported via aTestPending
event. ATestCanceledException
is reported via aTestCanceled
event. Any other non-run-aborting exceptions, includingTestFailedException
will be reported via aTestFailed
event.Run-aborting exceptions indicate critical problems, such as
OutOfMemoryError
, that instead of being reported via a test completion event should instead cause the entire suite to abort. In synchronous testing styles, this exception will be allowed to just propagate up the call stack. But in async styles, the thread or threads executing the test will often be taken from the async suite's execution context. Instead of propagating these run-aborting exceptions up the call stack, they will be installed as an "unreported exception" in the test'sStatus
. They are "unreported" because no test completion event will be fired to report them. For more explanation and a list of run-aborting exception types, see Treatment ofjava.lang.Error
s.Another way for an unreported exception to occur is if an exception of any type is thrown outside of the body of an actual test. For example, traits
BeforeAndAfter
,BeforeAndAfterEach
, andBeforeAndAfterEachTestData
execute code before and after tests. TraitsBeforeAndAfterAll
andBeforeAndAfterAllConfigMap
execute code before and after all tests and nested suites of a suite. If any "before" or "after" code completes abruptly with an exception (of any type, not just run-aborting types) on a thread taken from an async suite's execution context, this exception will installed as anunreportedException
of the relevantStatus
.In addition, ScalaTest
Suite
exposes four "run" lifecycle methods--run
,runNestedSuites
,runTests
, andrunTest
--that users can override to customize the framework. If a "run" lifecycle methods completes abruptly with an exception, that exception occurs outside the context of a test body. As a result, such exceptions will be installed as anunreportedException
of the relevantStatus
.The
toFuture
method onStatus
returns aFuture[Boolean]
. If theFuture
succeeds with theBoolean
value oftrue
, that indicates no tests failed and no suites aborted during the activity represented by thisStatus
. If a test failed or suite aborted, and that event was reported by a fired ScalaTestEvent
, theFuture
will succeed with the valuefalse
. If an unreported exception has been installed on theStatus
, however, theFuture
will fail with that exception.- returns
a optional unreported
Throwable
- Definition Classes
- StatefulStatus → Status
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
def
waitUntilCompleted(): Unit
Blocking call that returns only after
setCompleted
has been invoked on thisStatefulStatus
instance.Blocking call that returns only after
setCompleted
has been invoked on thisStatefulStatus
instance.- Definition Classes
- StatefulStatus → Status
-
def
whenCompleted(f: (Try[Boolean]) ⇒ Unit): Unit
Registers the passed function to be executed when this status completes.
Registers the passed function to be executed when this status completes.
You may register multiple functions, which on completion will be executed in an undefined order.
- Definition Classes
- StatefulStatus → Status
-
final
def
withAfterEffect(f: ⇒ Unit): Status
Registers a by-name function (producing an optional exception) to execute after this
Status
completes.Registers a by-name function (producing an optional exception) to execute after this
Status
completes.If the by-name function passed to this method completes abruptly with a non-run-aborting exception, that exception will be caught and installed as the
unreportedException
on theStatus
returned by this method. TheStatus
returned by this method will then complete. The thread that attempted to evaluate the by-name function will be allowed to continue (i.e.
, the non-run-aborting exception will not be rethrown on that thread).If the by-name function passed to this method completes abruptly with a run-aborting exception, such as
StackOverflowError
, that exception will be caught and a newjava.util.concurrent.ExecutionException
that contains the run-aborting exception as its cause will be installed as theunreportedException
on theStatus
returned by this method. TheStatus
returned by this method will then complete. The original run-aborting exception will then be rethrown on the thread that attempted to evaluate the by-name function.If an unreported exception is installed on this
Status
, the passed by-name function will not be executed. Instead, the same unreported exception will be installed on theStatus
returned by this method.Internally, ScalaTest uses this method in traits
BeforeAndAfter
,BeforeAndAfterEach
, andBeforeAndAfterEachTestData
to ensure "after" code is executed after the relevant test has completed, and in traitsBeforeAndAfterAll
andBeforeAndAfterAllConfigMap
to ensure "after" code is executed after the relevant tests and nested suites have completed.- f
A by-name function to invoke after this
Status
has completed.- returns
a
Status
that represents thisStatus
, modified by any exception thrown by the passed by-name function.
- Definition Classes
- Status