[JEDI.NET-commits] nunit/source Jedi.Timers.EventScheduler_NUnit.pas,NONE,1.1
Status: Pre-Alpha
Brought to you by:
jedi_mbe
From: Marcel B. <jed...@us...> - 2005-01-25 10:26:22
|
Update of /cvsroot/jedidotnet/nunit/source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3028/nunit/source Added Files: Jedi.Timers.EventScheduler_NUnit.pas Log Message: New class: EventScheduler. --- NEW FILE: Jedi.Timers.EventScheduler_NUnit.pas --- unit Jedi.Timers.EventScheduler_NUnit; interface uses System.Collections, NUnit.Framework, Jedi.Timers.EventScheduler; type [TestFixture] EventScheduler = class strict private FEveryTwoSeconds: ScheduledEvent; FEveryTwoSecondsList: ArrayList; strict protected procedure EventCallback(event: ScheduledEvent); public [Test] procedure SingleScheduleEveryPointTwoSeconds; [Test] procedure SingleScheduleEveryPointTwoSecondsNoSleep; end; implementation uses System.Globalization, System.Threading; procedure EventScheduler.EventCallback(event: ScheduledEvent); begin if event = FEveryTwoSeconds then FEveryTwoSecondsList.Add(&Object(event.ScheduledFor)); end; procedure EventScheduler.SingleScheduleEveryPointTwoSeconds; var FirstTicks: Int64; begin FEveryTwoSecondsList := ArrayList.Create; FEveryTwoSeconds := ScheduledEvent.Create(2000000, EventCallback); FirstTicks := FEveryTwoSeconds.ScheduledFor; Thread.Sleep(410); FEveryTwoSeconds.Interval := 0; // no more events Thread.Sleep(410); Assert.IsTrue(ScheduledEvents.HasStarted, 'Thread never started.'); Assert.IsFalse(ScheduledEvents.HasStopped, 'Thread stopped.'); Assert.AreEqual(2, FEveryTwoSecondsList.Count, 'Item count after 4 seconds.'); Assert.AreEqual(Decimal(FirstTicks + 0000000), Decimal(Int64(FEveryTwoSecondsList[0])), 'Trigger 1.'); Assert.AreEqual(Decimal(FirstTicks + 2000000), Decimal(Int64(FEveryTwoSecondsList[1])), 'Trigger 2.'); FEveryTwoSeconds.Free; FEveryTwoSecondsList.Free; end; procedure EventScheduler.SingleScheduleEveryPointTwoSecondsNoSleep; var FirstTicks: Int64; begin FEveryTwoSecondsList := ArrayList.Create; FEveryTwoSeconds := ScheduledEvent.Create(2000000, EventCallback); FirstTicks := FEveryTwoSeconds.ScheduledFor; repeat until DateTime.UtcNow.Ticks > (FirstTicks + 2100000); // Thread.Sleep(410); FEveryTwoSeconds.Interval := 0; // no more events // Thread.Sleep(410); repeat until DateTime.UtcNow.Ticks > (FirstTicks + 4200000); Console.WriteLine('Events {0}; Notifications: {0}', &Object(ScheduledEvents.EventsWaiting), &Object(ScheduledEvents.NotificationsWaiting)); Assert.IsTrue(ScheduledEvents.HasStarted, 'Thread never started.'); Assert.IsFalse(ScheduledEvents.HasStopped, 'Thread stopped.'); Assert.AreEqual(2, FEveryTwoSecondsList.Count, 'Item count after 4 seconds.'); Assert.AreEqual(Decimal(FirstTicks + 0000000), Decimal(Int64(FEveryTwoSecondsList[0])), 'Trigger 1.'); Assert.AreEqual(Decimal(FirstTicks + 2000000), Decimal(Int64(FEveryTwoSecondsList[1])), 'Trigger 2.'); FEveryTwoSeconds.Free; FEveryTwoSecondsList.Free; end; end. |