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); } } }