public void ScheduleOnceTests()
        {
            // Prepare, set up actions to be fired
            IActionScheduler testScheduler = new TaskBasedScheduler();

            testScheduler.ScheduleOnce(50, () => TestActor.Tell("Test1"));
            testScheduler.ScheduleOnce(100, () => TestActor.Tell("Test2"));

            ExpectMsg("Test1");
            ExpectMsg("Test2");

            ExpectNoMsg(100);
        }
        public void When_ScheduleOnce_with_invalid_delay_Then_exception_is_thrown(int invalidTime)
        {
            IActionScheduler testScheduler = new TaskBasedScheduler();

            XAssert.Throws <ArgumentOutOfRangeException>(() =>
                                                         testScheduler.ScheduleOnce(invalidTime, () => { })
                                                         );
        }
        public void When_ScheduleOnce_with_0_delay_Then_action_is_executed_immediately()
        {
            IActionScheduler testScheduler = new TaskBasedScheduler();
            var manualResetEvent           = new ManualResetEventSlim();

            manualResetEvent.IsSet.ShouldBeFalse();
            testScheduler.ScheduleOnce(0, () => manualResetEvent.Set());

            manualResetEvent.Wait(500).ShouldBeTrue();
        }
        public void When_ScheduleOnce_using_canceled_Cancelable_Then_their_actions_should_not_be_invoked()
        {
            // Prepare, set up actions to be fired
            IActionScheduler scheduler = new TaskBasedScheduler();

            var canceled = Cancelable.CreateCanceled();

            scheduler.ScheduleOnce(0, () => TestActor.Tell("Test"), canceled);

            //Validate that no messages were sent
            ExpectNoMsg(100);
        }
        public void When_ScheduleOnce_and_then_canceling_before_they_occur_Then_their_actions_should_not_be_invoked()
        {
            // Prepare, set up actions to be fired
            IActionScheduler scheduler = new TaskBasedScheduler();

            var cancelable = new Cancelable(scheduler);

            scheduler.ScheduleOnce(100, () => TestActor.Tell("Test"), cancelable);
            cancelable.Cancel();

            //Validate that no messages were sent
            ExpectNoMsg(150);
        }
        public void When_ScheduleOnce_many_at_the_same_time_Then_all_fires(int[] times)
        {
            // Prepare, set up actions to be fired
            IActionScheduler scheduler = new TaskBasedScheduler();

            foreach (var time in times)
            {
                var t = time;
                scheduler.ScheduleOnce(time, () => TestActor.Tell("Test" + t));
            }

            //Perform the test
            ExpectMsg("Test1");
            ExpectMsg("Test1");
            ExpectMsg("Test50");
            ExpectMsg("Test50");
            ExpectMsg("Test100");
            ExpectMsg("Test100");
            ExpectNoMsg(50);
        }