tbf/TBFTests/Rig/RegisterReaders/GenesisRegReader/implementations/FakeSerialDriver.cs
Michal Buzik e26d88d437 Refactor Genesis use 3 chanels reader structure:
- Replace `Xylem.Common` namespace references with `TBF.Rig.RegisterReaders`.
- Introduce `GenesisSmartReaderTest` and `FakeSerialDriver` for unit testing.
- Revamp `FlowDirectionDetection` to support multiple channels.
- Make constants in `StreamingDecoder` public for enhanced accessibility.
- Update `AssemblyVersion` and `AssemblyFileVersion` to `3.9.3010.1`.
2026-03-24 08:53:16 +01:00

85 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using TBF.Rig.RegisterReaders.GenesisRegReader.communication.Utils;
namespace TBFTests.Rig.RegisterReaders.GenesisRegReader.implementations
{
public sealed class FakeSerialDriver : ISerialDriver
{
private readonly Queue<string> _lines = new Queue<string>();
private bool _isOpen;
public int OpenCalls { get; private set; }
public int CloseCalls { get; private set; }
public int DiscardInCalls { get; private set; }
public int DiscardOutCalls { get; private set; }
public Encoding Encoding { get; set; } = Encoding.ASCII;
public int BytesToRead => _lines.Count > 0 ? 1 : 0;
public int BytesToWrite => 0;
public void EnqueueLine(string line) => _lines.Enqueue(line);
public bool IsOpen() => _isOpen;
public bool Open()
{
OpenCalls++;
_isOpen = true;
return true;
}
public void CloseConnection()
{
CloseCalls++;
_isOpen = false;
}
public void DiscardInBuffer()
{
DiscardInCalls++;
_lines.Clear();
}
public void DiscardOutBuffer()
{
DiscardOutCalls++;
}
public string ReadLine()
{
if (!_isOpen)
throw new InvalidOperationException("Port not open.");
if (_lines.Count == 0)
throw new TimeoutException();
return _lines.Dequeue();
}
public string ReadExisting()
{
if (!_isOpen)
throw new InvalidOperationException("Port not open.");
if (_lines.Count == 0)
return string.Empty;
return _lines.Dequeue();
}
public byte[] SendAndWait(byte[] request, int timeout)
{
return Array.Empty<byte>();
}
public void Dispose()
{
_isOpen = false;
}
}
}