tbf/TBFTests/Rig/RegisterReaders/GenesisRegReader/implementations/FakeSerialDriver.cs
Michal Buzik 23c83ab452 Enhance GenesisSmartReader multi-channel processing and add tests for telegram handling:
- Refactor `ProcessOptoLine` logic to support output buffer resets at configurable repetition intervals.
- Add tests:
  - `ProcessOptoLine_Block_f_h1_h2_h3_f_ShouldResetBuffersOnlyAfterLastF`
  - `ReadOptoData_FullBlock_ShouldDiscardBuffersAfterClosingF`
  - `ProcessOptoLine_LastF_AfterH3_ShouldRequestBufferReset`
  - `ProcessOptoLine_ShouldReset
2026-03-26 14:45:36 +01:00

90 lines
2.1 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 => _isOpen && _lines.Count > 0 ? 1 : 0;
public int BytesToWrite => 0;
public void EnqueueLine(string line) => _lines.Enqueue(line);
public bool IsOpen => _isOpen;
public void Open()
{
OpenCalls++;
_isOpen = true;
}
public void Close()
{
CloseConnection();
}
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;
}
}
}