Files
Samuele Locatelli 539e600fd1 test(Phase 20): add unit tests for new StateManager events
- ValueChanged event fires on value change with old/new values
- ConnectionStateChanged event fires on IsConnected change from false->true and true->false
- First SetValue event fires with oldValue=0.0
- Total: 12 tests passing, 0 failures
2026-06-20 10:42:12 +02:00

170 lines
4.0 KiB
C#

using Microsoft.Extensions.Logging.Abstractions;
using PlcVanguard.Core.Data;
using PlcVanguard.Core.State;
namespace PlcVanguard.Core.Tests;
public class MemAddressTests
{
[Fact]
public void Parse_ValidInput_ParsesCorrectly()
{
var addr = new MemAddress("DB701.DBD142");
Assert.Equal(701, addr.DbNum);
Assert.Equal("D", addr.TipoMem);
Assert.Equal(142, addr.IndiceMem);
}
[Fact]
public void Parse_InvalidInput_ReturnsDefaults()
{
var addr = new MemAddress("invalid");
Assert.Equal(0, addr.DbNum);
Assert.Equal("", addr.TipoMem);
Assert.Equal(0, addr.IndiceMem);
}
[Fact]
public void Parse_NullInput_ReturnsDefaults()
{
var addr = new MemAddress(null!);
Assert.Equal(0, addr.DbNum);
}
}
public class StateManagerTests
{
private readonly StateManager _manager;
public StateManagerTests()
{
_manager = new StateManager(NullLogger<StateManager>.Instance);
}
[Fact]
public void InitialState_IsNotConnected()
{
Assert.False(_manager.IsConnected);
}
[Fact]
public void SetValueAndGet_ReturnsCorrectValue()
{
_manager.SetValue("DB100.Counter1", 42.5);
var value = _manager.GetValue("DB100.Counter1");
Assert.Equal(42.5, value);
}
[Fact]
public void GetValue_NonexistentArea_ReturnsNull()
{
var value = _manager.GetValue("NonExistent");
Assert.Null(value);
}
[Fact]
public void GetSnapshot_ReturnsCopyOfValues()
{
_manager.SetValue("C1", 1.0);
_manager.SetValue("C2", 2.0);
var snapshot = _manager.GetSnapshot();
Assert.Equal(2, snapshot.Count);
Assert.Equal(1.0, snapshot["C1"]);
Assert.Equal(2.0, snapshot["C2"]);
}
[Fact]
public void UpdateConnectionState_UpdatesFlag()
{
_manager.UpdateConnectionState(true);
Assert.True(_manager.IsConnected);
_manager.UpdateConnectionState(false);
Assert.False(_manager.IsConnected);
}
[Fact]
public void SetConfiguredParameters_StoresAllParams()
{
var parameterList = new Dictionary<string, string>
{
{ "key1", "value1" },
{ "key2", "value2" }
};
_manager.SetConfiguredParameters(parameterList);
var stored = _manager.ConfiguredParameters;
Assert.Equal(2, stored.Count);
Assert.Equal("value1", stored["key1"]);
Assert.Equal("value2", stored["key2"]);
}
[Fact]
public void SetValue_TriggerValueChangedEvent()
{
var triggered = false;
string? capturedKey = null;
double capturedOld = 0, capturedNew = 0;
_manager.ValueChanged += (_, e) =>
{
triggered = true;
capturedKey = e.AreaId;
capturedOld = e.OldValue;
capturedNew = e.NewValue;
};
_manager.SetValue("DB100.Counter1", 10.0);
_manager.SetValue("DB100.Counter1", 20.5);
Assert.True(triggered);
Assert.Equal("DB100.Counter1", capturedKey);
Assert.Equal(10.0, capturedOld);
Assert.Equal(20.5, capturedNew);
}
[Fact]
public void ConnectionStateChangedEvent_TriggeredOnStateChange()
{
var triggered = false;
bool? capturedState = null;
_manager.ConnectionStateChanged += (_, e) =>
{
triggered = true;
capturedState = e.IsConnected;
};
_manager.IsConnected = true;
Assert.True(triggered);
Assert.True(capturedState);
triggered = false;
_manager.IsConnected = false;
Assert.True(triggered);
Assert.False(capturedState);
}
[Fact]
public void ValueChangedEvent_FirstSetValue_FromZero()
{
double capturedOld = -1;
_manager.ValueChanged += (_, e) =>
{
capturedOld = e.OldValue;
};
_manager.SetValue("DB100.Counter1", 99.9);
Assert.Equal(0.0, capturedOld);
}
}