mirror of
https://github.com/ICDSystems/ICD.Common.Utils.git
synced 2026-02-16 13:15:07 +00:00
Initial commit of SafeTimerTest, fixing bug where Trigger() was not behaving properly in net standard
This commit is contained in:
89
ICD.Common.Utils.Tests/Timers/SafeTimerTest.cs
Normal file
89
ICD.Common.Utils.Tests/Timers/SafeTimerTest.cs
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
using ICD.Common.Utils.Timers;
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace ICD.Common.Utils.Tests.Timers
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public sealed class SafeTimerTest
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void DisposeTest()
|
||||||
|
{
|
||||||
|
bool called = false;
|
||||||
|
SafeTimer timer = SafeTimer.Stopped(() => called = true);
|
||||||
|
|
||||||
|
// Crestron timer tends to execute the callback on stop.
|
||||||
|
timer.Dispose();
|
||||||
|
Assert.IsFalse(called);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void StoppedTest()
|
||||||
|
{
|
||||||
|
bool called = false;
|
||||||
|
SafeTimer timer = SafeTimer.Stopped(() => called = true);
|
||||||
|
|
||||||
|
Assert.IsFalse(called);
|
||||||
|
|
||||||
|
timer.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void StopTest()
|
||||||
|
{
|
||||||
|
bool called = false;
|
||||||
|
SafeTimer timer = SafeTimer.Stopped(() => called = true);
|
||||||
|
timer.Reset(100);
|
||||||
|
timer.Stop();
|
||||||
|
|
||||||
|
ThreadingUtils.Sleep(200);
|
||||||
|
|
||||||
|
Assert.IsFalse(called);
|
||||||
|
|
||||||
|
timer.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TriggerTest()
|
||||||
|
{
|
||||||
|
bool called = false;
|
||||||
|
SafeTimer timer = SafeTimer.Stopped(() => called = true);
|
||||||
|
|
||||||
|
timer.Trigger();
|
||||||
|
|
||||||
|
Assert.IsTrue(called);
|
||||||
|
|
||||||
|
timer.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ResetTest()
|
||||||
|
{
|
||||||
|
int called = 0;
|
||||||
|
SafeTimer timer = SafeTimer.Stopped(() => called++);
|
||||||
|
|
||||||
|
timer.Reset(10);
|
||||||
|
|
||||||
|
ThreadingUtils.Sleep(50);
|
||||||
|
|
||||||
|
Assert.AreEqual(1, called);
|
||||||
|
|
||||||
|
timer.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ResetRepeatTest()
|
||||||
|
{
|
||||||
|
int called = 0;
|
||||||
|
SafeTimer timer = SafeTimer.Stopped(() => called++);
|
||||||
|
|
||||||
|
timer.Reset(10, 10);
|
||||||
|
|
||||||
|
ThreadingUtils.Sleep(50);
|
||||||
|
|
||||||
|
Assert.AreEqual(4, called, 1);
|
||||||
|
|
||||||
|
timer.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -48,6 +48,9 @@ namespace ICD.Common.Utils.Timers
|
|||||||
/// <param name="repeatPeriod"></param>
|
/// <param name="repeatPeriod"></param>
|
||||||
public SafeTimer(Action callback, long dueTime, long repeatPeriod)
|
public SafeTimer(Action callback, long dueTime, long repeatPeriod)
|
||||||
{
|
{
|
||||||
|
if (callback == null)
|
||||||
|
throw new ArgumentNullException("callback");
|
||||||
|
|
||||||
m_Callback = callback;
|
m_Callback = callback;
|
||||||
#if SIMPLSHARP
|
#if SIMPLSHARP
|
||||||
m_Timer = new CTimer(SafeCallback, null, dueTime, repeatPeriod);
|
m_Timer = new CTimer(SafeCallback, null, dueTime, repeatPeriod);
|
||||||
@@ -106,6 +109,7 @@ namespace ICD.Common.Utils.Timers
|
|||||||
m_Timer.Reset();
|
m_Timer.Reset();
|
||||||
#else
|
#else
|
||||||
m_Timer.Change(0, m_RepeatPeriod);
|
m_Timer.Change(0, m_RepeatPeriod);
|
||||||
|
m_Callback();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user