Implement isTimerActive for BehaviorTestKit #30140 (#30144)

This commit is contained in:
Eugene Apollonsky 2021-03-30 17:17:25 +03:00 committed by GitHub
parent f7c559e057
commit 03375a7eff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 1 deletions

View file

@ -106,7 +106,7 @@ import scala.reflect.ClassTag
override def startSingleTimer(key: Any, msg: T, delay: FiniteDuration): Unit =
startTimer(key, msg, delay, Effect.TimerScheduled.SingleMode)
override def isTimerActive(key: Any): Boolean = ???
override def isTimerActive(key: Any): Boolean = activeTimers.isDefinedAt(key)
override def cancel(key: Any): Unit = if (activeTimers.keySet(key)) {
val effect = Effect.TimerCancelled(key)

View file

@ -49,6 +49,7 @@ object BehaviorTestKitSpec {
case class ScheduleCommand(key: Any, delay: FiniteDuration, mode: Effect.TimerScheduled.TimerMode, cmd: Command)
extends Command
case class CancelScheduleCommand(key: Any) extends Command
case class IsTimerActive(key: Any, replyTo: ActorRef[Boolean]) extends Command
val init: Behavior[Command] = Behaviors.withTimers { timers =>
Behaviors
@ -134,6 +135,9 @@ object BehaviorTestKitSpec {
case CancelScheduleCommand(key) =>
timers.cancel(key)
Behaviors.same
case IsTimerActive(key, replyTo) =>
replyTo ! timers.isTimerActive(key)
Behaviors.same
}
}
.receiveSignal {
@ -408,6 +412,9 @@ class BehaviorTestKitSpec extends AnyWordSpec with Matchers with LogCapturing {
"timer support" must {
"schedule and cancel timers" in {
val testkit = BehaviorTestKit[Parent.Command](Parent.init)
val t = TestInbox[Boolean]()
testkit.run(IsTimerActive("abc", t.ref))
t.receiveMessage() shouldBe false
testkit.run(ScheduleCommand("abc", 42.seconds, Effect.TimerScheduled.SingleMode, SpawnChild))
testkit.expectEffectPF {
case Effect.TimerScheduled(
@ -418,11 +425,15 @@ class BehaviorTestKitSpec extends AnyWordSpec with Matchers with LogCapturing {
false /*not overriding*/ ) =>
finiteDuration should equal(42.seconds)
}
testkit.run(IsTimerActive("abc", t.ref))
t.receiveMessage() shouldBe true
testkit.run(CancelScheduleCommand("abc"))
testkit.expectEffectPF {
case Effect.TimerCancelled(key) =>
key should equal("abc")
}
testkit.run(IsTimerActive("abc", t.ref))
t.receiveMessage() shouldBe false
}
"schedule and fire timers" in {