Ejemplo n.º 1
0
        public void Callback_Int32_HasInitialAndInterval()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                object expectedState = new object();

                int    fired       = 0;
                object actualState = null;

                using (var timer = TimeProvider.Timer((state) => { actualState = state; fired++; }, expectedState, 100, 100))
                {
                    delorean.Advance(100);

                    Assert.AreEqual(1, fired);
                    Assert.AreSame(expectedState, actualState);

                    actualState = null;

                    delorean.Advance(100);

                    Assert.AreEqual(2, fired);
                    Assert.AreSame(expectedState, actualState);

                    actualState = null;

                    delorean.Advance(100);

                    Assert.AreEqual(3, fired);
                    Assert.AreSame(expectedState, actualState);
                }
            }
        }
Ejemplo n.º 2
0
        public void Change_Int32_HasInitialGreaterThanInterval()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                int fired = 0;

                using (var timer = TimeProvider.Timer((state) => fired++))
                {
                    timer.Change(100, 50);

                    delorean.Advance(50);

                    Assert.AreEqual(0, fired);

                    delorean.Advance(50);

                    Assert.AreEqual(1, fired);

                    delorean.Advance(50);

                    Assert.AreEqual(2, fired);
                }
            }
        }
Ejemplo n.º 3
0
        public void Callback_UInt32_HasInitialButNotInterval(uint period)
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                object expectedState = new object();

                var    fired       = 0;
                object actualState = null;

                using (var timer = TimeProvider.Timer((state) => { actualState = state; fired++; }, expectedState, 100u, period))
                {
                    delorean.Advance(100);

                    Assert.AreEqual(1, fired);
                    Assert.AreSame(expectedState, actualState);

                    actualState = null;

                    delorean.Advance(100);

                    Assert.AreEqual(1, fired);
                    Assert.IsNull(actualState);
                }
            }
        }
Ejemplo n.º 4
0
 public void Advance_TimeSpan_TimeIsNotFrozen_ThrowsException()
 {
     using (var delorean = new Delorean(false))
     {
         Assert.ThrowsException <InvalidOperationException>(
             () => delorean.Advance(TimeSpan.FromMilliseconds(1)));
     }
 }
Ejemplo n.º 5
0
 public void Advance_TimeSpan_TimeIsFrozen_AttemptToMoveTimeBackwards()
 {
     using (var delorean = new Delorean(true))
     {
         Assert.ThrowsException <ArgumentOutOfRangeException>(
             () => delorean.Advance(TimeSpan.FromMilliseconds(-1)));
     }
 }
Ejemplo n.º 6
0
 public void Callback_Int32_Invalid(int initial, int period)
 {
     using (var delorean = new Delorean(true))
     {
         delorean.Freeze();
         Assert.ThrowsException <ArgumentOutOfRangeException>(() => TimeProvider.Timer((state) => { }, null, initial, period));
     }
 }
Ejemplo n.º 7
0
 public void Callback_TimeSpan_Invalid(long initial, long period)
 {
     using (var delorean = new Delorean(true))
     {
         delorean.Freeze();
         Assert.ThrowsException <ArgumentOutOfRangeException>(() => TimeProvider.Timer((state) => { }, null, TimeSpan.FromMilliseconds(initial), TimeSpan.FromMilliseconds(period)));
     }
 }
Ejemplo n.º 8
0
 public void Advance_Int32_TimeIsNotFrozen_ThrowsException()
 {
     using (var delorean = new Delorean(false))
     {
         Assert.ThrowsException <InvalidOperationException>(
             () => delorean.Advance(1));
     }
 }
Ejemplo n.º 9
0
        public void Frozen_Int32_InvalidWait()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                Assert.ThrowsException <ArgumentOutOfRangeException>(() => TimeProvider.Delay(-2));
            }
        }
Ejemplo n.º 10
0
 public void Change_Int64_Invalid(long initial, long period)
 {
     using (var delorean = new Delorean(true))
     {
         delorean.Freeze();
         var timer = TimeProvider.Timer((state) => { });
         Assert.ThrowsException <ArgumentOutOfRangeException>(() => timer.Change(initial, period));
     }
 }
Ejemplo n.º 11
0
        public void Frozen_TimeSpan_InvalidWait(double milliseconds)
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                Assert.ThrowsException <ArgumentOutOfRangeException>(() => TimeProvider.Delay(TimeSpan.FromMilliseconds(milliseconds)));
            }
        }
Ejemplo n.º 12
0
 public void Callback_CallbackIsNull()
 {
     using (var delorean = new Delorean(true))
     {
         Assert.ThrowsException <ArgumentNullException>(() => TimeProvider.Timer(null));
         Assert.ThrowsException <ArgumentNullException>(() => TimeProvider.Timer(null, null, 0, 0));
         Assert.ThrowsException <ArgumentNullException>(() => TimeProvider.Timer(null, null, 0u, 0u));
         Assert.ThrowsException <ArgumentNullException>(() => TimeProvider.Timer(null, null, TimeSpan.Zero, TimeSpan.Zero));
         Assert.ThrowsException <ArgumentNullException>(() => TimeProvider.Timer(null, null, 0L, 0L));
     }
 }
Ejemplo n.º 13
0
        public async Task Frozen_TimeSpan_NoDelay_ReturnsImmediately(double milliseconds)
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                var delay = TimeProvider.Delay(TimeSpan.FromMilliseconds(milliseconds));

                Assert.IsTrue(delay.Wait(1));

                await delay;
            }
        }
Ejemplo n.º 14
0
        public async Task Frozen_Int32_NoDelay_ReturnsImmediately()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                var delay = TimeProvider.Delay(0);

                Assert.IsTrue(delay.Wait(1));

                await delay;
            }
        }
Ejemplo n.º 15
0
        public void Advance_StepByTimeSpan()
        {
            using (var delorean = new Delorean(true))
            {
                var firstNow = TimeProvider.UtcNow;

                delorean.Advance(TimeSpan.FromSeconds(1.0));

                var secondNow = TimeProvider.UtcNow;

                Assert.AreEqual(TimeSpan.TicksPerSecond, (secondNow - firstNow).Ticks);
            }
        }
Ejemplo n.º 16
0
        public void Frozen_TimeSpan_Infinite_NeverReturns(double milliseconds)
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                var delay = TimeProvider.Delay(TimeSpan.FromMilliseconds(milliseconds));

                delorean.Advance(DateTime.MaxValue - TimeProvider.UtcNow);

                Assert.IsFalse(delay.Wait(1));
            }
        }
Ejemplo n.º 17
0
        public void Frozen_Int32_Infinite_NeverReturns()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                var delay = TimeProvider.Delay(-1);

                delorean.Advance(DateTime.MaxValue - TimeProvider.UtcNow);

                Assert.IsFalse(delay.Wait(1));
            }
        }
Ejemplo n.º 18
0
        public void Advance_StepBySingleMillisecond()
        {
            using (var delorean = new Delorean(true))
            {
                var firstNow = TimeProvider.UtcNow;

                delorean.Advance(1);

                var secondNow = TimeProvider.UtcNow;

                Assert.AreEqual(TimeSpan.TicksPerMillisecond, (secondNow - firstNow).Ticks);
            }
        }
Ejemplo n.º 19
0
        public void Thaw_ReturnsToNormalTime()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Advance(10);

                var firstNow = TimeProvider.UtcNow;

                delorean.Thaw();

                var secondNow = TimeProvider.UtcNow;

                Assert.IsTrue(firstNow > secondNow);
            }
        }
Ejemplo n.º 20
0
        public void Callback_UInt32_HasInitialAndIntervalHitInSingleAdvance()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                int fired = 0;

                using (var timer = TimeProvider.Timer((state) => { fired++; }, null, 100u, 50u))
                {
                    delorean.Advance(200);

                    Assert.AreEqual(3, fired);
                }
            }
        }
Ejemplo n.º 21
0
        public void Callback_TimeSpan_HasIntervalButNotInitial()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                int fired = 0;

                using (var timer = TimeProvider.Timer((state) => { fired++; }, null, TimeSpan.FromMilliseconds(-1), TimeSpan.FromMilliseconds(50)))
                {
                    delorean.Advance(1000);

                    Assert.AreEqual(0, fired);
                }
            }
        }
Ejemplo n.º 22
0
        public void Callback_UInt32_HasIntervalButNotInitial()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                int fired = 0;

                using (var timer = TimeProvider.Timer((state) => { fired++; }, null, uint.MaxValue, 50u))
                {
                    delorean.Advance(1000);

                    Assert.AreEqual(0, fired);
                }
            }
        }
Ejemplo n.º 23
0
        public async Task Frozen_Int32_CancellationTokenStartsCancelled()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                var token = new CancellationToken(true);

                var assert = Assert.ThrowsExceptionAsync <TaskCanceledException>(
                    async() => await TimeProvider.Delay(5, token));

                Assert.IsTrue(assert.Wait(100));

                await assert;
            }
        }
Ejemplo n.º 24
0
        public async Task Frozen_TimeSpan_CancellationTokenStartsCancelled(double milliseconds)
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                var token = new CancellationToken(true);

                var assert = Assert.ThrowsExceptionAsync <TaskCanceledException>(
                    async() => await TimeProvider.Delay(TimeSpan.FromMilliseconds(milliseconds), token));

                Assert.IsTrue(assert.Wait(100));

                await assert;
            }
        }
Ejemplo n.º 25
0
        public async Task Frozen_TimeSpan_FollowsTimeAdvances()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                var watch = Stopwatch.StartNew();

                var controlledDelay = TimeProvider.Delay(TimeSpan.FromMilliseconds(500));
                delorean.Advance(500);
                await controlledDelay;

                watch.Stop();

                Assert.IsTrue(watch.ElapsedMilliseconds < 100);
            }
        }
Ejemplo n.º 26
0
        public void Thawed_InitialNotHit_ContinuesRealtime()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                using (var evt = new AutoResetEvent(false))
                    using (var timer = TimeProvider.Timer((state) => evt.Set(), null, 25, -1))
                    {
                        delorean.Thaw();

                        Assert.IsTrue(evt.WaitOne(50));

                        Assert.IsFalse(evt.WaitOne(25));
                    }
            }
        }
Ejemplo n.º 27
0
        public void Callback_NeverGetsCalled()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                var    fired       = 0;
                object actualState = null;

                using (var timer = TimeProvider.Timer((state) => { actualState = state; fired++; }))
                {
                    delorean.Advance(int.MaxValue - 1);

                    Assert.AreEqual(0, fired);
                    Assert.IsNull(actualState);
                }
            }
        }
Ejemplo n.º 28
0
        public void Change_Int32_HasInitialAndIntervalHitInSingleAdvance()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                int fired = 0;

                using (var timer = TimeProvider.Timer((state) => fired++))
                {
                    timer.Change(100, 50);

                    delorean.Advance(200);

                    Assert.AreEqual(3, fired);
                }
            }
        }
Ejemplo n.º 29
0
        public void Change_Int32_HasIntervalButNotInitial()
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                int fired = 0;

                using (var timer = TimeProvider.Timer((state) => { fired++; }))
                {
                    timer.Change(-1, 50);

                    delorean.Advance(1000);

                    Assert.AreEqual(0, fired);
                }
            }
        }
Ejemplo n.º 30
0
        public void Change_UInt32_HasInitialButNotInterval(uint period)
        {
            using (var delorean = new Delorean(true))
            {
                delorean.Freeze();

                var fired = 0;

                using (var timer = TimeProvider.Timer((state) => fired++))
                {
                    timer.Change(100u, period);

                    delorean.Advance(1000);

                    Assert.AreEqual(1, fired);
                }
            }
        }