diff --git a/AstroMath.UnitTests/AstroMath.UnitTests.csproj b/AstroMath.UnitTests/AstroMath.UnitTests.csproj index ecf9b7d..9f778de 100644 --- a/AstroMath.UnitTests/AstroMath.UnitTests.csproj +++ b/AstroMath.UnitTests/AstroMath.UnitTests.csproj @@ -56,8 +56,8 @@ ..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll - - ..\packages\Moq.4.12.0\lib\net45\Moq.dll + + ..\packages\Moq.4.13.0\lib\net45\Moq.dll ..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll @@ -65,8 +65,8 @@ - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll ..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll diff --git a/AstroMath.UnitTests/app.config b/AstroMath.UnitTests/app.config index 8d5ec5f..319783c 100644 --- a/AstroMath.UnitTests/app.config +++ b/AstroMath.UnitTests/app.config @@ -6,6 +6,10 @@ + + + + \ No newline at end of file diff --git a/AstroMath.UnitTests/packages.config b/AstroMath.UnitTests/packages.config index b50b126..2b99214 100644 --- a/AstroMath.UnitTests/packages.config +++ b/AstroMath.UnitTests/packages.config @@ -1,8 +1,8 @@  - + - + \ No newline at end of file diff --git a/Meade.net.Focuser.UnitTests/Meade.net.Focuser.UnitTests.csproj b/Meade.net.Focuser.UnitTests/Meade.net.Focuser.UnitTests.csproj index fb2522e..be4f91f 100644 --- a/Meade.net.Focuser.UnitTests/Meade.net.Focuser.UnitTests.csproj +++ b/Meade.net.Focuser.UnitTests/Meade.net.Focuser.UnitTests.csproj @@ -71,8 +71,8 @@ ..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll - - ..\packages\Moq.4.12.0\lib\net45\Moq.dll + + ..\packages\Moq.4.13.0\lib\net45\Moq.dll ..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll @@ -80,8 +80,8 @@ - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll ..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll diff --git a/Meade.net.Focuser.UnitTests/app.config b/Meade.net.Focuser.UnitTests/app.config index 8d5ec5f..319783c 100644 --- a/Meade.net.Focuser.UnitTests/app.config +++ b/Meade.net.Focuser.UnitTests/app.config @@ -6,6 +6,10 @@ + + + + \ No newline at end of file diff --git a/Meade.net.Focuser.UnitTests/packages.config b/Meade.net.Focuser.UnitTests/packages.config index 1330573..cad1be5 100644 --- a/Meade.net.Focuser.UnitTests/packages.config +++ b/Meade.net.Focuser.UnitTests/packages.config @@ -2,8 +2,8 @@ - + - + \ No newline at end of file diff --git a/Meade.net.Telescope.UnitTests/Meade.net.Telescope.UnitTests.csproj b/Meade.net.Telescope.UnitTests/Meade.net.Telescope.UnitTests.csproj index 9fcbe99..9484bd1 100644 --- a/Meade.net.Telescope.UnitTests/Meade.net.Telescope.UnitTests.csproj +++ b/Meade.net.Telescope.UnitTests/Meade.net.Telescope.UnitTests.csproj @@ -92,8 +92,8 @@ ..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll - - ..\packages\Moq.4.12.0\lib\net45\Moq.dll + + ..\packages\Moq.4.13.0\lib\net45\Moq.dll ..\packages\NUnit.3.12.0\lib\net40\nunit.framework.dll @@ -101,8 +101,8 @@ - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll ..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll diff --git a/Meade.net.Telescope.UnitTests/app.config b/Meade.net.Telescope.UnitTests/app.config index ea6ff10..487342b 100644 --- a/Meade.net.Telescope.UnitTests/app.config +++ b/Meade.net.Telescope.UnitTests/app.config @@ -4,7 +4,7 @@ - + diff --git a/Meade.net.Telescope.UnitTests/packages.config b/Meade.net.Telescope.UnitTests/packages.config index 4c380c0..688d530 100644 --- a/Meade.net.Telescope.UnitTests/packages.config +++ b/Meade.net.Telescope.UnitTests/packages.config @@ -2,8 +2,8 @@ - + - + \ No newline at end of file diff --git a/Meade.net.UnitTests/BootstrapAscomProfileStore.ps1 b/Meade.net.UnitTests/BootstrapAscomProfileStore.ps1 new file mode 100644 index 0000000..213c64d --- /dev/null +++ b/Meade.net.UnitTests/BootstrapAscomProfileStore.ps1 @@ -0,0 +1,36 @@ +<# +This script initializes a bare minimum set of registry entries required for ASCOM.Utilities.Profile to work +without throwing any exceptions. When building on a build server, or on a computer without the ASCOM Platform installed, +it may be useful to execute this script as a build step prior to running any unit tests, or calling any code that relies on +ASCOM.Utilities.Profile. The alternative is to install the ASCOM Platform on the build agent. + +NOTE: This script equires elevated permissions because it creates registry keys in the LocalMachine hive. +#> + +$wow = Test-Path HKLM:\SOFTWARE\Wow6432Node +if ($wow) + { + $root = "HKLM:\SOFTWARE\Wow6432Node" + } +else + { + $root = "HKLM:\SOFTWARE" + } +$ascomRoot = $root + "\ASCOM" + +if (Test-Path $ascomRoot) + { + <# Don't upset an already-existing ASCOM registry #> + exit + } + +<# Create the ASCOM root key and set it's ACL to allow all users read/write access #> +New-Item -Path $root -Name ASCOM –Force +$ascomAcl = Get-Acl $ascomRoot +$aclRule = New-Object System.Security.AccessControl.RegistryAccessRule ("Users","FullControl","Allow") +$ascomAcl.SetAccessRule($aclRule) +$ascomAcl | Set-Acl -Path $ascomRoot + +<# Now create the bare minimum keys required so that ASCOM.Utilities.Profile doesn't crash and burn #> +New-ItemProperty -Path $ascomRoot -Name PlatformVersion -Value "6.1" -PropertyType String –Force +New-ItemProperty -Path $ascomRoot -Name SerTraceFile -Value "C:\SerialTraceAuto.txt" -PropertyType String –Force diff --git a/Meade.net.UnitTests/Meade.net.UnitTests.csproj b/Meade.net.UnitTests/Meade.net.UnitTests.csproj new file mode 100644 index 0000000..1889ad4 --- /dev/null +++ b/Meade.net.UnitTests/Meade.net.UnitTests.csproj @@ -0,0 +1,117 @@ + + + + + + Debug + AnyCPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2} + Library + Properties + Meade.net.UnitTests + Meade.net.UnitTests + v4.7.2 + 512 + true + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Astrometry.dll + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Attributes.dll + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Cache.dll + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Controls.dll + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.DeviceInterfaces.dll + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.DriverAccess.dll + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Exceptions.dll + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Internal.Extensions.dll + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.SettingsProvider.dll + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Utilities.dll + + + ..\packages\ASCOM.Platform.6.4.2\lib\net40\ASCOM.Utilities.Video.dll + + + ..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll + + + ..\packages\Moq.4.13.0\lib\net45\Moq.dll + + + ..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll + + + + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll + + + + + + + + + + + + + + + {3689a2cb-94c5-4012-a5cf-7e7d1dd27143} + Meade.net + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file diff --git a/Meade.net.UnitTests/Properties/AssemblyInfo.cs b/Meade.net.UnitTests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..104173b --- /dev/null +++ b/Meade.net.UnitTests/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Meade.net.UnitTests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Meade.net.UnitTests")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("21ef28b4-d574-4a2d-a61d-5df96af46ab2")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Meade.net.UnitTests/SharedResourcesUnitTests.cs b/Meade.net.UnitTests/SharedResourcesUnitTests.cs new file mode 100644 index 0000000..05890d2 --- /dev/null +++ b/Meade.net.UnitTests/SharedResourcesUnitTests.cs @@ -0,0 +1,94 @@ + +using ASCOM.Meade.net; +using ASCOM.Utilities.Interfaces; +using Moq; +using NUnit.Framework; + +namespace Meade.net.UnitTests +{ + [TestFixture] + public class SharedResourcesUnitTests + { + private Mock _serialMock; + + [SetUp] + public void Setup() + { + _serialMock = new Mock(); + + SharedResources.SharedSerial = _serialMock.Object; + } + + [Test] + public void CheckThatSerialPortIsSetToUseMock() + { + Assert.That(SharedResources.SharedSerial,Is.EqualTo(_serialMock.Object)); + } + + [Test] + public void SendBlind_WhenCalled_Then_ClearsBuffersAndSendsMessage() + { + var expectedMessage = "Test"; + + SharedResources.SendBlind(expectedMessage); + + _serialMock.Verify(x=> x.ClearBuffers(), Times.Once); + _serialMock.Verify(x=>x.Transmit(expectedMessage), Times.Once); + } + + [Test] + public void SendChar_WhenCalled_ThenSendsMessageAndReadsExpectedNumberOfCharacters() + { + var expectedMessage = "Test"; + var expectedResult = "A"; + + _serialMock.Setup(x => x.ReceiveCounted(1)).Returns(expectedResult); + + var result = SharedResources.SendChar(expectedMessage); + + _serialMock.Verify(x => x.ClearBuffers(), Times.Once); + _serialMock.Verify(x => x.Transmit(expectedMessage), Times.Once); + _serialMock.Verify(x => x.ReceiveCounted(1), Times.Once); + Assert.That(result, Is.EqualTo(expectedResult)); + } + + [Test] + public void SendString_WhenCalled_ThenSendsMessageAndReadsResultUntilTerminatorFound() + { + var expectedMessage = "Test"; + var expectedResult = "TestMessage#"; + + _serialMock.Setup(x => x.ReceiveTerminated("#")).Returns(expectedResult); + + var result = SharedResources.SendString(expectedMessage); + + _serialMock.Verify(x => x.ClearBuffers(), Times.Once); + _serialMock.Verify(x => x.Transmit(expectedMessage), Times.Once); + _serialMock.Verify(x => x.ReceiveTerminated("#"), Times.Once); + Assert.That(result, Is.EqualTo(expectedResult.TrimEnd('#'))); + } + + [Test] + public void ReadTerminated_WhenCalled_ThenReadsResultUntilTerminatorFound() + { + var expectedResult = "TestMessage#"; + + _serialMock.Setup(x => x.ReceiveTerminated("#")).Returns(expectedResult); + + var result = SharedResources.ReadTerminated(); + + _serialMock.Verify(x => x.ReceiveTerminated("#"), Times.Once); + Assert.That(result, Is.EqualTo(expectedResult)); + } + + [Test] + public void ReadCharacters_WhenCalled_ThenReadsSpecificNumberOfCharacters() + { + var numberOfCharacters = 5; + + SharedResources.ReadCharacters(numberOfCharacters); + + _serialMock.Verify(x => x.ReceiveCounted(numberOfCharacters), Times.Once); + } + } +} diff --git a/Meade.net.UnitTests/app.config b/Meade.net.UnitTests/app.config new file mode 100644 index 0000000..319783c --- /dev/null +++ b/Meade.net.UnitTests/app.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Meade.net.UnitTests/packages.config b/Meade.net.UnitTests/packages.config new file mode 100644 index 0000000..cad1be5 --- /dev/null +++ b/Meade.net.UnitTests/packages.config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Meade.net.sln b/Meade.net.sln index 7cf5f7f..25d344c 100644 --- a/Meade.net.sln +++ b/Meade.net.sln @@ -25,6 +25,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Meade.net.Telescope.UnitTes EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Meade.net.Focuser.UnitTests", "Meade.net.Focuser.UnitTests\Meade.net.Focuser.UnitTests.csproj", "{A3991FA7-23C3-405A-96F9-5AB03AC58F30}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Meade.net.UnitTests", "Meade.net.UnitTests\Meade.net.UnitTests.csproj", "{21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -137,6 +139,18 @@ Global {A3991FA7-23C3-405A-96F9-5AB03AC58F30}.Release|x64.Build.0 = Release|Any CPU {A3991FA7-23C3-405A-96F9-5AB03AC58F30}.Release|x86.ActiveCfg = Release|Any CPU {A3991FA7-23C3-405A-96F9-5AB03AC58F30}.Release|x86.Build.0 = Release|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|x64.ActiveCfg = Debug|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|x64.Build.0 = Debug|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|x86.ActiveCfg = Debug|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Debug|x86.Build.0 = Debug|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|Any CPU.Build.0 = Release|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|x64.ActiveCfg = Release|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|x64.Build.0 = Release|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|x86.ActiveCfg = Release|Any CPU + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -147,6 +161,7 @@ Global {AD4959DD-33D7-4C3F-8DB0-7361D8E74A95} = {0958D817-269C-44BE-BEFB-F3E6A409DE91} {B7EEEEFD-5BFF-443D-981C-7B8AB5DFDE33} = {0958D817-269C-44BE-BEFB-F3E6A409DE91} {A3991FA7-23C3-405A-96F9-5AB03AC58F30} = {0958D817-269C-44BE-BEFB-F3E6A409DE91} + {21EF28B4-D574-4A2D-A61D-5DF96AF46AB2} = {0958D817-269C-44BE-BEFB-F3E6A409DE91} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3C0509DC-C7F5-48DC-920D-DCFD9C879BD2} diff --git a/Meade.net.v3.ncrunchsolution b/Meade.net.v3.ncrunchsolution index e4047c2..c8975a7 100644 --- a/Meade.net.v3.ncrunchsolution +++ b/Meade.net.v3.ncrunchsolution @@ -2,6 +2,10 @@ True True + + FocuserTestConsole\FocuserTestConsole.csproj + TelescopeTestConsole\TelescopeTestConsole.csproj + True \ No newline at end of file diff --git a/Meade.net/SharedResources.cs b/Meade.net/SharedResources.cs index 1c73926..3f2c537 100644 --- a/Meade.net/SharedResources.cs +++ b/Meade.net/SharedResources.cs @@ -19,6 +19,7 @@ using System.Collections.Generic; using System.Globalization; using System.Windows.Forms; using ASCOM.Utilities; +using ASCOM.Utilities.Interfaces; namespace ASCOM.Meade.net { @@ -36,7 +37,7 @@ namespace ASCOM.Meade.net private static readonly object LockObject = new object(); // Shared serial port. This will allow multiple drivers to use one single serial port. - private static Serial _sSharedSerial; // Shared serial port + private static ISerial _sSharedSerial; // Shared serial port // // Public access to shared resources @@ -59,9 +60,13 @@ namespace ASCOM.Meade.net // /// - /// Shared serial port + /// Shared serial port. Do not directly access this method. /// - private static Serial SharedSerial => _sSharedSerial ?? (_sSharedSerial = new Serial()); + public static ISerial SharedSerial + { + get => _sSharedSerial ?? (_sSharedSerial = new Serial()); + set => _sSharedSerial = value; + } public static void SendBlind(string message) {