Exemplo n.º 1
0
        public void TestWeeklyTrigger()
        {
            DateTime now    = DateTime.Now;
            ITrigger weekly = Trigger.Weekly("bla", now.TimeOfDay, now.DayOfWeek);

            Assert.IsNotNull(weekly);

            Assert.AreEqual(now, weekly.GetNextTriggerTime(now));
            Assert.AreEqual(now.AddDays(7), weekly.GetNextTriggerTime(now.AddMilliseconds(1)));

            Assert.AreEqual(now, weekly.GetNextTriggerTime(now.AddMilliseconds(-1)));

            now    = new DateTime(2000, 1, 1, 1, 1, 1, 1); // Saturday
            weekly = Trigger.Weekly("bla", now.TimeOfDay, DayOfWeek.Monday, DayOfWeek.Wednesday, DayOfWeek.Friday);

            // monday
            Assert.AreEqual(DayOfWeek.Monday, now.AddDays(2).DayOfWeek);
            Assert.AreEqual(now.AddDays(2), weekly.GetNextTriggerTime(now));
            Assert.AreEqual(now.AddDays(2), weekly.GetNextTriggerTime(now.AddDays(2)));

            // wendesday
            Assert.AreEqual(DayOfWeek.Wednesday, now.AddDays(4).DayOfWeek);
            Assert.AreEqual(now.AddDays(4), weekly.GetNextTriggerTime(now.AddDays(3)));
            Assert.AreEqual(now.AddDays(4), weekly.GetNextTriggerTime(now.AddDays(4)));

            // friday
            Assert.AreEqual(DayOfWeek.Friday, now.AddDays(6).DayOfWeek);
            Assert.AreEqual(now.AddDays(6), weekly.GetNextTriggerTime(now.AddDays(5)));
            Assert.AreEqual(now.AddDays(6), weekly.GetNextTriggerTime(now.AddDays(6)));

            // monday again
            Assert.AreEqual(DayOfWeek.Monday, now.AddDays(9).DayOfWeek);
            Assert.AreEqual(now.AddDays(9), weekly.GetNextTriggerTime(now.AddDays(6.5)));
        }
Exemplo n.º 2
0
        public void TestHourlyTrigger()
        {
            DateTime now = new DateTime(2000, 1, 1, 0, 0, 0, 0);

            ITrigger hourly = Trigger.Hourly("bla", 0);

            Assert.IsNotNull(hourly);
            Assert.AreEqual(now, hourly.GetNextTriggerTime(now));
            Assert.AreEqual(now, hourly.GetNextTriggerTime(now.AddMilliseconds(-1)));

            Assert.AreEqual(now.AddHours(1), hourly.GetNextTriggerTime(now.AddMilliseconds(1)));
            Assert.AreEqual(now.AddHours(1), hourly.GetNextTriggerTime(now.AddHours(1)));
        }
Exemplo n.º 3
0
        public void TestIntervalTrigger()
        {
            DateTime now = new DateTime(2000, 1, 1, 0, 0, 0, 0);

            ITrigger interval = Trigger.Interval("bla", now, TimeSpan.FromMinutes(1));

            Assert.IsNotNull(interval);
            Assert.AreEqual(now, interval.GetNextTriggerTime(now));
            Assert.AreEqual(now, interval.GetNextTriggerTime(now.AddMilliseconds(-1)));

            Assert.AreEqual(now.AddMinutes(1), interval.GetNextTriggerTime(now.AddMilliseconds(1)));
            Assert.AreEqual(now.AddMinutes(1), interval.GetNextTriggerTime(now.AddMilliseconds(2)));
            Assert.AreEqual(now.AddMinutes(2), interval.GetNextTriggerTime(now.AddMilliseconds(60 * 1000)));
        }
Exemplo n.º 4
0
        public void TestMonthlyTrigger()
        {
            DateTime now     = new DateTime(2000, 1, 1, 0, 0, 0, 0);
            ITrigger monthly = Trigger.Monthly("bla", 31, TimeSpan.FromHours(1));

            Assert.IsNotNull(monthly);

            // 2000-01-01 00:00 -> 2000-01-31 01:00
            Assert.AreEqual(now.AddDays(30).AddHours(1), monthly.GetNextTriggerTime(now));

            // 2000-02-01 00:00 -> 2000-03-31 01:00
            Assert.AreEqual(now.AddMonths(2).AddDays(30).AddHours(1), monthly.GetNextTriggerTime(now.AddMonths(1)));

            // 2000-12-01 00:00 -> 2000-12-31 01:00
            Assert.AreEqual(now.AddMonths(11).AddDays(30).AddHours(1), monthly.GetNextTriggerTime(now.AddMonths(11)));

            // 2000-12-31 02:00 -> 2001-01-31 01:00
            Assert.AreEqual(now.AddMonths(12).AddDays(30).AddHours(1), monthly.GetNextTriggerTime(now.AddMonths(11).AddDays(30).AddHours(2)));
        }
Exemplo n.º 5
0
        public void Register(ITrigger trigger)
        {
            Guard.ArgumentNotNull("trigger", trigger);
            DateTime date = DateTime.Now;

            DateTime?time = trigger.GetNextTriggerTime(date);

            if (time == null)
            {
                return;
            }

            lock (_syncObj)
            {
                var pair = new Pair <ITrigger, DateTime>(trigger, time.Value);

                if (_innerQueue.Count == 0)
                {
                    _innerQueue.Add(pair);
                    if (_started)
                    {
                        _waitHandle.Set();
                    }
                    return;
                }

                for (int i = 0; i < _innerQueue.Count; i++)
                {
                    if (_innerQueue[i].B < pair.B)
                    {
                        continue;
                    }

                    _innerQueue.Insert(i, pair);
                    if (i == 0 && _started)
                    {
                        _waitHandle.Set();
                    }
                    return;
                }
                _innerQueue.Add(pair);
            }
        }
Exemplo n.º 6
0
        public void TestDailyTrigger()
        {
            DateTime now   = DateTime.Now;
            ITrigger daily = Trigger.Daily("bla", now.TimeOfDay);

            Assert.IsNotNull(daily);

            Assert.AreEqual(now, daily.GetNextTriggerTime(now));
            Assert.AreEqual(now, daily.GetNextTriggerTime(now.AddDays(-0.5)));
            Assert.AreEqual(now.AddDays(-1), daily.GetNextTriggerTime(now.AddDays(-1)));

            Assert.AreEqual(now.AddDays(1), daily.GetNextTriggerTime(now.AddMilliseconds(1)));
            Assert.AreEqual(now.AddDays(1), daily.GetNextTriggerTime(now.AddDays(1)));
            Assert.AreEqual(now.AddDays(5), daily.GetNextTriggerTime(now.AddDays(4.5)));
        }
Exemplo n.º 7
0
        public void Register(ITrigger trigger)
        {
            Guard.ArgumentNotNull("trigger", trigger);
            DateTime date = DateTime.Now;

            DateTime? time = trigger.GetNextTriggerTime(date);

            if (time == null)
                return;

            lock (_syncObj)
            {
                var pair = new Pair<ITrigger, DateTime>(trigger, time.Value);

                if (_innerQueue.Count == 0)
                {
                    _innerQueue.Add(pair);
                    if (_started)
                        _waitHandle.Set();
                    return;
                }

                for (int i = 0; i < _innerQueue.Count; i++)
                {
                    if (_innerQueue[i].B < pair.B)
                        continue;

                    _innerQueue.Insert(i, pair);
                    if (i == 0 && _started)
                    {
                        _waitHandle.Set();
                    }
                    return;
                }
                _innerQueue.Add(pair);
            }
        }
Exemplo n.º 8
0
        public void TestOnceTrigger()
        {
            DateTime now  = DateTime.Now;
            ITrigger once = Trigger.Once("bla", now);

            Assert.IsNotNull(once);

            Assert.AreEqual(now, once.GetNextTriggerTime(now));

            Assert.AreEqual(now, once.GetNextTriggerTime(now.AddMilliseconds(-1)));
            Assert.AreEqual(now, once.GetNextTriggerTime(now.AddDays(-1)));

            Assert.IsNull(once.GetNextTriggerTime(now.AddDays(1)));
            Assert.IsNull(once.GetNextTriggerTime(now.AddMilliseconds(1)));

            now  = new DateTime(633252388592031250);
            once = Trigger.Once("bla", new DateTime(633252388402031250));
            Assert.IsNull(once.GetNextTriggerTime(now));
        }