diff --git a/akka-actor-testkit-typed/src/main/scala/akka/actor/testkit/typed/internal/EffectfulActorContext.scala b/akka-actor-testkit-typed/src/main/scala/akka/actor/testkit/typed/internal/EffectfulActorContext.scala index a27054c0f0..5a89c99cad 100644 --- a/akka-actor-testkit-typed/src/main/scala/akka/actor/testkit/typed/internal/EffectfulActorContext.scala +++ b/akka-actor-testkit-typed/src/main/scala/akka/actor/testkit/typed/internal/EffectfulActorContext.scala @@ -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) diff --git a/akka-actor-testkit-typed/src/test/scala/akka/actor/testkit/typed/scaladsl/BehaviorTestKitSpec.scala b/akka-actor-testkit-typed/src/test/scala/akka/actor/testkit/typed/scaladsl/BehaviorTestKitSpec.scala index cb2bb95a91..e59bdfefdb 100644 --- a/akka-actor-testkit-typed/src/test/scala/akka/actor/testkit/typed/scaladsl/BehaviorTestKitSpec.scala +++ b/akka-actor-testkit-typed/src/test/scala/akka/actor/testkit/typed/scaladsl/BehaviorTestKitSpec.scala @@ -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 {