public void Should_be_able_to_satisfy_occurrence()
        {
            var field = new CronDayOfWeek("4#2");

            var date = new DateTime(2011, 01, 01, 0, 0, 0);

            Assert.AreEqual(date.AddDays(11), field.GetNext(date));
        }
        public void Should_be_able_to_satisfy_asterisk_value()
        {
            var field = new CronDayOfWeek("*");

            var date = new DateTime(2011, 01, 01, 0, 0, 0);

            for (var i = 0; i < 8; i++)
            {
                Assert.AreEqual(date, field.GetNext(date));

                date = date.AddDays(1);
            }
        }
        public void Should_be_able_to_satisfy_asterisk_value()
        {
            var field = new CronDayOfWeek("*");

            var date = new DateTime(2011, 01, 01, 0, 0, 0);

            for (var i = 0; i < 8; i++)
            {
                Assert.AreEqual(date, field.SnapForward(date));

                date = date.AddDays(1);
            }
        }
        public void Should_be_able_to_satisfy_last_day_of_week()
        {
            var field = new CronDayOfWeek("L");

            var control = new DateTime(2011, 01, 01, 0, 0, 0);
            var date    = field.GetNext(control);

            Assert.AreEqual(control, date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(7), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(14), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(21), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(28), date);
        }
        public void Should_be_able_to_satisfy_a_stepped_values()
        {
            var field = new CronDayOfWeek("2/5");

            var control = new DateTime(2011, 01, 01, 0, 0, 0);
            var date    = field.GetNext(control);

            Assert.AreEqual(control, date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(2), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(7), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(9), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(14), date);
        }
        public void Should_be_able_to_satisfy_a_stepped_values()
        {
            var field = new CronDayOfWeek("2/5");

            var control = new DateTime(2011, 01, 01, 0, 0, 0);
            var date = field.SnapForward(control);

            Assert.AreEqual(control, date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(2), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(7), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(9), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(14), date);
        }
        public void Should_be_able_to_satisfy_a_range_of_values()
        {
            var field = new CronDayOfWeek("2-4");

            var control = new DateTime(2011, 01, 01, 0, 0, 0);
            var date    = field.GetNext(control);

            Assert.AreEqual(control.AddDays(2), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(3), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(4), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(9), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(10), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(11), date);
        }
        public void Should_be_able_to_satisfy_individual_values()
        {
            var field = new CronDayOfWeek("1,3,6");

            var control = new DateTime(2011, 01, 01, 0, 0, 0);
            var date    = field.GetNext(control);

            Assert.AreEqual(control.AddDays(1), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(3), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(6), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(8), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(10), date);
            date = field.GetNext(date.AddDays(1));

            Assert.AreEqual(control.AddDays(13), date);
        }
        public void Should_be_able_to_satisfy_individual_values()
        {
            var field = new CronDayOfWeek("1,3,6");

            var control = new DateTime(2011, 01, 01, 0, 0, 0);
            var date = field.SnapForward(control);

            Assert.AreEqual(control.AddDays(1), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(3), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(6), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(8), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(10), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(13), date);
        }
        public void Should_be_able_to_satisfy_a_range_of_values()
        {
            var field = new CronDayOfWeek("2-4");

            var control = new DateTime(2011, 01, 01, 0, 0, 0);
            var date = field.SnapForward(control);

            Assert.AreEqual(control.AddDays(2), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(3), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(4), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(9), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(10), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(11), date);
        }
        public void Should_be_able_to_satisfy_occurrence()
        {
            var field = new CronDayOfWeek("4#2");

            var date = new DateTime(2011, 01, 01, 0, 0, 0);

            Assert.AreEqual(date.AddDays(11), field.SnapForward(date));
        }
        public void Should_be_able_to_satisfy_last_day_of_week()
        {
            var field = new CronDayOfWeek("L");

            var control = new DateTime(2011, 01, 01, 0, 0, 0);
            var date = field.SnapForward(control);

            Assert.AreEqual(control, date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(7), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(14), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(21), date);
            date = field.SnapForward(date.AddDays(1));

            Assert.AreEqual(control.AddDays(28), date);
        }