82 lines
2.7 KiB
C#
82 lines
2.7 KiB
C#
using System.Threading.Tasks;
|
|
using Xunit;
|
|
using XP.Hardware.MotionControl.Abstractions.Enums;
|
|
using XP.Hardware.MotionControl.Implementations;
|
|
|
|
namespace XplorePlane.Tests.Hardware
|
|
{
|
|
public class SimulatedLinearAxisTests
|
|
{
|
|
[Fact]
|
|
public async Task MoveToTarget_SetsStatusToMoving_ThenIdle()
|
|
{
|
|
// Arrange - use fast speed for quicker test
|
|
var axis = new SimulatedLinearAxis(AxisId.StageX, min: 0, max: 100, origin: 0, defaultSpeed: 200);
|
|
|
|
// Act
|
|
var result = axis.MoveToTarget(50);
|
|
|
|
// Assert - should be Moving immediately after call
|
|
Assert.True(result.Success);
|
|
Assert.Equal(AxisStatus.Moving, axis.Status);
|
|
|
|
// Wait for move to complete (50mm at 200mm/s = 250ms, add generous buffer)
|
|
await Task.Delay(1000);
|
|
|
|
Assert.Equal(AxisStatus.Idle, axis.Status);
|
|
Assert.Equal(50.0, axis.ActualPosition, precision: 1);
|
|
}
|
|
|
|
[Fact]
|
|
public void MoveToTarget_OutOfRange_ReturnsFail()
|
|
{
|
|
// Arrange
|
|
var axis = new SimulatedLinearAxis(AxisId.StageX, min: 0, max: 100, origin: 0);
|
|
|
|
// Act
|
|
var result = axis.MoveToTarget(150);
|
|
|
|
// Assert
|
|
Assert.False(result.Success);
|
|
Assert.NotNull(result.ErrorMessage);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Stop_DuringMove_KeepsCurrentPosition()
|
|
{
|
|
// Arrange - use slow speed so we can stop mid-move
|
|
var axis = new SimulatedLinearAxis(AxisId.StageX, min: 0, max: 100, origin: 0, defaultSpeed: 10);
|
|
|
|
// Act - start a long move (100mm at 10mm/s = 10s)
|
|
axis.MoveToTarget(100);
|
|
await Task.Delay(200); // Let it move a bit
|
|
|
|
axis.Stop();
|
|
|
|
// Assert
|
|
Assert.Equal(AxisStatus.Idle, axis.Status);
|
|
Assert.True(axis.ActualPosition > 0, "Position should have moved from 0");
|
|
Assert.True(axis.ActualPosition < 100, "Position should not have reached target");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Home_MovesToZero()
|
|
{
|
|
// Arrange - move to 50 first with fast speed
|
|
var axis = new SimulatedLinearAxis(AxisId.StageX, min: 0, max: 100, origin: 0, defaultSpeed: 200);
|
|
axis.MoveToTarget(50);
|
|
await Task.Delay(1000); // Wait for move to complete
|
|
|
|
Assert.Equal(50.0, axis.ActualPosition, precision: 1);
|
|
|
|
// Act
|
|
axis.Home();
|
|
await Task.Delay(1000); // Wait for home to complete
|
|
|
|
// Assert
|
|
Assert.Equal(0.0, axis.ActualPosition, precision: 1);
|
|
Assert.Equal(AxisStatus.Idle, axis.Status);
|
|
}
|
|
}
|
|
}
|