mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-12 11:15:08 +00:00
test: initial attempt at tests with Claude Code
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
using System;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using PepperDash.Essentials.Core.Abstractions;
|
||||
using Xunit;
|
||||
|
||||
namespace PepperDash.Essentials.Core.Tests.Abstractions
|
||||
{
|
||||
public class DigitalInputTests
|
||||
{
|
||||
[Fact]
|
||||
public void StateChange_WhenDigitalInputChanges_RaisesEvent()
|
||||
{
|
||||
// Arrange
|
||||
var mockDigitalInput = new Mock<IDigitalInput>();
|
||||
var eventRaised = false;
|
||||
bool capturedState = false;
|
||||
|
||||
mockDigitalInput.Setup(d => d.State).Returns(true);
|
||||
|
||||
// Subscribe to the event
|
||||
mockDigitalInput.Object.StateChange += (sender, args) =>
|
||||
{
|
||||
eventRaised = true;
|
||||
capturedState = args.State;
|
||||
};
|
||||
|
||||
// Act - Raise the event
|
||||
mockDigitalInput.Raise(d => d.StateChange += null,
|
||||
mockDigitalInput.Object,
|
||||
new DigitalInputEventArgs(true));
|
||||
|
||||
// Assert
|
||||
eventRaised.Should().BeTrue();
|
||||
capturedState.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void State_ReturnsCorrectValue()
|
||||
{
|
||||
// Arrange
|
||||
var mockDigitalInput = new Mock<IDigitalInput>();
|
||||
mockDigitalInput.Setup(d => d.State).Returns(true);
|
||||
|
||||
// Act
|
||||
var state = mockDigitalInput.Object.State;
|
||||
|
||||
// Assert
|
||||
state.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MultipleStateChanges_TrackStateCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var mockDigitalInput = new Mock<IDigitalInput>();
|
||||
var stateChanges = new System.Collections.Generic.List<bool>();
|
||||
|
||||
mockDigitalInput.Object.StateChange += (sender, args) =>
|
||||
{
|
||||
stateChanges.Add(args.State);
|
||||
};
|
||||
|
||||
// Act - Simulate multiple state changes
|
||||
mockDigitalInput.Raise(d => d.StateChange += null,
|
||||
mockDigitalInput.Object,
|
||||
new DigitalInputEventArgs(true));
|
||||
|
||||
mockDigitalInput.Raise(d => d.StateChange += null,
|
||||
mockDigitalInput.Object,
|
||||
new DigitalInputEventArgs(false));
|
||||
|
||||
mockDigitalInput.Raise(d => d.StateChange += null,
|
||||
mockDigitalInput.Object,
|
||||
new DigitalInputEventArgs(true));
|
||||
|
||||
// Assert
|
||||
stateChanges.Should().HaveCount(3);
|
||||
stateChanges[0].Should().BeTrue();
|
||||
stateChanges[1].Should().BeFalse();
|
||||
stateChanges[2].Should().BeTrue();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
using System;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using PepperDash.Essentials.Core.Abstractions;
|
||||
using Xunit;
|
||||
|
||||
namespace PepperDash.Essentials.Core.Tests.Abstractions
|
||||
{
|
||||
public class VersiPortTests
|
||||
{
|
||||
[Fact]
|
||||
public void DigitalIn_ReturnsCorrectValue()
|
||||
{
|
||||
// Arrange
|
||||
var mockVersiPort = new Mock<IVersiPort>();
|
||||
mockVersiPort.Setup(v => v.DigitalIn).Returns(true);
|
||||
|
||||
// Act
|
||||
var digitalIn = mockVersiPort.Object.DigitalIn;
|
||||
|
||||
// Assert
|
||||
digitalIn.Should().BeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetDigitalOut_SetsCorrectValue()
|
||||
{
|
||||
// Arrange
|
||||
var mockVersiPort = new Mock<IVersiPort>();
|
||||
|
||||
// Act
|
||||
mockVersiPort.Object.SetDigitalOut(true);
|
||||
|
||||
// Assert
|
||||
mockVersiPort.Verify(v => v.SetDigitalOut(true), Times.Once);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AnalogIn_ReturnsCorrectValue()
|
||||
{
|
||||
// Arrange
|
||||
var mockVersiPort = new Mock<IVersiPort>();
|
||||
ushort expectedValue = 32768;
|
||||
mockVersiPort.Setup(v => v.AnalogIn).Returns(expectedValue);
|
||||
|
||||
// Act
|
||||
var analogIn = mockVersiPort.Object.AnalogIn;
|
||||
|
||||
// Assert
|
||||
analogIn.Should().Be(expectedValue);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void VersiportChange_WhenDigitalChanges_RaisesEventWithCorrectType()
|
||||
{
|
||||
// Arrange
|
||||
var mockVersiPort = new Mock<IVersiPort>();
|
||||
var eventRaised = false;
|
||||
VersiPortEventType? capturedEventType = null;
|
||||
object capturedValue = null;
|
||||
|
||||
mockVersiPort.Object.VersiportChange += (sender, args) =>
|
||||
{
|
||||
eventRaised = true;
|
||||
capturedEventType = args.EventType;
|
||||
capturedValue = args.Value;
|
||||
};
|
||||
|
||||
// Act
|
||||
mockVersiPort.Raise(v => v.VersiportChange += null,
|
||||
mockVersiPort.Object,
|
||||
new VersiPortEventArgs
|
||||
{
|
||||
EventType = VersiPortEventType.DigitalInChange,
|
||||
Value = true
|
||||
});
|
||||
|
||||
// Assert
|
||||
eventRaised.Should().BeTrue();
|
||||
capturedEventType.Should().Be(VersiPortEventType.DigitalInChange);
|
||||
capturedValue.Should().Be(true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void VersiportChange_WhenAnalogChanges_RaisesEventWithCorrectValue()
|
||||
{
|
||||
// Arrange
|
||||
var mockVersiPort = new Mock<IVersiPort>();
|
||||
var eventRaised = false;
|
||||
VersiPortEventType? capturedEventType = null;
|
||||
object capturedValue = null;
|
||||
ushort expectedAnalogValue = 12345;
|
||||
|
||||
mockVersiPort.Object.VersiportChange += (sender, args) =>
|
||||
{
|
||||
eventRaised = true;
|
||||
capturedEventType = args.EventType;
|
||||
capturedValue = args.Value;
|
||||
};
|
||||
|
||||
// Act
|
||||
mockVersiPort.Raise(v => v.VersiportChange += null,
|
||||
mockVersiPort.Object,
|
||||
new VersiPortEventArgs
|
||||
{
|
||||
EventType = VersiPortEventType.AnalogInChange,
|
||||
Value = expectedAnalogValue
|
||||
});
|
||||
|
||||
// Assert
|
||||
eventRaised.Should().BeTrue();
|
||||
capturedEventType.Should().Be(VersiPortEventType.AnalogInChange);
|
||||
capturedValue.Should().Be(expectedAnalogValue);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MultipleVersiportChanges_TracksAllChangesCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var mockVersiPort = new Mock<IVersiPort>();
|
||||
var changes = new System.Collections.Generic.List<(VersiPortEventType type, object value)>();
|
||||
|
||||
mockVersiPort.Object.VersiportChange += (sender, args) =>
|
||||
{
|
||||
changes.Add((args.EventType, args.Value));
|
||||
};
|
||||
|
||||
// Act - Simulate multiple changes
|
||||
mockVersiPort.Raise(v => v.VersiportChange += null,
|
||||
mockVersiPort.Object,
|
||||
new VersiPortEventArgs
|
||||
{
|
||||
EventType = VersiPortEventType.DigitalInChange,
|
||||
Value = true
|
||||
});
|
||||
|
||||
mockVersiPort.Raise(v => v.VersiportChange += null,
|
||||
mockVersiPort.Object,
|
||||
new VersiPortEventArgs
|
||||
{
|
||||
EventType = VersiPortEventType.AnalogInChange,
|
||||
Value = (ushort)30000
|
||||
});
|
||||
|
||||
mockVersiPort.Raise(v => v.VersiportChange += null,
|
||||
mockVersiPort.Object,
|
||||
new VersiPortEventArgs
|
||||
{
|
||||
EventType = VersiPortEventType.DigitalInChange,
|
||||
Value = false
|
||||
});
|
||||
|
||||
// Assert
|
||||
changes.Should().HaveCount(3);
|
||||
changes[0].type.Should().Be(VersiPortEventType.DigitalInChange);
|
||||
changes[0].value.Should().Be(true);
|
||||
changes[1].type.Should().Be(VersiPortEventType.AnalogInChange);
|
||||
changes[1].value.Should().Be((ushort)30000);
|
||||
changes[2].type.Should().Be(VersiPortEventType.DigitalInChange);
|
||||
changes[2].value.Should().Be(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user