package Ġnet . bnb 1 . commons . tasks Ċ Ċ import Ġio . kot est . assertions . throw ables . should Throw Ċ import Ġio . kot est . assertions . timing . cont in ually Ċ import Ġio . kot est . assertions . timing . event ually Ċ import Ġio . kot est . core . spec . Isolation Mode Ċ import Ġio . kot est . core . spec . style . Fun Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġnet . bnb 1 . commons . lifecycle . Lifecycle Exception Ċ import Ġnet . bnb 1 . commons . utils . milliseconds Ċ import Ġkotlin . time . Experimental Time Ċ Ċ @ Opt In ( Experimental Time :: class ) Ċ class ĠTask Scheduler Tests Ġ: ĠFun Spec ({ ĊĊĠĠĠ Ġisolation Mode Ġ= ĠI sol ation Mode . Instance Per Test ĊĊĠĠĠ Ġvar Ġcounter Ġ= Ġ 0 ĊĠĠĠ Ġval Ġtask Scheduler Ġ= ĠTask Scheduler () ĊĠĠĠ ĠafterEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( task Scheduler . running ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . stop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" Scheduler Ġstopped ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtest (" Start Ġscheduler ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . running ĠshouldBe Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . running ĠshouldBe Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" Start Ġscheduler Ġmultiple Ġtimes ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Throw < Lifecycle Exception > Ġ{ Ġtask Scheduler . start () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" Stop Ġscheduler ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Throw < Lifecycle Exception > Ġ{ Ġtask Scheduler . stop () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" Add Ġtask Ġand Ġstart Ġscheduler ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . add ( Task Definition ( 0 , Ġ 1 0 _ 0 0 0 ) Ġ{ Ġcounter ++ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeventually ( 1 0 0 . milliseconds ) Ġ{ Ġcounter ĠshouldBe Ġ 1 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" Start Ġscheduler Ġand Ġadd Ġtask ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . add ( Task Definition ( 0 , Ġ 1 0 _ 0 0 0 ) Ġ{ Ġcounter ++ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeventually ( 1 0 0 . milliseconds ) Ġ{ Ġcounter ĠshouldBe Ġ 1 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" Scheduler Ġstarted ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtask Scheduler . start () ĊĊĠĠĠĠĠĠĠ Ġtest (" Stop Ġscheduler ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . running ĠshouldBe Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" Add Ġtask ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . add ( Task Definition ( 0 , Ġ 1 0 _ 0 0 0 ) Ġ{ Ġcounter ++ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeventually ( 1 0 0 . milliseconds ) Ġ{ Ġcounter ĠshouldBe Ġ 1 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" Add Ġdelayed Ġtask ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . add ( Task Definition ( 1 0 0 , Ġ 1 0 _ 0 0 0 ) Ġ{ Ġcounter ++ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontin ually ( 9 0 . milliseconds ) Ġ{ Ġcounter ĠshouldBe Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeventually ( 1 0 0 . milliseconds ) Ġ{ Ġcounter ĠshouldBe Ġ 1 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" Run Ġtask Ġmultiple Ġtimes ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . add ( Task Definition ( 0 , Ġ 1 0 0 ) Ġ{ Ġcounter ++ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeventually ( 5 0 . milliseconds ) Ġ{ Ġcounter ĠshouldBe Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeventually ( 1 5 0 . milliseconds ) Ġ{ Ġcounter ĠshouldBe Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeventually ( 2 5 0 . milliseconds ) Ġ{ Ġcounter ĠshouldBe Ġ 3 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" Run Ġtask Ġand Ġstop ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . add ( Task Definition ( 0 , Ġ 1 0 0 ) Ġ{ Ġcounter ++ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeventually ( 5 0 . milliseconds ) Ġ{ Ġcounter ĠshouldBe Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask Scheduler . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontin ually ( 1 5 0 . milliseconds ) Ġ{ Ġcounter ĠshouldBe Ġ 1 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ