Switched the serial port over to using the .net frameworks serial port.

Extracted the serial port into it's own class and created a simpler command processing mechanism.
This commit is contained in:
2019-04-29 23:29:57 +01:00
parent da6b7ec55f
commit dc2a24ad25
6 changed files with 204 additions and 90 deletions
@@ -1,8 +1,8 @@
using System.Collections.Generic;
using System.IO.Ports;
using ASCOM;
using ASCOM.MeadeAutostar497.Controller;
using ASCOM.Utilities;
using ASCOM.Utilities.Interfaces;
using Moq;
using NUnit.Framework;
@@ -11,26 +11,25 @@ namespace MeadeAutostar497.UnitTests
[TestFixture]
public class TelescopeControllerUnitTests
{
private Mock<ISerial> serialMock;
private Mock<ISerialProcessor> serialMock;
private readonly List<string> _availableComPorts = new List<string> { "COM1", "COM2", "COM3" };
private TelescopeController _telescopeController;
private string transmittedString;
private string stringToRecieve;
private string _stringToRecieve = string.Empty;
private bool _isConnected = false;
[SetUp]
public void Setup()
{
transmittedString = string.Empty;
stringToRecieve = string.Empty;
_stringToRecieve = string.Empty;
_isConnected = false;
serialMock = new Mock<ISerial>();
serialMock = new Mock<ISerialProcessor>();
serialMock.SetupAllProperties();
serialMock.Setup(x => x.AvailableComPorts).Returns( () => _availableComPorts.ToArray());
serialMock.Setup(X => X.Transmit(It.IsAny<string>())).Callback<string>(str => { transmittedString = str; });
serialMock.Setup(X => X.Receive()).Returns(() => stringToRecieve);
serialMock.Setup(x => x.GetPortNames()).Returns( () => _availableComPorts.ToArray());
serialMock.Setup(x => x.CommandTerminated(It.IsAny<string>(), It.IsAny<string>())).Returns(() => _stringToRecieve);
serialMock.Setup(x => x.IsOpen).Returns(() => _isConnected);
_telescopeController = TelescopeController.Instance;
_telescopeController.SerialPort = serialMock.Object;
@@ -39,7 +38,6 @@ namespace MeadeAutostar497.UnitTests
[TearDown]
public void TearDown()
{
_telescopeController.Connected = false;
_telescopeController.Port = "COM1";
}
@@ -59,7 +57,8 @@ namespace MeadeAutostar497.UnitTests
[Test]
public void ConnectedCanBeSetTrue()
{
stringToRecieve = "test#";
_stringToRecieve = "test#";
_isConnected = true;
_telescopeController.Connected = true;
Assert.That(_telescopeController.Connected, Is.True);
@@ -68,27 +67,30 @@ namespace MeadeAutostar497.UnitTests
[Test]
public void EnsureThatTheSerialCommunicationsAreSetCorrectly()
{
Assert.That(serialMock.Object.Connected, Is.False);
stringToRecieve = "test#";
Assert.That(serialMock.Object.IsOpen, Is.False);
_stringToRecieve = "test#";
_telescopeController.Connected = true;
_isConnected = true;
Assert.That(_telescopeController.Connected, Is.True);
Assert.That(serialMock.Object.DTREnable, Is.False);
Assert.That(serialMock.Object.RTSEnable, Is.False);
Assert.That(serialMock.Object.Speed, Is.EqualTo(SerialSpeed.ps9600));
serialMock.Verify(x => x.Open(), Times.Once);
Assert.That(serialMock.Object.DtrEnable, Is.False);
Assert.That(serialMock.Object.RtsEnable, Is.False);
Assert.That(serialMock.Object.BaudRate, Is.EqualTo(9600));
Assert.That(serialMock.Object.DataBits, Is.EqualTo(8));
Assert.That(serialMock.Object.StopBits, Is.EqualTo(SerialStopBits.One));
Assert.That(serialMock.Object.Parity, Is.EqualTo(SerialParity.None));
Assert.That(serialMock.Object.StopBits, Is.EqualTo(StopBits.One));
Assert.That(serialMock.Object.Parity, Is.EqualTo(Parity.None));
Assert.That(serialMock.Object.PortName, Is.EqualTo(_telescopeController.Port));
Assert.That(serialMock.Object.Connected, Is.True);
Assert.That(serialMock.Object.IsOpen, Is.True);
}
[Test]
public void WhenOpensComPortToNonAutostarThrowException()
{
Assert.That(serialMock.Object.Connected, Is.False);
Assert.That(serialMock.Object.IsOpen, Is.False);
var exception = Assert.Throws<InvalidOperationException>(() => { _telescopeController.Connected = true; });
Assert.That(exception.Message, Is.EqualTo("Failed to communicate with telescope."));
@@ -99,11 +101,12 @@ namespace MeadeAutostar497.UnitTests
[Test]
public void CannotChangeSerialPortObjectWhenConnected()
{
stringToRecieve = "test#";
_stringToRecieve = "test#";
_isConnected = true;
_telescopeController.Connected = true;
Mock<ISerial> newSerialMock = new Mock<ISerial>();
Mock<ISerialProcessor> newSerialMock = new Mock<ISerialProcessor>();
var exception = Assert.Throws<InvalidOperationException>( () => { _telescopeController.SerialPort = newSerialMock.Object; });
@@ -128,7 +131,8 @@ namespace MeadeAutostar497.UnitTests
[Test]
public void SettingPortToValidPortWhenConnectedFails()
{
stringToRecieve = "test#";
_stringToRecieve = "test#";
_isConnected = true;
_telescopeController.Connected = true;
var exception = Assert.Throws<InvalidOperationException>( () => _telescopeController.Port = "COM2");