Exemplo n.º 1
0
        public void TestGetFireTimeAfter()
        {
            DateTime startCalendar = new DateTime(2005, 6, 1, 9, 30, 17);

            // Test yearly
            NthIncludedDayTrigger yearlyTrigger = new NthIncludedDayTrigger();

            yearlyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeYearly;
            yearlyTrigger.StartTimeUtc = startCalendar;
            yearlyTrigger.N            = 10;
            yearlyTrigger.FireAtTime   = "14:35:15";

            DateTime         targetCalendar = new DateTime(2006, 1, 10, 14, 35, 15).ToUniversalTime();
            NullableDateTime nextFireTimeUtc;

            nextFireTimeUtc = yearlyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000));
            Assert.AreEqual(targetCalendar, nextFireTimeUtc.Value);

            // Test monthly
            NthIncludedDayTrigger monthlyTrigger = new NthIncludedDayTrigger();

            monthlyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeMonthly;
            monthlyTrigger.StartTimeUtc = startCalendar;
            monthlyTrigger.N            = 5;
            monthlyTrigger.FireAtTime   = "14:35:15";

            targetCalendar  = new DateTime(2005, 6, 5, 14, 35, 15).ToUniversalTime();
            nextFireTimeUtc = monthlyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000));
            Assert.AreEqual(targetCalendar, nextFireTimeUtc.Value);

            // Test weekly
            NthIncludedDayTrigger weeklyTrigger = new NthIncludedDayTrigger();

            weeklyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeWeekly;
            weeklyTrigger.StartTimeUtc = startCalendar;
            weeklyTrigger.N            = 3;
            weeklyTrigger.FireAtTime   = "14:35:15";

            //roll start date forward to first day of the next week
            while (startCalendar.DayOfWeek != DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek)
            {
                startCalendar = startCalendar.AddDays(1);
            }

            //calculate expected fire date
            targetCalendar = new DateTime(startCalendar.Year, startCalendar.Month, startCalendar.Day, 14, 35, 15);

            //first day of the week counts as one. add two more to get N=3.
            targetCalendar = targetCalendar.AddDays(2);

            nextFireTimeUtc = weeklyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000));
            Assert.AreEqual(targetCalendar.ToUniversalTime(), nextFireTimeUtc.Value);
        }
        public void TestGetFireTimeAfter()
        {
            DateTimeOffset startCalendar = new DateTime(2005, 6, 1, 9, 30, 17);

            // Test yearly
            NthIncludedDayTrigger yearlyTrigger = new NthIncludedDayTrigger();
            yearlyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeYearly;
            yearlyTrigger.StartTimeUtc = startCalendar;
            yearlyTrigger.N = 10;
            yearlyTrigger.FireAtTime = "14:35:15";

            DateTimeOffset targetCalendar = new DateTime(2006, 1, 10, 14, 35, 15).ToUniversalTime();
            DateTimeOffset? nextFireTimeUtc;

            nextFireTimeUtc = yearlyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000));
            Assert.AreEqual(targetCalendar, nextFireTimeUtc.Value);

            // Test monthly
            NthIncludedDayTrigger monthlyTrigger = new NthIncludedDayTrigger();
            monthlyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeMonthly;
            monthlyTrigger.StartTimeUtc = startCalendar;
            monthlyTrigger.N = 5;
            monthlyTrigger.FireAtTime = "14:35:15";

            targetCalendar = new DateTime(2005, 6, 5, 14, 35, 15).ToUniversalTime();
            nextFireTimeUtc = monthlyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000));
            Assert.AreEqual(targetCalendar, nextFireTimeUtc.Value);

            // Test weekly
            NthIncludedDayTrigger weeklyTrigger = new NthIncludedDayTrigger();
            weeklyTrigger.IntervalType = NthIncludedDayTrigger.IntervalTypeWeekly;
            weeklyTrigger.StartTimeUtc = startCalendar;
            weeklyTrigger.N = 3;
            weeklyTrigger.FireAtTime = "14:35:15";

            //roll start date forward to first day of the next week
            while (startCalendar.DayOfWeek != DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek)
            {
                startCalendar = startCalendar.AddDays(1);
            }

            //calculate expected fire date
            targetCalendar = new DateTime(startCalendar.Year, startCalendar.Month, startCalendar.Day, 14, 35, 15);

            //first day of the week counts as one. add two more to get N=3.
            targetCalendar = targetCalendar.AddDays(2);

            nextFireTimeUtc = weeklyTrigger.GetFireTimeAfter(startCalendar.AddMilliseconds(1000));
            Assert.AreEqual(targetCalendar.ToUniversalTime(), nextFireTimeUtc.Value);
        }