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))); }
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))); }
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))); }
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))); }
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); } }
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))); }
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); } }
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)); }