diff options
Diffstat (limited to 'odcsim-engine-tests/src/main/kotlin')
| -rw-r--r-- | odcsim-engine-tests/src/main/kotlin/com/atlarge/odcsim/engine/tests/ActorSystemContract.kt | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/odcsim-engine-tests/src/main/kotlin/com/atlarge/odcsim/engine/tests/ActorSystemContract.kt b/odcsim-engine-tests/src/main/kotlin/com/atlarge/odcsim/engine/tests/ActorSystemContract.kt index cb75c2ac..867e7c11 100644 --- a/odcsim-engine-tests/src/main/kotlin/com/atlarge/odcsim/engine/tests/ActorSystemContract.kt +++ b/odcsim-engine-tests/src/main/kotlin/com/atlarge/odcsim/engine/tests/ActorSystemContract.kt @@ -28,9 +28,13 @@ import com.atlarge.odcsim.ActorPath import com.atlarge.odcsim.ActorRef import com.atlarge.odcsim.ActorSystemFactory import com.atlarge.odcsim.Behavior +import com.atlarge.odcsim.Terminated +import com.atlarge.odcsim.coroutines.dsl.timeout +import com.atlarge.odcsim.coroutines.suspending import com.atlarge.odcsim.empty import com.atlarge.odcsim.ignore import com.atlarge.odcsim.receiveMessage +import com.atlarge.odcsim.receiveSignal import com.atlarge.odcsim.same import com.atlarge.odcsim.setup import com.atlarge.odcsim.stopped @@ -278,7 +282,7 @@ abstract class ActorSystemContract { val system = factory(setup<ActorRef<Unit>> { ctx -> val root = ctx.self val child = ctx.spawn(setup<Unit> { - val child = ctx.spawn(receiveMessage<Unit> { + val child = it.spawn(receiveMessage<Unit> { throw IllegalStateException("DELIBERATE") }, "child") ctx.send(root, child) @@ -363,6 +367,36 @@ abstract class ActorSystemContract { assertEquals(1, counter) system.terminate() } + + /** + * Test whether an actor can watch for termination. + */ + @Test + fun `should watch for termination`() { + var received = false + val system = factory(setup<Nothing> { ctx -> + val child = ctx.spawn(suspending<Nothing> { + it.timeout(50.0) + stopped() + }, "child") + ctx.watch(child) + + receiveSignal { _, signal -> + when (signal) { + is Terminated -> { + received = true + stopped() + } + else -> + same() + } + } + }, "test") + + system.run() + system.terminate() + assertTrue(received) + } } companion object { |
