public void TestNotifyEachWithTimespan() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using (TestSubscriber subscriber = new TestSubscriber()) { using (Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.NotifyEach( TimeSpan.FromHours(12), TimeSpan.FromHours(1), subscriber.Callback ); mockTimeSource.AdvanceTime(TimeSpan.FromHours(14)); // Wait for 3 invocations of the callback. We might not catch each trigger // of the AutoResetEvent, but we know that it will be 3 at most. for (int invocation = 0; invocation < 3; ++invocation) { Assert.IsTrue(subscriber.WaitForCallback(1000)); if (subscriber.CallbackCount == 3) { break; } } } } }
public void TestCancelNotification() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using (TestSubscriber subscriber1 = new TestSubscriber()) { using (TestSubscriber subscriber2 = new TestSubscriber()) { using (Scheduler scheduler = new Scheduler(mockTimeSource)) { object handle = scheduler.NotifyIn( TimeSpan.FromHours(24), subscriber1.Callback ); scheduler.NotifyIn(TimeSpan.FromHours(36), subscriber2.Callback); mockTimeSource.AdvanceTime(TimeSpan.FromHours(12)); scheduler.Cancel(handle); mockTimeSource.AdvanceTime(TimeSpan.FromHours(24)); // Wait for the second subscriber to be notified. This is still a race // condition (there's no guarantee the thread pool will run tasks in // the order they were added), but it's the best we can do without // relying on an ugly Thread.Sleep() in this test. Assert.IsTrue(subscriber2.WaitForCallback(1000)); Assert.AreEqual(0, subscriber1.CallbackCount); } } } }
public void TestTimeSink03_ChangeTwice() { /* 创建观察者和被观察者对象 */ MockTimeSource mockTimeSource = new MockTimeSource(); MockTimeSink mockTimeSink = new MockTimeSink(mockTimeSource); MockTimeSink mockTimeSink1 = new MockTimeSink(mockTimeSource); /* 设定观察者对象 */ mockTimeSource.RegisterObserver(mockTimeSink); mockTimeSource.RegisterObserver(mockTimeSink1); /* Refresh the souce */ mockTimeSource.SetTime(1, 3, 5); Assert.AreEqual(1, mockTimeSink.GetHour()); Assert.AreEqual(3, mockTimeSink.GetMinite()); Assert.AreEqual(5, mockTimeSink.GetSecond()); Assert.AreEqual(1, mockTimeSink1.GetHour()); Assert.AreEqual(3, mockTimeSink1.GetMinite()); Assert.AreEqual(5, mockTimeSink1.GetSecond()); /* Refresh the souce */ mockTimeSource.SetTime(2, 4, 6); Assert.AreEqual(2, mockTimeSink1.GetHour()); Assert.AreEqual(4, mockTimeSink1.GetMinite()); Assert.AreEqual(6, mockTimeSink1.GetSecond()); }
public void TestTimeChange() { MockTimeSource source = new MockTimeSource(); MockTimeSink sink = new MockTimeSink(); source.RegisterObserver(sink); source.SetTime(3, 4, 5); AssertSinkEquals(sink, 3, 4, 5); source.SetTime(7, 8, 9); AssertSinkEquals(sink, 7, 8, 9); }
public void TestNotifyAt() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using (TestSubscriber subscriber = new TestSubscriber()) { using (Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.NotifyAt(makeUtc(new DateTime(2010, 1, 2)), subscriber.Callback); mockTimeSource.AdvanceTime(TimeSpan.FromDays(1)); Assert.IsTrue(subscriber.WaitForCallback(1000)); } } }
public void SetUp() { tsource = new MockTimeSource(); handle = new TimeHandle(tsource, new MockTimeSink()); tester = new ThreadSyncTester(); sourceThread = tester.ObtainThread("source"); sinkThread = tester.ObtainThread("sink"); externalThread = tester.ObtainThread("external"); interval = TimeInterval.FromTicks(1000); SetSourceSideActiveOnExternal(true); }
public static void Test() { var source = new MockTimeSource(); var sink = new MockTimeSink(source); source.RegisterObserver(sink); // changes in object - source source.SetTime(3, 4, 5); // affects in object - sink AssertSinkEquals(sink, 3, 4, 5); Console.WriteLine(); source.SetTime(7, 8, 9); AssertSinkEquals(sink, 7, 8, 9); }
public void TestCancelFinalNotification() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using (TestSubscriber subscriber = new TestSubscriber()) { using (Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.Cancel( scheduler.NotifyIn(TimeSpan.FromHours(12), subscriber.Callback) ); mockTimeSource.AdvanceTime(TimeSpan.FromHours(14)); Thread.Sleep(1); } } }
public void TestNotifyAtWithDateTimeAdjustment() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using (TestSubscriber subscriber = new TestSubscriber()) { using (Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.NotifyAt(makeUtc(new DateTime(2010, 1, 2)), subscriber.Callback); // Let 12 hours pass, after that, we simulate a time synchronization // that puts the system 12 hours ahead of the original time. mockTimeSource.AdvanceTime(TimeSpan.FromHours(12)); mockTimeSource.AdjustTime(new DateTime(2010, 1, 2)); Assert.IsTrue(subscriber.WaitForCallback(1000)); } } }
public void TestTimeChanged() { var source = new MockTimeSource() ; var sink = new MockTimeSink(); source.RegisterObserver(sink); int hours = 1; int minutes = 2; int seconds = 3; source.SetTime(hours,minutes,seconds); AsserrEquals(sink, hours, minutes, seconds); hours = 4; minutes = 5; seconds = 6; source.SetTime(hours, minutes, seconds); AsserrEquals(sink, hours, minutes, seconds); }
public void TestTwoNotificationsAtSameTime() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using (TestSubscriber subscriber1 = new TestSubscriber()) { using (TestSubscriber subscriber2 = new TestSubscriber()) { using (Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.NotifyIn(60000, subscriber1.Callback); scheduler.NotifyIn(60000, subscriber2.Callback); mockTimeSource.AdvanceTime(TimeSpan.FromMilliseconds(60000)); Assert.IsTrue(subscriber1.WaitForCallback(1000)); Assert.IsTrue(subscriber2.WaitForCallback(1000)); } } } }
public void TestTimeChanged() { var source = new MockTimeSource(); var sink = new MockTimeSink(); source.RegisterObserver(sink); int hours = 1; int minutes = 2; int seconds = 3; source.SetTime(hours, minutes, seconds); AsserrEquals(sink, hours, minutes, seconds); hours = 4; minutes = 5; seconds = 6; source.SetTime(hours, minutes, seconds); AsserrEquals(sink, hours, minutes, seconds); }
public void TestInverseOrderNotification() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using (TestSubscriber subscriber1 = new TestSubscriber()) { using (TestSubscriber subscriber2 = new TestSubscriber()) { using (Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.NotifyIn(TimeSpan.FromHours(24), subscriber1.Callback); scheduler.NotifyIn(TimeSpan.FromHours(12), subscriber2.Callback); mockTimeSource.AdvanceTime(TimeSpan.FromHours(18)); Assert.IsTrue(subscriber2.WaitForCallback(1000)); Assert.AreEqual(0, subscriber1.CallbackCount); mockTimeSource.AdvanceTime(TimeSpan.FromHours(18)); Assert.IsTrue(subscriber1.WaitForCallback(1000)); } } } }
public void TestNotifyAt() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using(TestSubscriber subscriber = new TestSubscriber()) { using(Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.NotifyAt(makeUtc(new DateTime(2010, 1, 2)), subscriber.Callback); mockTimeSource.AdvanceTime(TimeSpan.FromDays(1)); Assert.IsTrue(subscriber.WaitForCallback(1000)); } } }
public void TestNotifyAtWithDateTimeAdjustment() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using(TestSubscriber subscriber = new TestSubscriber()) { using(Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.NotifyAt(makeUtc(new DateTime(2010, 1, 2)), subscriber.Callback); // Let 12 hours pass, after that, we simulate a time synchronization // that puts the system 12 hours ahead of the original time. mockTimeSource.AdvanceTime(TimeSpan.FromHours(12)); mockTimeSource.AdjustTime(new DateTime(2010, 1, 2)); Assert.IsTrue(subscriber.WaitForCallback(1000)); } } }
public void SetUp() { this.source = new MockTimeSource(); this.sink = new MockTimeSink(); this.source.RegisterObserver(this.sink); }
public void TestCancelNotification() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using(TestSubscriber subscriber1 = new TestSubscriber()) { using(TestSubscriber subscriber2 = new TestSubscriber()) { using(Scheduler scheduler = new Scheduler(mockTimeSource)) { object handle = scheduler.NotifyIn( TimeSpan.FromHours(24), subscriber1.Callback ); scheduler.NotifyIn(TimeSpan.FromHours(36), subscriber2.Callback); mockTimeSource.AdvanceTime(TimeSpan.FromHours(12)); scheduler.Cancel(handle); mockTimeSource.AdvanceTime(TimeSpan.FromHours(24)); // Wait for the second subscriber to be notified. This is still a race // condition (there's no guarantee the thread pool will run tasks in // the order they were added), but it's the best we can do without // relying on an ugly Thread.Sleep() in this test. Assert.IsTrue(subscriber2.WaitForCallback(1000)); Assert.AreEqual(0, subscriber1.CallbackCount); } } } }
public void TestInverseOrderNotification() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using(TestSubscriber subscriber1 = new TestSubscriber()) { using(TestSubscriber subscriber2 = new TestSubscriber()) { using(Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.NotifyIn(TimeSpan.FromHours(24), subscriber1.Callback); scheduler.NotifyIn(TimeSpan.FromHours(12), subscriber2.Callback); mockTimeSource.AdvanceTime(TimeSpan.FromHours(18)); Assert.IsTrue(subscriber2.WaitForCallback(1000)); Assert.AreEqual(0, subscriber1.CallbackCount); mockTimeSource.AdvanceTime(TimeSpan.FromHours(18)); Assert.IsTrue(subscriber1.WaitForCallback(1000)); } } } }
public void TestTwoNotificationsAtSameTime() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using(TestSubscriber subscriber1 = new TestSubscriber()) { using(TestSubscriber subscriber2 = new TestSubscriber()) { using(Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.NotifyIn(60000, subscriber1.Callback); scheduler.NotifyIn(60000, subscriber2.Callback); mockTimeSource.AdvanceTime(TimeSpan.FromMilliseconds(60000)); Assert.IsTrue(subscriber1.WaitForCallback(1000)); Assert.IsTrue(subscriber2.WaitForCallback(1000)); } } } }
public void TestNotifyEachWithTimespan() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using(TestSubscriber subscriber = new TestSubscriber()) { using(Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.NotifyEach( TimeSpan.FromHours(12), TimeSpan.FromHours(1), subscriber.Callback ); mockTimeSource.AdvanceTime(TimeSpan.FromHours(14)); // Wait for 3 invocations of the callback. We might not catch each trigger // of the AutoResetEvent, but we know that it will be 3 at most. for(int invocation = 0; invocation < 3; ++invocation) { Assert.IsTrue(subscriber.WaitForCallback(1000)); if(subscriber.CallbackCount == 3) { break; } } } } }
public void TestCancelFinalNotification() { MockTimeSource mockTimeSource = new MockTimeSource(new DateTime(2010, 1, 1)); using(TestSubscriber subscriber = new TestSubscriber()) { using(Scheduler scheduler = new Scheduler(mockTimeSource)) { scheduler.Cancel( scheduler.NotifyIn(TimeSpan.FromHours(12), subscriber.Callback) ); mockTimeSource.AdvanceTime(TimeSpan.FromHours(14)); Thread.Sleep(1); } } }