using Sandbox.ModAPI.Ingame;
using VRageMath;
using Xunit;
using P=AutoMiningScript.Program;
namespace AutoMiningScript.Tests
{
public class MinerDockReasonTests
{
[Theory]
[InlineData("lane")]
[InlineData("berth")]
[InlineData("window")]
public void FleetWaitingReasonIsVisibleUntilAFreshGrantStartsTheApproach(string kind)
{
var rig=new MinerStateTests.MinerRig();rig.PrepareDeparture("");
rig.Connector.Set("Status",MyShipConnectorStatus.Unconnected);
rig.State(P.FlightState.Holding);
var problem=kind=="lane"?P.L.F(P.L.FleetLaneBlocked,"深空工业2号"):
kind=="berth"?P.L.FleetNoFreeDock:P.L.FleetDockWindowWait;
var dock=new P.DockFrame {BaseId=rig.Program.Config.BaseId,Owner=rig.Program.Config.Id,ConnectorId=51,GridId=50,
WaitingLocal=new Vector3D(0,4,-80),Problem=problem};
rig.Position=Vector3D.Transform(dock.WaitingLocal,dock.Predicted(rig.Program.Now));
rig.Miner.Receive(new P.Packet {Kind="DOCKPOSE",From=rig.Program.Config.BaseId,Source=5000,Body=dock.ToIni()});
rig.Miner.Tick(.1);
Assert.Equal(P.FlightState.Holding,rig.StateNow);
Assert.Contains(problem,Assert.Single(rig.Miner.GetTelemetry()).Reason);
Assert.Contains(problem,rig.Miner.Diagnostics);
Assert.DoesNotContain(P.L.MinerDockGrantMissing,rig.Miner.Diagnostics);
rig.Program.Now+=.1;dock.Token="fresh-docking-lease";dock.Problem="";
rig.Miner.Receive(new P.Packet {Kind="DOCK_GRANT",From=rig.Program.Config.BaseId,Source=5000,Body=dock.ToIni()});
rig.Miner.Tick(.1);
Assert.Equal(P.FlightState.DockAlign,rig.StateNow);
Assert.DoesNotContain(problem,Assert.Single(rig.Miner.GetTelemetry()).Reason);
Assert.DoesNotContain(problem,rig.Miner.Diagnostics);
Assert.Contains(P.L.MinerDockOuterEntry,Assert.Single(rig.Miner.GetTelemetry()).Reason);
Assert.Contains(P.L.F(P.L.MinerDockPermitDiagnostics,P.L.MinerDockGrantValid),rig.Miner.Diagnostics);
}
}
}
using Sandbox.ModAPI.Ingame;
using VRageMath;
using Xunit;
using P=AutoMiningScript.Program;
namespace AutoMiningScript.Tests
{
public class MinerDockReasonTests
{
[Theory]
[InlineData("lane")]
[InlineData("berth")]
[InlineData("window")]
public void FleetWaitingReasonIsVisibleUntilAFreshGrantStartsTheApproach(string kind)
{
var rig=new MinerStateTests.MinerRig();rig.PrepareDeparture("");
rig.Connector.Set("Status",MyShipConnectorStatus.Unconnected);
rig.State(P.FlightState.Holding);
var problem=kind=="lane"?P.L.F(P.L.FleetLaneBlocked,"深空工业2号"):
kind=="berth"?P.L.FleetNoFreeDock:P.L.FleetDockWindowWait;
var dock=new P.DockFrame {BaseId=rig.Program.Config.BaseId,Owner=rig.Program.Config.Id,ConnectorId=51,GridId=50,
WaitingLocal=new Vector3D(0,4,-80),Problem=problem};
rig.Position=Vector3D.Transform(dock.WaitingLocal,dock.Predicted(rig.Program.Now));
rig.Miner.Receive(new P.Packet {Kind="DOCKPOSE",From=rig.Program.Config.BaseId,Source=5000,Body=dock.ToIni()});
rig.Miner.Tick(.1);
Assert.Equal(P.FlightState.Holding,rig.StateNow);
Assert.Contains(problem,Assert.Single(rig.Miner.GetTelemetry()).Reason);
Assert.Contains(problem,rig.Miner.Diagnostics);
Assert.DoesNotContain(P.L.MinerDockGrantMissing,rig.Miner.Diagnostics);
rig.Program.Now+=.1;dock.Token="fresh-docking-lease";dock.Problem="";
rig.Miner.Receive(new P.Packet {Kind="DOCK_GRANT",From=rig.Program.Config.BaseId,Source=5000,Body=dock.ToIni()});
rig.Miner.Tick(.1);
Assert.Equal(P.FlightState.DockAlign,rig.StateNow);
Assert.DoesNotContain(problem,Assert.Single(rig.Miner.GetTelemetry()).Reason);
Assert.DoesNotContain(problem,rig.Miner.Diagnostics);
Assert.Contains(P.L.MinerDockOuterEntry,Assert.Single(rig.Miner.GetTelemetry()).Reason);
Assert.Contains(P.L.F(P.L.MinerDockPermitDiagnostics,P.L.MinerDockGrantValid),rig.Miner.Diagnostics);
}
}
}