等锁超时、全路径签名、无锁窗口不下发、Fault 终态可等待、Pass+机构不再短路、Alarm 不杀单、catch-up 停在未完成站;VehicleCode=0/重复车号拒绝注册,Hub 已运行时不抢监听口;FileLogger 空目录可写。 Co-authored-by: Cursor <cursoragent@cursor.com>
48 lines
1.4 KiB
C#
48 lines
1.4 KiB
C#
using StandardScene.Magnetic.Protocol;
|
|
using StandardScene.Magnetic.Tasking;
|
|
using Xunit;
|
|
|
|
namespace StandardScene.Magnetic.Tests.Tasking
|
|
{
|
|
public class Fass2ActionResolverTests
|
|
{
|
|
[Fact]
|
|
public void PassWithLift_IsNotCompleteUntilMechanismMatches()
|
|
{
|
|
var expected = new Fass2NodeMessage
|
|
{
|
|
Node = 3,
|
|
StartStop = Fass2TaskBuilder.StartStopPass,
|
|
Lift = 1
|
|
};
|
|
var actual = new Fass2NodeMessage
|
|
{
|
|
Node = 3,
|
|
StartStop = Fass2TaskBuilder.StartStopPass,
|
|
Lift = 0
|
|
};
|
|
|
|
Assert.True(Fass2ActionResolver.RequiresActionWait(expected));
|
|
Assert.False(Fass2ActionResolver.IsStationActionComplete(expected, actual, vehicleState: 2));
|
|
}
|
|
|
|
[Fact]
|
|
public void PlainPass_CompletesWithoutMechanism()
|
|
{
|
|
var expected = new Fass2NodeMessage
|
|
{
|
|
Node = 3,
|
|
StartStop = Fass2TaskBuilder.StartStopPass
|
|
};
|
|
var actual = new Fass2NodeMessage
|
|
{
|
|
Node = 3,
|
|
StartStop = Fass2TaskBuilder.StartStopPass
|
|
};
|
|
|
|
Assert.False(Fass2ActionResolver.RequiresActionWait(expected));
|
|
Assert.True(Fass2ActionResolver.IsStationActionComplete(expected, actual, vehicleState: 2));
|
|
}
|
|
}
|
|
}
|