From dff7bce6b091040248792494d067c56c0367cdd1 Mon Sep 17 00:00:00 2001 From: Colin Date: Tue, 22 Oct 2019 21:27:07 +0100 Subject: [PATCH] Unit Testing for the connect method. --- .../SharedResourcesUnitTests.cs | 166 ++++++++++++++++-- 1 file changed, 156 insertions(+), 10 deletions(-) diff --git a/Meade.net.UnitTests/SharedResourcesUnitTests.cs b/Meade.net.UnitTests/SharedResourcesUnitTests.cs index a7a81c8..6549300 100644 --- a/Meade.net.UnitTests/SharedResourcesUnitTests.cs +++ b/Meade.net.UnitTests/SharedResourcesUnitTests.cs @@ -1,4 +1,5 @@  +using System; using System.Globalization; using ASCOM.Meade.net; using ASCOM.Meade.net.Wrapper; @@ -17,6 +18,7 @@ namespace Meade.net.UnitTests public void Setup() { _serialMock = new Mock(); + _serialMock.SetupAllProperties(); SharedResources.SharedSerial = _serialMock.Object; } @@ -127,18 +129,23 @@ namespace Meade.net.UnitTests { string DriverId = "ASCOM.MeadeGeneric.Telescope"; - string ComPortDefault = "COM1"; - string TraceStateDefault = "false"; - string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate - string PrecisionDefault = "Unchanged"; + string ComPortDefault = "COM1"; + string TraceStateDefault = "false"; + string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate + string PrecisionDefault = "Unchanged"; - Mock profileWrapperMock = new Mock(); + Mock profileWrapperMock = new Mock(); profileWrapperMock.SetupAllProperties(); - profileWrapperMock.Setup(x => x.GetValue(DriverId, "Trace Level", string.Empty, TraceStateDefault)).Returns(TraceStateDefault); - profileWrapperMock.Setup(x => x.GetValue(DriverId, "COM Port", string.Empty, ComPortDefault)).Returns(ComPortDefault); - profileWrapperMock.Setup(x => x.GetValue(DriverId, "Guide Rate Arc Seconds Per Second", string.Empty, GuideRateProfileNameDefault)).Returns(GuideRateProfileNameDefault); - profileWrapperMock.Setup(x => x.GetValue(DriverId, "Precision", string.Empty, PrecisionDefault)).Returns(PrecisionDefault); + profileWrapperMock.Setup(x => x.GetValue(DriverId, "Trace Level", string.Empty, TraceStateDefault)) + .Returns(TraceStateDefault); + profileWrapperMock.Setup(x => x.GetValue(DriverId, "COM Port", string.Empty, ComPortDefault)) + .Returns(ComPortDefault); + profileWrapperMock + .Setup(x => x.GetValue(DriverId, "Guide Rate Arc Seconds Per Second", string.Empty, + GuideRateProfileNameDefault)).Returns(GuideRateProfileNameDefault); + profileWrapperMock.Setup(x => x.GetValue(DriverId, "Precision", string.Empty, PrecisionDefault)) + .Returns(PrecisionDefault); IProfileWrapper profeWrapper = profileWrapperMock.Object; @@ -151,9 +158,148 @@ namespace Meade.net.UnitTests Assert.That(profeWrapper.DeviceType, Is.EqualTo("Telescope")); Assert.That(profileProperties.ComPort, Is.EqualTo(ComPortDefault)); - Assert.That(profileProperties.GuideRateArcSecondsPerSecond, Is.EqualTo(double.Parse(GuideRateProfileNameDefault))); + Assert.That(profileProperties.GuideRateArcSecondsPerSecond, + Is.EqualTo(double.Parse(GuideRateProfileNameDefault))); Assert.That(profileProperties.TraceLogger, Is.EqualTo(bool.Parse(TraceStateDefault))); Assert.That(profileProperties.Precision, Is.EqualTo(PrecisionDefault)); } + + [TestCase("TCP")] + [TestCase("Carrier Pigeon")] + public void Connect_WhenDeviceIdIsNotSerial_ThenThrowsException( string deviceId) + { + var result = Assert.Throws( () => { SharedResources.Connect(deviceId, string.Empty); } ); + + Assert.That( result.Message, Is.EqualTo($"deviceId {deviceId} not currently supported") ); + } + + [Test] + public void Connect_WhenDeviceIdIsSerialButGVPEchos_ThenThrowsException() + { + string deviceId = "Serial"; + + string driverDriverId = "ASCOM.MeadeGeneric.Telescope"; + + string ComPortDefault = "COM1"; + string TraceStateDefault = "false"; + string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate + string PrecisionDefault = "Unchanged"; + + Mock profileWrapperMock = new Mock(); + profileWrapperMock.SetupAllProperties(); + + profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Trace Level", string.Empty, TraceStateDefault)) + .Returns(TraceStateDefault); + profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "COM Port", string.Empty, ComPortDefault)) + .Returns(ComPortDefault); + profileWrapperMock + .Setup(x => x.GetValue(driverDriverId, "Guide Rate Arc Seconds Per Second", string.Empty, + GuideRateProfileNameDefault)).Returns(GuideRateProfileNameDefault); + profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Precision", string.Empty, PrecisionDefault)) + .Returns(PrecisionDefault); + + IProfileWrapper profeWrapper = profileWrapperMock.Object; + + Mock profileFactoryMock = new Mock(); + profileFactoryMock.Setup(x => x.Create()).Returns(profileWrapperMock.Object); + + SharedResources.ProfileFactory = profileFactoryMock.Object; + + string serialPortReturn = string.Empty; + + _serialMock.Setup(x => x.Transmit(":GVP#")).Callback(() => { serialPortReturn = ":GVP#"; }); + _serialMock.Setup(x => x.ReceiveTerminated("#")).Returns( () => serialPortReturn); + + var result = Assert.Throws(() => { var connectionResult = SharedResources.Connect(deviceId, string.Empty); }); + Assert.That(result.Message, Is.EqualTo("Serial port is looping back data, something is wrong with the hardware.")); + } + + [Test] + public void Connect_WhenDeviceIdIsSerialButGVPNotSupported_ThenConnectsAndSetsProductToLX200Classic() + { + string deviceId = "Serial"; + + string driverDriverId = "ASCOM.MeadeGeneric.Telescope"; + + string ComPortDefault = "COM1"; + string TraceStateDefault = "false"; + string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate + string PrecisionDefault = "Unchanged"; + + Mock profileWrapperMock = new Mock(); + profileWrapperMock.SetupAllProperties(); + + profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Trace Level", string.Empty, TraceStateDefault)) + .Returns(TraceStateDefault); + profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "COM Port", string.Empty, ComPortDefault)) + .Returns(ComPortDefault); + profileWrapperMock + .Setup(x => x.GetValue(driverDriverId, "Guide Rate Arc Seconds Per Second", string.Empty, + GuideRateProfileNameDefault)).Returns(GuideRateProfileNameDefault); + profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Precision", string.Empty, PrecisionDefault)) + .Returns(PrecisionDefault); + + IProfileWrapper profeWrapper = profileWrapperMock.Object; + + Mock profileFactoryMock = new Mock(); + profileFactoryMock.Setup(x => x.Create()).Returns(profileWrapperMock.Object); + + SharedResources.ProfileFactory = profileFactoryMock.Object; + + string serialPortReturn = string.Empty; + + _serialMock.Setup(x => x.Transmit(":GVP#")).Callback(() => { serialPortReturn = ":GVP#"; }); + _serialMock.Setup(x => x.ReceiveTerminated("#")).Returns(() => { throw new Exception("Testerror"); }); + + var connectionResult = SharedResources.Connect(deviceId, string.Empty); + + Assert.That(connectionResult.SameDevice, Is.EqualTo(1)); + Assert.That(SharedResources.ProductName, Is.EqualTo(TelescopeList.LX200CLASSIC)); + } + + [Test] + public void Connect_WhenDeviceIdIsSerialButGVPIsAutostar_ThenConnectsAndSetsProductToAutostarAndFirmware() + { + string deviceId = "Serial"; + + string driverDriverId = "ASCOM.MeadeGeneric.Telescope"; + + string ComPortDefault = "COM1"; + string TraceStateDefault = "false"; + string GuideRateProfileNameDefault = "10.077939"; //67% of sidereal rate + string PrecisionDefault = "Unchanged"; + + Mock profileWrapperMock = new Mock(); + profileWrapperMock.SetupAllProperties(); + + profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Trace Level", string.Empty, TraceStateDefault)) + .Returns(TraceStateDefault); + profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "COM Port", string.Empty, ComPortDefault)) + .Returns(ComPortDefault); + profileWrapperMock + .Setup(x => x.GetValue(driverDriverId, "Guide Rate Arc Seconds Per Second", string.Empty, + GuideRateProfileNameDefault)).Returns(GuideRateProfileNameDefault); + profileWrapperMock.Setup(x => x.GetValue(driverDriverId, "Precision", string.Empty, PrecisionDefault)) + .Returns(PrecisionDefault); + + IProfileWrapper profeWrapper = profileWrapperMock.Object; + + Mock profileFactoryMock = new Mock(); + profileFactoryMock.Setup(x => x.Create()).Returns(profileWrapperMock.Object); + + SharedResources.ProfileFactory = profileFactoryMock.Object; + + string serialPortReturn = string.Empty; + + _serialMock.Setup(x => x.Transmit(":GVP#")).Callback(() => { serialPortReturn = TelescopeList.Autostar497; }); + _serialMock.Setup(x => x.Transmit(":GVN#")).Callback(() => { serialPortReturn = TelescopeList.Autostar497_43Eg; }); + _serialMock.Setup(x => x.ReceiveTerminated("#")).Returns(() => serialPortReturn); + + var connectionResult = SharedResources.Connect(deviceId, string.Empty); + + Assert.That(connectionResult.SameDevice, Is.EqualTo(1)); + Assert.That(SharedResources.ProductName, Is.EqualTo(TelescopeList.Autostar497)); + Assert.That(SharedResources.FirmwareVersion, Is.EqualTo(TelescopeList.Autostar497_43Eg)); + } } }