diff --git a/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs b/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs index 72761b7..86918d3 100644 --- a/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs +++ b/Meade.net.Telescope.UnitTests/TelescopeUnitTests.cs @@ -18,6 +18,7 @@ namespace Meade.net.Telescope.UnitTests { public class TestProperties { + public string AlignmentMode { get; internal set; } = "P"; internal string telescopeRaResult { get; set; } = "HH:MM:SS"; internal double rightAscension { get; set; } = 1.2; //todo rename to declination; internal double declination { get; set; } = 45; @@ -155,6 +156,9 @@ namespace Meade.net.Telescope.UnitTests _parkedPosition = parkedPostion; }); + const char ack = (char)6; + _sharedResourcesWrapperMock.Setup(x => x.SendChar(ack.ToString(), false)).Returns( () => _testProperties.AlignmentMode); + _sharedResourcesWrapperMock.SetupGet(x => x.IsParked).Returns(() => _isParked); _sharedResourcesWrapperMock.SetupGet(x => x.ParkedPosition).Returns(() => _parkedPosition); @@ -793,9 +797,7 @@ namespace Meade.net.Telescope.UnitTests [TestCase("G", AlignmentModes.algGermanPolar, TelescopeList.Autostar497, TelescopeList.Autostar497_43Eg)] public void AlignmentMode_Get_WhenScopeInAltAz_ReturnsAltAz(string telescopeMode, AlignmentModes alignmentMode, string productName, string firmware) { - const char ack = (char)6; - _sharedResourcesWrapperMock.Setup(x => x.SendChar(ack.ToString(), false)).Returns(telescopeMode); - + _testProperties.AlignmentMode = telescopeMode; ConnectTelescope(productName, firmware, $"{telescopeMode}N0"); var actualResult = _telescope.AlignmentMode; @@ -806,6 +808,7 @@ namespace Meade.net.Telescope.UnitTests [Test] public void AlignmentMode_Get_WhenUnknownAlignmentMode_ThrowsException() { + _testProperties.AlignmentMode = ""; ConnectTelescope(); Assert.Throws(() => @@ -929,13 +932,25 @@ namespace Meade.net.Telescope.UnitTests } [Test] - public void CanPulseGuide_Get_ReturnsTrue() + public void CanPulseGuide_GetInPolarMode_ReturnsTrue() { + _testProperties.AlignmentMode = "P"; + ConnectTelescope(); var result = _telescope.CanPulseGuide; Assert.That(result, Is.True); } + [Test] + public void CanPulseGuide_GetInAltAzMode_ReturnsFalse() + { + _testProperties.AlignmentMode = "A"; + ConnectTelescope(); + var result = _telescope.CanPulseGuide; + + Assert.That(result, Is.False); + } + [Test] public void CanSetDeclinationRate_Get_ReturnsFalse() { @@ -1696,6 +1711,23 @@ namespace Meade.net.Telescope.UnitTests Assert.That(exception.Message, Is.EqualTo("Unable to PulseGuide whilst slewing to target.")); } + [TestCase(GuideDirections.guideEast)] + [TestCase(GuideDirections.guideWest)] + [TestCase(GuideDirections.guideNorth)] + [TestCase(GuideDirections.guideSouth)] + public void PulseGuide_WhenAltAzPulseGuideAttempted_ThenThrowsExpectedException(GuideDirections direction) + { + _testProperties.AlignmentMode = "A"; + _sharedResourcesWrapperMock.Setup(x => x.SendString("D", false)).Returns(""); + + var duration = 1; + ConnectTelescope(); + + var exception = Assert.Throws(() => _telescope.PulseGuide(direction, duration)); + + Assert.That(exception.Message, Is.EqualTo("Unable to PulseGuide whilst in AltAz mode.")); + } + [TestCase(GuideDirections.guideEast, TelescopeAxes.axisPrimary)] [TestCase(GuideDirections.guideWest, TelescopeAxes.axisPrimary)] [TestCase(GuideDirections.guideNorth, TelescopeAxes.axisSecondary)] diff --git a/Meade.net.Telescope/Telescope.cs b/Meade.net.Telescope/Telescope.cs index af929af..b16920a 100644 --- a/Meade.net.Telescope/Telescope.cs +++ b/Meade.net.Telescope/Telescope.cs @@ -1274,8 +1274,10 @@ namespace ASCOM.Meade.net { get { - LogMessage("CanPulseGuide", "Get - " + true); - return true; + CheckConnected("CanPulseGuide"); + var canPulseGuide = AlignmentMode != AlignmentModes.algAltAz; + LogMessage("CanPulseGuide", $"Get - {canPulseGuide}"); + return canPulseGuide; } } @@ -1759,6 +1761,9 @@ namespace ASCOM.Meade.net if (IsSlewingToTarget()) throw new InvalidOperationException("Unable to PulseGuide whilst slewing to target."); + if (AlignmentMode == AlignmentModes.algAltAz) + throw new InvalidOperationException("Unable to PulseGuide whilst in AltAz mode."); + SharedResourcesWrapper.IsGuiding = true; try {