From 5cd201440e800d339e6f881439852f0af38b1a85 Mon Sep 17 00:00:00 2001 From: David Sparer Date: Mon, 4 Mar 2019 11:44:30 -0600 Subject: [PATCH] added tests for the disposable action class --- mRemoteNGTests/Tools/DisposableActionTests.cs | 42 +++++++++++++++++++ mRemoteNGTests/mRemoteNGTests.csproj | 1 + mRemoteV1/Tools/DisposableAction.cs | 10 +++++ 3 files changed, 53 insertions(+) create mode 100644 mRemoteNGTests/Tools/DisposableActionTests.cs diff --git a/mRemoteNGTests/Tools/DisposableActionTests.cs b/mRemoteNGTests/Tools/DisposableActionTests.cs new file mode 100644 index 00000000..8fab6f80 --- /dev/null +++ b/mRemoteNGTests/Tools/DisposableActionTests.cs @@ -0,0 +1,42 @@ +using mRemoteNG.Tools; +using NUnit.Framework; + +namespace mRemoteNGTests.Tools +{ + public class DisposableActionTests + { + [Test] + public void InitializerActionRunsWhenObjectIsCreated() + { + var initializerRan = false; + new DisposableAction(() => initializerRan = true, () => { }); + + Assert.That(initializerRan); + } + + [Test] + public void DisposalActionRunsWhenDisposeIsCalled() + { + var disposeActionRan = false; + var action = new DisposableAction(() => {}, () => disposeActionRan = true); + + Assert.That(disposeActionRan, Is.False); + action.Dispose(); + Assert.That(disposeActionRan, Is.True); + } + + [Test] + public void DisposeActionOnlyExecutedOnceWhenCallingDisposeMultipleTimes() + { + var invokeCount = 0; + var action = new DisposableAction(() => { }, () => invokeCount++); + + action.Dispose(); + action.Dispose(); + action.Dispose(); + action.Dispose(); + action.Dispose(); + Assert.That(invokeCount, Is.EqualTo(1)); + } + } +} diff --git a/mRemoteNGTests/mRemoteNGTests.csproj b/mRemoteNGTests/mRemoteNGTests.csproj index 44703c54..deb86aa3 100644 --- a/mRemoteNGTests/mRemoteNGTests.csproj +++ b/mRemoteNGTests/mRemoteNGTests.csproj @@ -176,6 +176,7 @@ + diff --git a/mRemoteV1/Tools/DisposableAction.cs b/mRemoteV1/Tools/DisposableAction.cs index cc5fd8ee..19f2f86b 100644 --- a/mRemoteV1/Tools/DisposableAction.cs +++ b/mRemoteV1/Tools/DisposableAction.cs @@ -9,6 +9,7 @@ namespace mRemoteNG.Tools /// public class DisposableAction : IDisposable { + private bool _isDisposed; private readonly Action _disposeAction; /// @@ -29,6 +30,15 @@ namespace mRemoteNG.Tools public void Dispose() { + Dispose(true); + } + + protected virtual void Dispose(bool disposing) + { + if (!disposing || _isDisposed) + return; + + _isDisposed = true; _disposeAction(); } }